﻿/**
 * @fileoverview 画面内の処理が同期通信のみの場合に使用されるJavascript
 */
if (typeof(DDP) == 'undefined') DDP = {};

(function() {
var _delegatedHandler;
var _orgEventArr = new Array();
var _statControl = new Array();
var _browser="";
var _doc = document;
/**
 * 画面コントロールの使用可能・不可能をコントロールする関数。
 * @param e イベント
 */
function _delegatedMethod(e) {
	disableControl();
	var id = null;
	var tgt=null;
	if (_browser=="IE") {
		//IEは引数が飛んでこないのでeventより取得する。
		id = event.srcElement.id;
		tgt = event.srcElement;
	} else {
		//Firefoxでは引数のtarget.idに格納されている。
		try {
			id = e.target.id;
			tgt = e.target;
		} catch(err) {
		}
	}

	if (tgt!=null) {
		tgt.disabled=true;
	}

	var rc = true;
	if (null!=_orgEventArr && id!=null) {
		var func = _orgEventArr[id];
		if (null!=func && typeof(func) != 'undefined') {
			var retValue = func();
			//元々設定されていたスクリプトに戻り値がある場合はそのまま返す。
			if (retValue!=null) {
				rc=retValue;
			}
		}
	}
	
	enableControl();
	if (tgt!=null) {
		tgt.disabled=false;
	}

	return rc;
}
/**
 * イベント発生元のコントロールの値をhiddenに格納する関数。
 */
DDP.setAntiDoubleClickFunctions = function() {
	// inputタグのコレクション分、for文を回す
	var inputArr=_doc.getElementsByTagName("input");
	for(var i=0,iLen=inputArr.length;i<iLen;i++) {
		var inputTag = inputArr.item(i);
		// submitボタン・imageボタンかどうかを調べ、hiddenにイベント発生元の値を格納
		if ((inputTag.type == "submit")||(inputTag.type == "image")) {
			if (inputTag.addEventListener) { 
				// FireFox用
				_browser="FireFox";
				inputTag.addEventListener("click", setHiddenValue, false);
			} else if (inputTag.attachEvent) {
				// IE用
				//オンクリック時のメソッド追加
				_browser="IE";
				inputTag.attachEvent("onclick", setHiddenValue);
			} else {
				inputTag.onclick = setHiddenValue;
			}
		}
	}
	// selectタグのコレクション分、for文を回す
	var selectElmList=_doc.getElementsByTagName("select");
	for(var i=0,sLen=selectElmList.length;i<sLen;i++) {
		var selectTag = selectElmList.item(i);
		if (selectTag.addEventListener) continue;
		//selectタグのものでAutoPostBackがtrueのものだけイベント発生時にdisableにする
		if (selectTag.getAttribute("onchange") != null && selectTag.outerHTML.search("__doPostBack")>0) {
			if (selectTag.addEventListener) { 
				// FireFox用
				selectTag.addEventListener("click", setHiddenValue, false);
			} else if (selectTag.attachEvent) {
				// IE用
				selectTag.attachEvent("onchange", setHiddenValue);
				selectTag.attachEvent("onchange",disableSubmit);
			} else {
				selectTag.onclick = setHiddenValue;
			}
		}
	}
	// anchorタグのコレクション分、for文を回す
	var anchorElmList=_doc.getElementsByTagName("a");
	for(var i=0,aLen=anchorElmList.length;i<aLen;i++) {
		var anchorTag = anchorElmList.item(i);
		var newWindowAttribute = anchorTag.getAttribute("target");
		if (newWindowAttribute != "_blank"&&anchorTag.href.search("__doPostBack")>0) {
			if (anchorTag.addEventListener) { 
				// FireFox用
				anchorTag.addEventListener("click", setHiddenValue, false);
			} else if (anchorTag.attachEvent) {
				// IE用
				anchorTag.attachEvent("onclick", setHiddenValue);
				anchorTag.attachEvent("onclick", disableSubmit);
			} else {
				anchorTag.onclick = setHiddenValue;
			}
		}
	}
	// formタグのコレクション分、for文を回す
	var formElmList=_doc.getElementsByTagName("form");
	for(var i=0,fLen=formElmList.length;i<fLen;i++) {
		var formTag = formElmList.item(i);
		if (formTag.addEventListener) {
			// FireFox用
			formTag.addEventListener("submit", disableSubmit, false);
		} else if (formTag.attachEvent) {
			// IE用
			formTag.attachEvent("onsubmit", disableSubmit);
		} else {
			formTag.onclick = disableSubmit;
		}
	}
}
/**
 * 画面(form)上のすべてのオブジェクトをdisableにする関数。
 */
function disableSubmit() {
	//inputタグの無効化
	var inputArr=_doc.getElementsByTagName('input');
	for(var i=0,iLen=inputArr.length;i<iLen;i++) {
		var inputTag = inputArr.item(i);
		if ((inputTag.type == 'submit')||(inputTag.type == 'image')) {
			inputTag.disabled=true;
		}
	}
	//selectタグの無効化
	var selectArr=_doc.getElementsByTagName('select');
	for(var i=0,sLen=selectArr.length;i<sLen;i++) {
		var elm=selectArr.item(i);
		if (elm.addEventListener) continue;
		if (elm.outerHTML.search("__doPostBack")<0 ) continue;
		elm.disabled=true;
	}
	//anchorタグの無効化
	var anchorArr=_doc.getElementsByTagName('a');
	for(var i=0,aLen=anchorArr.length;i<aLen;i++) {
		var elm=anchorArr.item(i);
		if (elm.href.search("__doPostBack")<0 ) continue;
		elm.disabled=true;
	}
}
/**
 *submitボタンオブジェクトの属性（name、valueなど）をhiddenタグに格納する関数。
 * @param evt イベント
 */
function setHiddenValue(evt) {
  var clickedButton;
  if (evt.target) {
	// FireFox, opera, safari用
	evt.stopPropagation();
	clickedButton = evt.target;
  } else if (window.event.srcElement) {
	// IE用
	window.event.cancelBubble = true;
	clickedButton = evt.srcElement;
  }
  // safari 1.3.2用
  // イベント対象要素取得でTEXTノードが取得されてしまう場合の対応
  if (clickedButton.nodeType == 3) {
	clickedButton = clickedButton.parentNode;
  }
  if (clickedButton.name) {
	var buttonAttribute = _doc.createElement('input');
	buttonAttribute.type = 'hidden';
	buttonAttribute.name = clickedButton.name;
	buttonAttribute.value = clickedButton.value;
	clickedButton.form.appendChild(buttonAttribute);
  }
}
/**
 * 画面(form)上のすべてのオブジェクトをenableにする関数。
 */
function enableControl() {
	//inputタグの無効化
	var inputArr = _doc.getElementsByTagName('input');
	for(var i=0,iLen=inputArr.length;i<iLen;i++) {
		var inputTag = inputArr.item(i);
		if ((inputTag.type == 'submit')||(inputTag.type == 'image')) {
			inputTag.disabled=_statControl[inputTag.id];
		}
	}
	//selectタグの無効化
	var selectArr=_doc.getElementsByTagName('select');
	for(var i=0,sLen=selectArr.length;i<sLen;i++) {
		var elm=selectArr.item(i);
		if (elm.addEventListener) continue;
		if (elm.outerHTML.search("__doPostBack")<0 ) continue;
		elm.disabled=_statControl[elm.id];
	}
	//anchorタグの無効化
	var anchorArr=_doc.getElementsByTagName('a');
	for(var i=0,aLen=anchorArr.length;i<aLen;i++) {
		var elm=anchorArr.item(i);
		if (elm.href.search("__doPostBack")<0 ) continue;
		if (elm.id!=null && elm.id!="") {
			elm.disabled =_statControl[elm.id];
		} else if ( elm.title!=null ) {
			elm.disabled =_statControl[elm.title];
		}
	}
}
/**
 * 画面(form)上のすべてのオブジェクトをdisableにする関数。
 */
function disableControl() {
	//inputタグの無効化
	var inputArr = _doc.getElementsByTagName('input');
	for(var i=0,iLen=inputArr.length;i<iLen;i++) {
		var inputTag = inputArr.item(i);
		if ((inputTag.type == 'submit')||(inputTag.type == 'image')) {
			_statControl[inputTag.id]=inputTag.disabled;
			inputTag.disabled=true;
		}
	}
	//selectタグの無効化
	var selectArr=_doc.getElementsByTagName('select');
	for(var i=0,sLen=selectArr.length;i<sLen;i++) {
		var elm=selectArr.item(i);
		if (elm.addEventListener) continue;
		if (elm.outerHTML.search("__doPostBack")<0 ) continue;
		_statControl[elm.id]=elm.disabled;
		elm.disabled=true;
	}
	//anchorタグの無効化
	var anchorArr=_doc.getElementsByTagName('a');
	for(var i=0,aLen=anchorArr.length;i<aLen;i++) {
		var elm=anchorArr.item(i);
		if (elm.href.search("__doPostBack")<0) continue;
		if (elm.id!=null && elm.id!="") {
			_statControl[elm.id]=elm.disabled;
			elm.disabled =true;
		} else if (elm.title!=null && elm.title!="") {
			_statControl[elm.title]=elm.disabled;
			elm.disabled =true;
		}
	}
}
})();

