function leftpad(theItem, thePad, minSize) {
    var newItem = new String(theItem);
    while (newItem.length < minSize) {
        newItem = thePad + newItem;
    }
    return newItem;
}

function subtractDay(yyyy, mm, dd, pDay) // 년, 월, 일, 계산할 일자 (년도는 반드시 4자리로 입력)
{
    var oDate; // 리턴할 날짜 객체 선언

    dd = dd * 1 - pDay * 1; // 날짜 계산

    mm--; // 월은 0~11 이므로 하나 빼준다

    oDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)

    return oDate;
}

function subtractMonth(yyyy, mm, dd, pMonth) // 년, 월, 일, 계산할 월 (년도는 반드시 4자리로 입력)
{
    var cDate; // 계산에 사용할 날짜 객체 선언

    var oDate; // 리턴할 날짜 객체 선언

    var cYear, cMonth, cDay // 계산된 날짜값이 할당될 변수

    mm = mm * 1 - ((pMonth * 1) - 1); // 월은 0~11 이므로 하나 빼준다

    cDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)

    cYear = cDate.getFullYear(); // 계산된 년도 할당

    cMonth = cDate.getMonth(); // 계산된 월 할당

    cDay = cDate.getDate(); // 계산된 일자 할당

    oDate = (dd == cDay) ? cDate : new Date(cYear, cMonth, 0); // 넘어간 월의 첫쨋날 에서 하루를 뺀 날짜 객체를 생성한다.

    return oDate;
}

function addDay(yyyy, mm, dd, pDay) // 년, 월, 일, 계산할 일자 (년도는 반드시 4자리로 입력)
{
    var oDate; // 리턴할 날짜 객체 선언

    dd = dd * 1 + pDay * 1; // 날짜 계산

    mm--; // 월은 0~11 이므로 하나 빼준다

    oDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)

    return oDate;
}

function addMonth(yyyy, mm, dd, pMonth) // 년, 월, 일, 계산할 월 (년도는 반드시 4자리로 입력)
{
    var cDate; // 계산에 사용할 날짜 객체 선언

    var oDate; // 리턴할 날짜 객체 선언

    var cYear, cMonth, cDay // 계산된 날짜값이 할당될 변수

    mm = mm * 1 + ((pMonth * 1) - 1); // 월은 0~11 이므로 하나 빼준다

    cDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)

    cYear = cDate.getFullYear(); // 계산된 년도 할당

    cMonth = cDate.getMonth(); // 계산된 월 할당

    cDay = cDate.getDate(); // 계산된 일자 할당

    oDate = (dd == cDay) ? cDate : new Date(cYear, cMonth, 0); // 넘어간 월의 첫쨋날 에서 하루를 뺀 날짜 객체를 생성한다.

    return oDate;
}

function calcDate(formIndex, monthOrDay, sumValue)
{
    var cDate;
    var y,m,d;
    var formObj = document.forms[formIndex];

    y = formObj.all("end.year").value;
    m = formObj.all("end.month").value;
    d = formObj.all("end.day").value;
    if (monthOrDay == 1)
    {
        cDate = addDay(y, m, d, sumValue)
    } else {
        cDate = addMonth(y, m, d, sumValue)
    }

    var rYear = cDate.getFullYear();
    var rMonth = cDate.getMonth() + 1;
    var rDay = cDate.getDate();

    formObj.all("start.year").value = leftpad(rYear, "0", 4);
    formObj.all("start.month").value = leftpad(rMonth, "0", 2);
    formObj.all("start.day").value = leftpad(rDay, "0", 2);
}

function calcFrontDate(formIndex, monthOrDay, sumValue)
{
    var cDate;
    var y,m,d;
    var formObj = document.forms[formIndex];

    y = formObj.all("start.year").value;
    m = formObj.all("start.month").value;
    d = formObj.all("start.day").value;
    if (monthOrDay == 1)
    {
        cDate = addDay(y, m, d, sumValue)
    } else {
        cDate = addMonth(y, m, d, sumValue)
    }

    var rYear = cDate.getFullYear();
    var rMonth = cDate.getMonth() + 1;
    var rDay = cDate.getDate();

    formObj.all("end.year").value = leftpad(rYear, "0", 4);
    formObj.all("end.month").value = leftpad(rMonth, "0", 2);
    formObj.all("end.day").value = leftpad(rDay, "0", 2);
}

function changeOpenerUrl(contextPath, module, url) {
    if (opener != null) {
        opener.document.location.href = contextPath + '/' + module + '/' + url
    }
    self.close();
}

function onlyInputNumber()
{
    var key = event.keyCode;
    if (!(key == 8 || key == 9 || key == 13 || key == 46 || key == 144 || (key >= 37 && key <= 40) || (key >= 48 && key <= 57) || (key >= 96 && key <= 105) || key == 110 || key == 190)) {
        alert('숫자만 입력 가능합니다');
        event.returnValue = false;
    }
}

function allowOnlyAlphanumericValues()
{
    var key = event.keyCode;
    if (!((key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 96 && key <= 105) || key == 46 || key == 8 || (key >= 37 && key <= 40))) {
        alert('알파벳이나 숫자만 입력 가능합니다');
        event.returnValue = false;
    }
}

function nextElementFocus(firstObj, secondObj, length)
{
    var jumin1 = firstObj.value;
    if (jumin1.length == length) {
        secondObj.focus();
    }
}

function nextElementFocusWithLengthSix(firstObj, secondObj)
{
    var jumin1 = firstObj.value;
    if (jumin1.length == 6) {
        secondObj.focus();
    }
}

function goPreviouse()
{
    parent.history.go(-1);
}

function toggleShowHide(id) {

    if (document.getElementById) { // DOM3 = IE5, NS6
        if (document.getElementById(id).style.display == "none") {
            document.getElementById(id).style.display = 'block';
        } else {
            document.getElementById(id).style.display = 'none';
        }
    } else {
        if (document.layers) {
            if (document.id.display == "none") {
                document.id.display = 'block';
            } else {
                document.id.display = 'none';
            }
        } else {
            if (document.all.id.style.visibility == "none") {
                document.all.id.style.display = 'block';
            } else {
                document.all.id.style.display = 'none';
            }
        }
    }
}

function hide(id) {

    if (document.getElementById) { // DOM3 = IE5, NS6
        if (document.getElementById(id).style.display != "none") {
            document.getElementById(id).style.display = 'none';
        }
    } else {
        if (document.layers) {
            if (document.id.display != "none") {
                document.id.display = 'none';
            }
        } else {
            if (document.all.id.style.visibility != "none") {
                document.all.id.style.display = 'none';
            }
        }
    }
}

function show(id) {

    if (document.getElementById) { // DOM3 = IE5, NS6
        if (document.getElementById(id).style.display == "none") {
            document.getElementById(id).style.display = 'block';
        }
    } else {
        if (document.layers) {
            if (document.id.display == "none") {
                document.id.display = 'block';
            }
        } else {
            if (document.all.id.style.visibility == "none") {
                document.all.id.style.display = 'block';
            }
        }
    }
}

function jumpToAnchor(anchor) {
    window.location = window.location + '#' + anchor;
}

function windowOpen(src, width, height) {
    var argument = "resizable=no, width=" + width + ", height=" + height + ", status=no, menubar=no, scrollbars=yes";
    window.open(src, 'new', argument);
}

function MM_swapImgRestore() { //v3.0
    var i,x,a = document.MM_sr;
    for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
}

function MM_preloadImages() { //v3.0
    var d = document;
    if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i,j = d.MM_p.length,a = MM_preloadImages.arguments;
        for (i = 0; i < a.length; i++)
            if (a[i].indexOf("#") != 0) {
                d.MM_p[j] = new Image;
                d.MM_p[j++].src = a[i];
            }
    }
}

function MM_findObj(n, d) { //v4.01
    var p,i,x;
    if (!d) d = document;
    if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
        d = parent.frames[n.substring(p + 1)].document;
        n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all) x = d.all[n];
    for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
    for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById) x = d.getElementById(n);
    return x;
}

function MM_swapImage() { //v3.0
    var i,j = 0,x,a = MM_swapImage.arguments;
    document.MM_sr = new Array;
    for (i = 0; i < (a.length - 2); i += 3)
        if ((x = MM_findObj(a[i])) != null) {
            document.MM_sr[j++] = x;
            if (!x.oSrc) x.oSrc = x.src;
            x.src = a[i + 2];
        }
}

function juminCheck(jumin1, jumin2) {
    str1 = jumin1;
    str2 = jumin2;

  // 문자열을 정수로 바꿔주는 내장함수 : parseInt()
    a1 = parseInt(str1.charAt(0)) * 2
    a2 = parseInt(str1.charAt(1)) * 3
    a3 = parseInt(str1.charAt(2)) * 4
    a4 = parseInt(str1.charAt(3)) * 5
    a5 = parseInt(str1.charAt(4)) * 6
    a6 = parseInt(str1.charAt(5)) * 7
    a7 = parseInt(str2.charAt(0)) * 8
    a8 = parseInt(str2.charAt(1)) * 9
    a9 = parseInt(str2.charAt(2)) * 2
    a10 = parseInt(str2.charAt(3)) * 3
    a11 = parseInt(str2.charAt(4)) * 4
    a12 = parseInt(str2.charAt(5)) * 5

    tot = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12

    na = tot % 11
    ch = 11 - na

    if (ch == 10)ch = 0
    if (ch == 11)ch = 1

    if (ch == parseInt(str2.charAt(6))) {
        return true;
    } else {
        alert('주민등록번호가 틀립니다.')
        return false;
    }
}

// 트리를 위한
function tree(menuName, mode) {
    if (mode == 'open') {
        eval(menuName + "_open").style.display = '';
        eval(menuName + "_close").style.display = 'none';
    } else if (mode == 'close') {
        eval(menuName + "_open").style.display = 'none';
        eval(menuName + "_close").style.display = '';
    }
}

function getSelected(opt) {
    var selected = new Array();
    var index = 0;
    for (var intLoop = 0; intLoop < opt.length; intLoop++) {
        if ((opt[intLoop].selected) ||
            (opt[intLoop].checked)) {
            index = selected.length;
            selected[index] = new Object;
            selected[index].value = opt[intLoop].value;
            selected[index].index = intLoop;
        }
    }
    return selected;
}

function setCommaSeparatedSelectedValueLabelsToAnotherField(opt, targetField) {
    var sel = getSelected(opt);
    var strSel = "";
    var count = 0;
    for (var item in sel) {
        if (count > 0) {
            strSel += ", ";
        }
        var values = sel[item].value.split(";");
        strSel += values[1];
        count++;
    }
    targetField.value = strSel;
}

function winPrint(id) {
    var initBody
    function beforePrint() {
        initBody = document.body.innerHTML;
        document.body.innerHTML = document.all[id].innerHTML;
    }
    function afterPrint() {
        document.body.innerHTML = initBody;
    }
    function printArea() {
        window.print();
    }
    window.onbeforeprint = beforePrint;
    window.onafterprint = afterPrint;
    printArea();
}

function validateTextLength(element, limit) {
    if (element.value.length > limit) {
        var message = limit + "자 이내로 작성해 주시기 바랍니다."
        alert(message);
        element.focus();
        return false;
    }
    return true;
}

function NearHalf(frc) {
    return Math.abs(frc % 1 - 0.5) < 1e-6
}

function NearHole(frc) {
    // return Math.abs(frc-Math.round(frc) < 1e-6
    return NearHalf(frc + 0.5)
    /* best ? */
}

function IntFrc(frc, CaseNo) { // often for X > -0.5e-N
    with (Math) switch (CaseNo) {
        case 0 : // Trunc
            return Math.floor(frc)
        case 1 : // Round
            return Math.round(frc)
        case 2 : // Alternate Round
            if (frc % 1 >= 0.5) frc++; return frc | 0
        case 3 : // Simple Bankers'
            return frc % 1 != 0.5 ? round(frc) : 2 * round(frc / 2)
        case 4 : // Better Bankers'
            return NearHalf(frc) ? 2 * round(frc / 2) : round(frc)
        case 5 : // Double-round
            if (NearHalf(frc)) frc = round(2 * frc) / 2; return round(frc)
        case 6 : // Ceil
            return Math.ceil(frc)
        case 7 : // Statistical
            return (frc + random()) | 0
        default : return " TypeError" }
}

function roundFloat(X, N) { // X to String with N decimal places
    var int = Math.floor(X), frc = ((X - int) + 1.0) * Math.pow(10, N)
    frc = String(IntFrc(frc, 2)) // Put chosen rounding algorithm here
    return (int + +(frc.charAt(0) == "2")) + '.' + frc.substring(1)
}

function validateRequiredString(propertyName, label) {
    var element = document.all[propertyName];
    if (element.value != null && element.value != '') {
        return true;
    }
    alert(label + '을(를) 입력하셔야 합니다.');
    element.focus();
    return false;
}

function validateRadioButtonTrue(propertyName, message, index) {
    var element = document.all[propertyName];
    if (element != null) {
        var radioLength = element.length;
        if (radioLength == undefined) {
            if (element.checked) {
                if (index == 1) {
                    return true;
                }
            }
        }
        for (var i = 0; i < radioLength; i++) {
            if ((index - 1) == i) {
                if (element[i].checked) {
                    return true;
                }
            }
        }
    }
    alert(message);
    if (element != null && element.length != undefined && element.length >= index) {
        element[index - 1].focus();
    }
    return false;
}

function validateRequiredRadioButton(propertyName, label) {
    var element = document.all[propertyName];
    if (element != null) {
        var radioLength = element.length;
        if (radioLength == undefined) {
            if (element.checked) {
                return true;
            }
        }
        for (var i = 0; i < radioLength; i++) {
            if (element[i].checked) {
                return true;
            }
        }
    }
    alert(label + '을(를) 선택하셔야 합니다.');
    if (element != null && element.length != undefined && element.length >= 0) {
        element[0].focus();
    }
    return false;
}

function getRadioButtonValue(propertyName) {
    var element = document.all[propertyName];
    if (element != null) {
        var radioLength = element.length;
        if (radioLength == undefined) {
            if (element.checked) {
                return element.value;
            }
        }
        for (var i = 0; i < radioLength; i++) {
            if (element[i].checked) {
                return element[i].value;
            }
        }
    }
    return null;
}

function validateFileSizeLimit(propertyName, sizeLimit) {
    var element = document.all[propertyName];
    if (element != null && element.value != null && element.value.length > 0) {
        var oas = new ActiveXObject("Scripting.FileSystemObject");
        var e = oas.getFile(element.value);
        var f = e.size;
        if (f > sizeLimit) {
            alert('첨부파일의 용량제한은 ' + sizeLimit + 'Bytes 입니다.');
            return false;
        }
    }
    return true;
}

function pleaseLoginForSolution() {
    alert('로그인 하십시오.');
    if (parent != null) {
        parent.location.href = '/member/login.do?method=init';
    } else {
        location.href = '/member/login.do?method=init';
    }
}

function pleaseLoginForPortal() {
    alert('로그인 하십시오.');
    if (parent != null) {
        parent.location.href = '/community/login.do?method=init';
    } else {
        location.href = '/community/login.do?method=init';
    }
}

function pleaseLoginForAdmin() {
    alert('로그인 하십시오.');
    if (parent != null) {
        parent.location.href = '/admin-login/adminLogin.do?method=init';
    } else {
        location.href = '/admin-login/adminLogin.do?method=init';
    }
}

function validateEmailAddress(useridPropertyName, domainPropertyName) {
    var userid = document.all[useridPropertyName];
    var domain = document.all[domainPropertyName];
    if (userid.value == "" || domain.value == "") { //	E-mail Check
        alert("이메일을 정확하게 입력하십시요.");
        userid.focus();
        return false;
    } else {
        var strEMail = userid.value + "@" + domain.value;
        if (!validateEmailSyntax(strEMail)) {
            alert("이메일을 정확하게 입력하십시오.");
            userid.focus();
            return false;
        }
    }
    return true;
}

function validateEmailSyntax(strEmail) {
    //금지사항( @가 2개이상, .이 붙어서 나오는 경우, @., .@, 맨처음이.인 경우 )
    var regDoNot = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;

		//필수사항( @가 하나있어야 함, Domain명에 .이 하나 이상 있어야 함. )
    var regMust = /^[a-zA-Z0-9\-\.\_]+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3})$/;

    if (!regDoNot.test(strEmail) && regMust.test(strEmail))
        return true;
    else
        return false;
}

function searchEmailDomain(domainPropertyName, domainDropDownPropertyName) {
    var domain = document.all[domainPropertyName];
    var domainDropDown = document.all[domainDropDownPropertyName];
    var strDomain = domain.value.toLowerCase();

    for (var i = 0; i < domainDropDown.length; i++) {
        if (strDomain == domainDropDown[i].value) {
            if (strDomain == "USER_ENTERED") {
                domainDropDown[i].selected = true;
                break;
            }
        }
    }

    for (var i = 0; i < domainDropDown.length; i++) {
        if (strDomain == domainDropDown[i].value) {
            domainDropDown.value = strDomain;
            if (domainDropDown.value != "USER_ENTERED" && domainDropDown[i].value != "") {
                domain.readOnly = 1;
            }
            break;
        }
    }
}

function domainChange(domainPropertyName, domainDropDownPropertyName) {
    var domain = document.all[domainPropertyName];
    var domainDropDown = document.all[domainDropDownPropertyName];
    var strSelDomain = domainDropDown[domainDropDown.selectedIndex].value;

    if (strSelDomain == "" || strSelDomain == "USER_ENTERED") {
        domain.readOnly = 0;
        domain.value = "";
        domain.focus();
    } else {
        domain.readOnly = 1;
        domain.value = strSelDomain;
    }
}

function updateHtmlOptionsWithNewValues(selectPropertyName, selectedValue, optionsArray) {
    var selectElement = document.all[selectPropertyName];
    selectElement.options.length = 0;
    for (var i = 0; optionsArray != null && i < optionsArray.length; i++) {
        selectElement.options[i] = optionsArray[i];
        if (selectedValue == optionsArray[i].value) {
            selectElement.options[i].selected = true;
        }
    }
}

function updateLinksForJknews() {
    if (parent != null) {
        var url = parent.location.href;
        if (url.indexOf("business.jknews.co.kr") > -1) {
            for (var i = 0; i <= (all_links.length - 1); i++) {
                if (all_links[i].hostname.search(rexcludedomains) == -1 && all_links[i].href.indexOf("http:") != -1)
                if (all_links[i].target.indexOf("?") > -1){
                     all_links[i].target = all_links[i].target + "&insideJknews=true";
                }   else {
                    all_links[i].target = all_links[i].target + "?insideJknews=true";
                }
            }
        }
    }
}

function deleteAccountConfirmation(moduleName, id) {
	var answer = confirm("회원탈퇴를 신청하시면 해당 아이디는 즉시 탈퇴 처리되며 이후 해당 아이디는 영구적으로 사용이 중지되므로 해당 아이디로는 재가입이 불가능합니다.\n회원탈퇴 하시겠습니까?");
	if (answer){
        location.href = "/" + moduleName + "/deleteMember.do?method=process&id=" + id;
		return true;
	}
	return false;
}

function deleteAccountConfirmationForSolution(id) {
	return deleteAccountConfirmation("member", id);
}

function deleteAccountConfirmationForAdmin(id) {
	return deleteAccountConfirmation("admin", id);
}

function deleteAccountConfirmationForPortal(id) {
	return deleteAccountConfirmation("community", id);
}

