/**
 * Function     : Æû°ú ¾ÏÈ£È­ ÇÊµå ÀÔ·Â¹Þ¾Æ submit
 * ÀÛ¼ºÀÚ       : ±èÁ¤¼·
 * ³»¿ë         : Á»´õ °£´ÜÇÏ°Ô Ã³¸®ÇÏ±â À§ÇØ.
 * @param       : orgForm      - MAIN_FORM
 *                cryptoFields - ¾ÏÈ£È­ ´ë»ó ÇÊµå
 *
 */

function crypt_submit(orgForm, crypt_fields) {

    if (orgForm==null) { alert("Form °´Ã¼ ÄÚµù ¿À·ù ! ( Form Name Ã¼Å©ÇÏ¼¼¿ä!)");  return false; }

    var desForm = document.CERT_FORM;

    //CERT_FORMÁ¸ÀçÀ¯¹« È®ÀÎ
    if(desForm == null) { alert("CERT_FORM °´Ã¼ ÄÚµù ¿À·ù ! (CERT_FORMÀÌ Á¸Á¦ÇÏ´ÂÁö Ã¼Å©ÇÏ¼¼¿ä)");  return false; }

    //¾ÏÈ£È­ ÇÊµå È®ÀÎ
    if (crypt_fields==null || crypt_fields.length < 1) { alert("¾ÏÈ£È­ÇÊµå ¿À·ù ! (¾ÏÈ£È­ ÇÊµåÀ» Ã¼Å©ÇÏ¼¼¿ä)");  return false; }

    var frmAction = orgForm.action.toString();  //Form Action °ª¼³Á¤
    var frmTarget = orgForm.target.toString();  //Form Target °ª¼³Á¤
    var frmName = orgForm.name; //Form Name°ª¼³Á¤

    if (frmAction==null || frmAction.length < 1 ) { alert("["+frmName+"] ACTION °ªÀÌ ¾ø½À´Ï´Ù. !");  return false; }
    if (frmTarget==null || frmTarget.length < 1 ) { alert("["+frmName+"] TARGET °ªÀÌ ¾ø½À´Ï´Ù. !");  return false; }

    //¾ÏÈ£È­ ÇÊµå ÀÌµ¿
    enc_move(orgForm, crypt_fields);
    desForm.action = frmAction;
    desForm.target = frmTarget;
    desForm.submit();
    return true;
}


/**
 * Function     : ¾ÏÈ£È­ Ã³¸®
 * @param       : orgForm      - MAIN_FORM
 *                desForm      - CERT_FORM
 *                cryptoFields - ¾ÏÈ£È­ ´ë»ó ÇÊµå
 *
 */

function enc_move(objFormName, cryptoFields){
    if (objFormName==null) { alert("Form °´Ã¼ ÄÚµù ¿À·ù ! (Form NameÀ» Ã¼Å©ÇÏ¼¼¿ä)");  return; }
    if (certCopyForm(objFormName, document.CERT_FORM, cryptoFields)) return;
}

function certCopyForm(orgForm, desForm, cryptoFields) {
    certCopySignForm(orgForm, desForm, cryptoFields, "");
}

/**
 * Function     : ¾ÏÈ£È­ + ÀüÀÚ¼­¸í Ã³¸®
 * @param       : orgForm      - MAIN_FORM
 *                desForm      - CERT_FORM
 *                cryptoFields - ¾ÏÈ£È­ ´ë»ó ÇÊµå
 *                signFields   - ÀüÀÚ¼­¸í ´ë»ó ÇÊµå
 *
 */
function certCopySignForm(orgForm, desForm, cryptoFields, signFields) {
    var len = orgForm.elements.length;
    var html = '';

    //CERT_FORM ÀÇ ÇÊµå »ý¼º
    for ( var n=0; n<len; n++ ) {
        if (orgForm.elements[n].type=="hidden" || orgForm.elements[n].type=="text" || orgForm.elements[n].type=="textarea" || orgForm.elements[n].type=="password" || orgForm.elements[n].type=="file") {
            html += "<input type=hidden name=\""+ orgForm.elements[n].name +"\" value=\"\">";
        } else if (orgForm.elements[n].type=="checkbox" || orgForm.elements[n].type=="radio") {
            if (orgForm.elements[n].checked) {
                html += "<input type=hidden name=\""+ orgForm.elements[n].name +"\" value=\"\">";
            } else {
                html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
            }
        } else if (orgForm.elements[n].type=="select-one" || orgForm.elements[n].type=="select-multiple") {
            for (var m=0; m<orgForm.elements[n].length; m++) {
                if (orgForm.elements[n][m].selected) {
                    html += "<input type=hidden name=\""+ orgForm.elements[n].name +"\" value=\"\">";
                } else {
                    html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
                }
            }
        } else if (orgForm.elements[n].type=="button") {
            html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
        } else {
            if (orgForm.elements[n].name)
                html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
            else
                html += "<input type=hidden name=\"__\" value=\"\">";
        }
    }
    //######################################################################################################

    //CERT_FORM ÀÇ ÇÊµå ¸¶Áö¸·¿¡ ¾ÏÈ£È­ ´ë»ó ÇÊµå¸¦ ´ãÀ» ÇÊµå »ý¼º
    html += "<input type=hidden name=CERT_FIELDS value=\"\">"+
            "<input type=hidden name=SIGN_FIELDS value=\"\">"+
            "<input type=hidden name=SIGN_DATAS  value=\"\">";
    desForm.innerHTML = html;

    var offSet = 0;

    //MAIN_FORM ¿¡¼­ CERT_FORM  ÇÊµå·Î µ¥ÀÌÅÍ °ª º¹»ç - ¾ÏÈ£È­ ´ë»ó ÇÊµå´Â ¾ÏÈ£È­ ÇÑ´Ù.
    for ( var n=0; n<len; n++ ) {
        var flag = false;
        for(var i=0; i<cryptoFields.length ; i++)
        {
            if (orgForm.elements[n].name == cryptoFields[i]) { flag = true; break; }
        }

        if (orgForm.elements[n].type=="hidden" || orgForm.elements[n].type=="text" || orgForm.elements[n].type=="textarea" || orgForm.elements[n].type=="password" || orgForm.elements[n].type=="file") {
            desForm.elements[n+offSet].value = (flag) ? encryptData(orgForm.elements[n].value) : orgForm.elements[n].value;
        } else if (orgForm.elements[n].type=="checkbox" || orgForm.elements[n].type=="radio") {
            desForm.elements[n+offSet].value = (flag) ? encryptData(orgForm.elements[n].value) : orgForm.elements[n].value;
        } else if (orgForm.elements[n].type=="select-one" || orgForm.elements[n].type=="select-multiple") {
            var m=0;
            for (m; m<orgForm.elements[n].length; m++) {
                 desForm.elements[n+offSet+m].value = (flag) ? encryptData(orgForm.elements[n][m].value) : orgForm.elements[n][m].value;
            }
            offSet += m-1;
        } else if (orgForm.elements[n].type=="button") {
            desForm.elements[n+offSet].value = (flag) ? encryptData(orgForm.elements[n].value) : orgForm.elements[n].value;
        }
    }

    desForm.elements[len+offSet].value = cryptoFields;

    //######################################################################################################
    if (signFields != "" && signFields != " ") {
        if (signGATE.GenSignInit() != 1) {
            alert("ÀüÀÚ¼­¸í ÃÊ±âÈ­ ¿À·ù ["+signGATE.GetLastErrMsg()+"]"); //GetLastErrMsg - SG_GetLastError
            return true;
        }

        //CERT_FORM¿¡ ÀüÀÚ¼­¸í ´ë»ó ÇÊµå·Î ÀüÀÚ¼­¸íÇÔ.
        var tmp = "";
        for ( var n=0; n<len; n++ ) {
            var flag = false;
            for(var i=0; i<signFields.length ; i++)
            {
                if (orgForm.elements[n].name == signFields[i]) { flag = true; break; }
            }

            if (orgForm.elements[n].type=="hidden" || orgForm.elements[n].type=="text" || orgForm.elements[n].type=="textarea" || orgForm.elements[n].type=="password" || orgForm.elements[n].type=="file") {
                tmp = (flag) ? signedData(orgForm.elements[n].value) : orgForm.elements[n].value;
            } else if (orgForm.elements[n].type=="checkbox" || orgForm.elements[n].type=="radio") {
                if (orgForm.elements[n].checked)
                    tmp = (flag) ? signedData(orgForm.elements[n].value) : orgForm.elements[n].value;
            } else if (orgForm.elements[n].type=="select-one" || orgForm.elements[n].type=="select-multiple") {
                for (var m=0; m<orgForm.elements[n].length; m++) {
                     if (orgForm.elements[n][m].selected)
                        tmp = (flag) ? signedData(orgForm.elements[n][m].value) : orgForm.elements[n][m].value;
                }
            } else if (orgForm.elements[n].type=="button") {
                tmp = (flag) ? signedData(orgForm.elements[n].value) : orgForm.elements[n].value;
            }
        }

        //CERT_FORM ÀÇ ÇÊµå ¸¶Áö¸·¿¡ ÀüÀÚ¼­¸í ´ë»ó ÇÊµå¸¦ ´ãÀ» ÇÊµå »ý¼º
        desForm.elements[len+offSet+1].value = signFields;
        desForm.elements[len+offSet+2].value = signGATE.GenSignFinal();
    }

    return false;
}

/**
 * Function     : ¾ÏÈ£È­ Ã³¸®
 * @param       : str - º¹È£È­ ´ë»ó Data
 *
 */
function encryptData(str) {
    if (str=="") return "";
    return signGATE.EncryptData(str);
}

/**
 * Function     : ÀüÀÚ¼­¸í Ã³¸®
 * @param       : str - ÀüÀÚ¼­¸í ´ë»ó Data
 *
 */
function signedData(str) {
    //¼­¹öÂÊ decSet.setSignedNoBase64()À» »ç¿ëÇÒ °æ¿ì¿¡ ¾Æ·¡ Script¸¦ »ç¿ë.
    if (str=="") return;
    //return signGATE.GenSignUpdate(str);
    //alert("["+str+"]-["+signGATE.Base64Encode(str)+"]");
    return signGATE.GenSignUpdate(signGATE.Base64Encode(str));
}

/**
 * Function     : º¹È£È­ Ã³¸®(Á¶È¸¿ë)
 * @param       : str - º¹È£È­ ´ë»ó Data
 *
 */
function decryptPrint(str) {
    var ret  = decryptData(str);
    document.write( ret );
}

/**
 * Function     : º¹È£È­ Ã³¸®(½ºÅ©¸³Æ®¿ë)
 * @param       : str - º¹È£È­ ´ë»ó Data
 *
 */
function decryptData(str) {
    var ret = signGATE.DecryptData(str);
    return ret == "" ? str : ret ;          //signGATE.GetLastError()
}

/**
 * Function     : º¹È£È­ Ã³¸®(ÀüÀÚ¼­¸í¿ë)
 * @param       : str - º¹È£È­ ´ë»ó Data
 *
 */
function decryptSignedData(str) {
    var ret = signGATE.DecryptData(str);
    return ret ;          //signGATE.GetLastError()
}

/**
 * Function     : º¹È£È­ Ã³¸®(ÀÔ·Â¿ë)
 * @param       : replace value - ¹ÞÀ» HTML Obj
 *                str - º¹È£È­ ´ë»ó Data
 *
 */
function decryptedData(objTxt, str) {
    if (str=="") return;
    objTxt.value = decryptData(str);
}

/**
 * Function     : ÀüÀÚ¼­¸í °Ë»ç Ã³¸®
 * @param       : signForm       - SIGN_FORM
 *                signedData     - ÀüÀÚ¼­¸í°ª
 *                strSvrSignCert - ¼­¸í¿ë ÀÎÁõ¼­
 *
 */
function verifyData(signForm, signedData, strSvrSignCert) {
    return verifyData(signForm, signedData, strSvrSignCert, true);
}

/**
 * Function     : ÀüÀÚ¼­¸í °Ë»ç Ã³¸®
 * @param       : signForm       - SIGN_FORM
 *                signedData     - ÀüÀÚ¼­¸í°ª
 *                strSvrSignCert - ¼­¸í¿ë ÀÎÁõ¼­
 *                bEncrypted     - ¿ø¹® ¾ÏÈ£È­ ¿©ºÎ
 *
 */
function verifyData(signForm, signedData, strSvrSignCert, bEncrypted) {
    var len = signForm.elements.length;

    if (!signGATE.VrfSignInit()) return false;
    for ( var n=0; n<len-2; n++ ) {
        if (bEncrypted) {
            if (!signGATE.VrfSignUpdate( decryptSignedData(signForm.elements[n].value) )) return false;
        } else {
            if (!signGATE.VrfSignUpdate( signForm.elements[n].value )) return false;
        }
    }
    if (!signGATE.VrfSignFinal(signedData, strSvrSignCert)) return false;

    return true;
}

/**
 * Function     : µ¥ÀÌÅÍ Ã³¸®
 * @param       : orgForm      - MAIN_FORM
 *                desForm      - SEND_FORM
 *
 */
function copyForm(orgForm, desForm) {
    var len = orgForm.elements.length;
    var html = '';

    //CERT_FORM ÀÇ ÇÊµå »ý¼º
    //######################################################################################################
    for ( var n=0; n<len; n++ ) {
        if (orgForm.elements[n].type=="hidden" || orgForm.elements[n].type=="text" || orgForm.elements[n].type=="textarea" || orgForm.elements[n].type=="password"  || orgForm.elements[n].type=="file") {
            html += "<input type=hidden name=\""+ orgForm.elements[n].name +"\" value=\"\">";
        } else if (orgForm.elements[n].type=="checkbox" || orgForm.elements[n].type=="radio") {
            if (orgForm.elements[n].checked) {
                html += "<input type=hidden name=\""+ orgForm.elements[n].name +"\" value=\"\">";
            } else {
                html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
            }
        } else if (orgForm.elements[n].type=="select-one" || orgForm.elements[n].type=="select-multiple") {
            for (var m=0; m<orgForm.elements[n].length; m++) {
                if (orgForm.elements[n][m].selected) {
                    html += "<input type=hidden name=\""+ orgForm.elements[n].name +"\" value=\"\">";
                } else {
                    html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
                }
            }
        } else if (orgForm.elements[n].type=="button") {
            html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
        } else {
            if (orgForm.elements[n].name)
                html += "<input type=hidden name=\"_"+ orgForm.elements[n].name +"_\" value=\"\">";
            else
                html += "<input type=hidden name=\"__\" value=\"\">";
        }
    }
    //######################################################################################################

    desForm.innerHTML = html;

    var offSet = 0;

    //MAIN_FORM ¿¡¼­ SEND_FORM  ÇÊµå·Î µ¥ÀÌÅÍ °ª º¹»ç.
    for ( var n=0; n<len; n++ ) {
        if (orgForm.elements[n].type=="hidden" || orgForm.elements[n].type=="text" || orgForm.elements[n].type=="textarea" || orgForm.elements[n].type=="password" || orgForm.elements[n].type=="file") {
            desForm.elements[n+offSet].value = orgForm.elements[n].value;
        } else if (orgForm.elements[n].type=="checkbox" || orgForm.elements[n].type=="radio") {
            desForm.elements[n+offSet].value = orgForm.elements[n].value;
        } else if (orgForm.elements[n].type=="select-one" || orgForm.elements[n].type=="select-multiple") {
            var m=0;
            for (m; m<orgForm.elements[n].length; m++) {
                 desForm.elements[n+offSet+m].value = orgForm.elements[n][m].value;
            }
            offSet += m-1;
        } else if (orgForm.elements[n].type=="button") {
            desForm.elements[n+offSet].value = orgForm.elements[n].value;
        }
    }
}

function is_number( buf )
{
   var int_value = "1234567890";
   var iflag = 0;

   for( i = 0; i < buf.length; i++ )
   {
        tchar = buf.charAt(i);

        for( j = 0; j < int_value.length; j++ )
        {
             if( tchar == int_value.charAt(j) )
             {
                 iflag = iflag + 1;
                 break;
             }
        }
   }

   if( iflag != buf.length )
       return 0;
   else
       return 1;
}

function check_input_value( buf )
{
    var iflag = 0;
    var int_value = "1234567890";

    for( i = 0; i < buf.length; i++ )
    {
        tchar = buf.charAt(i);

        for( j = 0; j < int_value.length; j++ )
        {
            if( tchar == int_value.charAt(j) )
            {
                iflag = iflag + 1;
                break;
            }
        }
   }

   if( iflag != buf.length )
       return 0;
   else
       return 1;
}

function autoTab(input,len, e)
{
    var isNN = (navigator.appName.indexOf("Netscape")!=-1);

    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

    if(input.value.length >= len && !containsElement(filter,keyCode))
    {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input)+1) % input.form.length].focus();
    }

    function containsElement(arr, ele)
    {
        var found = false, index = 0;

        while(!found && index < arr.length)
            if(arr[index] == ele)
                found = true;
            else
                index++;

        return found;
    }

    function getIndex(input) {
        var index = -1, i = 0, found = false;

        while (i < input.form.length && index == -1)
            if (input.form[i] == input)index = i;
            else i++;

        return index;
    }

    return true;
}
