/*
''' <summary>
''' イベント用JavaScript
''' </summary>
''' <remarks>
''' </remarks>
*/

function cancelEvent(event) {

	if (event.preventDefault && event.stopPropagation) {
		if (event.cancelable) {
		event.preventDefault();
		}
		event.stopPropagation();
	} else {
		event.returnValue = false;
		event.cancelBubble = true;
	}

}

function nextControl(obj) {

	var currentForm = obj.form;

	var ctl;
	var next = false;
	for (var i = 0; i < currentForm.elements.length; i++) {
		ctl = currentForm.elements[i];
		if (ctl == obj) {
			next = true;
		} else if (next) {
			if (ctl.tabIndex != "-1") {
				ctl.focus();
				break;
			}
		}
	}

	if (!next) {
		for (var i = 0; i < currentForm.elements.length; i++) {
			ctl = currentForm.elements[i];
			if (ctl.tabIndex != "-1") {
				ctl.focus();
				break;
			}
		}
	}

}

function getUserProperty(obj, key) {
	var ret = "";

	var cssClass = obj.className;
	if (cssClass == null) {
		cssClass = "";
	}

	var list = cssClass.split(" ");

	for (var i = 0; i < list.length; i++) {
		if (list[i].substring(0, key.length) == key) {
			ret = list[i].substring(key.length + 1);
			break;
		}
	}


	return ret;
}

/*
<summary>
ロード時
</summary>
<param name="obj">オブジェクト</param>
<remarks>
</remarks>
*/
function onLoadEvent(obj) {

}

/*
<summary>
サブミット時
</summary>
<param name="obj">オブジェクト</param>
<returns>OK/NG</param>
<remarks>
</remarks>
*/
function onSubmitEvent(event) {
	var ret = true;

	var event = event || window.event;
	var obj = event.srcElement || event.target;
	if (obj == null) {
		return;
	}

/*
	for (var i = 0; i < obj.elements.length; i++) {
		ctl = obj.elements[i];
		if (ctl.type == "submit") {
			ctl.style.display = "inline";
		}
	}
*/

	return ret;
}

/*
<summary>
キー押下時
</summary>
<param name="obj">オブジェクト</param>
<remarks>
</remarks>
*/
function onKeyDownEvent(event) {

	var event = event || window.event;
	var obj = event.srcElement || event.target;
	if (obj == null) {
		return;
	}

	if (obj.type == "textarea") {
		return;
	}

	var ctlType = getUserProperty(obj, "type");
	var keyCode = event.which || event.keyCode;

	switch (keyCode) {
	
		case 13:
			// ENTER

			nextControl(obj);
			cancelEvent(event);

		case 32:
			// SPACE
			
			switch (ctlType) {
				case "UserDateCalendar":
					setToday(obj);
					cancelEvent(event);
					break;
			}
			
			break;
			
		case 46:
			// DEL
			
			switch (ctlType) {
				case "UserDateCalendar":
					obj.value = "____/__/__";
					break;
			}
			
			break;
	}

}

/*
<summary>
キー押下時
</summary>
<param name="obj">オブジェクト</param>
<remarks>
</remarks>
*/
function onKeyPressEvent(event) {

}

/*
<summary>
フォーカス時
</summary>
<param name="obj">オブジェクト</param>
<remarks>
</remarks>
*/
function onFocusEvent(event) {

	var event = event || window.event;
	var obj = event.srcElement || event.target;
	if (obj == null) {
		return;
	}

	var val = obj.value;

	obj.value = val;

	setTimeout("\$get('" + obj.id + "').select()", 0);

	document.body.style.cursor = "default";

}

/*
<summary>
フォーカスを失ったとき
</summary>
<param name="obj">オブジェクト</param>
<remarks>
</remarks>
*/
function onBlurEvent(event) {

	var event = event || window.event;
	var obj = event.srcElement || event.target;
	if (obj == null) {
		return;
	}

	var rst = true;

	//clearErrCtl(obj);

	var ctlType = getUserProperty(obj, "type");
	var charType = getUserProperty(obj, "charType");
	var pattern = getUserProperty(obj, "pattern");

	var val = obj.value;

	switch (ctlType) {
	
		case "UserNumeric":

			rst = checkNumeric(val, charType);
			if (rst) {
				var tmp = "";
				while (val != (tmp = val.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))) {
					val = tmp;
				}
			}

			break;
		
		case "UserDate":
	
			val = val.replace(/\//g, "");
			val = val.replace(/\_/g, "");
			if (val.length == 8) {
				val = val.substring(0, 4) + "/" + val.substring(4, 2) + "/" + val.substring(6, 2);
			} else {
				rst = false;
			}
			
		break;

	}

	rst = checkString(val, charType, pattern);

	if (rst) {
		obj.value = val;
	} else {
		setErrCtl(obj);
	}
	
}

function addEvent() {
	var ctl;
/*
	if (window.event == null) {
		try {
			var events = ["submit", "mousedown", "mouseover", "mouseout", "mousemove", "mousedrag", "click", "dblclick", "keydown", "keypress"];  
			for (var i = 0; i < events.length; i++){
				window.addEventListener(events[i], function(e){
				window.event = e;
				}, true);
			}
		} catch (e) {
		}
	}
*/
	for (var i = 0; i < document.forms.length; i++) {

		YAHOO.util.Event.addListener(document.forms[i].id, "submit", onSubmitEvent);

		for (var j = 0; j < document.forms[i].elements.length; j++) {
			ctl = document.forms[i].elements[j];
			switch (ctl.type) {
				case "text":
				case "password":
				case "checkbox":
				case "radio":
				case "file":
				case "select-one":
				case "select-multiple":
					if (ctl.id != "") {
						YAHOO.util.Event.addListener(ctl.id, "blur", onBlurEvent);
						YAHOO.util.Event.addListener(ctl.id, "keydown", onKeyDownEvent);
						YAHOO.util.Event.addListener(ctl.id, "keypress", onKeyPressEvent);
						YAHOO.util.Event.addListener(ctl.id, "focus", onFocusEvent);
					}

					break;
			}
			
		}
		
	}

}

