//***********************************************************************
// 画面のロック用javascript
// ※画面の操作可能項目を無効化する。(disabled設定)
// ※
// ※ ※commonScript.js のほうに FreezeScreen()というメソッドもあり、
// ※ ※こちらは画面の上に半透明or透明のレイヤーを被せて操作不能とする。
// ※　※差異としては、
// ※ ※　FreezeScreen
// ※ ※　　　iframeでスクロールバーが出ている時にスクロールができない。
// ※ ※　LockScreen
// ※ ※　　　項目をLOOPで回して一々設定していくので、項目数が増えると若干遅い。
// ※ ※　
// ※ ※　基本的にはFreezeScreenを使用する。
// ※　※　スクロールを行う必要がある画面のみ使用
// 
// ※必要なjs ： commonScript.js
//***********************************************************************

var slock_flg = false;           //ロック中フラグ

var slock_focusOwner = null;     //フォーカス項目
var slock_jyogaiObjs = null;     //制御対象外項目のリスト
var slock_disabledObjs = null;   //元々使用不可な項目のリスト

//***********************************************************************
// LockScreen / 画面のロック
// @param jyogaiObjs 制御対象外の項目　　※省略可能
// @return true=ロック成功  false=すでにロック中だった
//***********************************************************************
function LockScreen( jyogaiObjs ) {
    if( slock_flg ) {
        return false; //すでにロック中だったらfalseを返す
    }
    slock_flg = true;   //ロックフラグ：ON

    //現フォーカス部品を保持(unlockで使用)
    slock_focusOwner = document.activeElement;
    //制御対象外項目を保持
    slock_jyogaiObjs = jyogaiObjs;

    //項目を無効化
    slock_disabledObjs = lockAllControl( slock_jyogaiObjs );

    return true;
}

//***********************************************************************
// UnLockScreen / LockScreenによる無効化を解除
// @return なし
//***********************************************************************
function UnLockScreen() {
	//除外項目をまとめる
	var jyogai = new Array();

    if( slock_jyogaiObjs != null ) {   //lock時に渡された除外項目
        [].push.apply(jyogai, slock_jyogaiObjs);
    }
    if( slock_disabledObjs != null ) { //元々disabledだった項目
        [].push.apply(jyogai, slock_disabledObjs);
    }

	//項目の無効化を解除
	unLockAllControl( jyogai );

    //フォーカスを戻す
    if( slock_focusOwner != null ) {
        slock_focusOwner.focus();
    }

    slock_jyogaiObjs   = null;
    slock_focusOwner   = null;
    slock_disabledObjs = null;

    slock_flg = false;
}

//***********************************************************************
// setLockScreenDisabledObj / LockScreen用の"元々使用不可な項目のリスト"に対する追加/削除
// @param obj 対象項目
// @param disabled true="元々使用不可な項目のリスト"に追加  false=リストから削除
// @return なし
// 
// ※LockScreen() から UnLockScreen() までの間に、項目を使用不可にしたとしても、
// ※そのままだと UnLockScreen() で使用可能に戻されてしまう。
// ※LockScreen() の最中に使用制限を変更する場合は、このメソッドで
// ※"元々使用不可な項目のリスト" に追加/削除する。
// ※（リストに追加すると、UnLockScreen()が呼ばれてもdisabledのままとなる）
//***********************************************************************
function setLockScreenDisabledObj( obj, disabled ) {
    //unlock時に使用可に戻すかどうかのリストに追加/削除
    //追加
    if( disabled ) {
    	if( slock_disabledObjs == null ) {
    		slock_disabledObjs = new Array();
    	}
    	slock_disabledObjs.push( obj );
    }
    //削除
    else {
        if( slock_disabledObjs == null ) {
            return;
        }
        for( var i = 0, len_disableds = slock_disabledObjs.length; i < len_disableds; i++ ) {
            if( obj == slock_disabledObjs[i] ) {
                slock_disabledObjs[i] = null;
                return;
            }
        }
    }
}
