var _callBackObj = new cfCallBackObj(null, null);

function cfCallBackObj(code, name) {
	this.name = name;
	this.code = code;
}

/**
 * @type : function
 * @access : public
 * @desc : 특정코드 조회 팝업 ex) cfShowPopup('comn', 'C', '', txt_joblevelData, txt_joblevel, 'select/pbf/comm/srch/retrievePopupCodeSet', 'f_CallBack', '직급조회', '직급', '직급명', true, 10, 20,
 * 'center', true);
 * @param : _type 종류
 * @param : _event 이벤트 종류 M : 마우스, C : 코드 엔터, N : 명칭 엔터
 * @param : _code 코드입력오브젝트(Text)
 * @param : _name 명칭오브젝트(Text)
 * @param : _title 팝업윈도우 타이틀
 * @param : _param 추가적인 param
 * @param : _sqlPath sql 경로
 * @param : _callBack 콜백함수명
 * @param : _codeLable 코드레이블
 * @param : _nameLable 명칭레이블
 * @param : _onRetrieve 팝업오픈시 바로 조회여부
 * @param : _codeLen 코드길이제약
 * @param : _nameLen 명칭길이제약
 * @param : _codeAlign 코드 정렬
 * @param : _upperCase 코드 대소문자
 */
function cfShowPopup(_type, _event, _code, _name, _param, _callBack, _sqlPath, _codeLable, _title, _nameLable, _onRetrieve, _codeLen, _nameLen, _codeAlign, _upperCase) {
	var title = (_title == null) ? "코드" : _title;
	var codeTitle = (_codeLable == null) ? "코드" : _codeLable;
	var nameTitle = (_nameLable == null) ? "명칭" : _nameLable;
	var codeLen = (_codeLen == null) ? "10" : _codeLen;
	var nameLen = (_nameLen == null) ? "20" : _nameLen;
	var code = "";
	var name = "";
	var onRetrieve = "true";
	var obj = _code;
	var codeAlign = (_codeAlign == null) ? "center" : _codeAlign;

	if (_code.length == undefined) {
		code = (_code.type.toUpperCase() == 'TEXT' || _code.type.toUpperCase() == 'HIDDEN') ? _code.value : _code.Text;
	} else {
		code = _code;
		obj = null;
	}
	if (_name.length == undefined) {
		name = (_name.type.toUpperCase() == 'TEXT' || _name.type.toUpperCase() == 'HIDDEN') ? _name.value : _name.Text;
	} else
		name = _name;

	var callBack = 'cfCallBack';
	if (_callBack != null && _callBack != '')
		callBack = _callBack;
	if (callBack == 'cfCallBack') {
		if (_callBackObj == null)
			_callBackObj = new cfCallBackObj(_code, _name);
		else {
			_callBackObj.code = _code;
			_callBackObj.name = _name;
		}
	}

	code = cfReplaceAll(code, "\\", "");
	name = cfReplaceAll(name, "\\", "");
	if (_onRetrieve != null && !_onRetrieve)
		onRetrieve = "false";
	else
		onRetrieve = "true";

	if (code != '' || name != '')
		onRetrieve = "true";

	var sqlPath = (_sqlPath == null) ? "" : _sqlPath;
	if (_upperCase == null || _upperCase == true)
		code = code.toUpperCase();

	// 마우스클릭이 아닌 경우 ajax로 데이타 가져옴.
	if (_event != null && _event != "M") {
		if (cfHiddenPopup(code, name, _param, callBack, sqlPath)) {
			return;
		}
	}

	var param = "?callBack=" + callBack;
	param += "&callInit=f_CallInit";
	param += "&_type=" + _type;
	param += "&_event=" + _event;
	param += "&_code=" + _code.id;
	param += "&_name=" + _name.id;
	param += "&sqlPath=" + sqlPath;
	param += "&title=" + cfHangle(title);
	param += "&codeTitle=" + cfHangle(codeTitle);
	param += "&nameTitle=" + cfHangle(nameTitle);
	param += "&param=" + _param;
	param += "&code=" + cfHangle(code);
	param += "&name=" + cfHangle(name);
	param += "&onRetrieve=" + onRetrieve + "&codeLen=" + codeLen + "&nameLen=" + nameLen;
	param += "&codeAlign=" + codeAlign;
	if (obj != null && document.body.scrollHeight < obj.getBoundingClientRect().bottom + 360)
		obj = null;
	if (obj != null && document.body.scrollWidth < obj.getBoundingClientRect().right + 480)
		obj = null;
	//cfCreatePopup("/jsp/common/srch/commPopup.jsp" + param, 450, 330, obj);
	cfCreatePopup("/pbf.common.srch.RetrieveCommCdList.dev" + param, 450, 330, obj);
	
}

/**
 * @type : function
 * @access : public
 * @desc : keydown 이벤트시 키코드 체크, flag에 따라 입력값 clear
 * @param : objId input box명
 */
function cfCheckEvent(_event, _code, _name) {
	if (_event != "M" && window.event.type == "blur")
		return false;
	// alert("_event:" + _event + "/" + window.event.type + "/" + window.event.keyCode);
	if (window.event != null && window.event.keyCode != 13 && window.event.keyCode != 17 && !window.event.altLeft && window.event.keyCode != 9 && window.event.Type != "click") {
		if (_event == 'C') {
			if (_name.tagName.toUpperCase() == "INPUT")
				_name.value = "";
			else
				_name.Text = "";
		} else if (_event == 'N') {
			if (_code.tagName.toUpperCase() == "INPUT")
				_code.value = "";
			else
				_code.Text = "";
		}
		return true;
	}
	return false;
}

function cfKeyDown(_type, _event, _code, _name, _param, _callBack, _sqlPath, _title, _userPopup, _codeLen, _nameLen, _codeAlign, _upperCase) {
	if (typeof (_code) == "string") {
		_code = parent.$(_code);
		_name = parent.$(_name);
	}
	if (cfCheckEvent(_event, _code, _name)) return;
	if (window.event.keyCode == 13) {
		var div = document.getElementById("popup");	// 팝업 화면에서 엔터 이벤트
		if(div == null) {
			f_Retrieve();
			return;
		}
		
		if (_type == 'userInfo' || _type == 'userInfoSm') { // 사용자검색은 조건상태를
		} else {
			var upperCase = (_upperCase == true || _upperCase == 'undefined' || _upperCase == null) ? true : false;
			if (upperCase == true) {
				_code.value.toUpperCase();
			}
		}
		var popupName = "cfOpenCommonPopup";
		if (_userPopup != null && _userPopup.length > 0)
			popupName = _userPopup;
		var OpenCommonPopup = eval(popupName);
		OpenCommonPopup(_type, _event, _code, _name, _param, _callBack, _sqlPath, _title, _codeLen, _nameLen, _codeAlign, _upperCase);
	}
}

function cfHiddenPopup(_code, _name, _param, _callBack, _sqlPath) {
	if (_code == '' && _name == '') {
		return false;
	}
	var sqlPath = (_sqlPath != null && _sqlPath != '') ? _sqlPath : "select/pbf/comm/srch/retrievePopupCodeSet";

	var arrParam = new Array();
	arrParam[0] = "code=" + _code;
	arrParam[1] = "name=" + _name;
	arrParam[2] = "param=" + _param;
	arrParam[3] = "hiddenPopup=Y";
	arrParam[4] = "sqlPath=" + _sqlPath;
	var strRslt = cfGetOneColmAjax("/pbf.common.srch.RetrieveListCnt.ajax", arrParam);
	var rowCnt = strRslt.substring(0, strRslt.indexOf("|"));
	if (rowCnt > 1)
		return false;

	strRslt = strRslt.substring(strRslt.indexOf("|") + 1, strRslt.length);
	var arrRslt = strRslt.split("&");
	if (_callBack != null && _callBack != '' && _callBack != 'cfCallBack') {
		var callBack = eval(_callBack);
		callBack(arrRslt);
		return true;
	} else {
		cfCallBack(arrRslt);
		return true;
	}
}

function cfUpperCase(obj) {
	if ((window.event.keyCode >= 97 && window.event.keyCode <= 122) || (window.event.keyCode >= 65 && window.event.keyCode <= 90)) {
		if (obj.tagName.toUpperCase() == "INPUT")
			obj.value = obj.value.toUpperCase();
	}
}

function cfCallBack(arrRslt) {
	cfClosePopup(); // Open된 팝업을 해제
	for ( var i = 0; i < arrRslt.length; i++) {
		if (arrRslt[0])
			_callBackObj.code.value = arrRslt[0];
		if (arrRslt[1])
			_callBackObj.name.value = arrRslt[1];
	}
}

/**
 * @type : function
 * @access : public
 * @desc : 팝업 유형 정의 ex) cfOpenCommonPopup('dept', 'M', txt_joblevel, txt_joblevelNm, _param, '직급조회', 'select/pbf/comm/srch/retrievePopupCodeSet', 'f_CallBack', 'center', true);
 * @param : _type 종류
 * @param : _event 이벤트 종류 M : 마우스, C : 코드 엔터, N : 명칭 엔터
 * @param : _code 코드입력오브젝트(Text)
 * @param : _name 명칭오브젝트(Text)
 * @param : _title 팝업윈도우 타이틀
 * @param : _param 코드종류 (추가적인 param으로 사용되고 있음)
 * @param : _sqlPath sql 경로
 * @param : _callBack 콜백함수명
 * @param : _codeAlign 코드 정렬
 * @param : _upperCase 코드 대소문자
 */
function cfOpenCommonPopup(_type, _event, _code, _name, _param, _callBack, _sqlPath, _title, _codeAlign, _upperCase) {
	var onRetrieve = false
	switch (_type) {
	// 부서정보조회 팝업
	case "dept":
		cfShowPopup(_type, _event, _code, _name, _param, _callBack, 'select/pbf/admin/deptMngt/retrieveDeptListPopup', "부서", null, null, null, null, null, null, null);
		break;
	// 사용자정보조회 팝업
	case "userInfo":
		cfUserInfoPopup(_type, _event, _code, _name, _param, _callBack, _upperCase);
		break;
	// 사원검색 팝업
	case "emp":
		cfShowPopup(_type, _event, _code, _name, _param, _callBack, 'select/pbf/comm/srch/retrievePopupEmp', "사원", null, null, null, '10', '50', null, _upperCase);
		break;
	// 메뉴조회 팝업
	case "menu":
		cfShowPopup(_type, _event, _code, _name, _param, _callBack, 'select/pbf/comm/srch/retrievePopupMenu', "메뉴", null, null, null, null, null, null, null);
		break;
	// common 팝업
	case "comn":
		if (_event != "M") {
			onRetrieve = true;
		}
		cfShowPopup(_type, _event, _code, _name, _param, _callBack, 'select/pbf/common/srch/retrieveCommCdList', _title, null, null, onRetrieve, null, null, _codeAlign, _upperCase);
		break;
	// 우편번호조회 팝업
	case "zipcode":
		if (_code.length == undefined) {
			if (_code.value.length >= 3 || _name.value.length >= 2)
				onRetrieve = true;
		} else {
			if (_code.length >= 3 || _name.length >= 2)
				onRetrieve = true;
		}
		cfZipCdPopup(_type, _event, _code, _name, _param, _callBack, 'select/pbf/comm/srch/retrieveZipCdPopup', "우편번호", "우편번호", "주소", onRetrieve, 6, 20);
		break;
	// 사원검색 팝업2(부서 및 전화번호 필요함)
	case "emp2": // 계정//
		var empNm = cfHangle(_name.value);
		var empNo = _code.value;
		var condition = "?callBack=f_CallBack&empNm=" + empNm + "&empNo=" + empNo;
		if ((_event != null && _event == "M") || onRetrieve == "false")
			cfCreatePopup("/jsp/pbf/comm/srch/empPopup.jsp" + condition, 380, 260, null);
		else
			cfCreatePopupHidden("/jsp/pbf/comm/srch/empPopup.jsp" + condition, 380, 260, null);
		break;
	default:
		break;
	}
}
