/********************************************************************************/
/* 即時実行関数																	*/
/*																				*/
/* @og.rev 5.10.10.0 (2019/03/29) 新規追加、jQueryバージョン違いの吸収			*/
/* Revision: $Id$																*/
/********************************************************************************/
(function(){
	if(jQuery != null && !jQuery._data){
		jQuery._data = jQuery.data;
	}
})();

/********************************************************************************/
/* 旧 focusHilight.js の内容を移植 5.2.1.0 (2010/10/01)							*/
/*																				*/
/* ﾌｫｰｶｽが当っているｱｸﾃｨﾌﾞﾌｨｰﾙﾄﾞの色を変更します。								*/
/* 色はfocusFieldｸﾗｽで指定しています。											*/
/*																				*/
/* @og.rev 4.3.5.0 (2009/02/01) JavaScript分離･ｲﾍﾞﾝﾄにJQuery利用				*/
/* @og.rev 5.2.0.0 (2010/09/01) Javaｽｸﾘﾌﾟﾄで登録したｲﾍﾞﾝﾄを発動させる			*/
/* @og.rev 5.5.9.0 (2010/12/03) IE9対応｡selectはstyleを直接変更する				*/
/* @og.rev 5.6.4.2 (2013/05/17) ｴﾗｰ表示の alertﾒｯｾｰｼﾞ修正						*/
/* Revision: $Id$																*/
/********************************************************************************/
var orgFldCls = null;

$(function(){
	// 5.2.0.0 (2010/09/01) Javaスクリプトで登録したイベントを発動させる
//	$('textarea,select,input[type="text"]').focusin( function(){ doFocus2( this ); } );
//	$('textarea,select,input[type="text"]').focusout( function(){ doBlur2( this ); } );
	if(USE_FOCUS_HILIGHT){ //5.4.5.0 flag add
		setEvent( "textarea,select,input[type=\"text\"]", "focusin", function(){ doFocus2( this ); } );
		setEvent( "textarea,select,input[type=\"text\"]", "focusout", function(){ doBlur2( this ); } );
	}
});

function doFocus2( obj ) {
	// 入力中のフォームの色
	if( obj != null ) {
		if( obj.className == null || obj.className.indexOf( "must" ) < 0 ) {
			// 4.3.2.2 (2008/09/16) 入力中のフォームの色をcustom.cssに指定するように変更
			// 5.5.9.0 (2012/12/03) selectタグの場合は直接背景色変更
			if( obj.tagName == "SELECT" ){ // 5.5.9.1(2012/12/07) 小文字を大文字に
				obj.orgBgColor = obj.style.backgroundColor;
				obj.style.backgroundColor = '#ffcccc';
			}
			else{
				orgFldCls = obj.className;
				obj.className = 'focusField ' + orgFldCls;
			}
		}
	}
}

function doBlur2( obj ) {
	if( obj != null ) {
		if( obj.className == null || obj.className.indexOf( "must" ) < 0 ) {
			// 元のフォームの色
			// 5.5.9.0 (2012/12/03) selectタグの場合は直接背景色変更
			if( obj.tagName == "SELECT" ){
				obj.style.backgroundColor = obj.orgBgColor;
			}
			else{
				if( orgFldCls != null ) {
					obj.className = orgFldCls;
				}
				else {
					obj.className = 'notFocusField';
				}
			}
		}
	}
}

/* 旧関数を呼び出した場合はアラートを出す（旧の*_inof.jsp対策） */
oldDoFocusFlag = true;
function doFocus( obj ) {
	if(oldDoFocusFlag){
		oldDoFocusFlag = false;
//		setTimeout(alert("custom/query_info.jsp及びcustom/result_info.jspで次の部分を削除して下さい。\n<script>タグ（ヘッダ固定とフォーカス）、BODYのonLoadとoncontextmenu属性"),100);
		setTimeout(alert("Old Script Error!!\ncustom/query_info.jsp,custom/result_info.jsp Please delete the following part.\n<script>Tag(Header fix and Focus) , BODY onLoad and oncontextmenu Attribute"),100);
	}
}
/*エラー対策の空関数 */
function doBlur( obj ) {}

/********************************************************************************/
/* 旧 autoConvert.js の内容を移植 5.2.1.0 (2010/10/01)							*/
/*																				*/
/* 入力値自動変換機能 4.3.0.0 (2008/07/25) 追加									*/
/* dbType XL及びXUについて､大文字･小文字の自動変換を行います					*/
/*																				*/
/* @og.rev 4.3.5.0 (2009/02/01) JavaScript分離(inputFocusより)					*/
/* @og.rev 5.2.0.0 (2010/09/01) Javaｽｸﾘﾌﾟﾄで登録したｲﾍﾞﾝﾄを発動させる			*/
/* @og.rev 5.9.5.0 (2016/02/05) PN2も大文字化の対象とする						*/
/* @og.rev 6.8.0.1 (2017/06/23) XU など変換時に､rtrim を行う					*/
/* @og.rev 8.1.0.3 (2022/01/21) EdgeでIME機能が使えなくなった為の対応			*/
/* @og.rev 8.3.0.4 (2022/09/02) ｶﾝﾏ区切りの数字がｲﾍﾞﾝﾄｶﾗﾑ実行できない不具合対応	*/
/* @og.rev 8.4.0.0 (2023/01/27) selectﾀｸﾞのmultiple属性不具合対応				*/
/* @og.rev 8.4.3.0 (2023/03/31) 'R'(小数)の『.0』を削除(問合・ﾄﾗﾌﾞﾙ 0200010411)	*/
/* Revision: $Id$																*/
/********************************************************************************/
$(function(){
	// 5.2.0.0 (2010/09/01) Javaスクリプトで登録したイベントを発動させる
//	$('textarea,select,input[type="text"]').focusout( function(){ convert( this ); } );
	setEvent( "textarea,select,input[type=\"text\"]", "focusout", function(){ convert( this,true ); } );
});

// 8.4.3.0 (2023/03/31) jQuery.isNumeric() is deprecated
function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }

// 8.1.0.3 (2022/01/21) 8.4.0.0 (2023/01/27) 全面見直し Modify
function convert( obj,flag ) {
	let objCls = obj.className;														// ｸﾗｽ
	let objVal = obj.value;															// 値

	// 入力値の変換を行う
	if( objCls != null && objVal != null ) {
		// 半角小文字(XL)、英数字(XLU9)
		if( objCls.match( /XL/ ) ) {
			objVal = zen2han(objVal);

			if( objCls.match( /XLU/ )) {
				obj.value = objVal.replace( /\s+$/, "" ).toUpperCase();
			} else {
				obj.value = objVal.replace( /\s+$/, "" ).toLowerCase();
			}
		}
		// 半角大文字(XU)、大文字数字(XU9)
		else if( objCls.match( /XU/ ) ) {
			objVal = zen2han(objVal);
			obj.value = objVal.replace( /\s+$/, "" ).toUpperCase();				// 6.8.0.1 (2017/06/23) rtrim を行う
		}
//		// 半角大文字(XU)、文字型整数(X9)、大文字数字(XU9)
//		else if( objCls.match( /S9/ ) || objCls.match( /X9/ ) || (objCls.match( /R/ ) && !(objCls.match( /NVAR/ )) && !(objCls.match( /CRYPT/ ))) ) {
//			obj.value = zen2han(objVal);
		// 数字型整数(S9)、小数(R) 8.3.0.4 (2022/09/02) Modify
		else if( objCls.match( /S9/ ) || (objCls.match( /R/ ) && !(objCls.match( /NVAR/ )) && !(objCls.match( /CRYPT/ ))) ) {
			objVal = zen2han(objVal);
			if( objCls.match( /R/ ) ) {						// 8.4.3.0 (2023/03/31)
				objVal = objVal.replace( /\.0+$/, "" );		// DBType = 'R'(小数) の XX.0 を XX に変換。(Oracle USER_ARGの文字列‐小数変換対応)
			}
			obj.value = objVal.replace( /,/g, "" );			// 数字の 3桁区切りｶﾝﾏ(,)の削除
		}
		// 半角文字(X)、文字型整数(X9)
		else if( objCls.match( /X/ ) && !(objCls.match( /XK/ )) && !(objCls.match( /KX/ )) && !(objCls.match( /XH/ )) ) {
			obj.value = zen2han(objVal);
		}
	}

	if( flag ){
		// 数字項目に文字が入力された場合、ｲﾍﾞﾝﾄｶﾗﾑを実行しない
		if( objCls.match( /S9/ ) || objCls.match( /X9/ ) || (objCls.match( /R/ ) && !(objCls.match( /NVAR/ )) && !(objCls.match( /CRYPT/ ))) ) {
//			if( !$.isNumeric(obj.value) ) { return false; }
			if( !isNumeric(obj.value) ) { return false; }	// 8.4.3.0 (2023/03/31) jQuery.isNumeric() is deprecated
		}
	}
	return true;
}

// 全角英数字を半角英数字に変換します。
// (※但し、ｶﾝﾏ(、) ＆ ﾌﾟﾗｽ符号(＋) については変換しない)
var zen2han = function(str) {
	str = str.replace(/[Ａ-Ｚａ-ｚ０-９．‐－]/g, function(s) {
		return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
	})
	return str;
}

// 8.1.0.3 (2022/01/21) 全面見直し Delete
//function convert( obj ) {
//	var val , cls ;
//
//	val = obj.value;
//	cls = obj.className;
//	if( val != null && cls != null ) {
//		if( cls.match( /XL/ ) && !(cls.match( /XLU/ )) ) {
//			obj.value = val.toLowerCase();
//		}
////		else if( cls.match( /XU/ ) && !(cls.match( /XUL/ )) ) {
//		else if( (cls.match( /XU/ ) && !(cls.match( /XUL/ ))) || cls.match( /PN2/ ) ) { // 5.9.5.0
////			obj.value = val.toUpperCase();
//			obj.value = val.replace( /\s+$/, "" ).toUpperCase();	// 6.8.0.1 (2017/06/23) rtrim を行う
//		}
//	}
//	return true;
//}


/********************************************************************************/
/* 旧 eventColumn.js の内容を移植 5.2.1.0 (2010/10/01)							*/
/*																				*/
/* 動的ﾌﾟﾙﾀﾞｳﾝを実行するためのJavaScriptです｡									*/
/*																				*/
/* @og.rev 5.2.0.0 (2010/09/01) Javaｽｸﾘﾌﾟﾄで登録したｲﾍﾞﾝﾄを発動させる			*/
/* @og.rev 5.10.27.0 (2021/01/05) 初期発火のｶﾗﾑ判定修正							*/
/* Revision: $Id$																*/
/********************************************************************************/
var colMap;
var notFireCols;
var jH_evElm;

$(function(){
	if( ! ( typeof( EC_NAME ) == "undefined" ) ) {
		// 初期化処理だけは、予め要素オブジェクトを取得しておき、ここから子カラムを取得する。
		jH_evElm = $( ".h_evElm" );

		makeColMapping();

		setEvent( "textarea,select,input[type=\"text\"]", "change", function(){ makeColumn( this ); }, ".h_evCol", true, addEvColCls );
		setEvent( "input[type=checkbox],input[type=radio]", "click", function(){ makeColumn( this ); }, ".h_evCol", true );
	}
});

/**
 * 親カラムをキーにしたイベントカラムの一覧を作成します。
 *
 * 親カラムを連想配列のキーとして、子カラムの一覧を配列として保持します。
 *
 * @og.rev 5.2.0.0 (2010/09/01) 新規作成
 * @og.rev 5.10.27.0 (2021/01/05) notFireColsのセット変更
 *
**/
function makeColMapping() {
	var i , j , evCols , evc , cCols ;

	if( colMap ){ return; }

	colMap = new Object();
	for( i=0; i<EC_EVCOL.length; i++ ) {
		evCols = EC_EVCOL[i].split(",");
		for( j=0; j<evCols.length; j++ ) {
			evc = evCols[j];
			if( evc.charAt(0) == "_" ) {
				evc = evc.substring(1);
				// if( notFireCols ) { notFireCols += ","; }
				if( notFireCols == null ) { notFireCols = ","; }	// 5.10.27.0 (2021/01/05)
				notFireCols += evc;
				notFireCols += ",";									// 5.10.27.0 (2021/01/05)
			}
			cCols = colMap[evc];
			if( !cCols ) { cCols = new Array(); }
			cCols[cCols.length] = EC_NAME[i];
			colMap[evc] = cCols;
		}
	}
}

/**
 * 親カラムに対してクラスを付加します。
 *
 * @og.rev 5.2.0.0 (2010/09/01) 新規作成
 *
**/
function addEvColCls() {
	for( var evCol in colMap ) {
		$("#"+evCol+",[id^="+evCol+"__]").addClass("h_evCol");
	}
}

/**
 * イベントカラムが設定されたタグ(spanタグ)を検索し、親カラムにイベントを登録します。
 *
 * @og.rev 5.1.7.0 (2010/06/01) 新規作成(動的プルダウン実装見直し)
 * @og.rev 5.10.27.0 (2021/01/05) notFireColsの判定修正
 * @og.rev 8.1.0.3 (2022/01/21) EdgeでIME機能が使えなくなった為の対応
 *
 * @param evCol	イベントが発生した親カラムのオブジェクト
**/
function makeColumn( evCol ) {
	var jEvCol , evColId , evColName , cColNameArr , i , suffix , cid , cname , jTag , writable ;

	if( jH_evElm && isEndInitEvent() ) { jH_evElm = null; }

	jEvCol = $( evCol );
	evColId = jEvCol.attr("id");
	evColName = evColId.split("__")[0];

	cColNameArr = colMap[evColName];
	if( !cColNameArr ) { return; }

	// イベントカラムでカラム名の頭文字が'_'で始まっている場合、初回イベント発行を行わない。
//	if( !isEndInitEvent() && notFireCols && notFireCols.indexOf( evColName ) >= 0 ) { return; }
	if( !isEndInitEvent() && notFireCols && notFireCols.indexOf( ","+evColName+"," ) >= 0 ) { return; } // 5.10.27.0 (2021/01/05)

	// 入力値の変換を行う。8.1.0.3 (2022/01/21) Add 8.4.0.0 (2023/01/27) Modify
	if( !convert( evCol,true ) ){ return; }

	for( i=0; i<cColNameArr.length; i++ ) {
		suffix = ( evColId == evColName ? "" : "__" + evColId.split("__")[1] );
		cid = cColNameArr[i]+suffix;
		cname = cid.split("__")[0];
		jTag = isEndInitEvent() ? $( ".h_evElm[h_evCid="+cid+"]" ) : jH_evElm.filter( "[h_evCid="+cid+"]" );
		writable = jTag.attr("h_evWrtbl");
		eventColumn( jEvCol, jTag, cid, cname, suffix, writable );
	}
}

/**
 * Ajax動的カラム変更用の共通JavaScript
 *
 * カラムにeventColumnをセットした時に親側にID指定でChangeイベントとして登録されます。
 * ※イベント処理用のJSP用に送られるパラメーターに関しては、jsp/common/eventColumnMaker.jspの
 *	 コメントを参照して下さい。
 *
 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
 * @og.rev 5.5.4.0 (2012/07/02) suffixが存在すればSLABEL利用を標準にする。eventCallbackの動作追加
 * @og.rev 5.6.2.0 (2013/03/01) jQueryのval()がリセット後のプルダウンから取得できないのでvlaueで取る
 * @og.rev 5.6.4.2 (2013/05/17) エラー表示の alertメッセージに、発生元が分かるように、 cname を追加します。
 * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
 * @og.rev 5.9.4.6 (2016/01/29) multiple対応
 * @og.rev 5.9.28.1 (2018/01/19) {@xxx}が存在しない場合でも処理が流れるように対応
 * @og.rev 5.10.4.0 (2018/10/05) eventColumnのparam暗号化対応
 * @og.rev 7.0.2.2 (2019/03/25) eventColumnが動作しない(問合・ﾄﾗﾌﾞﾙ 61200-190319-01)
 * @og.rev 8.1.2.3 (2022/05/20) YMD2ﾘｿｰｽとｲﾍﾞﾝﾄｶﾗﾑの競合時の不具合対応(問合・ﾄﾗﾌﾞﾙ 43100-220526-01)
 * @og.rev 8.4.3.0 (2023/03/31) .browser 廃止に伴う処置
 * @og.rev 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
 *
 * @param jEvCol	イベントが発生した親カラムのjQueryオブジェクト
 * @param jTag		置き換え要素をラップしたspanタグのjQueryオブジェクト
 * @param cid		変更対象の子要素(inputタグなど)のID
 * @param cname		子のカラム名
 * @param suffix	__ + 行番号(一覧表示の場合のみ)
 * @param writable	書き込み可能かどうか
**/
function eventColumn( jEvCol, jTag, cid, cname, suffix, writable ){
	var evVal , url , param , _pos1 , _pos2 , _repClm, _rep, _clm , noVal , columnFocus , jCol , val , renderer , editor , ATTRS , optAttrs , i , optAtt , vtype , isAdd ;
	var callback; // 5.5.4.0 (2012/07/02)
	var keys, keysList, flgEncrypt;	// 5.10.4.0 (2018/10/05)
	var obj = {}; // 5.10.4.0 (2018/10/05)

	if( !jTag || jTag.length == 0 ) {
//		alert( "[SYSTEM_ERROR] : イベントカラムで置き換え対象の要素が存在しません" );
		alert( "[SYSTEM_ERROR] : jTag is null. The element of the replacement object doesn't exist. [" + cname + "]" );		// 5.6.4.2 (2013/05/17) cname 追加
		return;
	}

//	if( cid == null || cid == "" || cname == null || cname == "" ) {
//		alert( "[SYSTEM_ERROR] : 子要素のIDまたはNAMEがセットされていません" );
//		return;
//	}

	if( !isEndInitEvent() ) {
//		evVal = jEvCol.val();
		evVal = jEvCol.get(0).value; //2013/03/01
		if( !evVal || evVal == null || evVal == "" ) { return; }
	}

	try {
		url = eval( "EC_" + cname + "_URL" );
	}
	catch( e ) {
//		alert( "[SYSTEM_ERROR] : イベントを処理するURLが指定されていません。(変数未定義)" );
		alert( "[SYSTEM_ERROR] : URL that processes the event is not specified. (variable undefinition). [" + cname + "]" );		// 5.6.4.2 (2013/05/17) cname 追加
		return;
	}
	if( !url || url == "" ) {
//		alert( "[SYSTEM_ERROR] : イベントを処理するURLが指定されていません。" );
		alert( "[SYSTEM_ERROR] : URL that processes the event is not specified. [" + cname + "]" );		// 5.6.4.2 (2013/05/17) cname 追加
		return;
	}

	// SQL文をパースして{@xxx}をxxxのvalue値に変更する。一覧での利用では同一行のカラムになる。
	//（リクエスト変数はテキストボックスやhiddenで一度受ける必要がある）
	// 又、パースして得られたvalue値をJSPのリクエスト変数としてURLの後ろに付ける
	// 5.9.28.1 なお、存在しない場合はnullで返すようにする。
	param = "";
	try { param = ( writable ? eval( "EC_" + cname + "_EDITPARAM" ) : eval( "EC_" + cname + "_RENDPARAM" ) ); } catch( e ) {}

	// 5.10.4.0 (2018/10/05)
	try{ keys = ( writable ? eval( "EC_" + cname + "_EDITPARAMKEYS") : eval( "EC_" + cname + "_RENDPARAMKEYS" ) ); } catch( e ){}
	flgEncrypt = eval( "EC_" + cname + "_FLGENCRYPT");

	// sqlの暗号化が行われている場合(値の変換はajaxの受信側で行う)
	if(flgEncrypt === 'true'){
		if(keys){
			keysList = keys.split(',');
			for(var i = 0; i < keysList.length; i++){
				var key = keysList[i];
				var val = suffix == "" ? $('#' + key).get(0).value : $('#'+key+suffix).get(0).value;
				obj[key] = val;
			}
		}
	// sqlの暗号化が行われていない場合
	}else{
		if( param != null && param != "" ) {
			url += "?";
			_pos1 = 0;
			_pos2 = 0;
			while( (_pos1 = param.indexOf("{@",_pos2)) != -1){
				_pos2 = param.indexOf("}",_pos1);
				_clm = param.substring(_pos1+2,_pos2);
				if( _clm.indexOf(".") < 0 ) {
					_repClm = "{@"+_clm+"}";
	//				_rep = suffix == "" ? $('#'+_clm).val() : $('#'+_clm+suffix).val();
	//				_rep = suffix == "" ? $('#'+_clm).get(0).value : $('#'+_clm+suffix).get(0).value; // 2013/03/01
					var rtnNull = function(){ console.log("noDifined:"); console.log(arguments[0]); return null; };
					_rep = suffix == "" ? $('#'+_clm)[0] ? $('#'+_clm).get(0).value : rtnNull(_clm)
										: $('#'+_clm+suffix)[0] ? $('#'+_clm+suffix).get(0).value : rtnNull(_clm+suffix); // 5.9.28.1 (2018/01/19)
					_rep = ( _rep == null ? "" : _rep );
					param = param.replace(_repClm,_rep);
					url += _clm + "=" + encodeURIComponent(_rep) +"&";
				}
				_pos2 = _pos1+1; // 4.3.6.2 (2009/04/15)
			}
		}
	}

	// 6.3.3.0 (2015/07/25) eventValue 追加
	valsql = "";
	try { valsql = eval( "EC_" + cname + "_VALSQL" ); } catch( e ) {}
	if( valsql != null && valsql != "" ) {
//		url += "?";
		_pos1 = 0;
		_pos2 = 0;
		while( (_pos1 = valsql.indexOf("{@",_pos2)) != -1){
			_pos2 = valsql.indexOf("}",_pos1);
			_clm = valsql.substring(_pos1+2,_pos2);
			if( _clm.indexOf(".") < 0 ) {
				_repClm = "{@"+_clm+"}";
//				_rep = suffix == "" ? $('#'+_clm).val() : $('#'+_clm+suffix).val();
				_rep = suffix == "" ? $('#'+_clm).get(0).value : $('#'+_clm+suffix).get(0).value; // 2013/03/01
				_rep = ( _rep == null ? "" : _rep );
				valsql = valsql.replace(_repClm,_rep);
//				url += _clm + "=" + encodeURIComponent(_rep) +"&";
			}
			_pos2 = _pos1+1; // 4.3.6.2 (2009/04/15)
		}
	}

	// 子がSelectタグの場合、最上部に空のoptionが存在すればEC_NOVALUEをtrueで送る
	noVal = function(){
		_firstOption = jCol.children('option').get(0);
		if( _firstOption == null || _firstOption.value != "" ){ return false; }
		return true;
	};

	// 4.3.6.5 (2009/05/08) must,mustAnyを引数でJSPに送る。
//	var mustOrMustAny = function(){
//		var _haveClasses = jCol.attr("class");
//		if( _haveClasses && _haveClasses.indexOf("must") >= 0 ){
//			if( _haveClasses.indexOf("mustAny") >= 0 )	{ return "mustAny"; }
//			else										{ return "must"; }
//			return "";
//		}
//	}

	columnFocus = function() {
		jCol.attr("isfocus","true");
	};

//	var jCol;
	if( cid != null && cid != "" ) {
		jCol = jTag.find( "#"+cid );
	}
	else {
		jCol = new Array(0);
	}

	if( jCol.length > 0 && isEndInitEvent() ) {
		// 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
//		jCol.bind("focus",columnFocus);
		jCol.on("focus",columnFocus);
	}

	val = "";
	if( jCol.length > 0 ) {
		if( isEndInitEvent() )	{ val = ( jCol.val() == null ? "" : jCol.val() ); }
		else					{ val = ( jTag.attr( "h_evVal" ) == null ? "" : jTag.attr( "h_evVal" ) ); }
	}

	renderer = "";
	try { renderer = eval( "EC_" + cname + "_RENDERER" ); } catch( e ) {}

	editor = "";
	try { editor = eval( "EC_" + cname + "_EDITOR" ); } catch( e ) {}

	// 5.2.0.0 (2010/09/01) 属性値が正しく引き継がれないバグを修正
	ATTRS = [ "title", "style", "tabindex", "readonly", "disabled"
				, "onClick", "onChange", "onBlur", "onFocus", "ondblClick", "onMouseDown", "onMouseUp"
				, "onMouseMove", "onMouseOut", "onMouseOver", "onSelect", "onKeydown", "onKeypress", "onKeyup"
				, "eventCallBack" // 5.5.4.0 (2012/07/02)
				, "multiple" // 5.9.4.5 (2016/01/29)
			 ];
	optAttrs = "";
	if( jCol.length > 0 ) {
		for( i=0; i<ATTRS.length; i++ ) {
			optAtt = jCol.attr(ATTRS[i]);
			if( optAtt != null ) {
				vtype = typeof( optAtt );
				isAdd = false;
				if( vtype == "function" ) {
					optAtt = optAtt.toString();
					isAdd = optAtt.length > 0 ? true : false;
					// 関数の場合は、文字列表現として"function anonymous(){...}"という関数定義が返るため、
					// ( FUNCTION )(); 形式で関数を実行するように変更
					optAtt = "(" + optAtt + ")()";
				}
				else if( vtype == "boolean" ) {
					isAdd = optAtt;
				}
				else {
					isAdd = optAtt.length > 0 ? true : false;
				}

				if( isAdd ) {
					optAttrs += ATTRS[i] + "='" + optAtt + "' ";
				}
			}
		}
	}

	// 5.10.4.0 (2018/10/05) ADD objにEC_XXXの情報を設定する
	obj.EC_CID		= ( cid == null ? "" : cid );
	obj.EC_CNAME	= ( cname == null ? "" : cname );
	obj.EC_RENDERER	= renderer;
	obj.EC_EDITOR	= editor;
	obj.EC_PARAM	= param;
	obj.EC_SQL		= param;
	obj.EC_VALSQL	= valsql;													// 8.1.0.2 (2022/01/14)
	obj.EC_WRITABLE	= ( writable == null ? "" : writable );
	obj.EC_CVALUE	= val;
	obj.EC_NOVALUE	= ( jCol.length == 0 ? "" : noVal() );
	obj.EC_CLASS	= ( jCol.length == 0 ? "" : jCol.attr("class") );
	obj.EC_SIZE		= ( jCol.length == 0 ? "" : jCol.attr("size") );
	obj.EC_MAXLENGTH= ( jCol.length == 0 ? "" : jCol.attr("maxlength") );
	obj.EC_OPTATTRS	= optAttrs;
	obj.EC_PNAME	= jEvCol.attr("id") == null ? "" : jEvCol.attr("id").split("__")[0];
	obj.EC_PVALUE	= jEvCol.get(0).value == null ? "" : jEvCol.get(0).value;	// 5.6.2.0 (2013/03/01)
	obj.EC_USESLBL	= (suffix == null || suffix == "") ? "false" : "true";		// 5.5.4.0 (2012/07/02)

	// JSPを呼び出して処理する
	$.ajax({
		url: url,
//		data: {
//			"EC_CID"		: ( cid == null ? "" : cid ),
//			"EC_CNAME"		: ( cname == null ? "" : cname ),
//			"EC_RENDERER"	: renderer,
//			"EC_EDITOR"		: editor,
//			"EC_PARAM"		: param,
//			"EC_SQL"		: param,
//			"EC_VALSQL"		: valsql,		// 6.3.3.0 (2015/07/25)
//			"EC_WRITABLE"	: ( writable == null ? "" : writable ),
//			"EC_CVALUE"		: val,
//			"EC_NOVALUE"	: ( jCol.length == 0 ? "" : noVal() ),
////			"EC_MUST"		: ( jCol.length == 0 ? "" : mustOrMustAny() ),
//			"EC_CLASS"		: ( jCol.length == 0 ? "" : jCol.attr("class") ),
//			"EC_SIZE"		: ( jCol.length == 0 ? "" : jCol.attr("size") ),
//			"EC_MAXLENGTH"	: ( jCol.length == 0 ? "" : jCol.attr("maxlength") ),
//			"EC_OPTATTRS"	: optAttrs,
//			"EC_PNAME"		: jEvCol.attr("id") == null ? "" : jEvCol.attr("id").split("__")[0],
////			"EC_PVALUE"		: jEvCol.val() == null ? "" : jEvCol.val(),
//			"EC_PVALUE"		: jEvCol.get(0).value == null ? "" : jEvCol.get(0).value, // 5.6.2.0 (2013/03/01)
//			"EC_USESLBL"	: (suffix == null || suffix == "") ? "false" : "true" // 5.5.4.0 (2012/07/02)
//		},
		data: obj,
		type: 'POST',
		dataType: 'html',
		async : isEndInitEvent(),
		error: function(r,s,e){
			// 5.6.4.2 (2013/05/17) 紙芝居作成時は、url が存在しないエラーが発生するので、無視する。(htm呼び出し時は無視)
			if( url.indexOf( ".htm" ) < 0 ) {
				alert('EventColumnError:'+r+':'+s+':'+e+':'+cname);
			}
		},
		success: function(data,status){
			var jNewCol = $(data);

			if( jCol.length > 0 ) {
				if( isEndInitEvent() ) {
					// 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
//					jCol.unbind("focus",columnFocus);
					jCol.off("focus",columnFocus);
				}
				// 7.0.2.2 (2019/03/25) eventColumnが動作しない(問合・ﾄﾗﾌﾞﾙ 61200-190319-01)
//				bindOldEvents( jNewCol.get(0), jQuery.data( jCol.clone(true).get(0),"events" ) );
				bindOldEvents( jNewCol.get(0), jQuery._data(jCol.clone(true).get(0)).events );			// 7.0.2.2 (2019/03/25)
			}

			// 8.1.2.3 (2022/05/20) YMD2ﾘｿｰｽとｲﾍﾞﾝﾄｶﾗﾑの競合時の不具合対応(問合・ﾄﾗﾌﾞﾙ 43100-220526-01)
//			jTag.empty().append( jNewCol );
			if( cid != null && cid != ""  && $("#"+cid).attr('type')=='text') {
				$("#"+cid).val(jNewCol.val());
			}
			else {
				jTag.empty().append( jNewCol );
			}

			if( jCol.length > 0 ) {
				jTag.find("input,select,textarea").attr( "name", cid ).attr( "id", cid );

				if( isEndInitEvent() ) {
					// 置き換え先の要素にフォーカスが当たっていた場合は、フォーカスを復活
					if( jCol.attr("isfocus") ) {
//						jNewCol.focus();
						// 8.4.3.0 (2023/03/31) jQuery.fn.focus() event shorthand is deprecated
						jNewCol.get(0).focus();
	//					jNewCol.get(0).trigger("focus");			// 8.4.3.0 (2023/03/31) trigger is not a function となった。
						// 8.4.3.0 (2023/03/31) .browser 廃止に伴う処置。IE は考慮しなくていいでしょ。
	//					// IEの場合、置き換え先の要素がテキストボックスの場合は、もう１度フォーカスする必要がある。
	//					if( $.browser.msie ) {
	//						jNewCol.get(0).focus();
	//					}
					}
				}
				// 初回読み込み時に置き換えられた要素はchangeイベントを発行
				if( !isEndInitEvent() ) {
					// 8.4.3.0 (2023/03/31) jQuery.fn.change() event shorthand is deprecated
//					jNewCol.change();
					jNewCol.trigger( "change" );
				}
				// 5.5.4.0 (2012/07/02) callBack処理
				// 置き換え先にeventCallback属性が存在した場合にevalして関数評価した上で、子idと値を引数に渡す。
				if( jCol.attr("eventCallback") ){
					callback = function(){ eval(jCol.attr("eventCallback") + "(arguments);") };
//					callback(cid,jNewCol.val(),jCol.val());
					callback(cid,jNewCol.val(),jCol.get(0).value); // 2013/03/01
				}
			}

			// ヘッダー固定再計算
			if( suffix != null && suffix != "" ) {
				if( isEndInitEvent() ) {
					$('table#viewTable').resizeView();
				}
			}
		}
	});
}

/********************************************************************************/
/* OLD ｲﾍﾞﾝﾄのﾊﾞｲﾝﾄﾞ関数														*/
/*																				*/
/* ｵﾌﾞｼﾞｪｸﾄapplyﾌﾟﾛﾊﾟﾃｨまたはﾒｿｯﾄﾞはｻﾎﾟｰﾄしていません ｴﾗｰ対応					*/
/*																				*/
/* @og.rev 5.10.30.0 (2021/04/20) ｲﾍﾞﾝﾄｶﾗﾑのJavaSriptｴﾗｰが発生					*/
/********************************************************************************/
function bindOldEvents( newCol, oldEvents ) {
	var type , handler ;
	for ( type in oldEvents ) {
		for ( handler in oldEvents[type] ) {
			if( oldEvents[type][handler] !== 0 ){		// 5.10.30.0 (2021/04/20)
				jQuery.event.add( newCol, type, oldEvents[type][handler], oldEvents[type][handler].data );
			}
		}
	}
}

/********************************************************************************/
/* 旧 realTimeCheck.js の内容を移植 5.2.1.0 (2010/10/01)						*/
/*																				*/
/* 入力欄の簡易ﾁｪｯｸ(ﾘｱﾙﾀｲﾑ)														*/
/* DBTYPE に応じた簡易ﾁｪｯｸを行います｡あくまで簡易的なﾁｪｯｸです｡					*/
/* 大文字小文字などは､JavaScriptで変換できる為､ﾁｪｯｸは行いません｡				*/
/*																				*/
/* @og.rev 4.3.3.0 (2008/10/01) ｻｰﾊﾞｰｻｲﾄﾞのﾘｱﾙﾀｲﾑﾁｪｯｸ対応						*/
/* @og.rev 4.3.5.0 (2009/02/01) JavaScript分離(inputFocusより)					*/
/* @og.rev 4.3.6.6 (2009/05/15) bodyに追加し､いつも上に表示						*/
/* @og.rev 5.2.0.0 (2010/09/01) ﾍｯﾀﾞｰ固定でｽｸﾛｰﾙした場合は､ｴﾗｰﾒｯｾｰｼﾞを消す		*/
/* @og.rev 5.2.0.0 (2010/09/01) Javaｽｸﾘﾌﾟﾄで登録したｲﾍﾞﾝﾄを発動させる			*/
/* @og.rev 5.2.1.0 (2010/10/01) h_ で始まる内部設定ﾌｨｰﾙﾄﾞはﾁｪｯｸしない			*/
/* @og.rev 5.3.7.0 (2011/07/01) 入力項目が上方にある場合は下にﾁｪｯｸﾁｯﾌﾟを表示する*/
/* @og.rev 5.4.4.0 (2012/02/01) rtOption対応									*/
/* @og.rev 6.3.6.1 (2015/08/28) ../common/*** の相対ﾊﾟｽを絶対ﾊﾟｽに変更			*/
/* @og.rev 5.9.32.2 (2018/05/18) :not(.noRealTime)								*/
/* @og.rev 8.4.3.0 (2023/03/31)  fn.scroll() event shorthand is deprecated.		*/
/* Revision: $Id$																*/
/********************************************************************************/
var isShowTip = false;

$(function(){
	// 5.2.0.0 (2010/09/01) Javaスクリプトで登録したイベントを発動させる
//	$('textarea,select,input[type="text"]').focusout( function(){ check( this, '../common/realtimecheck.jsp' ); } );
	if(USE_REAL_TIME_CHECK){	//5.4.5.0 flag add
//		setEvent( "textarea,select,input[type=\"text\"]" , "focusout" ,
	//	setEvent( "textarea:not(.noRealTime),select:not(.noRealTime),input[type=\"text\"]:not(.noRealTime)" , "focusout" ,	// 5.9.32.2 noRealTime 属性にした場合
		setEvent( "textarea:not([realTimeChk=\"false\"]),select:not([realTimeChk=\"false\"]),input[type=\"text\"]:not([realTimeChk=\"false\"])" , "focusout" ,	// 5.9.32.2
					// 6.3.6.1 (2015/08/28) ../common/*** の相対パスを絶対パスに変更
//					function(){ check( this, '../common/realtimecheck.jsp' ); } );
					function(){
						var obj=RegExp( /jsp/ );
						var tmp = location.pathname.match( obj );
						// RegExp.leftContext : 最期に一致した文字列より前の文字列を取得(/gf/)
						check( this, RegExp.leftContext + 'jsp/common/realtimecheck.jsp' );
					} );

		// 5.2.0.0 (2010/09/01) ヘッダー固定でスクロールした場合は、エラーメッセージを消す。
		// 8.4.3.0 (2023/03/31)  jQuery.fn.scroll() event shorthand is deprecated.
//		$('table#viewTable').parent().parent().scroll( function () {
		$('table#viewTable').parent().parent().on('scroll',function () {
			if( isShowTip ) { isShowTip = false; $(".tipErr").remove(); }
		});
		$('table#viewTable').parent().parent().trigger("click");
	}
});

function check( obj, sUrl ) {
	var sFullFN , val , arrFName , bTMCheck , sParam , ajaxSettings , tipId, rtoption ;

	sFullFN = obj.name;
//	var cls = obj.className;
//	var msg = null;
	// 6.0.4.1 (2014/12/26) リアルタイムチェックを外す方法。今は、サンプルのみ記載します。
//	if( !obj.id ) { return true; }								// ①id 属性の有無で判定
//	if( obj.getAttribute("rtc") == "false" ) { return true; }	// ②rtc という独自属性で判定。

	if (typeof jQuery != "undefined" && sFullFN.indexOf( "h_" ) != 0 ) {
		val = obj.value;
		if( obj.rtOption != "null" && obj.rtOption != "undefined"){
//			rtoption = obj.rtOption; // 5.4.4.0
			rtoption = obj.getAttribute("rtOption"); // 5.9.24.2
		}
		arrFName = sFullFN.split('__');
		bTMCheck = (2 == arrFName.length);
//		var sParam = "command=RTCHECK&checkType=" + ( bTMCheck ? "ENTRY" : "NEW" );
		sParam = "command=RENEW&checkType=" + ( bTMCheck ? "ENTRY" : "NEW" ) // 4.3.4.0 (2008/12/01)
				 + ( bTMCheck ? "&h_rowSel=" + arrFName[1] : "" )
//				 + "&column=" + arrFName[0] + "&" + sFullFN + "=" + val;
//				 + "&column=" + arrFName[0] + "&" + sFullFN + "=" + encodeURI( val ); // 4.3.4.0 (2008/12/01)
				 + "&column=" + arrFName[0] + "&" + sFullFN + "=" + encodeURIComponent( val ) // 5.2.0.0 (2010/09/01)
				 + (rtoption ? "&" + rtoption : ""); // 5.4.4.0 (2012/02/01)
		ajaxSettings = {
				dataType : 'html',
				type	 : 'POST',
				url		 : sUrl,
				data	 : sParam
		};

		ajaxSettings.error = function() {};
		ajaxSettings.success = function(data) {
			//Remove old msg
//			var sOutId = getTipId(obj);
//			$("#" + sOutId).remove();
			tipId = $(obj).data( "tipId" );
			$("#" + tipId).remove();

			// 8.4.3.0 (2023/03/31) jQuery.trim is deprecated; use String.prototype.trim
//			if( $.trim(data).indexOf("row_error") >= 0 ) {
			if( data.indexOf("row_error") >= 0 ) {
				showCheckTip( obj, data );
				isShowTip = true;
			}
		};
		$.ajax(ajaxSettings);
	}

	return true;
}

/* Revised From jTip Plug-in of jQuery */
function showCheckTip( oEditOut, content ) {
//	var jEditOut , hEditOffset , sJtDiv , jJtDiv , clickElementx , clickElementy , tipId ;
	var jEditOut , hEditOffset , iTipOffset , sArrowId , sJtDiv , jJtDiv , clickElementx , clickElementy , tipId ;

	jEditOut = $(oEditOut);
	hEditOffset = jEditOut.offset();

	// 5.3.7.0 (2011/07/01) 上に表示する場合
	if( hEditOffset.top >= 30 ) {
		sJtDiv = "<div class='tipErr'><div id='tipArrowBottom'></div><div>" + content + "</div></div>";
		jJtDiv = $(sJtDiv).appendTo(document.body);
		//set x position
		clickElementx = hEditOffset.left;
		//set y position
		clickElementy = hEditOffset.top + (-11 - jJtDiv[0].offsetHeight);
	}
	// 5.3.7.0 (2011/07/01) 下に表示する場合
	else {
		sJtDiv = "<div class='tipErr'><div id='tipArrowTop'></div><div>" + content + "</div></div>";
		jJtDiv = $(sJtDiv).appendTo(document.body);
		//set x position
		clickElementx = hEditOffset.left;
		//set y position
		clickElementy = hEditOffset.top + 11 + jJtDiv[0].offsetHeight;
	}

	tipId = (new Date()).getTime();
	$(oEditOut).data( "tipId", tipId );

	jJtDiv.css( { left: clickElementx+"px", top: clickElementy+"px" } )
			.attr( 'id', tipId )
			// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//			.click( function() { $(this).remove(); } )
			.on("click", function() { $(this).remove(); } )
			.show();
}

//function getTipId(oEdit) {
//	return "JT" + $.data(oEdit);
//}

/********************************************************************************/
/* 旧 bindEvents.js の内容を移植 5.2.1.0 (2010/10/01)							*/
/*																				*/
/* 各JavaScriptで登録されたｲﾍﾞﾝﾄ(主にｶﾗﾑに割り当てられたｲﾍﾞﾝﾄ)を				*/
/* 実際のｲﾍﾞﾝﾄﾊﾝﾄﾞﾗにﾊﾞｲﾝﾄﾞします｡												*/
/*																				*/
/* @og.rev 5.2.0.0 (2010/09/01) 新規作成										*/
/* Revision: $Id$																*/
/********************************************************************************/
$(function(){
	bindEvents();
});

/********************************************************************************/
/* ｶﾗｰﾋﾟｯｶｰ 5.5.4.0 (2012/07/02)												*/
/*																				*/
/* ｶﾗｰﾋﾟｯｶｰです｡																*/
/* http://rachel-carvalho.github.io/simple-color-picker/						*/
/* input.colorPickerに対して実行させます										*/
/*																				*/
/* @og.rev 5.5.4.0 (2012/07/02) 新規作成										*/
/* @og.rev 5.5.6.1 (2013/01/11) 名称変更(Og付加)								*/
/* @og.rev 5.9.4.0 (2016/01/08) clear対応										*/
/* @og.rev 5.9.8.3 (2016/05/20) bulk対応										*/
/* @og.rev 7.0.1.0 (2018/10/15) jQuery1.9 以降は､live が廃止(live → on)		*/
/* @og.rev 8.4.3.0 (2023/03/31) .browser 廃止に伴う処置							*/
/* @og.rev 8.4.3.0 (2023/03/31) jQuery.isFunction() 廃止に伴う処置				*/
/* Revision: $Id$																*/
/********************************************************************************/
$.fn.simpleColorPickerOg = function(options) {
	var defaults = {
		colorsPerLine: 8,
		colors: ['#000000', '#444444', '#666666', '#999999', '#cccccc', '#eeeeee', '#f3f3f3', '#ffffff'
				, '#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#9900ff', '#ff00ff'
				, '#f4cccc', '#fce5cd', '#fff2cc', '#d9ead3', '#d0e0e3', '#cfe2f3', '#d9d2e9', '#ead1dc'
				, '#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#9fc5e8', '#b4a7d6', '#d5a6bd'
				, '#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6fa8dc', '#8e7cc3', '#c27ba0'
				, '#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3d85c6', '#674ea7', '#a64d79'
				, '#990000', '#b45f06', '#bf9000', '#38761d', '#134f5c', '#0b5394', '#351c75', '#741b47'
				, '#660000', '#783f04', '#7f6000', '#274e13', '#0c343d', '#073763', '#20124d', '#4C1130'],
		showEffect: '',
		hideEffect: '',
		onChangeColor: false
	};

	var opts = $.extend(defaults, options);

	return this.each(function() {
		var txt = $(this);

		var colorsMarkup = '';

		var prefix = txt.attr('id').replace(/-/g, '') + '_';

		for(var i = 0; i < opts.colors.length; i++){
			var item = opts.colors[i];

			var breakLine = '';
			if (i % opts.colorsPerLine == 0)
				breakLine = 'clear: both; ';

			// 8.4.3.0 (2023/03/31) .browser 廃止に伴う処置。IE は考慮しなくていいでしょ。
	//		if (i > 0 && breakLine && $.browser && $.browser.msie && $.browser.version <= 7) {
	//			breakLine = '';
	//			colorsMarkup += '<li style="float: none; clear: both; overflow: hidden; background-color: #fff; display: block; height: 1px; line-height: 1px; font-size: 1px; margin-bottom: -2px;"></li>';
	//		}

			colorsMarkup += '<li id="' + prefix + 'color-' + i + '" class="color-box" style="' + breakLine + 'background-color: ' + item + '" title="' + item + '"></li>';
		}
		breakLine = 'clear: both; ';
		// 5.9.4.0	clear
		colorsMarkup += '<li id="' + prefix + 'color-default' + '" class="color-box" style="width:80px; text-align:center; ' + breakLine +	'background-color:white;" title="clear">clear</li>';

		var box = $('<div id="' + prefix + 'color-picker" class="color-picker" style="position: absolute; left: 0px; top: 0px;"><ul>' + colorsMarkup + '</ul><div style="clear: both;"></div></div>');
		$('body').append(box);
		box.hide();

		// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//		box.find('li.color-box').click(function() {
		box.find('li.color-box').on("click",function() {
			var sel_val = isNaN(this.id.substr(this.id.indexOf('-') + 1)) ? "": opts.colors[this.id.substr(this.id.indexOf('-') + 1)]; // 5.9.4.0

			if (!txt.is('input')) {
//				txt.val(opts.colors[this.id.substr(this.id.indexOf('-') + 1)]);
				txt.val(sel_val);
				txt.blur();
			}
			// 8.4.3.0 (2023/03/31) jQuery.isFunction() has been deprecated. replaced by typeof x === "function".
//			if ($.isFunction(defaults.onChangeColor)) {
			if (typeof defaults.onChangeColor === 'function') {
//				defaults.onChangeColor.call(txt, opts.colors[this.id.substr(this.id.indexOf('-') + 1)]);
				defaults.onChangeColor.call(txt, sel_val);
			}
			hideBox(box);
		});

//		$('body').live('click', function() {		// jquery-1.12系
		$('body').on('click', function() {			// 7.0.1.0 (2018/10/15) jQuery1.9 以降は、live が廃止
			hideBox(box);
		});

		// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//		box.click(function(event) {
		box.on("click",function(event) {
			event.stopPropagation();
		});

		var positionAndShowBox = function(box) {
			var pos = txt.offset();
			var left = pos.left + txt.outerWidth() - box.outerWidth();
			if (left < pos.left) left = pos.left;
			box.css({ left: left, top: (pos.top + txt.outerHeight()) });
			showBox(box);
		}

		// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//		txt.click(function(event) {
		txt.on("click",function(event) {
			txt = $(this); // 5.9.8.3 (2016/05/20) クリックした際にthisを再セットする（Bulk対応）
			event.stopPropagation();
			if (!txt.is('input')) {
				// element is not an input so probably a link or div which requires the color box to be shown
				positionAndShowBox(box);
			}
		});

		// 8.4.3.0 (2023/03/31) jQuery.fn.focus() event shorthand is deprecated
//		txt.focus(function() {
		txt.on("focus",function() {
			positionAndShowBox(box);
		});

		// 5.9.8.3 (2016/05/20) 外部から変更された場合に、色を変更する。
		// 8.4.3.0 (2023/03/31) jQuery.fn.change() event shorthand is deprecated
//		txt.change( function(event){
		txt.on( "change", function(event){
			if( txt.val() != txt.css('background-color')){
				txt.css('background-color', txt.val()) .css('color',txt.val());
			}
		});

		function hideBox(box) {
			if (opts.hideEffect == 'fade')
				box.fadeOut();
			else if (opts.hideEffect == 'slide')
				box.slideUp();
			else
				box.hide();
		}

		function showBox(box) {
			if (opts.showEffect == 'fade')
				box.fadeIn();
			else if (opts.showEffect == 'slide')
				box.slideDown();
			else
				box.show();
		}
	});
};

// カラーピッカーの対象はinput.colorPicker
$(function(){
	// 5.5.6.1 (2013/01/11) jQueryの上書き時エラー対策にif文挿入（上書きされると動作しない）
	// 5.9.4.0 (2016/01/08) backgroundではなくbackground-colorにする
	// 5.9.8.3 (2016/05/20) change追加
	if($.fn.simpleColorPickerOg){
//		$('input.colorPicker').simpleColorPickerOg({ onChangeColor: function(color) { $(this).val(color).css('background',color).css('color',color); } });
//		$('input.colorPicker').simpleColorPickerOg({ onChangeColor: function(color) { $(this).val(color).css('background-color', color) .css('color',color); } });
		// 8.4.3.0 (2023/03/31) jQuery.fn.change() event shorthand is deprecated
//		$('input.colorPicker').simpleColorPickerOg({ onChangeColor: function(color) { $(this).val(color).css('background-color', color) .css('color',color).change(); } });
		$('input.colorPicker').simpleColorPickerOg( { onChangeColor: function(color) {
			$(this).val(color).css('background-color', color).css('color',color).trigger( "change" );
		} });
	}
});

/********************************************************************************
時間ピッカー 5.6.5.2 (2013/06/21)
ClockPick, by Josh Nathanson
Version 1.2.9 and Masakazu Takahasi Modified
Complete documentation at http://www.jnathanson.com/index.cfm?page=jquery/clockpick/ClockPick

以下を、対象タグの属性値から取得可能なように改造
param	options[starthour]			int		starting hour (use military int)
param	options[endhour]			int		ending hour (use military int)
param	options[minutedivisions]	int		number of divisions, i.e. 4 = :00, :15, :30, :45
param	options[military]			string	use 24hr time if true(true/false)
param	options[valuefield]			string	field to insert time value, if not same as click field(name of input field)
param	options[showminutes]		bool	show minutes
param	options[second]				bool	add second(00)		// 5.9.12.3
param	options[layout]				 string	vertical or horizon	// 5.9.17.2

又､対象単位に設定値を持てるように対応｡
@og.rev 5.9.8.3 (2016/05/20) 標準をAMPMではなく24時間表記に変更､ﾋﾟｯｶｰ選択時にchangeｲﾍﾞﾝﾄ発生させる
@og.rev 5.9.12.3 (2015/09/23) 返す値に秒(00固定)を追加出来るようにする(useSecond)
@og.rev 5.9.15.1 (2016/12/09) 数値変換不具合対応
@og.rev 5.9.17.2 (2017/02/15) layout指定追加
@og.rev 5.9.27.3 (2017/12/22) 選択時間を幅広く取れるように変更､及び方向ｷｰ対応
@og.rev 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
********************************************************************************/
jQuery.fn.ogClockpicker = function(options, callback) {

	// 5.9.12.3 (2016/09/23)
	var org_settings = {
		starthour		: 6,
		endhour			: 20,
		showminutes		: "true",
		minutedivisions : 4,
		military		: true,				// 5.9.8.3 (2016/05/20)
		event			: 'click',
		layout			: 'vertical',
		valuefield		: null,
		useBgiframe		: false,
		hoursopacity	: 1,
		minutesopacity	: 1,
		second			: ""				// 5.9.12.3 (2015/09/23)
		};

	if(options) {
		jQuery.extend(org_settings, options);
	};

	var callback = callback || function() { },
		v = (org_settings.layout == 'vertical'); // boolean for vertical, shorten footprint
	errorcheck(org_settings);


	// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//	jQuery(this)[org_settings.event](function(e) {
	jQuery(this).on(org_settings.event,function(e) {
		var self = this,
		$self = jQuery( this ),
		$body = jQuery( "body" );
		var settings = jQuery.extend(true,{},org_settings); // OpenGion deep copy

		// OpenGion 属性対応
		if( $self.attr('valuefield') ){
			settings.valuefield = $self.attr('valuefield');
		}
		if( $self.attr('starthour') ){
//			settings.starthour = $self.attr('starthour');
			settings.starthour = parseInt($self.attr('starthour')); // 5.9.15.1 (2016/12/09)
		}
		if( $self.attr('endhour') ){
//			settings.endhour = $self.attr('endhour');
			settings.endhour = parseInt($self.attr('endhour')); // 5.9.15.1 (2016/12/09)
		}
		if( $self.attr('minutedivisions') ){
//			settings.minutedivisions = $self.attr('minutedivisions');
			settings.minutedivisions = parseInt($self.attr('minutedivisions'));
		}
		if( $self.attr('military') ){
			settings.military = $self.attr('military');
		}
		if( $self.attr('showminutes') ){
			settings.showminutes = $self.attr('showminutes');
		}
		if( $self.attr('usesecond') == "true" ){ // 5.9.12.3 (2016/09/23)
			settings.second = "00";
		}
		if( $self.attr('layout') ){ // 5.9.17.2 (2017/02/17)
			settings.layout = $self.attr('layout');
			org_settings.layout = settings.layout; // overwrite
			v = (settings.layout == 'vertical');
		}

		errorcheck(settings);

		// 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
		if ( !settings.valuefield ) {
//			$self.unbind( "keydown" ).bind( "keydown", keyhandler );
			$self.off( "keydown" ).on( "keydown", keyhandler );
		}
		else {
			var inputfield = jQuery("[name=" + settings.valuefield + "]");
			inputfield
//				.unbind( "keydown" )
//				.bind( "keydown", keyhandler)[0]
				.off( "keydown" )
				.on( "keydown", keyhandler)[0]
				// 8.4.3.0 (2023/03/31) jQuery.fn.focus() event shorthand is deprecated
				.focus();
//				.trigger("focus");				// 8.4.3.0 (2023/03/31) trigger is not a function となった。
			inputfield
//				.bind("click", function() { inputfield.unbind("keydown"); } );
				.on("click", function() { inputfield.off("keydown"); } );
		}
		// clear any malingerers
		jQuery("#CP_hourcont,#CP_minutecont").remove();

		// append hourcont to body
		// add class "CP" for mouseout recognition, although there is only
		// one hourcont on the screen at a time
		var $hourcont = jQuery("<div id='CP_hourcont' class='CP' />").appendTo( $body );
//		!settings.useBgiframe ? $hourcont.css("opacity",settings.hoursopacity) : null;
		if( !settings.useBgiframe ) { $hourcont.css("opacity",settings.hoursopacity); }	// 8.1.0.2 (2022/01/14) WARNING - [JSC_USELESS_CODE]
		binder( $hourcont );

		// 5.9.27.3 (2017/12/22) 多数に対応させるため配列に代入
		var $hourcol = [];
		for(var i=0;i<Math.floor(settings.endhour/12)-Math.floor(settings.starthour/12)+1;i++){
			$hourcol.push(jQuery("<div class='CP_hourcol' id='hourcol"+i+"' />").appendTo( $body ));
		}

//		var $hourcol1 = jQuery("<div class='CP_hourcol' id='hourcol1' />").appendTo( $body );
//		var $hourcol2 = jQuery("<div class='CP_hourcol' id='hourcol2' />").appendTo( $body );

		// if showminutes, append minutes cont to body

		if (settings.showminutes == "true") {
			var $mc = jQuery("<div id='CP_minutecont' class='CP' />").appendTo( $body );
//			!settings.useBgiframe ? $mc.css("opacity",settings.minutesopacity) : null;
			if( !settings.useBgiframe ) { $mc.css("opacity",settings.minutesopacity); }	// 8.1.0.2 (2022/01/14) WARNING - [JSC_USELESS_CODE]
			binder($mc);
		}
		if ( !v ) {
			$hourcont.css("width","auto");
			if (settings.showminutes == "true") {
				$mc.css("width","auto");
			}
		}
		else {
			for (i=0;i<$hourcol.length;i++){			// 5.9.27.3 (2017/12/22)
				$hourcol[i].addClass('floatleft');
			}
//			$hourcol1.addClass('floatleft');
//			$hourcol2.addClass('floatleft');
		}

		// all the action right here
		// fill in the hours container (minutes rendered in hour mouseover)
		// then make hour container visible
		renderhours();
		putcontainer();

		/*----------------------helper functions below-------------------------*/

		function renderhours() {
			// fill in the $hourcont div
			var c = 1;
			var numberC = 0;				// 5.9.27.3 (2017/12/22)
			// counter as index 2 of hr id, gives us index
			// in group of hourdivs for calculating where to put minutecont on keydown
			for (var h=settings.starthour; h<=settings.endhour; h++) {
//				if(h==12) { c = 1; } // reset counter for col 2
				if(h%12==0) { c = 1; } // reset counter for col 2	// 5.9.27.3 (2017/12/22)

				var displayhours = ((!settings.military && h > 12) ? h - 12 : h);
				var valuehouers = h; // opengion
				// rectify zero hour
				if (!settings.military && h == 0) {
					//displayhours = '12'; // 日本向けに0時で表示
				}
				else if (!settings.military && h == 12) {
					displayhours = '0'; // 日本向けに0時で表示
				}
				if ( settings.military && h < 10 ) {
					displayhours = '0' + displayhours;
				}
				if ( h < 10 ){
					valuehouers = '0'+valuehouers;
				}

				var $hd = jQuery("<div class='CP_hour' id='hr_" + h + "_" + c + "' " + "value='" +valuehouers+ "' >" + displayhours + set_tt(h) + "</div>");
				// shrink width a bit if military
				if (settings.military) { $hd.width(20); }
				binder($hd);
				if (!v) {
					$hd.css("float","left");
				}
//				(h<12) ? $hourcol1.append($hd) : $hourcol2.append($hd);
				$hourcol[numberC].append($hd);		// 5.9.27.3 (2017/12/22)
				if((h+1)%12==0){
					numberC++;
				}
				c++;
			}
			// 5.9.27.3 (2017/12/22)
			for(var j=0; j<$hourcol.length;j++){
				if(v){
					if(j!=0&&j%2==0){
						$hourcol[j].css("margin-left",$mc.width()+4 + 'px');
					}
				}else{
					$hourcont.append("<div style='clear:left' />");
					if(j!=0&&j%2==0){
						//$mc.height()が0になってまう？？
						$hourcol[j].css("margin-top","19px");
					}
				}
				$hourcont.append($hourcol[j]);
			}
//			$hourcont.append($hourcol1);
//			!v ? $hourcont.append("<div style='clear:left' />") : '';
//			$hourcont.append($hourcol2);
		}

		function renderminutes( h ) {
			var realhours = h;
			var displayhours = (!settings.military && h > 12) ? h - 12 : h;
			var valuehouers = h; // opengion
			if (!settings.military && h == 0) {
				//displayhours = '12'; // 日本向けに0時で表示
			}
			else if (!settings.military && h == 12) {
				displayhours = '0'; // 日本向けに0時で表示
			}
			if ( settings.military && h < 10 ) {
				displayhours = '0' + displayhours;
			}
			if ( h < 10 ){
				valuehouers = '0'+valuehouers;
			}

			$mc.empty();
			var n = 60 / settings.minutedivisions,
				tt = set_tt(realhours),
				counter = 1;

			for(var m=0;m<60;m=m+n) {
				$md = jQuery("<div class='CP_minute' id='" + realhours + "_" + m + "' value='" + valuehouers + ((m<10) ? "0" : "") + m +"'>"
							 + displayhours + ":" + ((m<10) ? "0" : "") + m + tt
							 + "</div>");
				if ( !v ) {
					$md.css("float","left");
					if (settings.minutedivisions > 6
						&& counter == settings.minutedivisions / 2 + 1) {
						// long horizontal, kick in extra row after half
						$mc.append("<div style='clear:left' />");
					}
				}
				$mc.append($md);
				binder($md);
				counter++;
			}
		}

		function set_tt(realhours) {
			if (!settings.military) {
				return (realhours >= 12) ? ' PM' : ' AM';
				}
			else {
				return '';
			}
		}

		function putcontainer() {
			if ( e.type != 'focus') {
				$hourcont[0].style.left = e.pageX - 5 + 'px';
				$hourcont[0].style.top = e.pageY - (Math.floor($hourcont.height() / 2)) + 'px';
				rectify($hourcont);
			}
			else {
				$self.after($hourcont);
			}
			$hourcont.slideDown('fast');

			if ( settings.useBgiframe )
				bgi( $hourcont );
		}

		function rectify($obj) {
			// if a div is off the screen, move it accordingly
			var ph = document.documentElement.clientHeight
						? document.documentElement.clientHeight
						: document.body.clientHeight;
			var pw = document.documentElement.clientWidth
						? document.documentElement.clientWidth
						: document.body.clientWidth;
			var t = parseInt( $obj[0].style.top );
			var l = parseInt( $obj[0].style.left );
			var st = document.documentElement.scrollTop
						? document.documentElement.scrollTop
						: document.body.scrollTop;
			// run off top
			if ( t <= st && !$obj.is("#CP_minutecont") ) {
				$obj.css("top",st+10+'px');
			}
			else if (t + $obj.height() - st > ph) {
				$obj.css("top",st + ph - $obj.height() - 10 + 'px');
			}
			if ( l <= 0 ) {
				$obj.css("left", '10px');
			}
		}

		function bgi( ob ) {
			if ( typeof jQuery.fn.bgIframe == 'function' )
				ob.bgIframe();
			else
				alert('bgIframe plugin not loaded.');
		}

		function binder($obj) {
		// all the binding is done here
		// event handlers have been abstracted out,
		// so they can handle mouse or key events

			// bindings for hc (hours container)
			if($obj.attr("id") == 'CP_hourcont') {
//				$obj.mouseout(function(e) { hourcont_out(e) });
				$obj.on('mouseout',function(e) { hourcont_out(e) });	// 8.4.3.0 (2023/04/07)
			}

			// bindings for mc (minute container)
			else if ($obj.attr("id") == 'CP_minutecont') {
//				$obj.mouseout(function(e) { minutecont_out(e) });
				$obj.on('mouseout',function(e) { minutecont_out(e) });	// 8.4.3.0 (2023/04/07)
			}

			// bindings for $hd (hour divs)
			else if ($obj.attr("class") == 'CP_hour') {
//				$obj.mouseover(function(e) { hourdiv_over($obj, e) });
//				$obj.mouseout(function() { hourdiv_out($obj) });
				$obj.on('mouseover',function(e) { hourdiv_over($obj, e) });	// 8.4.3.0 (2023/04/07)
				$obj.on('mouseout',function() { hourdiv_out($obj) });		// 8.4.3.0 (2023/04/07)
				// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//				$obj.click(function() {	hourdiv_click($obj) });
				$obj.on("click",function() { hourdiv_click($obj) });
			}

			// bindings for $md (minute divs)
			else if ($obj.attr("class") == 'CP_minute') {
//				$obj.mouseover(function() { minutediv_over($obj) });
//				$obj.mouseout(function() { minutediv_out($obj) });
				$obj.on('mouseover',function() { minutediv_over($obj) });	// 8.4.3.0 (2023/04/07)
				$obj.on('mouseout',function() { minutediv_out($obj) });		// 8.4.3.0 (2023/04/07)
				// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//				$obj.click(function() {	minutediv_click($obj) });
				$obj.on("click",function() { minutediv_click($obj) });
			}
		};

		function hourcont_out(e) {
			/*
			this tells divs to clear only if rolling all the way
			out of hourcont.
			relatedTarget "looks ahead" to see where the mouse
			has moved to on mouseOut.
			IE uses the more sensible "toElement".
			try/catch for Mozilla bug on relatedTarget-input field.
			*/
			try {
				var t = (e.toElement) ? e.toElement : e.relatedTarget;
				if (!(jQuery(t).is("div[class^=CP], iframe"))) {
					// Safari incorrect mouseover/mouseout
					//if (!jQuery.browser.safari) {
						cleardivs();
					//}
				}
			}
			catch(e) {
				cleardivs();
			}
		}

		function minutecont_out(e) {
			try {
				var t = (e.toElement) ? e.toElement : e.relatedTarget;
				if (!(jQuery(t).is("div[class^=CP], iframe"))) {
					cleardivs();
				}
			}
			catch(e) {
				cleardivs();
			}
		}

		function hourdiv_over($obj, e) {
			var h = $obj.attr("id").split('_')[1],
				i = $obj.attr("id").split('_')[2],
				l,
				t,
				nn;								// 5.9.27.3 (2017/12/22)
			$obj.addClass("CP_over");

			// 5.9.27.3 (2017/12/22) 何個目の要素を見ているか計算して、分表示を配置するための独立変数nnを算出
			nn = Math.ceil((Math.floor(h/12)-Math.floor(settings.starthour/12))/2);

			if ( settings.showminutes == "true") {
				$mc.hide();
				renderminutes(h);

				// set position & show minutes container
				if (v) {
					t = e.type == 'mouseover'
						? e.pageY - 15
						: $hourcont.offset().top + 2 + ($obj.height() * i);
					l = $hourcont.offset().left + $hourcol[0].width()*2*nn + $mc.width()*(nn-1) + 4*nn-2;	// 5.9.27.3 (2017/12/22)
	//				if ( h < 12 )
	//					l = $hourcont.offset().left - $mc.width() - 2;
	//				else
	//					l = $hourcont.offset().left + $hourcont.width() + 2;
				}
				else {
					l = (e.type == 'mouseover')
						? e.pageX - 10
						: $hourcont.offset().left + ($obj.width()-5) * i;
						//$hourcol[0].height()は出ないため全体から各要素を引いて導出
					t = $hourcont.offset().top + ($hourcont.height()-($mc.height()+2)*(Math.ceil($hourcol.length/2)-1))/$hourcol.length*2*nn + $mc.height()*(nn-1) + 2*nn-1;	// (2017/12/19)
	//				if(h<12) {
	//					t = $hourcont.offset().top - $mc.height() - 2;
	//				}
	//				else {
	//					t = $hourcont.offset().top + $hourcont.height();
	//				}
				}
				$mc.css("left",l+'px').css("top",t+'px');
				rectify( $mc );
				$mc.show();

				if ( settings.useBgiframe )
					bgi( $mc );
			}
			return false;
		}

		function hourdiv_out($obj) {
			$obj.removeClass("CP_over");
			return false;
		}

		function hourdiv_click($obj) {
			var h = $obj.attr("id").split('_')[1],
				tt = set_tt(h),
				str = $obj.attr('value');
			if(str.indexOf(' ') != -1) {
				var cleanstr = str.substring(0,str.indexOf(' '));
			}
			else {
				var cleanstr = str;
			}


			//$obj.text(cleanstr + ':00' + tt);
			//$obj.text(cleanstr + '00');
			$obj.text(cleanstr + '00' + settings.second ); // 5.9.12.3 (2016/09/23)
			setval($obj);
			cleardivs();
		}

		function minutediv_over($obj) {
			$obj.addClass("CP_over");
			return false;
		}

		function minutediv_out($obj) {
			$obj.removeClass("CP_over");
			return false;
		}

		function minutediv_click($obj) {
			//$obj.text( $obj.attr('value'));
			$obj.text( $obj.attr('value') + settings.second); // 5.9.12.3 (2016/09/23)
			setval($obj);
			cleardivs();
		}

		function setval($obj) { // takes either hour or minute obj
			if(!settings.valuefield) {
				self.value = $obj.text();
			}
			else {
			//	jQuery("input[name=" + settings.valuefield + "]").val($obj.text());
				// 8.4.3.0 (2023/03/31) jQuery.fn.change() event shorthand is deprecated
//				jQuery("input[name=" + settings.valuefield + "]").val($obj.text()).change();			// 5.9.8.3 (2016/05/17)
				jQuery("input[name=" + settings.valuefield + "]").val($obj.text()).trigger( "change" );	// 8.4.3.0 (2023/03/31)
			}
			callback.apply( $self, [ $obj.text() ]);
			// unbind keydown handler, otherwise it will double-bind if
			// field is activated more than once
			// 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
//			$self.unbind( "keydown", keyhandler );
			$self.off( "keydown", keyhandler );
		}

		function cleardivs() {
			if ( settings.showminutes == "true") {
				$mc.hide();
			}
			$hourcont.slideUp('fast');
			// 8.4.3.0 (2023/03/31) .bind() , .unbind() は、.on()と.off()に書き換えます。
//			$self.unbind( "keydown", keyhandler );
			$self.off( "keydown", keyhandler );
		}

		// keyboard handling

		function keyhandler( e ) {

			// $obj is current active div
			// 8.4.3.0 (2023/03/31) jQuery.fn.size() is deprecated and removed; use the .length property
//			var $obj = $("div.CP_over").size() ? $("div.CP_over") : $("div.CP_hour:first"),
			var $obj = $("div.CP_over").length ? $("div.CP_over") : $("div.CP_hour:first"),
				divtype = $obj.is(".CP_hour") ? 'hour' : 'minute',
				hi = (divtype == 'hour') ? $obj[0].id.split('_')[2] : 0, // hour index
				h = (divtype == 'minute') ? $obj[0].id.split('_')[0] : $obj[0].id.split('_')[1]; // real hour
			// 5.9.27.3 (2017/12/22)
			if (divtype == 'minute') {
				if((Math.floor(h/12)-Math.floor(settings.starthour/12))==0){
					var curloc = 'm1';
				}else if((Math.floor(h/12)-Math.floor(settings.endhour/12))==0&&(Math.floor(h/12)-Math.floor(settings.starthour/12))%2!=0){
					var curloc = 'm2';
				}else{
					var curloc = 'm3';
				}
			}else{
				if((Math.floor(h/12)-Math.floor(settings.starthour/12))%2==0){
					var curloc = 'h1';
				}else{
					var curloc = 'h2';
				}
			}
//			if (divtype == 'minute')
//				{ var curloc = h<12 ? 'm1' : 'm2' }
//			else
//				{ var curloc = h<12 ? 'h1' : 'h2' }

			function divprev($obj) {
				// 8.4.3.0 (2023/03/31) jQuery.fn.size() is deprecated and removed; use the .length property
//				if ($obj.prev().size()) {
				if ($obj.prev().length) {
					eval(divtype + 'div_out($obj)');
					eval(divtype + 'div_over($obj.prev(), e)');
				}
				else { return false; }
			}

			function divnext($obj) {
				// 8.4.3.0 (2023/03/31) jQuery.fn.size() is deprecated and removed; use the .length property
//				if ($obj.next().size()) {
				if ($obj.next().length) {
					eval(divtype + 'div_out($obj)');
					eval(divtype + 'div_over($obj.next(), e)');
				}
				else { return false; }
			}

			function hourtohour($obj) {
				// 5.9.27.3 (2017/12/22)
				if((Math.floor(h/12)-Math.floor(settings.starthour/12))%2==0){
					var next = String((Math.floor(h/12)-Math.floor(settings.starthour/12))+1);
				}else{
					var next = String((Math.floor(h/12)-Math.floor(settings.starthour/12))-1);
				}
				var ctx = '#hourcol'+next;
//				var ctx = h>=12 ? '#hourcol1' : '#hourcol2';
				$newobj = jQuery(".CP_hour[id$=_" + hi + "]", ctx );
				// 8.4.3.0 (2023/03/31) jQuery.fn.size() is deprecated and removed; use the .length property
//				if ($newobj.size()) {
				if ($newobj.length) {
					hourdiv_out($obj);
					hourdiv_over($newobj, e);
				}
				else { return false; }
			}

			function hourtominute($obj) {
				hourdiv_out($obj);
				minutediv_over($(".CP_minute:first"));
			}

//			function minutetohour($obj) {
			function minutetohour($obj,where) {
				minutediv_out($obj);
				// 5.9.27.3 (2017/12/22)
				if(where<0){
					if((Math.floor(h/12)-Math.floor(settings.starthour/12))%2==0){
						var next = String((Math.floor(h/12)-Math.floor(settings.starthour/12))+where);
						h = String(Number(h)-12);
					}else{
						var next = String((Math.floor(h/12)-Math.floor(settings.starthour/12)));
					}
				}else{
					if((Math.floor(h/12)-Math.floor(settings.starthour/12))%2==0){
						var next = String((Math.floor(h/12)-Math.floor(settings.starthour/12)));
					}else{
						var next = String((Math.floor(h/12)-Math.floor(settings.starthour/12))+where);
						h = String(Number(h)+12);
					}
				}
				var ctx = '#hourcol'+next;
				var $newobj = jQuery(".CP_hour[id^=hr_" + h + "]", ctx);
//				var ctx = h>=12 ? '#hourcol2' : '#hourcol1';
				// extract hour from minutediv, then find hourdiv with that hour
				var $newobj = jQuery(".CP_hour[id^=hr_" + h + "]", ctx);
				hourdiv_over($newobj, e);
			}

			switch (e.keyCode) {
				case 37: // left arrow
					if (v) {
						switch (curloc) {
							case 'm1':
								return false;
								break;
							case 'm2':
//								minutetohour($obj);		// 5.9.27.3 (2017/12/22)
								minutetohour($obj,-1);
								break;
							case 'm3':
								minutetohour($obj,-1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'h1':
								hourtominute($obj);
								break;
							case 'h2':
								hourtohour($obj);
								break;
						}
					}
					else {
						divprev($obj);
					}
					break;

				case 38: // up arrow
					if(v) {
						divprev($obj);
					}
					else {
						switch (curloc) {
							case 'm1':
								return false;
								break;
							case 'm2':
//								minutetohour($obj);
								minutetohour($obj,-1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'm3':
								minutetohour($obj,-1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'h1':
								hourtominute($obj);
								break;
							case 'h2':
								hourtohour($obj);
								break;
						}
					}
					break;
				case 39: // right arrow
					if (v) {
						switch (curloc) {
							case 'm1':
//								minutetohour($obj);
								minutetohour($obj,1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'm2':
								return false;
								break;
							case 'm3':
								minutetohour($obj,1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'h1':
								hourtohour($obj);
								break;
							case 'h2':
								hourtominute($obj);
								break;
						}
					}
					else {
						divnext($obj);
					}
					break;

				case 40: // down arrow
					if(v) {
						divnext($obj);
					}
					else {
						switch (curloc) {
							case 'm1':
//								minutetohour($obj);
								minutetohour($obj,1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'm2':
								return false;
								break;
							case 'm3':
								minutetohour($obj,1);	// 5.9.27.3 (2017/12/22)
								break;
							case 'h1':
								hourtohour($obj);
								break;
							case 'h2':
								hourtominute($obj);
								break;
						}
					}
					break;

				case 13: // return
					eval(divtype + 'div_click($obj)');
					break;

				default:
					return true;
			}

		return false;

		}

	return false;
	});

	function errorcheck(settings) {
		if (settings.starthour >= settings.endhour) {
			alert('Error - start hour must be less than end hour.');
			return false;
		}
		else if (60 % settings.minutedivisions != 0) {
			alert('Error - param minutedivisions must divide evenly into 60.');
			return false;
		}
	}

	return this;

}

$(function(){
	if($.fn.ogClockpicker){
		$(document).ready(function(){ $(".clockpick").ogClockpicker(); });
	}
});

/********************************************************************************/
/* 曖昧ﾋﾟｯｶｰ																	*/
/*																				*/
/* AIMAI_xxxのid属性を持つﾀｸﾞを見つけて､xxxのvalue値の％付加を行います｡			*/
/* openGion的には､ｶﾗﾑﾀｸﾞに､aimai属性を設定することで､関連するﾀｸﾞを出力します｡	*/
/*	0/null : 何もなし(処理的には1,2,3以外とする)								*/
/*	1 : 前方一致％																*/
/*	2 : ％後方一致																*/
/*	3 : ％前後曖昧％															*/
/*																				*/
/* @og.rev 6.2.0.0 (2015/02/28) 新規作成										*/
/* @og.rev 6.5.0.0 (2016/09/30) 文字列の長さが､maxlengthの場合は､% を追加しない｡*/
/* @og.rev 8.5.0.0 (2023/05/12) ﾌﾟﾙﾀﾞｳﾝの場合、値に % が付与されて消える不具合	*/
/********************************************************************************/
function likeComp( _tgtName ){
	var _orgTagName = _tgtName.substring(6);									// 'AIMAI_' の文字数
	var _likePtn	 = $("#" + _tgtName ).attr('aimaiType');
	var _orgTagValue = $("#" + _orgTagName ).val();

	// 8.5.0.0 (2023/05/12) Add
	if( _orgTagValue == null || _orgTagValue == "" ) { return; }

	_orgTagValue	 = _orgTagValue.replace(/^%+|%+$/g, "");
	var _orgMaxLen	 = $("#" + _orgTagName ).attr('maxlength');						// 6.5.0.0 (2016/09/30)

//	if( _orgTagValue != "" ){
//	if( _orgTagValue != "" &&
//		(_orgMaxLen == null || _orgTagValue.length < parseInt( _orgMaxLen, 10 ) ) ) {	// 6.5.0.0 (2016/09/30)
	if( _orgMaxLen == null || _orgTagValue.length < parseInt( _orgMaxLen, 10 ) ) {		// 8.5.0.0 (2023/05/12) Modify
		switch( _likePtn ){
			case "1": _orgTagValue =	   _orgTagValue + "%";	break;
			case "2": _orgTagValue = "%" + _orgTagValue;		break;
			case "3": _orgTagValue = "%" + _orgTagValue + "%";	break;
		}
	}

	$("#" + _orgTagName ).val( _orgTagValue );
}

/* onSubmit時に自動実行 */
// 8.4.3.0 (2023/03/31) jQuery.fn.submit() event shorthand is deprecated
$(function(){
//	$("form").submit(function() {
	$("form").on("submit",function() {
		$("[id^='AIMAI_']").each( function(){likeComp(this.id);} );
	});
});

/********************************************************************************/
/* 曖昧ﾋﾟｯｶｰ																	*/
/* jQueryのﾌﾟﾗｸﾞｲﾝ																*/
/*																				*/
/* @og.rev 5.8.4.1 (2015/02/21) 新規作成(6.2.0.0)								*/
/* @og.rev 8.1.0.4 (2022/01/28) aimai表記のｱｲｺﾝ使用(ICON_DIRを使用)				*/
/* @og.rev 8.1.2.3 (2022/04/12) 曖昧ｱｲｺﾝDIRを絶対ﾊﾟｽに変更(問合・ﾄﾗﾌﾞﾙ 43100-220411-01)	*/
/* @og.rev 8.4.3.0 (2023/03/31) jQuery1.9 以降は、live が廃止 …修正漏れ		*/
/********************************************************************************/
$.fn.aimaiPickerOg = function(options) {
	// この文字列が順に0,1,2,3という扱いにいなる。
	var defaults = {
//		iconDir: '../icon/' ,													// 8.1.0.4 (2022/01/28) Add 8.1.2.3 (2022/04/12) Modify
		iconDir: ICON_ADRS ,
//		texts: [' V '		, ' V*'		  , '*V '		, '*V*'],				// 8.1.0.4 (2022/01/28) Modify
		icons: ['aimai0.png', 'aimai1.png', 'aimai2.png', 'aimai3.png'] ,
		titls: ['完全一致'  , '前方一致'  , '後方一致'  , '前後曖昧']			// 日本語はリソース化しなければ…
	};

	var opts = $.extend(defaults, options);

	return this.each(function() {
		var txt = $(this);
		var prefix = 'PIC_' + txt.attr('id').replace(/-/g, '') + '_';

		var textsMarkUp = '';
		// ここでピッカーの中身のタグを作成
//		for(var i = 0; i < opts.texts.length; i++){								// 8.1.0.4 (2022/01/28) Modify
		for(var i = 0; i < opts.icons.length; i++){
			var titl = opts.titls[i];
//			var item = opts.texts[i];											// 8.1.0.4 (2022/01/28) Modify
			var itemIcon = '<img src="' + opts.iconDir + opts.icons[i] + '" alt="' + titl + '">' ;
			textsMarkUp += '<span id="'
								+ prefix + 'text-' + i
								+ '" class="text-box"'
								+ '" title="' + titl + '">'
//								+ '(' + item + ') </span>';						// 8.1.0.4 (2022/01/28) Modify
								+ ' ' + itemIcon + ' ' + '</span>';
		}

		// ピッカーそのものを作成
		var box = $('<div id="'
						+ prefix
						+ 'aimai-picker" class="aimai-picker" style="position: absolute; left: 0px; top: 0px;">'
						+ textsMarkUp
						+ '<div style="clear: both;"></div></div>');

		$('body').append(box);
		box.hide();

		// ピッカークリック時の挙動
		// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//		box.find('span.text-box').click(function() {
		box.find('span.text-box').on("click",function() {
			var indx = this.id.substr(this.id.indexOf('-') + 1);
			txt.attr( 'aimaiType',indx );
			txt.attr( 'title',opts.titls[indx] );
//			txt.text( opts.texts[indx] );										// 8.1.0.4 (2022/01/28) Modify
			txt.children('img').attr( 'src', opts.iconDir + opts.icons[indx] );
			txt.blur();
			hideBox(box);
		});

		// 以下、ボックス制御。気にしなくて良い
//		$('body').live('click', function() {
		$('body').on('click', function() {			// 8.4.3.0 (2023/03/31) jQuery1.9 以降は、live が廃止 …修正漏れ
			hideBox(box);
		});

		// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//		box.click(function(event) {
		box.on("click",function(event) {
			event.stopPropagation();
		});

		var positionAndShowBox = function(box) {
			var pos = txt.offset();
			var left = pos.left + txt.outerWidth() - box.outerWidth();
			if (left < pos.left) left = pos.left;
			box.css({ left: left, top: (pos.top + txt.outerHeight()) });
			showBox(box);
		}

		// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//		txt.click(function(event) {
		txt.on("click",function(event) {
			event.stopPropagation();
			if (!txt.is('input')) {
				positionAndShowBox(box);
			}
		});

		// 8.4.3.0 (2023/03/31) jQuery.fn.focus() event shorthand is deprecated
//		txt.focus(function() {
		txt.on("focus",function() {
			positionAndShowBox(box);
		});

		function hideBox(box) {
			if (opts.hideEffect == 'fade')
				box.fadeOut();
			else if (opts.hideEffect == 'slide')
				box.slideUp();
			else
				box.hide();
		}

		function showBox(box) {
			if (opts.showEffect == 'fade')
				box.fadeIn();
			else if (opts.showEffect == 'slide')
				box.slideDown();
			else
				box.show();
		}
	});
};

/* aimaiPicker自動セット */
$(function(){ if($.fn.aimaiPickerOg){ $('.aimaiClm').aimaiPickerOg(); }});

/* 引数の options に値をセットすると、初期値を上書きできる
$(function(){ if($.fn.aimaiPickerOg){ $('.aimaiClm').aimaiPickerOg( {iconDir:'../customIcon/'} ); }});
*/

/*
 * glDatePicker v2.0
 * http://glad.github.com/glDatePicker/
 * カレンダーピッカー
 *
 * この処理は、calendar3.js として、別に管理しています。
 *
 * og.rev 5.8.9.0 (2015/08/07)
*/

/*
 * multipleのリストボックスで、初期選択されていた場合にその位置にスクロールします。
 * optionの高さが取れなかったので、sizeから割り出しています。
 *
 * @og.rev 5.9.4.5 (2016/01/29) 新規作成
 */
function selectScroll(_tgt){
		var size = 4;
		if( _tgt.getAttribute('size') ){ size= _tgt.getAttribute('size');}
		var _child = _tgt.options;
		for(var i=0; i<_child.length; i++){
			if(_child[i].selected){
				// 親がグループの場合のみ
				if( _child[i].parentNode.tagName.toUpperCase() == 'OPTGROUP'){
					 i += $(_child[i].parentNode).prev().length;

				}
				var firstSelected = i * ($(_tgt).height()/size);
				break;
			}
		}
		$(_tgt).scrollTop(firstSelected);
	}

// マルチのセレクトに対して画面ロード時に実行する
$(function(){
	$('select[multiple]').each(function(){ selectScroll(this); });
});

/********************************************************************************/
/* dateFeedRtn																	*/
/* 日付送り戻し機能を追加します。												*/
/*																				*/
/* 第1引数は､分類を指定します｡													*/
/*  ･Y   ：年の形を指定します｡													*/
/*  ･YM  ：年月の形を指定します｡												*/
/*  ･YMD ：年月日の形を指定します｡												*/
/* 第2引数は､識別名を指定します｡												*/
/* 第3引数は､初期値を指定します｡												*/
/* 第4引数は､日付についての加減算処理を行うためのｺﾏﾝﾄﾞを指定します｡				*/
/*  ･SYXX ：年の最初の日付を指定の分だけ進めます｡(SY-1なら先年の1月1日、SY1なら翌年の1月1日)	*/
/*  ･SDXX ：月の最初の日付を指定の分だけ進めます｡(SD-1なら先月の1日、SD1なら翌月の1日)			*/
/*  ･SWXX ：週初め(月曜日)を指定の分だけ進めます｡(SW-1なら先週の月曜日、SW1なら翌週の月曜日)	*/
/*  ･EYXX ：年の最後の日付を指定の分だけ進めます｡(EY-1なら先年の年末、EY1なら翌年の年末)		*/
/*  ･EDXX ：月の最後の日付を指定の分だけ進めます｡(ED-1なら先月の月末、ED1なら翌月の月末)		*/
/*  ･EWXX ：週末(日曜日)を指定の分だけ進めます｡(EW-1なら先週の日曜日、EW1なら翌週の日曜日)		*/
/*  ･YXX  ：年を指定の分だけ進めます｡(Y-1なら1年前､Y1なら1年後)					*/
/*  ･MXX  ：月を指定の分だけ進めます｡(M-1なら1月前､M1なら1月後)					*/
/*  ･DXX  ：日を指定の分だけ進めます｡(D-1なら1日前､D1なら1日後)					*/
/*  ※ 数字がｾﾞﾛのｺﾏﾝﾄﾞは初期化します｡											*/
/*  ※ 数字がないｺﾏﾝﾄﾞはｻｰﾊﾞｰ上のｼｽﾃﾑ日付をｾｯﾄします｡							*/
/* 第5引数は､検索ﾎﾞﾀﾝを押すか押さないか[true/false]を指定します｡ (初期値:false)	*/
/*																				*/
/* @og.rev 8.0.2.0 (2021/11/30) 新規作成										*/
/********************************************************************************/
function dateFeedRtn(_cat ,_tgtid, _dfVal, _prm, _isSubm) {
	var _dtStr, _val;
	var _cnt = parseInt(_prm.match(/[+-]?\d+/g));

	// システム日付をセットします。(例：D)
//	if( !$.isNumeric(_cnt)) {
	if( !isNumeric(_cnt)) {			// 8.4.3.0 (2023/03/31) jQuery.isNumeric() is deprecated
		_dtStr = _getSysDate(_cat);
	// 初期値をセットします。(例：D0)
	} else if( _cnt == 0 ) {
		_dtStr = ( _dfVal ) ? _dfVal : _getSysDate(_cat);
	// 日付加減算を行います。(例：D-1 or D+1)
	} else {
		_val = $("#"+_tgtid).val().replace(/\//g,"");
		if( _val ) {
			// 年月日の形で、入力値が年月の場合等は処理を行いません。
			if( (_cat == 'Y'   && _val.length == 4)
			 || (_cat == 'YM'  && _val.length == 6)
			 || (_cat == 'YMD' && _val.length == 8) )
			{
				if( _isDate(_cat, _val) ) {
					_dtStr = _addDate(_cat, _val, _prm, _cnt);
				}
			}
		}
	}

	// 識別名に値をセットします。
	if( _dtStr ) {
		// 8.4.3.0 (2023/03/31) jQuery.fn.change() event shorthand is deprecated
//		$("#"+_tgtid).val(_dtStr).change();
		$("#"+_tgtid).val(_dtStr).trigger( "change" );
		if( _isSubm == 'true' ) {
			// 検索ボタンを押します。
			// 8.4.3.0 (2023/03/31) jQuery.fn.click() event shorthand is deprecated
//			$("#queryButtonSubmit").click();
			$("#queryButtonSubmit").trigger("click");
		}
	}
}

// 日付加減算
var _addDate = (function(_cat, _val, _prm, _cnt) {
	var _newDt, _newCnt, _fmtVal;

	// 文字列を日付オブジェクトに変換します。(IE対応)
	switch (_cat) {
		case 'Y'  : _fmtVal = _val; break;
		case 'YM' : _fmtVal = _val.replace(/(\d{4})(\d{2})/, "$1/$2") + '/01'; break;
		default   : _fmtVal = _val.replace(/(\d{4})(\d{2})(\d{2})/, "$1/$2/$3");
	}
	var _dt = new Date(_fmtVal);
	var _y = _dt.getFullYear();
	var _m = _dt.getMonth();
	var _d = _dt.getDate();

	// SYXX ：年の最初の日付を指定の分だけ進めます。(SY-1なら先年の1月1日、SY1なら翌年の1月1日)
	if( !_prm.indexOf( 'SY' ) ) {
		_newCnt = _reorgCnt(_prm, _dt, _cnt, _m);
		_dt.setFullYear(_y + _newCnt);
		_dt = new Date(_dt.getFullYear() , 0, 1);
	// SDXX ：月の最初の日付を指定の分だけ進めます。(SD-1なら先月の1日、SD1なら翌月の1日)
	} else if( !_prm.indexOf( 'SD' ) ) {
		_newCnt = _reorgCnt(_prm, _dt, _cnt, _d-1);
		_dt.setMonth(_m + _newCnt);
		_dt = new Date(_dt.getFullYear(), _dt.getMonth(), 1);
	// SWXX ：週初め(月曜日)を指定の分だけ進めます。(SW-1なら先週の月曜日、SW1なら翌週の月曜日)
	} else if( !_prm.indexOf( 'SW' ) ) {
		// 開始日を月曜日(MONDAY=1)にセットします。
		// 指定日が日曜日の場合は、月曜日まで戻します。
		_newCnt = _reorgCnt(_prm, _dt, _cnt, 1);
		_dt.setDate(_d - _dt.getDay() + (_dt.getDay() == 0 ? -6 : 1) + (7 * _newCnt));
	// EYXX ：年の最後の日付を指定の分だけ進めます。(EY-1なら先年の年末、EY1なら翌年の年末)
	} else if( !_prm.indexOf( 'EY' ) ) {
		_newCnt = _reorgCnt(_prm, _dt, _cnt, 0);
		_dt.setFullYear(_y + _newCnt);
		_dt = new Date(_dt.getFullYear(), 12, 0);
	// EDXX ：月の最後の日付を指定の分だけ進めます。(ED-1なら先月の月末、ED1なら翌月の月末)
	} else if( !_prm.indexOf( 'ED' ) ) {
		// 2021/01/31 の翌月の最終日が 2021/03/31 となるのは、本来翌月になる 2021/02/28 までしかない為
		// 指定日の最後の日付を取得します。
		_newDt = new Date(_y, _m+1, 0);
		// 指定日の最初の日付にセットします。
		_dt = new Date(_y, _m, 1);
		_newCnt = _reorgCnt(_prm, _dt, _cnt, _newDt.getDate()-_d);
		_dt.setMonth(_m + _newCnt);
		_dt = new Date(_dt.getFullYear(), _dt.getMonth()+1, 0);
	// EWXX ：週末(日曜日)を指定の分だけ進めます。(EW-1なら先週の日曜日、EW1なら翌週の日曜日)
	} else if( !_prm.indexOf( 'EW' ) ) {
		// 終了日を日曜日(SUNDAY=0)がにセットします。
		_newCnt = _reorgCnt(_prm, _dt, _cnt, 0);
		_dt.setDate(_d - _dt.getDay() + (7 * _newCnt));
	// YXX ：年を指定の分だけ進めます。(Y-1なら1年前、Y1なら1年後)
	} else if( !_prm.indexOf( 'Y' ) ) {
		_dt.setFullYear(_y + _cnt);
	// MXX ：月を指定の分だけ進めます。(M-1なら1月前、M1なら1月後)
	} else if( !_prm.indexOf( 'M' ) ) {
		// 2021/01/31 の翌月が 2021/03/03 となるのは、31日で計算されて月が繰り上がる為
		_newCnt = ( _cnt > 0 ) ? 1 : -1;
		for (let i = 0; i < Math.abs(_cnt); i++) {
			if( i > 0 ) {
				var _y = _dt.getFullYear();
				var _m = _dt.getMonth();
				var _d = _dt.getDate();
			}
			// 翌月の最終日を取得します。
			if( _cnt > 0) {
				_mNew = _m+2;
				_dNew = new Date(_y, _mNew, 0).getDate();
			// 前月の最終日を取得します。
			} else {
				_mNew = _m;
				_dNew = new Date(_y, _mNew, 0).getDate();
			}
			// 当月の最後の日付の場合は、翌月／前月の最後の日付を取得します。
			if( _d > _dNew ) {
				_dt = new Date(_y, _mNew, 0);
			} else {
				_dt.setMonth(_m + _newCnt);
			}
		}
	// DXX ：日を指定の分だけ進めます。(D-1なら1日前、D1なら1日後)
	} else if( !_prm.indexOf( 'D' ) ) {
		_dt.setDate(_d + _cnt);
	}

	return _fmtDate(_cat, _dt, _val) ;
})

// システム日付取得
var _getSysDate = (function(_cat) {
	var _dt = new Date();
	return _fmtDate(_cat, _dt, null);
})

// 日付フォーマット(YYYYMMDD形式)
var _fmtDate = (function(_cat, _dt, _val) {
	var _dtStr;
	var _y = _dt.getFullYear();
	var _m = ("00" + (_dt.getMonth()+1)).slice(-2);
	var _d = ("00" + _dt.getDate()).slice(-2);

	// 日付オブジェクトを文字列に変換します。
	switch (_cat) {
		case 'Y'  : _dtStr = _y; break;
		case 'YM' : _dtStr = _y + _m; break;
		default   : _dtStr = _y + _m + _d;
	}
	return _isDate(_cat, _dtStr) ? _dtStr : _val;
})

// 日付の妥当性チェック
var _isDate = (function(_cat, _dtStr) {
	var _fDtStr;
	// 文字列を日付オブジェクトに変換します。(IE対応)
	switch (_cat) {
		case 'Y'  : _fDtStr = _dtStr + '/01/01'; break;
		case 'YM' : _fDtStr = _dtStr.replace(/(\d{4})(\d{2})/, "$1/$2") + '/01'; break;
		default   : _fDtStr = _dtStr.replace(/(\d{4})(\d{2})(\d{2})/, "$1/$2/$3");
	}

	var _dt = new Date(_fDtStr);
	// 日付の妥当性チェックを行います。
	if(	_dt.getFullYear() != parseInt(_fDtStr.split("/")[0])
		|| _dt.getMonth() != parseInt(_fDtStr.split("/")[1]) - 1
		|| _dt.getDate()  != parseInt(_fDtStr.split("/")[2])	)
	{
		return false;
	} else {
		return true;
	}
})

// 加減算数字の再編成
var _reorgCnt = (function(_prm, _dt, _cnt, _u) {
	var _newCnt;
	// 週
	if( ~_prm.indexOf( 'W' ) ) {
		if( _dt.getDay() != _u ) {
			if( Math.abs(_cnt) == 1 ){
				_newCnt = ( _cnt > 0 ) ? _cnt : _cnt +1;
			}
		}
	// 年／月
	} else {
		// 最初の日付
		if( !_prm.indexOf( 'S' ) ) {
			if( Math.abs(_cnt) == 1 ){
				_newCnt = ( _cnt > 0 ) ? _cnt : ( _u == 0 ) ? -1 : 0;
			}
		// 最後の日付
		} else {
			if( Math.abs(_cnt) == 1 ){
				_newCnt = ( _cnt > 0 ) ? ( _u == 0 ) ? _cnt : 0 : -1;
			}
		}
	}
	return ( _newCnt == null ) ? _cnt : _newCnt;
})
