/*************************************************************
 * 대상객체에 이벤트를 관리할 수 있도록 하는 클레스. 
 * 웹표준 관련하여, 사용자 화면에 가능한 이벤트 함수를 사용하지
 * 않기 위해 컴포넌트화하여 사용한다.
 * Daon Soft 방기배 
 * 2007. 09. 11
 * -----------------------------------------------------------
 * modifier 윤태성
 * 
**************************************************************/
var daon = {};
daon.UserEvent = {};

/*************************************************************
 * 대상객체에 이벤트 리스너 등록
 *************************************************************/
daon.UserEvent.addListener = function(element, event_name, userFunction, useCapture) {
    useCapture = useCapture || false;
	try {	
		if (element.addEventListener) {
			element.addEventListener(event_name, userFunction, useCapture);
		} else if (element.attachEvent) {
			element.attachEvent('on' + event_name, userFunction);
		}
	} catch(exception) {
		/*
		alert("오류내용 : " + exception + "\r\n대상 객체 : " + element 
			+ " : addListener() on" + event_name + "() 함수 추가시 오류가 발생하였습니다.");
		*/
	}		
}

/*************************************************************
 * 대상객체에서 이벤트 리스너 삭제
 *************************************************************/
daon.UserEvent.removeListener = function(element, event_name, userFunction, useCapture) {
	useCapture = useCapture || false;
	try {
		if (element.removeEventListener) {
			element.removeEventListener(event_name, userFunction, useCapture);
		} else if (element.detachEvent) {
			element.detachEvent('on' + event_name, userFunction);
		}
	} catch(exception) {
		/*
		alert("오류내용 : " + exception + "\r\n대상 객체 : " + element 
			+ " : addListener() on" + event_name + "() 함수 삭제시 오류가 발생하였습니다.");
		*/
	}
}

/*************************************************************
 * 대상객체 정보 얻기
 * 이벤트 대상 : target.nodeName
 * 대상의 ID   : target.id
 * 이벤트 타입 : event.type
 *************************************************************/
daon.UserEvent.getTarget = function(event) {
	if (event == null) 
		return null;
	if (event.target) 
		return event.target;
	else if (event.srcElement) 
		return event.srcElement;
	return null;
}

/*************************************************************
 * 전체 이벤트 관련 행동 중지
 * 이벤트란 자식 객체에서 발생한 경우 부모까지 이벤트가
 * 부모와 자식이 각각 다른 역할을 해야 한다면 전파를 
 * 막아주도록 한다.
 * 예를 들어 <div id="parent"><div id="child"></div></div>
 * 인 형태가 있다고 하면 child에서 onclick() 이벤트가 발생하면
 * 부모인 parent에게서도 동일하게 onclick 이벤트가 발생한다.
 *************************************************************/
daon.UserEvent.stopEvent = function(event) {
	daon.UserEvent.stopPropagation(event);
	daon.UserEvent.preventDefault(event);
}
/*************************************************************
 * 이벤트 전파 중지
 *************************************************************/
daon.UserEvent.stopPropagation = function(event) {
	if (event.stopPropagation) {
	    event.stopPropagation();
	} else {
	    event.cancelBubble = true;
	}
}
/*************************************************************
 * 이벤트 전파 중지
 *************************************************************/
daon.UserEvent.preventDefault = function(event) {
	if (event.preventDefault) {
	    event.preventDefault();
	} else {
	    event.returnValue = false;
	}
}

/*************************************************************
 * 코딩량을 조금이라도 줄이려고 추가.
 *************************************************************/
function getObject(objId) {
	var idObject;
	if(objId) {
		return document.getElementById(objId);
	}
	return null;
}


/*************************************************************
 * 사용예시
 * 
 * 	window.onload = function() {
 * 		daon.UserEvent.addListener(getObject("name"), "event name", function name, useCapture);
 * 	}
 * 
 *  name
 *   - html 태그 내의 id 명을 입력한다.
 *   - 예 : <input id="obj" type.... />라는 태그가 있다면 "obj"를 입력한다.
 *  event name
 *   - 이벤트 명을 적어주며 "" <-- 문자열로 넘긴다.
 *   - 예: "click", "focus", "keydown" 
 *  function name
 *   - 함수명을 적는다.
 *   - 문자열이 아님을 주의
 *   - 예 : doSubmit, getZipCode,
 *  
 *  useCapture
 *   - true 또는 false 값을 사용한다.
 *   - 창에서 발생한 이벤트를 부모에서 청취할지 여부를 결정한다.
 * 
 *************************************************************/

