/* 어플리케이션 컨텍스트 이름 */
var CONTEXT_NAME;

function getContextName(){
    // TODO cookie를 안쓸 경우엔 무조건 값이 "" 이 되어 버림.
    if (CONTEXT_NAME == null){
    	CONTEXT_NAME = getCookie("j_context_name");
    }
    return CONTEXT_NAME;
}

/**
 * 날짜를 선택할 수 있는 모달 팝업 화면 창을 연다.
 *
 * @param field 날짜가 입력될 필드
 */
function getDate(field) {
	var fieldValue = field.value.replace('-', '').replace('-', ''); 
    var url = getContextName() + "/popup/DatePopup.jsp?fieldValue="+fieldValue;
    var ws = formatWindowProperty(200, 100, 250, 230);

    /* IE */
    if (window.showModalDialog) {
        var dt = showModalDialog(url, window, ws);
        if (dt != null) {
            if (dt.year == "") {
                field.value = "";
            } else {
                field.value = dt.year + "-" + dt.month + "-" + dt.day;
            }
        }
    } else {
        url += "?formName=" + field.form.getAttribute("name") + "&fieldName=" + field.name;
        window.open(url, null, ws);
    }
}

/**
 * 날짜를 선택할 수 있는 모달 팝업 화면 창을 연다.
 *
 * @param field 날짜가 입력될 필드
 */
function getSimpleDate(field) {
    var url = getContextName() + "/popup/DatePopup.jsp?fieldValue=";
    var ws = formatWindowProperty(200, 100, 250, 230);

    /* IE */
    if (window.showModalDialog) {
        var dt = showModalDialog(url, window, ws);
        if (dt != null) {
            if (dt.year == "") {
                field.value = "";
            } else {
                field.value = dt.year + dt.month + dt.day;
            }
        }
    } else {
        url += "?formName=" + field.form.getAttribute("name") + "&fieldName=" + field.name;
        window.open(url, null, ws);
    }
}

/**
 * 순서를 변경할 수 있는 팝업 화면 창을 연다.
 *
 * @param getStatement 대상 리스트를 가져오는 쿼리 아이디
 * @param updateStatement 순서를 변경하는 쿼리 아이디
 * @param query 기타 파라미터로 JParam 객체를 담고 있는 배열 
 */
function openOrderPopup(getStatement, updateStatement, query) {
    var url = getContextName() + "/popup/OrderPopup.jsp?getStatement=" + getStatement + "&updateStatement=" + updateStatement;
    var ws = formatWindowProperty1(166, 129, 310, 280);

	if (query) {
		for (var i = 0; i < query.length; i++) {
			url = url + "&" + query[i].name + "=" + query[i].value;
		}
	}
    window.open(url, null, ws);
}

/**
 * 도움말 팝업 화면 창을 연다.
 * 
 * @param context 현재 보고 있는 업무 화면의 URL
 */
function openHelpPopup(context) {
    var url = getContextName() + "/popup/HelpPopup.jsp?context=" + context;
    var ws = formatWindowProperty1(166, 129, 700, 500);
    window.open(url, null, ws);
}

/**
 * 코드 리스트 팝업 화면 창을 연다.
 * 
 * @param id 코드 아이디가 입력될 필드
 * @param name 코드 이름이 입력될 필드
 * @param code 코드
 * @param selector 선택자
 */
function openCodePopup(id, name, code, selector) {
    var url = getContextName() + "/popup/CodePopup.jsp?q_targetId=" + id.name + "&q_targetName=" + name.name + "&q_code=" + code;
    if (selector) {
        url += "&q_selector=" + selector;
    }
    var ws = formatWindowProperty1(166, 129, 600, 500);
    window.open(url, null, ws);
}

/**
 * 서버 인스턴스 팝업 화면 창을 연다.
 * 
 * @param interface 컴포넌트 인터페이스
 * @param moduleId 컴포넌트 모듈 아이디
 */
function openInstancePopup(interfaceName, moduleId) {
    var url = getContextName() + "/RefreshComponent.do?c_interface=" + interfaceName + "&moduleId=" + moduleId;
    var ws = formatWindowProperty1(166, 129, 400, 300);
    window.open(url, null, ws);
}

/**
 * 주소 팝업 화면 창을 연다.
 * 
 * @param post 우편 본호가 입력될 필드
 * @param address 주소가 입력될 필드
 */
function openZipCodePopup(post, address) {
    var url = getContextName() + "/popup/ZipCodePopup.jsp?q_targetPost=" + post.name + "&q_targetAddress=" + address.name;
    var ws = formatWindowProperty1(166, 129, 500, 450);
    window.open(url, null, ws);
}

/**
 * 테이블 형식의 조직 팝업 화면 창을 연다.
 * 
 * @param id 조직 아이디가 입력될 필드
 * @param name 조직 이름이 입력될 필드
 */
function openOrgPopup(id, name) {
    var url = getContextName() + "/popup/OrgPopup.jsp?q_targetId=" + id.name + "&q_targetName=" + name.name;
    var ws = formatWindowProperty1(166, 129, 550, 450);
    window.open(url, null, ws);
}

/**
 * 트리 형식의 조직 팝업 화면 창을 연다.
 * 
 * @param id 조직 아이디가 입력될 필드
 * @param name 조직 이름이 입력될 필드
 */
function openOrgTreePopup(id, name) {
    var url = getContextName() + "/popup/OrgTreePopup.jsp?q_targetId=" + id.name + "&q_targetName=" + name.name;
    var ws = formatWindowProperty1(166, 129, 500, 450);
    window.open(url, null, ws);
}

/**
 * 조직 별 사용자 팝업 화면 창을 연다.
 * @param id 사용자 아이디가 입력될 필드
 * @param name 사용자 이름이 입력될 필드
 */ 
function openOrgUserPopup(id, name) {
    var url = getContextName() + "/popup/OrgUserPopup.jsp?q_targetId=" + id.name + "&q_targetName=" + name.name;
    var ws = formatWindowProperty1(166, 129, 600, 320);
    window.open(url, null, ws);
}

/**
 * 사용자 팝업 화면 창을 연다.
 * @param params 파라미터
 */
function openUserPopup(params) {
    var url = getContextName() + "/popup/UserPopup.jsp?" + params;
    var ws = formatWindowProperty1(166, 129, 540, 450);
    window.open(url, null, ws);
}

/**
 * 비밀번호 수정 화면 창을 연다.
 */
function openChangePasswordPopup(context) {
    var url = getContextName() + "/popup/ChangePasswordPopup.jsp";
    var ws = formatWindowProperty1(166, 129, 400, 200);
    window.open(url, null, ws);
}

function formatWindowProperty(left, top, width, height) {
    if (window.showModalDialog) {
        return "status:no; dialogLeft:" + left + "px; dialogTop:" + top + "px; dialogWidth:" + width + "px; dialogHeight:" + height + "px";
    } else {
        return "modal, left=" + left + "px, top=" + top + ", width=" + width + "px, height=" + height + "px";
    }
}

function formatWindowProperty1(left, top, width, height) {
    return "left=" + left + ", top=" + top + ", width=" + width + ", height=" + height;
}

function formatWindowProperty2(left, top, width, height, resizable, scrollbars) {
    return "left=" + left + ", top=" + top + ", width=" + width + ", height=" + height + ", resizable=" + resizable + ", scrollbars=" + scrollbars;
}

function JParam(name, value) {
	this.name = name;
	this.value = value;
}
