﻿/*
 ===================================================================================================
 *
 * 									< 共通ＪａｖａＳｃｒｉｐｔ >
 *
 * -Function List-
 
 * focusCtl					コントロールにフォーカスをあてる
 * OpenNewWindow			ポップアップウィンドウの立ち上げ
 * DeleteMsg				削除時の確認メッセージ
 ===================================================================================================
 */
//ページ内フラグ
var backSpaceEnableFlag = false;
var clickedFlag = false;
var unloadHandle = true;
var enterEnableFlag = false;
var clickedFlag = false;


// Enter制御フラグセット
function EnterEnable(flag){
	enterEnableFlag = flag;
}

//マウスイベントのフック
//コンテキストメニューで戻るの防止
function MouseHook(){
	if(event.button & 2){
//		alert('右クリックの機能は使用できません');
		return false;
	}
}

//キーイベントのフック
//戻ると多重起動の防止
function KeyHook(){
	var k = event.keyCode;
	var tag = '';
	if (event.srcElement)
		if (event.srcElement.tagName)
			tag = event.srcElement.tagName.toLowerCase();
	var typ = '';
	if (tag=='input')
		typ = event.srcElement.getAttribute('type').toLowerCase();
//alert(k);
	if (k==8 && !backSpaceEnableFlag){
//		alert('前の画面に戻るには、用意されたボタンを使ってください。');
		return false;
	}
	if (k==37 && event.altKey){
//		alert('前の画面に戻るには、用意されたボタンを使ってください。');
		return false;
	}
	if (k==116){
		try{
			event.keyCode = 36;	//再読込防止、キーをすりかえる
		}catch(e){}
		return false;
	}
//	if (k==122){
//		try{
//			event.keyCode = 36;	//全画面防止、キーをすりかえる
//		catch(e){}
//		return false;
//	}
	if (k==93){	//menu
//		alert('コンテキストメニューは使用できません');
		return false;
	}
	if (k==121){	//menu
		if(event.shiftKey){
//			alert('コンテキストメニューは使用できません');
			return false;
		}
	}
	if (k==78 || k==72 || k==76 || k==69 || k==82 || k==73){
		if(event.ctrlKey){	return false; }
	}
	if (k==13 && !enterEnableFlag){
		if ((tag=='a') || (tag=='textarea') || (typ=='file') || (typ=='button') || (typ=='submit') || (typ=='reset')) {
			if (typ=='file') return false;
		} else {
			try {
				event.keyCode=9;
			} catch(e){return false;}
		}
	}
	//	ファンクションキー制御
	if(112 <= k & k <= 123) {
		if(event.altKey==false){
			if(typeof(window.GetFunctionKeyObject) == 'function'){
				var obj = GetFunctionKeyObject(k - 111);
				if(obj != null){
					submitFlag = true; //実行されるので、サブミットフラグを立てる
					//obj.focus();
					var ret = false;
					try{ret=obj.click()}catch(e){}
					if(ret==false) {return false;}
				}
			}
		}
		try {
			event.keyCode = 0;
		} catch(e){return false;}
		return false;
	}
	//	はい／いいえボタン制御(ダイアログ用)
	if(k == 78 || k == 89 || k == 37 || k == 39) {
		if(event.altKey==false){
			if(typeof(window.GetYesNoKeyObject) == 'function'){
				var obj = GetYesNoKeyObject(k);
				if(obj != null){
					submitFlag = true; //実行されるので、サブミットフラグを立てる
					//obj.focus();
					if(k == 78 || k == 89) {
						if(obj.click()==false) {return false;}
					}else if(k == 37 || k == 39) {
						obj.focus();
					}
				}
				try {
					event.keyCode = 0;
				} catch(e){return false;}
				return false;
			}
		}
	}
	return true;
}

//ダブルクリック防御
function PreventDblClick(){
	if ( IsClicked() )	return false;
	SetClicked(true)
	return true;
}

//ダブルクリック防止のため、クリックフラグを変更する
//クリックされていない状態がfalse
function SetClicked(flag){
	var beforeFlag = clickedFlag;
	if (flag == '')	clickedFlag = false;
	else		clickedFlag = flag;
	return beforeFlag;
}

//@return クリックされていればtrue
function IsClicked () {
	return clickedFlag;
}

// 戻る制御フラグセット
function BackSpaceEnable(flag){
	backSpaceEnableFlag = flag;
}

//Unloadのフック
function UnloadHook(){
	if ( unloadHandle == false ){	return;}
	var url = "logout.aspx";
	var props = "directories=no,location=no,menubar=no,width=400,height=200";
	var hWin = window.open(url,"_blank",props);
	hWin.focus();
}

//UnloadフックのON/OFF
function UnloadHookEnable(flag){
	unloadHandle = flag;
}

if(document.all){
	// IEでDHTML対応であればイベントフックをセット
//	document.onmousedown = MouseHook;
	document.onkeydown = KeyHook;
}

/***************************************************************************************************
*　　　：focusCtl
*　　　：コントロールにフォーカスをあてる
*引　数：id				- フォーカスをセットするコントロールのID
*備　考：フォーカスを当てるコントロールを画面中央へスクロールする機能付き
*更　新：ターゲットコントロールがDisabledの場合はフォーカスをセットしない
***************************************************************************************************/
function focusCtl(id) {
	var ctl = document.all(id) ;
	if (!ctl) return ;
	if (ctl.length) {
		var ctl2;
		for (var i=0;i<ctl.length;i++) {
			if (ctl[i].tagName.toLowerCase()=='input') {
				if (ctl2) ctl2=ctl[i];
				if (ctl[i].getAttribute('type').toLowerCase()=='radio') {
					if (ctl[i].checked) {
						ctl2=ctl[i];
						break;
					}
				}
				ctl=ctl2;
			}
		}
	}
	var winmidpt = document.body.offsetHeight / 2 ;
	var ctlpt = getTop(ctl)
	if (ctlpt > winmidpt) scrollTo(0,ctlpt-winmidpt) ;
	if ( !ctl.readOnly ) ctl.focus() ;
}
function getTop(ctl) {
	if (ctl.nodeName == 'BODY') return 0 ;
	return ctl.offsetTop + getTop(ctl.offsetParent) ;
}

/***************************************************************************************************
*　　　：OpenModalDialog
*　　　：モーダルダイアログウィンドウの立ち上げ
*引　数：vsWinName		- ウィンドウ名
*　　　：vsUrl			- URL
*更　新：
***************************************************************************************************/
function OpenModalDialog (vsWinName, vsUrl, viHeight, viWidth, vCmd) {
	if (document.all) {
		var ret = window.showModalDialog(vsUrl, null, 'status:no;scroll:no;resizable:yes;dialogTop:0;dailogLeft:0;dialogWidth:'+viWidth+'px;dialogHeight:'+viHeight+'px;')
		if (ret != null) {
			var i1 = 0;
			for (var i2 = 5; i2 < arguments.length; i2++) {
				if (arguments[i2]) {
					if (document.getElementById(arguments[i2])) {
						document.getElementById(arguments[i2]).value = ret[i1];
					}
				}
				i1++;
			}
			if (vCmd) {
				if (document.getElementById(vCmd)) {
					document.getElementById(vCmd).click();
				}
			}
		}
	}
	//var lsOpt = 'Top=0, Left=0, toolbar=no, menubar=no, location=no, status=no, scrollbars=no, resizable=yes, Height=' + viHeight + ',Width=' + viWidth ;
	//var loWin = window.open(vsUrl,vsWinName,lsOpt) ;
	//loWin.focus();
}

/***************************************************************************************************
*　　　：GetModalDialogReturnArray
*　　　：モーダルダイアログウィンドウから戻り値を取得
*引　数：vsWinName		- ウィンドウ名
*　　　：vsUrl			- URL
*更　新：
***************************************************************************************************/
function GetModalDialogReturnArray (vsUrl, vsPrm, vsOption) {
	var ret = window.showModalDialog(vsUrl,vsPrm,vsOption);
	if (ret == null) {
		ret = new Array('-1');
	} else {
		var i1 = 1;
		for (var i2 = 3; i2 < arguments.length; i2++) {
			if (arguments[i2]) {
				if (document.getElementById(arguments[i2])) {
					document.getElementById(arguments[i2]).value = ret[i1];
				}
			}
			i1++;
		}
	}
	return ret;
}

/***************************************************************************************************
*　　　：OpenNewWindow
*　　　：新規ウィンドウの立ち上げ
*引　数：vsWinName		- ウィンドウ名
*　　　：vsUrl			- URL
*更　新：
***************************************************************************************************/
function OpenNewWindow (vsWinName, vsUrl, viHeight, viWidth, vCmd) {
	var lsOpt = 'Top=0, Left=0, toolbar=no, menubar=no, location=no, status=no, scrollbars=no, resizable=yes, Height=' + viHeight + ',Width=' + viWidth ;
	var loWin = window.open(vsUrl,vsWinName,lsOpt) ;
	loWin.focus();
}

/***************************************************************************************************
*　　　：OpenSrchWindow
*　　　：検索ポップアップウィンドウの立ち上げ
*引　数：vsWinName		- ウィンドウ名
*　　　：vsUrl			- URL
*更　新：
***************************************************************************************************/
function OpenSrchWindow (vsWinName, vsUrl) {
	OpenNewWindow(vsWinName, vsUrl,600,800);
}

/***************************************************************************************************
*　　　：OpenReportWindow
*　　　：帳票ポップアップウィンドウの立ち上げ
*引　数：vsWinName		- ウィンドウ名
*　　　：vsUrl			- URL
*更　新：
***************************************************************************************************/
function OpenReportWindow (vsWinName) {
	var wo = window.open('../REPORT.aspx', vsWinName, 'toolbar=no,location=no,menubar=no,status=no,scrollbars=yes,resizable=yes');
	wo.moveTo(0,0);
	wo.resizeTo(screen.availWidth,screen.availHeight);
	window.opener=true;
	window.close();
}

/***************************************************************************************************
*　　　：KeyHookNumberOnly
*　　　：数値コントロール用キーフック
*引　数：vbMinus		- マイナス許可フラグ
*　　　：vbDot			- ドット許可フラグ
*更　新：
***************************************************************************************************/
function KeyHookNumberOnly(vbMinus, vbDot){
	var k = event.keyCode;
	// Shiftキー+Enterキー
	if ( event.shiftKey && k == 13 ){ return true; }
	// Shiftキー+Tabキー
	if ( event.shiftKey && k == 9 ){ return true; }
	// home
	if ( !event.ctrlKey && k == 36 ){ return true; }
	// end
	if ( !event.ctrlKey && k == 35 ){ return true; }
	// →
	if ( !event.ctrlKey && k == 39 ){ return true; }
	// ←
	if ( !event.ctrlKey && k == 37 ){ return true; }
	// ↑
	if ( !event.ctrlKey && k == 38 ){ return true; }
	// ↓
	if ( !event.ctrlKey && k == 40 ){ return true; }
	// Shiftキー
	if ( event.shiftKey ){ return false; }
	// ctrlキー+c(コピー)
	if ( event.ctrlKey && k == 67 ){ return true; }
	// ctrlキー+x(切り取り)
	if ( event.ctrlKey && k == 88 ){ return true; }
	// ctrlキー+v(貼り付け)
	if ( event.ctrlKey && k == 86 ){ return true; }
	// ctrlキー+a(全選択)
	if ( event.ctrlKey && k == 65 ){ return true; }
	// ctrlキー+z(元に戻す)
	if ( event.ctrlKey && k == 90 ){ return true; }
	// -
	if ( vbMinus && ( k == 109 || k == 189 ) ){ return true; }
	// .
	if ( vbDot && ( k == 110 || k == 190 ) ){ return true; }
	// 0～9	
	if ( 48 <= k && k <= 57){ return true; }
	// 0～9
	if ( 96 <= k && k <= 105){ return true; }
	
	if (! KeyHook()) { return false; }
	
	// BackSpace
	if ( k == 8)	{ return true; }
	// Tabキー
	if ( k == 9)	{ return true; }
	// Enterキー
	if ( k == 13)	{ return true; }
	// Shiftキー
	if ( k == 18)	{ return true; }
	// ←キー
	if ( k == 37)	{ return true; }
	// →キー
	if ( k == 39)	{ return true; }
	// Insertキー
	if ( k == 45)	{ return true; }
	// Deleteキー
	if ( k == 46)	{ return true; }
	
	return false;	
}