/* -----------------------------------------------------------
 スクリーンロックするためのjsファイル。
-------------------------------------------------------------- */
//処理中画像の配列
var gifAnimeArray = new Array(4);

/**
 * imgオブジェクトの生成
 */
function initScreenLock() {
	for (i = 0; i < gifAnimeArray.length; i++) {
		var gifimg = document.createElement("img");
		gifimg.src = "../images/inProcess" + (i + 1) + ".gif";
		if (i == 0) {
			gifimg.style.visibility = "visible";
		}
		else {
			gifimg.style.visibility = "hidden";
		}
		gifAnimeArray[i] = gifimg;
	}
}

var ScreenLock = function () {
	//画面を覆うdiv
	var panelDiv;
	//画面を覆うiframe
	var panelIFrame;
	
	/**
	 * 作業中パネルを表示し、サブミットする。
	 * body直下にあるdivのidとnameはwrapperにしてください。
	 * @param formId サブミットするformタグのid属性。
	 * @param actionUrl formタグのaction属性に指定する値。指定する必要はない。
	 */
	this.showInProcessPanel = function (formId, actionUrl) {
		//MEMO: iframeはie6対策。iframeがないとセレクトボックス等は一番上に表示されてしまう。
		panelIFrame = document.createElement("iframe");
		panelIFrame.className = "screenLockDiv";
		panelDiv = document.createElement("div");
		panelDiv.className = "screenLockDiv";

		resizePanel();	
		//メッセージを挿入
		var panelMsg = document.createElement("span");
		panelMsg.className = "FontVeryLarge fontColorWhite";
		panelMsg.style.fontWeight = "bold";
		panelMsg.appendChild(document.createTextNode("処理中です。しばらくお待ちください。"));
		
		document.body.appendChild(panelIFrame);
		document.body.appendChild(panelDiv);
		document.body.appendChild(panelMsg);
		var i;
		for (i = 0; i < gifAnimeArray.length; i++) {
			document.body.appendChild(gifAnimeArray[i]);
		}
		
		placeCenter(gifAnimeArray);
		placeCenter(panelMsg);
		//5は余裕を持たせるための数字
		var offsetTopVal = gifAnimeArray[0].offsetTop;
		if (parseInt(offsetTopVal) - parseInt(panelMsg.offsetHeight) < 5) {
			panelMsg.style.top = "0px";
			for (i = 0; i < gifAnimeArray.length; i++) {
				gifAnimeArray[i].style.top = (parseInt(panelMsg.offsetHeight) + 5) + "px";
			}
		}
		else {
			for (i = 0; i < gifAnimeArray.length; i++) {
				panelMsg.style.top = (parseInt(offsetTopVal) - parseInt(panelMsg.offsetHeight) - 5) + "px";
			}
		}
		window.scrollTo(0, 0);

		gifAnimeArray[0].style.visibility = "visible";
		setInterval(changeImage, 1000);
	
		//ウィンドウのリサイズイベントにオブジェクト(関数)をセット
		window.onresize = resizePanel;
	
		//サブミット
		var formObj = document.getElementById(formId);
		if (actionUrl) {
			formObj.action = actionUrl;
		}
		try {
			formObj.submit();
		}
		catch (e) {
			var messageDiv = document.getElementById("ErrorMessageTag_errorMessagesId");
			var oLi = messageDiv.childNodes[0];
			if(oLi != null){
				messageDiv.removeChild(oLi);
			}
			var ulObj = document.createElement("ul");
			var liObj = document.createElement("li");
			liObj.appendChild(document.createTextNode("指定されたファイルは存在しません。"));
			ulObj.appendChild(liObj);
			messageDiv.appendChild(ulObj);
			
			panelDiv.style.visibility = "hidden";
			panelIFrame.style.visibility = "hidden";
			panelMsg.style.visibility = "hidden";
			for (i = 0; i < gifAnimeArray.length; i++) {
				gifAnimeArray[i].style.visibility = "hidden";
			}
		}
		
	}
	
	/**
	 * gifAnimeArrayの表示非表示を切り替える。
	 */
	var changeImage = function () {
		var i;
		for (i = 0; i < gifAnimeArray.length; i++) {
			if (gifAnimeArray[i].style.visibility == "visible") {
				if (i == gifAnimeArray.length - 1) {
					gifAnimeArray[0].style.visibility = "visible";
				}
				else {
					gifAnimeArray[i + 1].style.visibility = "visible";
				}
				gifAnimeArray[i].style.visibility = "hidden";
				break;
			}
		}
	}
	
	/**
	 * パネルの高さと幅を決定する.
	 */
	var resizePanel = function () {
		var wrapObj = document.getElementById("wrapper");
		var sizeObj = getWindowSize();
		
		if (parseInt(wrapObj.offsetWidth) < sizeObj.width) {
			panelDiv.style.width = sizeObj.width + "px";
			panelIFrame.style.width = sizeObj.width + "px";
		}
		else {
			panelDiv.style.width = wrapObj.offsetWidth + "px";
			panelIFrame.style.width = wrapObj.offsetWidth + "px";
		}
		
		if (parseInt(wrapObj.offsetHeight) < sizeObj.height) {
			panelDiv.style.height = sizeObj.height + "px";
			panelIFrame.style.height = sizeObj.height + "px";
		}
		else {
			panelDiv.style.height = wrapObj.offsetHeight + "px";
			panelIFrame.style.height = wrapObj.offsetHeight + "px";
		}
		//divの描画の限界が高さ33000px(IE6)のようだ。
		//高さが30000pxを超えたら、高さを30000pxにして、表示座標を調節する。
		if (parseInt(panelDiv.offsetHeight) - 30000 >= 0) {
			panelDiv.style.height = "30000px";
			panelIFrame.style.height = "30000px";
		}
	}
	
	
	/**
	 * ウィンドウのサイズを取得する.
	 * @return サイズオブジェクト（プロパティはwidthとheight）
	 */
	var getWindowSize = function () {
		/* サイズを格納するオブジェクトを生成 */
		var obj = new Object();
		/* Internet Explorerの場合 */
		if( document.uniqueID ) {
			//NOTE: 標準モードの場合はdocument.documentElement.clientWidth
			obj.width = document.body.clientWidth;
			obj.height = document.body.clientHeight;
			/* それ以外の場合 */
		} else {
			obj.width = window.innerWidth;
			obj.height = window.innerHeight;
		}
		/* サイズオブジェクトを返す */
		return obj;
	}
	
	/**
	 * 要素を画面中央に配置する.
	 * @param HTML要素。またはHTML要素の配列 
	 */
	var placeCenter = function (elm) {
		if (elm instanceof Array) {
			var i;
			for (i = 0; i < elm.length; i++) {
				elm[i].style.position = "absolute";
				var size = getWindowSize();
				var left = ( size.width - elm[i].offsetWidth ) / 2;
				elm[i].style.left = parseInt(left) + 'px';
				var top = ( size.height - elm[i].offsetHeight ) / 2;
				elm[i].style.top = parseInt(top) + 'px';
			}
		}
		else {
			elm.style.position = "absolute";
			var size = getWindowSize();
			var left = ( size.width - elm.offsetWidth ) / 2;
			elm.style.left = parseInt(left) + 'px';
			var top = ( size.height - elm.offsetHeight ) / 2;
			elm.style.top = parseInt(top) + 'px';
		}
	}
}


