// window の Load イベントを取得する。
window.onload = window_Load;
    
function window_Load() {
  var i;
  
  // 全リンクのクリックイベントを submittableObject_Click で取得する。
  for (i = 0; i < document.links.length; i ++) {
    var item = document.links[i]
    Object.Aspect.around(item, "onclick", checkLoading);
  }
  
  // 全ボタンのクリックイベントを submittableObject_Click で取得する。
  for (i = 0; i < document.forms[0].elements.length; i ++) {
    var item = document.forms[0].elements[i]
    if (
      //item.type == "button" ||
      item.type == "submit" 
      //|| item.type == "reset"
      ) {
      Object.Aspect.around(item, "onclick", checkLoading);
      
    }
  }
  
  return true;
}

//2度押し抑止アスペクト
var checkLoading = function(invocation) {
  if (isDocumentLoading()) {
    alert("処理中です…");
    return false;
  }
  return invocation.proceed();
}

//画面描画が終わったかどうか
function isDocumentLoading() {
  return (document.readyState != null &&
          document.readyState != "complete");
}

//アスペクト用
Object.Aspect = {
  _around: function(target, methodName, aspect) {
    var method = target[methodName];
    target[methodName] = function() {
      var invocation = {
        "target" : this,
        "method" : method,
        "methodName" : methodName,
        "arguments" : arguments,
        "proceed" : function() {
          if (!method) {
            return true;
          }
          return method.apply(target, this.arguments);
        }
      };
      return aspect.apply(null, [invocation]);
    };
  },
  around: function(target, methodName, aspect) {
    this._around(target, methodName, aspect);
  }
}


var submitFlg = true;

//submitボタンの2度押し禁止対応
//全てのformのsubmitイベントの発生時に、formに含まれるsubmitボタンを無効化する。
_addEventListener(window, 'load', function() {
    var forms = document.forms;
    for (var i = 0; i < forms.length; i++) {
        var form = forms[i];
        _addEventListener(form, 'submit', function(e) {
            var target = e.target || e.srcElement;
            var len = target.elements.length;
            for (var j = 0; j < len; j++) {
                var element = target.elements[j];
                if (element.type == 'submit' && element.value != '戻る' && element.value != 'いいえ'){
                	if(submitFlg){
                		element.disabled = true;
                	}
                }
            }
        });
    }
});

function _addEventListener(obj, eventName, func) {
    if (obj.addEventListener) {
        obj.addEventListener(eventName, func, false);       //NN, Firefox, etc
    } else if (obj.attachEvent){
        obj.attachEvent("on" + eventName, func);            //IE
    } else {
        obj[eventName] = func;
    }
}

// 元に戻す
function Enable(flg){
	if(flg == false){
		submitFlg = true;
		return;
	}
	//document.readyState = null;
	var forms = document.forms;
	for (var i = 0; i < forms.length; i++) {
		var form = forms[i];
		var elements = form.elements;
		for (var j = 0; j < elements.length; j++) {
			var element = elements[j];
			element.disabled = false;
		}
	}
	submitFlg = false;
}





