//////////////////////////////Update Zhang////////////////////////////////
// XecureWeb SSL Client Java Script ver4.1  2001.5.30
//
// ¾ÆÁ÷ : Netscape 6.0Àº Áö¿øµÇÁö ¾Ê½À´Ï´Ù....
// Edit List 2000,05,30
// process_error() --> XecureWebError() // by Zhang º¯°æ
// function IsNetscape60()    // by Zhang Ãß°¡
// function XecureUnescape(Msg)   // by Zhang Ãß°¡
// function XecureEscape(Msg)   // by Zhang Ãß°¡
// function XecurePath(xpath)   // by zhang Ãß°¡

/**
 * @mainpage XecureWeb SSL Client JavaScript API¸Þ´º¾ó
 *
 * @section Program XecureWeb SSL Client JavaScript
 * - ÇÁ·Î±×·¥ ÀÌ¸§ : XecureWeb SSL Client JavaScript
 * - ÇÁ·Î±×·¥ ³»¿ë : XecureWeb SSL ClientÀÇ APIÀÇ °­È­µÈ ±â´ÉÀ» »ç¿ëÀÚ ÆíÀÇ¿¡ ¸Âµµ·Ï Á¦°øÇÑ´Ù.
 *
 * @section CREATEINFO ÀÛ¼ºÁ¤º¸
 * - ÀÛ¼ºÀÏ : 2008/04/28
 */
/**
 * @file xecureweb.js
 * xecureweb javascriptÀÇ ±¸ÇöÃ¼
 *
 * @author  PKI Part, Softforum R&D Team
 * @date    2008/04/28
 * @attention Copyright (c) 2008 Softforum - All rights reserved.
 */


/**
 * @defgroup clientRequestCryptoAPI Å¬¶óÀÌ¾ðÆ® Request ¾ÏÈ£ API
 * Å¬¶óÀÌ¾ðÆ® Request ¾ÏÈ£ API<BR>
 */
/**
 * @defgroup serverResponseCryptoAPI ¼­¹ö Response º¹È£ API
 * ¼­¹ö Response º¹È£ API<BR>
 */
/**
 * @defgroup digitalSignAPI ÀüÀÚ¼­¸í API
 * ÀüÀÚ¼­¸í API<BR>
 * @code
 * var sign_desc=¡±¡±; ( ¼­¸í¿ø¹® È®ÀÎÃ¢ÀÇ ±âº» ¼³¸í¹® )
 * var show_plain=1; ( 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ º¸ÀÌÁö ¾Ê±â , 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ º¸ÀÌ±â )
 * var accept_cert = ¡°yessign,SoftForum CA¡±; (¼­¸í¿¡ »ç¿ëµÉ À¯È¿ÇÑ ÀÎÁõ±â°ü ¸ñ·Ï (CN) )
 * // Yessign Test : yessignCA-TEST
 * // Yessign Real : yessignCA
 * // SignGate Test : SignGateFTCA
 * // SignGate Real : signGate CA
 * // SignKorea Test : SignKorea Test CA
 * // SignKorea Real : SignKorea CA
 * // ±âÅ¸ ÀÎÁõ±â°üÀº¡¦¹ß±ÞÀÚ(ÀÎÁõ±â°ü)ÀÇCN
 * var pwd_fail = 3; (ÀÎÁõ¼­ ¾ÏÈ£ ¿À·ù¸¦ Çã¿ëÈ¸¼ö)
 * var xgate_addr = window.location.hostname + ¡°:443:8080¡±;
 * (¼­¹öÃø ¼¼¼Ç°ü¸®ÀÚÀÇ IP¿Í Æ÷Æ®¹øÈ£ , 443 : Direct port , 8080 : Proxy port )
 * @endcode
 */
/**
 * @defgroup CMPAPI ÀÎÁõ¼­ ¹ß±Þ/°»½Å/Æó±â °ü·Ã CMP API
 * ÀÎÁõ¼­ ¹ß±Þ/°»½Å/Æó±â °ü·Ã CMP API<BR>
 * @code
 * var ca_ip =  ¡°203.233.91.232¡±;  (YesSign °øÀÎ ÀÎÁõ±â°ü IP - Test)
 * var ca_ip =  ¡°203.233.91.71¡±;  (YesSign °øÀÎ ÀÎÁõ±â°ü IP - Real)
 * var ca_ip =  "192.168.10.25;SoftforumCA"; (Xecure ÀÎÁõ±â°ü IP;CA Name)
 * var ca_port = 4512; (YesSign °øÀÎ ÀÎÁõ±â°ü Port )
 * var ca_type = 11; (YesSign ÀÎÁõ±â°ü Type ? Test)
 * var ca_type = 1; (YesSign ÀÎÁõ±â°ü Type ? Real)
 * var ca_type = 101; (Xecure ÀÎÁõ±â°ü Type ? RSA)
 * var ca_type = 101+256; (Xecure ÀÎÁõ±â°ü Type ? RSA & CSP »ç¿ë½Ã Å°1½Ö¸¸ »ý¼º)
 * var ca_type = 102; (Xecure ÀÎÁõ±â°ü Type ? GPKI)
 * var pwd_fail = 3; (ÀÎÁõ¼­ ¾ÏÈ£ ¿À·ù¸¦ Çã¿ëÈ¸¼ö)
 * @endcode
 */
/**
 * @defgroup SFCA_CMPAPI SFCA ÀÎÁõ¼­ °ü·Ã API
 * SFCA ÀÎÁõ¼­ °ü·Ã API<BR>
 * <B>Linux System¿¡¼­´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.</B>
 */
/**
 * @defgroup etcAPI ±âÅ¸ API
 * ±âÅ¸ API<BR>
 */

var gIsContinue=0;
var busy_info = "¾ÏÈ£È­ ÀÛ¾÷ÀÌ ÁøÇàÁßÀÔ´Ï´Ù. È®ÀÎÀ» ´©¸£½Ã°í Àá½Ã ±â´Ù·Á ÁÖ½Ê½Ã¿À."

/**
 * ¾Ïº¹È£½Ã ÆäÀÌÁö¿¡ ¸í½ÃµÈ ¹®ÀÚ¼ÂÀÇ »ç¿ë ¿©ºÎ<BR>
 * XecureWeb Java ¹öÀü ¾Ïº¹È£½Ã ½Ã½ºÅÛ µðÆúÆ® ÀÎÄÚµù°ú ´Ù¸¥ ¹®ÀÚ¼ÂÀÇ<BR>
 * ¸Þ¼¼Áö¸¦ Ã³¸®ÇÏ´Â °æ¿ì true ¼³Á¤
 *
 * @since 6.0 v210
 */
var usePageCharset=true;

// YESSIGN CA ADDRESS//////////////////////////////////////////////////////
// TEST : 203.233.91.234
// REAL : 203.233.91.71
//var yessign_ca_type = 1;  // Yessign Real
/**
 * ±Ý°á¿ø CAÀÇ Á¾·ù<BR>
 * 1 : Yessign Real<BR>
 * 11 : Yessign Test
 */
var yessign_ca_type = 11; // Yessign Test

/**
 * ±Ý°á¿ø CAÀÇ ¼­ºñ½º IP
 */
var yessign_ca_ip =  "203.233.91.234";

/**
 * ±Ý°á¿ø CAÀÇ ¼­ºñ½º Port
 */
var yessign_ca_port = 4512;


// XECURE CA ADDRESS///////////////////////////////////////////////////////
// TEST : 192.168.10.30
var xecure_ca_type = 101; // XecureCA (RSA)
//var xecure_ca_ip =  window.location.host + ";kedkoreaCA";
var xecure_ca_ip =  window.location.host+";kedkoreaCA";
var xecure_ca_port = 7630;


var xecure_ca_type_1 = 101; // XecureCA (RSA)
//var xecure_ca_type = 102; // XecureCA (GPKI)
var xecure_ca_ip_1 =  "192.168.10.30;mma ca";
var xecure_ca_port_1 = 2223;

/**
 * ÀüÀÚ¼­¸í, ÀÎÁõ¼­ °»½Å, ÀÎÁõ¼­ Æó±â½Ã¿¡ ÀÎÁõ¼­ ¾ÏÈ£¿À·ù¸¦ Çã¿ëÈ¸¼ö<BR>
 */
var pwd_fail = 3;

/**
 * ¼­¸í¿¡ »ç¿ëµÉ À¯È¿ÇÑ ÀÎÁõ±â°ü ¸ñ·Ï (CN)<BR>
 * Sign, RequestCertificate, RevokeCertificate ½Ã ³ªÅ¸³ª´Â ÀÎÁõ¼­ ¸ñ·Ï <BR>
 * XecureWeb ver 5.1 ¿¡¼­´Â accept_cert ¿¡ À¯È¿ÇÑ ÀÎÁõ±â°ü ÀÎÁõ¼­ÀÇ <BR>
 * CN À» Á¤È®È÷ Àû¾îÁØ´Ù.<BR>
 * ver 4.0 ¿¡¼­ yessign ÀÌ¶ó Àû¾ú´ø °ÍÀº yessignCA-TEST, yessignCA ·Î ¼¼ºÐÈ­ µÈ´Ù.<BR>
 * YESSIGN TEST : yessignCA-TEST<BR>
 * YESSIGN REAL : yessignCA<BR>
 */
var accept_cert = "kedkoreaCA,CA131000002,yessignCA,signGATE CA,SignKorea CA,CrossCertCA,NCASign CA,TradeSignCA,SignGateFTCA,CrossCert Certificate Authority,NCASignCA,signGATE CA2,CA131000002,CA128000002,CA131000009;"


//////////////////////////////////////////////////////////////////////////////////
// ·Î±×ÀÎ Ã¢¿¡ º¸ÀÏ ÀÌ¹ÌÁö¸¦ ´Ù¿î·Îµå ¹ÞÀ» URL
//var bannerUrl =  "http://" + window.location.host + "/XecureObject/xecure.bmp";
/**
 * ·Î±×ÀÎ Ã¢¿¡ º¸ÀÏ ÀÌ¹ÌÁö¸¦ ´Ù¿î·Îµå ¹ÞÀ» URL<BR>
 */
var bannerUrl =  "http://" + window.location.host + "/XecureObject/smpploan_logo2.bmp.sig";

/**
 * ÀÎÁõ±â°ü ÀÎÁõ¼­ ´Ù¿î·Îµå½Ã ÀÎÁõ±â°ü ÀÎÁõ¼­<BR>
 */
var pCaCertUrl= "http://" + window.location.host + "/XecureObject/signed_cacert.bin";
/**
 * ÀÎÁõ±â°ü ÀÎÁõ¼­ ´Ù¿î·Îµå½Ã ÀÎÁõ±â°ü ÀÎÁõ¼­ CN<BR>
 */
var pCaCertName = "kedkoreaCA";

/**
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ÀÇ ±âº» ¼³¸í¹®<BR>
 */
var sign_desc = "";
/**
 * ÀüÀÚ¼­¸í È®ÀÎÃ¢¿¡ º¸ÀÏ ¸Þ¼¼Áö¿Í ÀüÀÚ¼­¸í È®ÀÎÃ¢ º¸±â ¿É¼Ç<BR>
 * 0 : ¼­¸í ¿ø¹® Ãâ·Â ¾ÈÇÔ, 1: ¼­¸í ¿ø¹® Ãâ·Â
 */
var show_plain = 0;

/**
 * xgate ¼­¹ö ¸í:Æ÷Æ® ÁöÁ¤ , Æ÷Æ® »ý·«½Ã µðÆúÆ®·Î 443 Æ÷Æ® »ç¿ë<BR>
 */
var xgate_addr  = window.location.hostname + ":443:8080";

///////////////////////////////////////////////////////////////////////////////////
// Netscape plugin version information
var packageURL = 'http://' + window.location.host + '/XecureObject/NPXecSSL_Install.jar';
var versionMaj = 5;
var versionMin = 1;
var versionRel = 0;

/**
 * °ü¸®Ã¢, ¼­¸íÃ¢, LoginÃ¢¿¡¼­ ÀÎÁõ¼­ List¸¦ ±¸ºÐÇÏ¿© ¹ß±ÞÀÚ¸¦ RenameÇÒ ¶§<BR>
 * »ç¿ëÇÏ¸ç, ±¸ºÐÀº ÀÎÁõ¼­ÀÇ Á¤Ã¥°ªÀ» ±âÁØÀ¸·Î RenameµÇ°í, Default´Â »ç¼³ÀÎÁõ¼­ ÀÌ´Ù.<BR>
 * ¹ß±ÞÀÚ´Â ÀÎÁõ¼­ ¹ß±ÞÀÚÀÇ CN°ªÀ» ±âÁØÀ¸·Î RenameµÈ´Ù.<BR>
 * ÀÚ¼¼ÇÑ °ÍÀº SE¿¡°Ô ¹®ÀÇ.<BR>
 * @ingroup etcAPI
 */
function SetConvertTable() {
}

function UserAgent()
{
  return navigator.userAgent.substring(0,9);
}

function IsNetscape()     // by Zhang
{
  if(navigator.appName == 'Netscape')
    return true ;
  else
    return false ;
}

function IsNetscape60()     // by Zhang
{
  if(IsNetscape() && UserAgent() == 'Mozilla/5')
    return true ;
  else
    return false ;
}

function IsNetscape60()     // by Zhang
{
  if(IsNetscape() && UserAgent() == 'Mozilla/5')
    return true ;
  else
    return false ;
}

function XecureUnescape(Msg)    // by Zhang
{
  if(IsNetscape())
    return unescape(Msg) ;
  else
    return Msg ;
}

/**
 * ÁÖ¾îÁø ¹®ÀÚ¿­À» Escape Ã³¸® ÇØÁØ´Ù.<BR>
 *
 * @param Msg ¿ø¹®
 * @return EscapeµÈ ¹®ÀÚ¿­
 */
function XecureEscape(Msg)    // by Zhang
{
  if(IsNetscape())
    return escape(Msg) ;
  else
    return Msg ;
}

function XecurePath(xpath)    // by zhang
{
  if(IsNetscape())
    return (xpath) ;
  else
    return ("/" + xpath) ;
}

function XecureAddQuery(qs)
{
  if(qs == "")
    return "" ;
  else
    return "&" + qs ;
}

function XecureWebError()   // by zhang
{
  var errCode = 0 ;
  var errMsg = "" ;

  if( IsNetscape60() )    // Netscape 6.0
  {
    errCode = document.XecureWeb.nsIXecurePluginInstance.LastErrCode();
    errMsg  = document.XecureWeb.nsIXecurePluginInstance.LastErrMsg();
  }
  else
  {
    errCode = document.XecureWeb.LastErrCode();
    errMsg  = document.XecureWeb.LastErrMsg();
  }

  if(errCode == -144)
  {
    if(confirm("¿¡·¯ÄÚµå : " + errCode + "\n\n" + XecureUnescape(errMsg) + "\n\n ÀÎÁõ¼­°ü¸®Ã¢À» ¿­°Ú½À´Ï±î?"))
      ShowCertManager() ;
  }
//  else if(errCode != 0)
    alert( "¿¡·¯ÄÚµå : " + errCode + "\n\n" + XecureUnescape(errMsg) );

  return false;
}

/**
 * ISO Çü½ÄÀÇ urlÀ»ASCII ¹®ÀÚ¿­·Î ÀüÈ¯ÇÑ´Ù.
 *
 * @ingroup etcAPI
 * @param url escape Ã³¸®ÇÒ ¹®ÀÚ¿­
 * @return escape Ã³¸®µÈ ¹®ÀÚ¿­
 */
function escape_url(url) {
  var i;
  var ch;
  var out = '';
  var url_string = '';

  url_string = String(url);

  for (i = 0; i < url_string.length; i++) {
    ch = url_string.charAt(i);
    if (ch == ' ')    out += '%20';
    else if (ch == '%') out += '%25';
    else if (ch == '&') out += '%26';
    else if (ch == '+') out += '%2B';
    else if (ch == '=') out += '%3D';
    else if (ch == '?') out += '%3F';
    else        out += ch;
  }
  return out;
}

function ran_gen()
{
  var maxnumbers = "999999";
  var r = Math.round(Math.random() * (maxnumbers-1))+1+"";

  for(var i=0; i < 6-r.length; i++)
    r = "0" + r;

  return r;
}

/**
 * <B>º¸¾È ¼¼¼ÇÀ» ¿¬°áÇÏ°í ÁÖ¾îÁø urlÀÇquery string ºÎºÐÀ» ¾ÏÈ£È­ ÇÏÁö ¾Ê°í ÀÌµ¿ÇÑ´Ù. script ( javascript È¤Àº VBscript ) ³»ºÎ¿¡¼­ ÀÌµ¿ÇÒ °æ¿ì »ç¿ë</B><BR>
 * <BR>
 * script¹® ¾È¿¡¼­ window.open ÀÌ³ª, document.location.href µîÀ» ÀÌ¿ëÇÑ ÆäÀÌÁö <BR>
 * ÀÌµ¿½Ã¿¡ query stringÀ» ¾ÏÈ£È­ ÇÏÁö ¾Ê°í ÀÌµ¿ÇÒ °æ¿ì<BR>
 * window.open, document.location.href ´ë½ÅXecureNavigate_NoEnc ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.</B> <BR>
 * <BR>
 * Query stringÀÌ ¾ø´Â °æ¿ì  :   <B>url?q=¾ÏÈ£È­µÈ SID</B><BR>
 * Query stringÀÌ ÀÖ´Â °æ¿ì  :   <B>url?q=¾ÏÈ£È­µÈ SID;¾ÏÈ£È­ µÇÁö ¾ÊÀº µ¥ÀÌÅÍ</B><BR>
 * <BR>
 * @ingroup clientRequestCryptoAPI
 * @param url : ÀÌµ¿ÇÒ URL
 * @param target ÀÌµ¿ÇÒ Å¸°Ù
 * @return Success : true<BR>
 * Fail : false
 */
function XecureNavigate_NoEnc( url, target )
{
  var qs ;
  var path = "/";
  var sid;
  var xecure_url;

  // get path info & query string & hash from url
  qs_begin_index = url.indexOf('?');
  path = getPath(url)

  // get query string action url
  if ( qs_begin_index < 0 ) {
    qs = "";
  }
  else {
    qs = url.substring(qs_begin_index + 1, url.length );
  }

  if( gIsContinue == 0 ) {
    gIsContinue = 1;
    if( IsNetscape60() )    // Netscape 6.0
      sid = document.XecureWeb.nsIXecurePluginInstance.BlockEnc(xgate_addr, path, "", "GET");
    else
      sid = document.XecureWeb.BlockEnc ( xgate_addr, path, "", "GET" );
    gIsContinue = 0;
  }
  else {
    alert(busy_info);
    return false ;
  }

  if( sid == "")  return XecureWebError();

  xecure_url = path + "?q=" + sid + XecureAddQuery(qs);
  // adding character set information
  if(usePageCharset)
    xecure_url += "&charset=" + document.charset;

  open ( xecure_url, target );
}

/**
 * <B>º¸¾È ¼¼¼ÇÀ» ¿¬°áÇÏ°í ÁÖ¾îÁø urlÀÇquery stringÀ» ¾ÏÈ£È­ ÇÑÈÄ ÀÔ·ÂµÈ frame À¸·Î ÀÌµ¿ÇÑ´Ù. script ( javascript È¤Àº VBscript ) ³»ºÎ¿¡¼­ ÀÌµ¿ÇÒ °æ¿ì »ç¿ë</B><BR>
 * <BR>
 * script¹® ¾È¿¡¼­ window.open ÀÌ³ª, document.location.href µîÀ» ÀÌ¿ëÇÑ ÆäÀÌÁö ÀÌµ¿½Ã¿¡´Â window.open, document.location.href ´ë½Å<BR>
 * XecureNavigate ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. <BR>
 * <BR>
 * Query stringÀÌ ¾ø´Â °æ¿ì  :   <B>url?q=¾ÏÈ£È­µÈ SID</B><BR>
 * Query stringÀÌ ÀÖ´Â °æ¿ì  :   <B>url?q=¾ÏÈ£È­µÈ SID;¾ÏÈ£È­µÈ µ¥ÀÌÅÍ</B><BR>
 * <BR>
 * example><BR>
 * &lt;script language=javascript> <BR>
 * window.open ( ¡°/hello.php¡±, ¡°body¡± ) ; <BR>
 * &lt;/script> <BR>
 * ==> <BR>
 * &lt;script language=javascript> <BR>
 * XecureNavigate ( ¡°/hello.php¡±, ¡°body¡± ) ; <BR>
 * &lt;/script><BR>
 *
 * @ingroup clientRequestCryptoAPI
 * @param url ÀÌµ¿ÇÒ URL<BR>
 * @param target °á°ú È­¸éÀÌ Ãâ·ÂµÉ frame¸í<BR>
 * @param feature »õ·Î¿î Ã¢¿¡ ´ëÇÑ ¼ºÁú ( Ã¢ Å©±â µîµî ) ? ¿É¼Ç
 *
 * @return Success : true<BR>
 * Fail : false
 *
 */
function XecureNavigate( url, target, feature )
{
var qs ;
var path = "/";
var cipher;
var xecure_url;

// get path info & query string & hash from url
qs_begin_index = url.indexOf('?');
path = getPath(url)
// get query string action url
if ( qs_begin_index < 0 ) {
  qs = "";
}
else {
  qs = url.substring(qs_begin_index + 1, url.length );
}

if( gIsContinue == 0 ) {
  gIsContinue = 1;
  if( IsNetscape60() )    // Netscape 6.0
    cipher = document.XecureWeb.nsIXecurePluginInstance.BlockEnc(xgate_addr, path, XecureEscape(qs), "GET");
  else
    cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
  gIsContinue = 0;
}
else {
  alert(busy_info);
  return false;
}

if( cipher == "" )  return XecureWebError();

xecure_url = path + "?q=" + escape_url(cipher);
// adding character set information
if(usePageCharset)
  xecure_url += "&charset=" + document.charset;

if (feature=="" || feature==null) open ( xecure_url, target );
else open(xecure_url, target, feature );

}

/**
 * ÀüÀÚºÀÅõ¸¦ Áö¿øÇÏ´Â XecureNagivate<BR>
 *
 * @ingroup clientRequestCryptoAPI
 * @since XecureWeb 6.0 v220
 * @see XecureNavigate
 */
function XecureNavigate_Env( url, target, feature )
{
var qs ;
var path = "/";
var cipher;
var xecure_url;

// get path info & query string & hash from url
qs_begin_index = url.indexOf('?');
path = getPath(url)
// get query string action url
if ( qs_begin_index < 0 ) {
  qs = "";
}
else {
  qs = url.substring(qs_begin_index + 1, url.length );
}

if( gIsContinue == 0 ) {
  gIsContinue = 1;
  //cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs), "GET");
  cipher = EnvelopData(XecureEscape(qs), "", serverCert, 1);
  gIsContinue = 0;
}
else {
  alert(busy_info);
  return false;
}

if( cipher == "" )  return XecureWebError();

//xecure_url = path + "?q=" + escape_url(cipher);
xecure_url = path + "?eq=" + escape_url(cipher);

// adding character set information
if(usePageCharset)
  xecure_url += "&charset=" + document.charset;

if (feature=="" || feature==null) {
  open ( xecure_url, target );
}
else {
  open(xecure_url, target, feature );
}

}

/**
 * º¸¾È¼¼¼ÇÀ» ¿¬°áÇÏ°í <a href> ¹®À» ÀÌ¿ëÇÏ¿© ÁÖ¾îÁø linkÀÇquery stringÀ» ¾ÏÈ£È­ ÇÏ¿© Àü¼ÛÇÑ´Ù.<BR>
 * ÀÌ ÇÔ¼ö°¡ È£ÃâµÇ¸é ÄÁÆ®·ÑÀº ClientSM ¿¡°Ô xgate¿ÍSSL handshakingÀ» ¿äÃ»ÇÏ¿© »õ·Î¿î º¸¾È ¼¼¼ÇÀ»<BR>
 * ¿¬°áÇÏ°Å³ª ¿¬°áµÈ º¸¾È¼¼¼ÇÀÌ ÀÖÀ¸¸é Resume¿¡ µé¾î°£´Ù.  javascript onClick ÀÌº¥Æ®¸¦ »ç¿ëÇÏ¿©<BR>
 * XecureLink ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼ö°¡ ½ÇÇàµÇ¾î ÁÖ¾îÁø url·Î ÀÌµ¿ÇÒ ¶§append µÇ´Â query stringÀº<BR>
 * ´ÙÀ½ÀÇ Çü½ÄÀÌ´Ù.<BR>
 * <BR>
 * ¾ÏÈ£È­µÈ µ¥ÀÌÅÍ°¡ ¾ø´Â °æ¿ì  :   <B>url?q=¾ÏÈ£È­µÈ SID</B><BR>
 * ¾ÏÈ£È­µÈ µ¥ÀÌÅÍ°¡ ÀÖ´Â °æ¿ì  :   <B>url?q=¾ÏÈ£È­µÈ SID;¾ÏÈ£È­µÈ µ¥ÀÌÅÍ</B><BR>
 * <BR>
 * ex><BR>
 * <a href=¡±enc_demo_result.php?aa=test&bb=test¡± onClick=¡±return XecureLink(this);¡±>¾ÏÈ£</a><BR>
 *
 * @ingroup clientRequestCryptoAPI
 * @param link link °´Ã¼
 * @return Success : true
 * Fail : false
 k*/
function XecureLink( link )
{
var qs ;
//  var path = "/";
var cipher;


// get path info & query string from action url

if ( link.protocol != "http:" ) {
  // alert ( "http ÇÁ·ÎÅäÄÝ¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù." );
  return true;
}

qs = link.search;
if ( qs.length > 1 ) {
  qs = link.search.substring(1);
}

hash = link.hash;

if( gIsContinue == 0 ) {
  path = XecurePath(link.pathname) ;
  gIsContinue = 1;

  if( IsNetscape60() )    // Netscape 6.0
    cipher = document.XecureWeb.nsIXecurePluginInstance.BlockEnc(xgate_addr, path, XecureEscape(qs), "GET");
  else {
    //cipher = document.XecureWeb.BlockEnc(xgate_addr, "/XecureDemo/jsp/ibs/transfer_input.jsp", XecureEscape(qs),"GET");
    cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
  }
  gIsContinue = 0;
}
else {
  alert(busy_info);
  return false;
}
if( cipher.length == 0) return XecureWebError() ;

// link.search = "?q=" + escape_url(cipher);
xecure_url = "http://" + link.host + path + hash + "?q=" + escape_url(cipher);
// adding character set information
if(usePageCharset)
  xecure_url += "&charset=" + document.charset;

if ( link.target == "" || link.target == null ) open ( xecure_url, "_self" );
else open( xecure_url, link.target );
return false;
}

/**
 * ÀüÀÚºÀÅõ¸¦ Áö¿øÇÏ´Â XecureLink<BR>
 *
 * @ingroup clientRequestCryptoAPI
 * @since XecureWeb 6.0 v220
 * @see XecureLink
 */
function XecureLink_Env( link )
{
var qs ;
//  var path = "/";
var cipher;


// get path info & query string from action url

if ( link.protocol != "http:" ) {
  // alert ( "http ÇÁ·ÎÅäÄÝ¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù." );
  return true;
}

qs = link.search;
if ( qs.length > 1 ) {
  qs = link.search.substring(1);
}

hash = link.hash;

if( gIsContinue == 0 ) {
  path = XecurePath(link.pathname) ;
  gIsContinue = 1;
  //cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
  cipher = EnvelopData(XecureEscape(qs), "", serverCert, 1);
  gIsContinue = 0;
}
else {
  alert(busy_info);
  return false;
}
if( cipher.length == 0) return XecureWebError() ;

// link.search = "?q=" + escape_url(cipher);
//xecure_url = "http://" + link.host + path + hash + "?q=" + escape_url(cipher);
xecure_url = "http://" + link.host + path + hash + "?eq=" + escape_url(cipher);

// adding character set information
if(usePageCharset)
  xecure_url += "&charset=" + document.charset;

if ( link.target == "" || link.target == null ) open ( xecure_url, "_self" );
else open( xecure_url, link.target );
return false;
}

/**
 * <B>º¸¾È ¼¼¼ÇÀ» ¿¬°áÇÏ°í &lt;form> ¹®¿¡ ÀÔ·ÂµÈ µ¥ÀÌÅÍ¸¦ ¾ÏÈ£È­ ÇÏ¿© Àü¼ÛÇÑ´Ù.</B> <BR>
 * <B>ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ±â À§ÇØ¼­´Â ¹Ýµå½Ã</B><BR>
 * <B>&lt;form name=¡¯xecure¡¯>&lt;input type=hidden name=¡¯p¡¯>&lt;/form> ÀÌ ÆäÀÌÁö ³»¿¡ À§Ä¡ÇÏµµ·Ï ÇÑ´Ù.</B><BR>
 * <BR>
 * ÀÌ ÇÔ¼ö°¡ È£ÃâµÇ¸é ÄÁÆ®·ÑÀº ClientSM ¿¡°Ô xgate¿ÍSSL handshakingÀ» ¿äÃ»ÇÏ¿© »õ·Î¿î º¸¾È ¼¼¼ÇÀ» ¿¬°áÇÏ°Å³ª<BR>
 * ¿¬°áµÈ º¸¾È¼¼¼ÇÀÌ ÀÖÀ¸¸é Resume¿¡ µé¾î°£´Ù. javascript onSubmit ÀÌº¥Æ®¸¦ »ç¿ëÇÏ¿© XecureSubmit ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
 * <BR>
 * <B><ÁÖ¾îÁø form ¹®ÀÇ method°¡ ¡®GET¡¯ ÀÎ °æ¿ì></B><BR>
 * form ¹®ÀÇ ÀÔ·ÂÇÊµåµéÀ» input1=x&input2=&¡¦ Çü½ÄÀ¸·Î ¸¸µé¾î¼­ ÄÁÆ®·Ñ¿¡ º¸³»¸é ÄÁÆ®·ÑÀº º¸¾È¼¼¼ÇÀ» ¿¬°á/Resume ÇÑÈÄ<BR>
 * ÀÔ·ÂµÈ µ¥ÀÌÅÍ¸¦ ¾ÏÈ£È­ÇÏ¿© ¸®ÅÏÇÑ´Ù. ¾ÏÈ£¹®À» ¹Þ¾Æ¼­ attach ÇÑÈÄ target url·Î Àü¼ÛÇÑ´Ù.
 * ÀÌ¶§ ÁÖ¾îÁø formÀÇaction¿¡query stringÀÌ ÀÖ´Â °æ¿ì ÀÌquery stringÀº ¹«½ÃµÇ°í Àü¼ÛµÇÁö ¾Ê´Â´Ù.
 * <BR>
 * <B><ÁÖ¾îÁø form ¹®ÀÇ method°¡ ¡®POST¡¯ ÀÎ °æ¿ì></B><BR>
 * formÀÇaction¿¡ ÁÖ¾îÁø query stringÀ» ÄÁÆ®·Ñ¿¡ º¸³»¸é ÄÁÆ®·ÑÀº º¸¾È¼¼¼ÇÀ» ¿¬°á/ResumeÇÑ ÈÄ ÀÔ·ÂµÈ µ¥ÀÌÅÍ¸¦<BR>
 * ¾ÏÈ£È­ ÇÏ¿© ¸®ÅÏÇÑ´Ù. ¾ÏÈ£¹®À» ¹Þ¾Æ¼­ url?q=xxx ÇüÅÂ·Î ÀÌ¹Ì ¼±¾ðµÈ xecure frameÀÇaction À¸·Î ÁöÁ¤ÇÑ´Ù.
 * form ¹®ÀÇ ÀÔ·ÂÇÊµåµéÀ» input1=x&input2=&¡¦ Çü½ÄÀ¸·Î ¸¸µé¾î¼­ ÄÁÆ®·Ñ¿¡ º¸³»¸é ÄÁÆ®·ÑÀº (1) °úÁ¤¿¡¼­ ¿¬°á/ResumeµÈ<BR>
 * ¼¼¼ÇÁ¤º¸¸¦ ÀÌ¿ëÇÏ¿© form ¹®ÀÇ ÀÔ·ÂÇÊµåµéÀ» ¾ÏÈ£È­ ÇÏ¿© ¸®ÅÏÇÑ´Ù.
 * Xecure frameÀÇpÇÊµå¿¡ ¸®ÅÏµÈ ¾ÏÈ£¹®À» ÀúÀåÇÑÈÄ <BR>
 * xecure.summit() À¸·Î (1)¿¡¼­ ÁöÁ¤µÈ url·Î ÀÌµ¿ÇÑ´Ù.<BR>
 * <BR>
 * ¾ÏÈ£È­µÈ µ¥ÀÌÅÍ°¡ ¾ø´Â °æ¿ì  :     <B>url?q=¾ÏÈ£È­µÈ SID</B><BR>
 * ¾ÏÈ£È­µÈ µ¥ÀÌÅÍ°¡ ÀÖ´Â °æ¿ì  :     <B>url?q=¾ÏÈ£È­µÈ SID;¾ÏÈ£È­µÈ µ¥ÀÌÅÍ</B><BR>
 * <BR>
 * example><BR>
 * &lt;form name=¡¯xecure¡¯>&lt;input type=hidden name=¡¯p¡¯>&lt;/form><BR>
 * <BR>
 * &lt;form name=transfer action=¡±enc_demo_result.php¡± method=¡±post¡±<BR>
 *  onSubmit=¡±return XecureSubmit(this);¡±> <BR>
 *  ... <BR>
 * &lt;/form><BR>
 *
 * @ingroup clientRequestCryptoAPI
 * @param form : form °´Ã¼
 * @return Success : true<BR>
 * Fail : false
 */
function XecureSubmit( form )
{
  var qs ;
  var path ;
  var cipher;

  qs_begin_index = form.action.indexOf('?');

  // if action is relative url, get base url from window location
  path = getPath(form.action)
  // get path info & query string & hash from action url
  if ( qs_begin_index < 0 ) {
    qs = "";
  }
  else {
    qs = form.action.substring(qs_begin_index + 1, form.action.length );
  }
  document.xecure.target = form.target;

  if ( form.method == "get" || form.method=="GET" ) {
    // collect input field values
    //qs = XecureMakePlain( form );
    if(qs.length!=0)
      qs += "&"+XecureMakePlain( form );
    else
      qs = XecureMakePlain( form );

    // encrypt QueryString
    if( gIsContinue == 0 ) {
      gIsContinue = 1;
      if( IsNetscape60() )    // Netscape 6.0
        cipher = document.XecureWeb.nsIXecurePluginInstance.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
      else{
        cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
      }
      gIsContinue = 0;
    }
    else {
      alert(busy_info);
      return false;
    }

    if( cipher == "" )  return XecureWebError() ;

    xecure_url = path + "?q=" + escape_url(cipher);
    // adding character set information
    if(usePageCharset)
      xecure_url += "&charset=" + document.charset;

    if ( form.target == "" || form.target == null ) open( xecure_url, "_self");
    else open ( xecure_url, form.target );
  }
  else {
    document.xecure.method = "post";

    // encrypt QueryString of action field
    if( gIsContinue == 0 ) {
      gIsContinue = 1;
      if( IsNetscape60() )    // Netscape 6.0
        cipher = document.XecureWeb.nsIXecurePluginInstance.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
      else {
        cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
      }
      gIsContinue = 0;
    }
    else {
      alert(busy_info);
      return false;
    }


    if( cipher == "" )  return XecureWebError() ;

    document.xecure.action = path + "?q=" + escape_url(cipher);
    // adding character set information
    if(usePageCharset)
      document.xecure.action += "&charset=" + document.charset;

    posting_data = XecureMakePlain( form );

    if( gIsContinue == 0 ) {
      gIsContinue = 1;
      if( IsNetscape60() )    // Netscape 6.0
        cipher = document.XecureWeb.nsIXecurePluginInstance.BlockEnc ( xgate_addr, path, XecureEscape(posting_data), "POST" );
      else{
        cipher = document.XecureWeb.BlockEnc ( xgate_addr, path, XecureEscape(posting_data), "POST" );
      }
      gIsContinue = 0;
    }
    else {
      alert(busy_info);
      return false;
    }

    if( cipher == "" )  return XecureWebError() ;

    document.xecure.p.value = cipher;
    document.xecure.submit();
  }
  return false;
}

/**
 * ÀüÀÚºÀÅõ¸¦ Áö¿øÇÏ´Â XecureSubmit<BR>
 *
 * @ingroup clientRequestCryptoAPI
 * @since XecureWeb 6.0 v220
 * @see XecureSubmit
 */
function XecureSubmit_Env( form )
{
  var qs ;
  var path ;
  var cipher;

  qs_begin_index = form.action.indexOf('?');

  // if action is relative url, get base url from window location
  path = getPath(form.action)
  // get path info & query string & hash from action url
  if ( qs_begin_index < 0 ) {
    qs = "";
  }
  else {
    qs = form.action.substring(qs_begin_index + 1, form.action.length );
  }
  document.xecure.target = form.target;

  if ( form.method == "get" || form.method=="GET" ) {
    // collect input field values
    if(qs.length!=0)
      qs += "&"+XecureMakePlain( form );
    else
      qs = XecureMakePlain( form );

    // encrypt QueryString
    if( gIsContinue == 0 ) {
      gIsContinue = 1;
      //cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
      cipher = EnvelopData(XecureEscape(qs), "", serverCert, 1);
      gIsContinue = 0;
    }
    else {
      alert(busy_info);
      return false;
    }

    if( cipher == "" )  return XecureWebError() ;

    //xecure_url = path + "?q=" + escape_url(cipher);
    xecure_url = path + "?eq=" + escape_url(cipher);

    // adding character set information
    if(usePageCharset)
      xecure_url += "&charset=" + document.charset;

    if ( form.target == "" || form.target == null ) open( xecure_url, "_self");
    else open ( xecure_url, form.target );
  }
  else {
    document.xecure.method = "post";

    // encrypt QueryString of action field
    if( gIsContinue == 0 ) {
      gIsContinue = 1;
      //cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"GET");
      cipher = EnvelopData(XecureEscape(qs), "", serverCert, 1);
      gIsContinue = 0;
    }
    else {
      alert(busy_info);
      return false;
    }


    if( cipher == "" )  return XecureWebError() ;

    //document.xecure.action = path + "?q=" + escape_url(cipher);
    document.xecure.action = path + "?eq=" + escape_url(cipher);
    // adding character set information
    if(usePageCharset)
      document.xecure.action += "&charset=" + document.charset;

    posting_data = XecureMakePlain( form );

    if( gIsContinue == 0 ) {
      gIsContinue = 1;
      //cipher = document.XecureWeb.BlockEnc ( xgate_addr, path, XecureEscape(posting_data), "POST" );
      cipher = EnvelopData(XecureEscape(posting_data), "", serverCert, 1);
      gIsContinue = 0;
    }
    else {
      alert(busy_info);
      return false;
    }

    if( cipher == "" )  return XecureWebError() ;

    //document.xecure.p.value = cipher;
    document.xecure.ep.value = cipher;
    document.xecure.submit();
  }
  return false;
}

function XecureMakePlain_Org(form)
{
  var name = new Array(form.elements.length);
  var value = new Array(form.elements.length);
  var flag = false;
  var j = 0;
  var plain_text="";
  var enable=false;//for softcamp

  //for softcamp
  if(document.secukey==null || typeof(document.secukey) == "undefined" || document.secukey.object==null) {
    enable=false;
  }
  else {
    enable=secukey.GetSecuKeyEnable();
  }


  len = form.elements.length;
  for (i = 0; i < len; i++) {
    if ((form.elements[i].type != "button") && (form.elements[i].type != "reset") && (form.elements[i].type != "submit")) {
      if (form.elements[i].type == "radio" || form.elements[i].type == "checkbox") { // Leejh 99.11.10 checkboxÃß°¡
        if (form.elements[i].checked == true) {
          name[j] = form.elements[i].name;
          value[j] = form.elements[i].value;
          j++;
        }
      }
      //for softcamp
      else if(enable && form.elements[i].type == "password"){
        if(form.elements[i].type == "password"){
          name[j] = form.elements[i].name;
          value[j] = secukey.GetRealPass(form.elements[i].name,form.elements[i].value);
          j++;
        }
      }
      else {
        name[j] = form.elements[i].name;
        if (form.elements[i].type == "select-one") {
          var ind = form.elements[i].selectedIndex;
          if (form.elements[i].options[ind].value != '')
            value[j] = form.elements[i].options[ind].value;
          else
            value[j] = form.elements[i].options[ind].text;
          // form.elements[i].selectedIndex = 0;
        }
        else {
          value[j] = form.elements[i].value;
        }
        j++;
      }
    }
  }
  for (i = 0; i < j; i++) {
    str = value[i];
    value[i] = escape_url(str);
  }

  for (i = 0; i < j; i++) {
    if (flag)
      plain_text += "&";
    else
      flag = true;
    plain_text += name[i] ;
    plain_text += "=";
    plain_text += value[i];
  }

  return plain_text;
}

/**
 * ÁÖ¾îÁø form ¹®ÀÇ ÀÔ·ÂÇÊµåÁß typeÀÌbutton/reset/submitÀÎ °ÍÀ» Á¦¿ÜÇÏ°í<BR>
 * aa=bb&cc=dd&ee=¡¦  Çü½ÄÀ¸·Î ÀçÀÛ¼ºÇÏ¿© ¸®ÅÏÇÑ´Ù.
 *
 * @param form form °´Ã¼
 * @return Form ¹®ÀÇ ÀÔ·ÂÇÊµå·Î »õ·ÎÀÌ ÀÛ¼ºÇÑ µ¥ÀÌÅÍ
 */
function XecureMakePlain(form)  // modified by tiger on 2004/12/22
{
       var name = new Array(form.elements.length);
       var value = new Array(form.elements.length);
       var flag = false;
       var j = 0;
       var plain_text="";


       //for softcamp
       if(document.secukey==null || typeof(document.secukey) == "undefined" || document.secukey.object==null) {
                    enable=false;
       }
       else {
                    enable=secukey.GetSecuKeyEnable();
       }

       len = form.elements.length;
       for (i = 0; i < len; i++) {
                    if ((form.elements[i].type != "button") && (form.elements[i].type != "reset") && (form.elements[i].type != "submit")) {
                                 if (form.elements[i].type == "radio" || form.elements[i].type == "checkbox") {
                                              if (form.elements[i].checked == true) {
                                                if (form.elements[i].disabled == false) {
                                                          name[j] = form.elements[i].name;
                                                          value[j] = form.elements[i].value;
                                                          j++;
                                                }
                                              }
                                 }
                                 //for softcamp
                                 else if(enable && form.elements[i].type == "password"){
                                              if(form.elements[i].type == "password"){
                                                            name[j] = form.elements[i].name;
                                                            value[j] = secukey.GetRealPass(form.elements[i].name,form.elements[i].value);
                                                            j++;
                                              }
                                 }
                                 else {
                                              name[j] = form.elements[i].name;
                                              if (form.elements[i].type == "select-one") {
                                                            var ind = form.elements[i].selectedIndex;
                                                            var op_len = form.elements[i].length;
                                                if (op_len > 0) {
                                                          if(ind > 0) {
                                                                     if (form.elements[i].options[ind].value != '')
                                                                               value[j] = form.elements[i].options[ind].value;
                                                                     else
                                                                               //value[j] = form.elements[i].options[ind].text;
                                                                               value[j] = "";
                                                          } else {
                                                                     if(ind == 0)
                                                                     {
                                                                               if (form.elements[i].options[ind].value != '')
                                                                                          value[j] = form.elements[i].options[ind].value;
                                                                               else
                                                                                          //value[j] = form.elements[i].options[ind].text;
                                                                                          value[j] = "";
                                                                     }
                                                          }
                                                          // form.elements[i].selectedIndex = 0;
                                                }
                                     }
                                     else if (form.elements[i].type == "select-multiple") {
                                                var llen = form.elements[i].length;
                                                var increased = 0;
                                                for( k = 0; k < llen; k++) {
                                                          if (form.elements[i].options[k].selected) {
                                                                     name[j] = form.elements[i].name;
                                                                     if (form.elements[i].options[k].value != '')
                                                                               value[j] = form.elements[i].options[k].value;
                                                                     else
                                                                               //value[j] = form.elements[i].options[k].text;
                                                                               value[j] = "";
                                                                     j++;
                                                                     increased++;
                                                          }
                                                }
                                                if(increased > 0) {
                                                          j--;
                                                }
                                                else {
                                                          value[j] = "";
                                                }
                                     }
                                     else {
                                                value[j] = form.elements[i].value;
                                     }
                                     j++;
                          }
                }
     }

       for (i = 0; i < j; i++) {
                    str = value[i];
                    value[i] = escape_url(str);
       }

       for (i = 0; i < j; i++) {
                    if (flag)
                                 plain_text += "&";
                    else
                                 flag = true;
                    plain_text += name[i] ;
                    plain_text += "=";
                    if (value[i] !="undefined"){
                                 plain_text += value[i];
                    }else {
                                 plain_text += "";
                    }
       }

       return plain_text;
}

/*************For Applet**********************/
function BlockEnc(auth_type,plain_text)
{
  var cipher = "";

  if( IsNetscape60() )    // Netscape 6.0
    cipher =  XecureUnescape(document.XecureWeb.nsIXecurePluginInstance.BlockEnc(xgate_addr,auth_type,plain_text,"GET"));
  else
    cipher =  XecureUnescape(document.XecureWeb.BlockEnc(xgate_addr,auth_type,plain_text,"GET"));

  if( cipher == "" ) XecureWebError() ;

  return cipher;
}

/**
 * ¿¬°áµÈ ¼¼¼ÇÁ¤º¸¸¦ Ã£¾Æ¼­ ÇØ´ç Å°·Î ¾ÏÈ£¹®À» º¹È£È­ÇÑ´Ù.<BR>
 *
 * @ingroup serverResponseCryptoAPI
 * @param cipher º¹È£È­ÇÒ ¾ÏÈ£¹®
 * @return Success : º¹È£È­µÈ Æò¹®<BR>
 * Fail : empty string (¡°¡±)
 */
function BlockDec(cipher)
{
  var plain = "";

  if( IsNetscape60() )    // Netscape 6.0
    plain = XecureUnescape(document.XecureWeb.nsIXecurePluginInstance.BlockDec( xgate_addr, cipher));
  else {
    plain = XecureUnescape(document.XecureWeb.BlockDec( xgate_addr, cipher));
  }

  if( plain == "" ) XecureWebError() ;

  return plain;
}

/**
 * ¿¬°áµÈ ¼¼¼ÇÁ¤º¸¸¦ Ã£¾Æ¼­ ÇØ´ç Å°·Î ¾ÏÈ£È­µÈ XML µ¥ÀÌÅÍ¸¦ º¹È£È­ÇÑ´Ù.
 *
 * @ingroup serverResponseCryptoAPI
 * @param cipher : º¹È£È­ÇÒ XML dataÀÇ ¾ÏÈ£¹®
 * @return Success : º¹È£È­µÈ Æò¹®<BR>
 * Fail : empty string (¡°¡±)
 */
function BlockXMLDec(cipher)
{
  var path = "";

  if( IsNetscape60() )    // Netscape 6.0
    path = XecureUnescape(document.XecureWeb.nsIXecurePluginInstance.BlockXMLDec( xgate_addr, cipher));
  else
    path = XecureUnescape(document.XecureWeb.BlockXMLDec( xgate_addr, cipher));

  if( path == "" )  XecureWebError() ;

  return path;
}

/**
 * º¸¾È¼¼¼ÇÀ» ¿¬°áÇÏ°í <a href> ¹®À» ÀÌ¿ëÇÏ¿© ÁÖ¾îÁø linkÀÇquery stringÀ» ¾ÏÈ£È­ ÇÏ¿© Àü¼ÛÇÑ´Ù.<BR>
 * ex>
 * <a href=¡±transfer_input.php ¡° target=main
 * onClick=¡±return XecureLogIn(this);¡±>·Î±×ÀÎ</a>
 *
 * @param link link °´Ã¼
 * @return Success : true <BR>
 * Fail : false
 */
function XecureLogIn( link )
{
  EndSession();
  return XecureLink(link);
}

/**
 * Xgate_addr¿¡ ÇØ´çÇÏ´Â º¸¾È¼¼¼ÇÀ» °­Á¦·Î Á¾·áÇÑ´Ù.
 *
 * @ingroup etcAPI
 * @return Success : 0<BR>
 * Fail : ¿À·ùÄÚµå
 */
function EndSession()
{
  if( IsNetscape60() )    // Netscape 6.0
    document.XecureWeb.nsIXecurePluginInstance.EndSession( xgate_addr );
  else
    document.XecureWeb.EndSession(xgate_addr);
}

// XecureWeb ver 4.1 add
// option : 0 : no confirm window, all certificates
// option : 1 : confirm window, all certificates
// option : 2 : no confirm window, log-on certificate only
// option : 3 : confirm window, log-on certificate only

/**
 * ÁÖ¾îÁø µ¥ÀÌÅÍ¿¡ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù. <BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay À¯¹« ¹× ÀÎÁõ¼­ ¼±ÅÃ Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * <BR>
 * @param option : 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 2 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 3 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * @param plain : ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_with_option( option, plain )
{
  var signed_msg;

  if( IsNetscape60() )  // Netscape 6.0
    signed_msg = document.XecureWeb.nsIXecurePluginInstance.SignDataCMS( xgate_addr,
              escape(accept_cert),
              escape(plain),
              option,
              escape(sign_desc),
              pwd_fail);
  else
    signed_msg = document.XecureWeb.SignDataCMS(
              xgate_addr,
              XecureEscape(accept_cert),
              XecureEscape(plain),
              option,
              XecureEscape(sign_desc),
              pwd_fail);

    if( signed_msg == "" )  XecureWebError();

    return signed_msg;
}

/**
 * ÁÖ¾îÁø ¼­¸í µ¥ÀÌÅÍ¿¡ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù. <BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay À¯¹« ¹× ÀÎÁõ¼­ ¼±ÅÃ Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * <BR>
 * @ingroup digitalSignAPI
 * @param option 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 2 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 3 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 *
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­(n)]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_Add( option, plain )
{
  var signed_msg;

  signed_msg = document.XecureWeb.SignDataAdd ( xgate_addr, accept_cert, plain, option, sign_desc, pwd_fail );

    if( signed_msg == "" )  XecureWebError() ;

    return signed_msg;
}

/**
 * ÁÖ¾îÁø µ¥ÀÌÅÍ¿¡ ÀüÀÚ¼­¸íÀ» ÇÑ´Ù.<BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ÀÌ ¶ã °æ¿ì Ã¢ÀÇ ¼³¸í¹®Àº sign_desc ÀÌ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * @ingroup digitalSignAPI
 * @param plain :  ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign( plain )
{
  var signed_msg;

  if( IsNetscape60() )    // Netscape 6.0
  {
    signed_msg = document.XecureWeb.nsIXecurePluginInstance.SignDataCMS( xgate_addr, XecureEscape(accept_cert), XecureEscape(plain), show_plain, XecureEscape(sign_desc) );
  }
  else
  {
    signed_msg = document.XecureWeb.SignDataCMS( xgate_addr, XecureEscape(accept_cert), XecureEscape(plain), show_plain, XecureEscape(sign_desc) );
  }

  if( signed_msg == "" )  XecureWebError() ;

  return signed_msg;
}

/**
 * ÁÖ¾îÁø µ¥ÀÌÅÍ¿¡ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù. <BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ÀÇ ¼³¸í¹®À» Àü´ÞÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * @ingroup digitalSignAPI
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @param desc ¼­¸í¿ø¹® È®ÀÎÃ¢ÀÇ ¼³¸í¹®
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_with_desc( plain, desc )
{
  var signed_msg;

  if( IsNetscape60() )    // Netscape 6.0
    signed_msg = document.XecureWeb.nsIXecurePluginInstance.SignDataCMS( xgate_addr, XecureEscape(accept_cert), XecureEscape(plain), show_plain, XecureEscape(desc) );
  else
    signed_msg = document.XecureWeb.SignDataCSM( xgate_addr, XecureEscape(accept_cert), XecureEscape(plain), show_plain, XecureEscape(desc) );

  if( signed_msg == "" )  XecureWebError() ;

  return signed_msg;
}

// XecureWeb ver 4.1 add
// option : 0 : no confirm window, all certificates
// option : 1 : confirm window, all certificates
// option : 2 : no confirm window, log-on certificate only
// option : 3 : confirm window, log-on certificate only

// XecureWeb ver 5.0 add

/**
 * ÁÖ¾îÁø ¼­¸í µ¥ÀÌÅÍ¿¡ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù. <BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay À¯¹« ¹× ÀÎÁõ¼­ ¼±ÅÃ Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * ½Äº°¹øÈ£°¡ ÁÖÀÔµÈ ÀÎÁõ¼­´Â ¼­¸íÃ¢¿¡¼­ »ç¿ëÀÚÀÇ IDNÀ» ÀÔ·Â ÇÏ¸ç, send_vid_info() ¸¦ ÅëÇØ ½Äº° ¹øÈ£ °ËÁõÀ» À§ÇØ ¾ÏÈ£È­ µÈ °ªÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.<BR>
 * <BR>
 * @ingroup digitalSignAPI
 * @param option 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 2 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 3 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @param svrCert IDN, R °ªÀ» ¾ÏÈ£È­ÇÏ±â À§ÇÑ ÀÎÁõ¼­ ( pem type )
 *
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_with_vid_user( option, plain, svrCert )
{
  var signed_msg;

  option = option + 4;

  if(IsNetscape())
  {
    alert("Not supported function");
  }
  else {
    signed_msg = document.XecureWeb.SignDataWithVID ( xgate_addr, accept_cert, plain, svrCert, option, sign_desc, pwd_fail );
  }

    if( signed_msg == "" )  XecureWebError();

    return signed_msg;
}

/**
 * ÁÖ¾îÁø ¼­¸í µ¥ÀÌÅÍ¿¡ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù. <BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay À¯¹« ¹× ÀÎÁõ¼­ ¼±ÅÃ Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * ÀüÀÚ¼­¸í½Ã ½Äº°¹øÈ£ È®ÀÎÀ» À§ÇÏ¿© Web Application¿¡¼­ »ç¿ëÀÚÀÇ IDNÀ» ÀÔ·Â ÇÏ¸ç, send_vid_info() ¸¦ ÅëÇØ ½Äº° ¹øÈ£ °ËÁõÀ» À§ÇØ ¾ÏÈ£È­ µÈ °ªÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.<BR>
 * <BR>
 * @ingroup digitalSignAPI
 * @param option : 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, ¸ðµç ÀÎÁõ¼­ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 2 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô<BR>
 * 3 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display, Login½Ã ÀÎÁõ¼­·Î¸¸ ¼­¸í °¡´ÉÇÏ°Ô
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @param svrCert IDN, R °ªÀ» ¾ÏÈ£È­ÇÏ±â À§ÇÑ ÀÎÁõ¼­ ( pem type )
 * @param idn ¼­¸íÀÚÀÇ ÁÖ¹Îµî·Ï(»ç¾÷ÀÚµî·Ï)¹øÈ£
 *
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_with_vid_web( option, plain, svrCert, idn )
{
  var ret;
  var signed_msg;

  option = option + 12;

  if(IsNetscape())
  {
    alert("Not supported function");
  }
  else {
    ret = Set_ID_Num(idn);
    if(ret != 0) {
      XecureWebError();
      return signed_msg;
    }

    signed_msg = document.XecureWeb.SignDataWithVID ( xgate_addr, accept_cert, plain, svrCert, option, sign_desc, pwd_fail );
  }

    if( signed_msg == "" )  XecureWebError();

    return signed_msg;
}

// only over XecureWeb Client v5.3.0.1
// [certLocation]
//  0 : HARD
//  1 : REMOVABLE
//  2 : ICCARD
//  3 : CSP
//  4 : VSC
// [option]
//  0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ ¾øÀ½
//  1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ ¶ç¿ò
/**
 * ÁÖ¾îÁø ½Ã¸®¾ó ¹øÈ£¿Í ÀÏÄ¡ÇÏ´Â ÀÎÁõ¼­·Î ÁÖ¾îÁø µ¥ÀÌÅÍ¸¦ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù.<BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay ¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * ½Äº°¹øÈ£°¡ ÁÖÀÔµÈ ÀÎÁõ¼­´Â ¼­¸íÃ¢¿¡¼­ »ç¿ëÀÚÀÇ IDNÀ» ÀÔ·ÂÇÏ¸ç, send_vid_info() ¸¦ ÅëÇØ ½Äº° ¹øÈ£ °ËÁõÀ» À§ÇØ ¾ÏÈ£È­µÈ °ªÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.<BR>
 *
 * @ingroup digitalSignAPI
 * @param certSerial : ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ÀÇ ½Ã¸®¾ó ¹øÈ£<BR>
 * ¿©·¯ °³ÀÇ ½Ã¸®¾óÀ» »ç¿ëÇÒ °æ¿ì ¡°,¡±·Î ±¸º°ÇÑ´Ù.<BR>
 * Ex) ¡°008ade93, 008ade94¡±
 * @param certLocation ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ À§Ä¡<BR>
 * 0 : ÇÏµåµð½ºÅ©, 1 : ÀÌµ¿½Äµð½ºÅ©, 2 : ICÄ«µå,3 :CSP 4: pkcs11,5:USBTOKEN_KIUP, 6 :iccard,  7 :NO_SMARTON, 8 : USBTOKEN_KIUP, 9 :YESSIGNM
 * @param option 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @param svrCert IDN, R °ªÀ» ¾ÏÈ£È­ÇÏ±â À§ÇÑ ÀÎÁõ¼­ ( pem type )
 *
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_with_vid_user_serial( certSerial, certLocation, option, plain, svrCert )
{
  var signed_msg;

  option = option + 4;

  if(IsNetscape())
  {
    alert("Not supported function");
  }
  else {
    signed_msg = document.XecureWeb.SignDataWithVID_Serial ( xgate_addr, accept_cert, certSerial, certLocation, plain, svrCert, option, sign_desc, pwd_fail );
  }

    if( signed_msg == "" )  XecureWebError();

    return signed_msg;
}

// only over XecureWeb Client v5.3.0.1
// [certLocation]
//  0 : HARD
//  1 : REMOVABLE
//  2 : ICCARD
//  3 : CSP
//  4 : VSC
// [option]
//  0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ ¾øÀ½
//  1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ ¶ç¿ò

/**
 * ÁÖ¾îÁø ½Ã¸®¾ó ¹øÈ£¿Í ÀÏÄ¡ÇÏ´Â ÀÎÁõ¼­·Î ÁÖ¾îÁø µ¥ÀÌÅÍ¸¦ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù.<BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay ¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 * ÀüÀÚ¼­¸í½Ã ½Äº°¹øÈ£ È®ÀÎÀ» À§ÇÏ¿© Web Application¿¡¼­ »ç¿ëÀÚÀÇ IDNÀ» ÀÔ·ÂÇÏ¸ç, send_vid_info() ¸¦ ÅëÇØ ½Äº° ¹øÈ£ °ËÁõÀ» À§ÇØ ¾ÏÈ£È­ µÈ °ªÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.<BR>
 *
 * @ingroup digitalSignAPI
 * @param certSerial ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ÀÇ ½Ã¸®¾ó ¹øÈ£<BR>
 * ¿©·¯ °³ÀÇ ½Ã¸®¾óÀ» »ç¿ëÇÒ °æ¿ì ¡°,¡±·Î ±¸º°ÇÑ´Ù.<BR>
 * Ex) ¡°008ade93, 008ade94¡±
 * @param certLocation ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ À§Ä¡<BR>
 * 0 : ÇÏµåµð½ºÅ©, 1 : ÀÌµ¿½Äµð½ºÅ©, 2 : ICÄ«µå,3 :CSP 4: pkcs11,5:USBTOKEN_KIUP, 6 :iccard,  7 :NO_SMARTON, 8 : USBTOKEN_KIUP, 9 :YESSIGNM
 * @param option 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @param svrCert IDN, R °ªÀ» ¾ÏÈ£È­ÇÏ±â À§ÇÑ ÀÎÁõ¼­ ( pem type )
 * @param idn ¼­¸íÀÚÀÇ ÁÖ¹Îµî·Ï(»ç¾÷ÀÚµî·Ï)¹øÈ£
 *
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 */
function Sign_with_vid_web_serial( certSerial, certLocation, option, plain, svrCert, idn )
{
  var ret;
  var signed_msg;

  option = option + 12;

  if(IsNetscape())
  {
    alert("Not supported function");
  }
  else {
    ret = Set_ID_Num(idn);
    if(ret != 0) {
      XecureWebError();
      return signed_msg;
    }

    signed_msg = document.XecureWeb.SignDataWithVID_Serial ( xgate_addr, accept_cert, certSerial, certLocation, plain, svrCert, option, sign_desc, pwd_fail );
  }

    if( signed_msg == "" )  XecureWebError();

    return signed_msg;
}

/**
 * ÀüÀÚ ¼­¸í½Ã ½Äº°¹øÈ£ È®ÀÎÀÇ ±â´ÉÀ» »ç¿ëÇÒ °æ¿ì, IDN °ªÀ» Web Application ÀÌ ³Ñ°ÜÁÙ °æ¿ì, ¼­¸íÇÏ±â ÀÌÀü¿¡ ÀÌ ÇÔ¼ö¸¦ ÅëÇÏ¿© idn À» ³Ñ°ÜÁØ´Ù.<BR>
 * Sign_with_vid_web() ³»ºÎ¿¡ Àû¿ëµÇ¾î ÀÖÀ½.
 *
 * @ingroup digitalSignAPI
 * @param idn ½Äº°¹øÈ£(ÁÖ¹Îµî·Ï/»ç¾÷ÀÚµî·Ï¹øÈ£)
 * @return Success : 0<BR>
 * Fail : -1
 */
function Set_ID_Num(idn)
{
  var ret;

  if( IsNetscape() )
  {
    alert("Not supported function");
  }
  else
  {
    ret = document.XecureWeb.SetIDNum(idn);
  }

  return ret;
}

/**
 * Send_vid_info_user() ¶Ç´Â Send_vid_info_web() È£ÃâÀ» ÅëÇÏ¿© ½Äº°¹øÈ£°¡ ÁÖÀÔµÈ ÀÎÁõ¼­ÀÇ °æ¿ì,<BR>
 * ½Äº°¹øÈ£(VID)¸¦ È®ÀÎÇÏ±â À§ÇÑ Á¤º¸¸¦ ¾ÏÈ£È­ ÇÏ¿© return ÇÑ´Ù.<BR>
 * ¸¸¾à, ½Äº°¹øÈ£°¡ ÁÖÀÔµÇÁö ¾ÊÀº ÀÎÁõ¼­ÀÇ °æ¿ì null À» return ÇÑ´Ù.
 *
 * @ingroup digitalSignAPI
 * @return Success : ½Äº° ¹øÈ£ °ËÁõÀ» À§ÇØ ¾ÏÈ£È­µÈ Á¤º¸<BR>
 * Fail : empty string (¡°¡±)
 */
function send_vid_info()
{
  var vid_info;

  if( IsNetscape() )
  {
    alert("Not supported function");
  }
  else
  {
    vid_info = document.XecureWeb.GetVidInfo();
  }

  if(vid_info.length == 0)
    return null;
  else
    return vid_info;
}

// only over XecureWeb Client v5.3.0.1
// [certLocation]
//  0 : HARD
//  1 : REMOVABLE
//  2 : ICCARD
//  3 : CSP
//  4 : VSC
// [option]
//  0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ ¾øÀ½
//  1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ ¶ç¿ò
/**
 * ÁÖ¾îÁø ½Ã¸®¾ó ¹øÈ£¿Í ÀÏÄ¡ÇÏ´Â ÀÎÁõ¼­·Î ÁÖ¾îÁø µ¥ÀÌÅÍ¸¦ ÀüÀÚ ¼­¸íÀ» ÇÑ´Ù. <BR>
 * ¼­¸í¿ø¹® È®ÀÎÃ¢ Diplay À¯¹«¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù.<BR>
 * ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ÀüÀÚ¼­¸í¸¸ ÀÌ·ç¾îÁú »Ó º¸¾È¼¼¼ÇÀÌ ¿¬°áµÇÁö´Â ¾Ê´Â´Ù.<BR>
 *
 * @ingroup digitalSignAPI
 * @param certSerial : ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ÀÇ ½Ã¸®¾ó ¹øÈ£<BR>
 * ¿©·¯ °³ÀÇ ½Ã¸®¾óÀ» »ç¿ëÇÒ °æ¿ì ¡°,¡±·Î ±¸º°ÇÑ´Ù.<BR>
 * Ex) ¡°008ade93, 008ade94¡±<BR>
 * @param certLocation ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ À§Ä¡<BR>
 * 0 : ÇÏµåµð½ºÅ©, 1 : ÀÌµ¿½Äµð½ºÅ©, 2 : ICÄ«µå,3 :CSP 4: pkcs11,5:USBTOKEN_KIUP, 6 :iccard,  7 :NO_SMARTON, 8 : USBTOKEN_KIUP, 9 :YESSIGNM
 * @param option 0 : ¼­¸í¿ø¹® È®ÀÎÃ¢ No Display<BR>
 * 1 : ¼­¸í¿ø¹® È®ÀÎÃ¢ Display
 * @param plain ¼­¸íÇÏ°íÀÚ ÇÏ´Â ¼­¸í ¿ø¹®
 * @return Success : ¼­¸íµÈ ¹®¼­[ÀüÀÚ¼­¸í¹®=¿ø¹®+¼­¸í°ª+ÀÎÁõ¼­]<BR>
 * Fail : empty string (¡°¡±)
 *
 */
function Sign_with_serial( certSerial, certLocation, plain, option )
{
  var signed_msg;

  if( IsNetscape() )
  {
    alert("Not supported function");
  }
  else
  {
    signed_msg = document.XecureWeb.SignDataCMSWithSerial(  xgate_addr,
                  XecureEscape(accept_cert),
                  certSerial,
                  certLocation,
                  plain,
                  option,
                  XecureEscape(sign_desc),
                  pwd_fail );
  }

  if( signed_msg == "" )  XecureWebError();

  return signed_msg;
}

//
// only over XecureWeb Client v5.4.x
//
// !!! This function need site/executable license !!!
//
// [option]
//      0 : only signature verification( NOT perform cert verification )
//  1 : signature verification + default cert verification
//  2 : + cert chain check
//  3 : + CRL check
//  4 : + LDAP
// [directoryServer]
//  ex) dirsys.rootca.or.kr:389 or ""
//

/**
 * ¼­¸í¹®À» °ËÁõÇÏ°í ¼­¸í ¿ø¹®À» ¸®ÅÏÇÑ´Ù. °ËÁõ ¿É¼Ç¿¡ µû¶ó ´Ù¾çÇÑ °ËÁõ ±â´ÉÀ»<BR>
 * ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ Verify_SignedData´Â ÇÔ¼ö »ç¿ëÀ» À§ÇÑ <B>¶óÀÌ¼¾½º</B>°¡ ÇÊ¿äÇÏ´Ù.
 *
 * @ingroup digitalSignAPI
 * @param signedData : °ËÁõÇÒ ¼­¸í¿î
 * @param option : ¼­¸í °ËÁõ ¿É¼Ç<BR>
 * 0 : ¼­¸í¹®¸¸ °ËÁõ(ÀÎÁõ¼­¿¡ ´ëÇÑ °ËÁõÀº »ý·«)<BR>
 * 1 : 0¿¡ ´õÇÏ¿© ÀÎÁõ¼­ °ËÁõ<BR>
 * 2 : 1¿¡ ´õÇÏ¿© ÀÎÁõ¼­ Ã¼ÀÎ±îÁö °ËÁõ<BR>
 * 3 : 2¿¡ ´õÇÏ¿© ÀÎÁõ¼­ CRL Ã¼Å©<BR>
 * 4 : 3¿¡ ´õÇÏ¿© LDAPÀ¸·Î ÀÎÁõ¼­ °ËÁõ<BR>
 * @param directoryServer : CRLÀ» °¡Á®¿Ã µð·ºÅä¸® ¼­¹ö ÁÖ¼Ò<BR>
 * Ex) dirsys.rootca.or.kr:389<BR>
 * ¡°¡±À» ÀÔ·ÂÇÏ¸é ÀÎÁõ¼­¿¡ Æ÷ÇÔµÈ CRL ºÐ¹èÁ¡ ÀÌ¿ëÇÏ¿© CRL Ã¼Å©<BR>
 *
 * @return Success : ¼­¸í ¿ø¹®
 * Fail : ¡°¡±<BR>
 * <B>ÇÏÁö¸¸ ¼­¸í¹® °ËÁõÀÌ ÀÏ´Ü ¼º°øÇÏ¸é ÀÎÁõ¼­ °ËÁõ½Ã ¿¡·¯°¡ ¹ß»ýÇÏ´õ¶óµµ ¼­¸í ¿ø¹®À» ¸®ÅÏÇÑ´Ù. µû¶ó¼­ ÀüÃ¼ÀûÀÎ °âÁõ ¿É¼Ç¿¡ µû¸¥ ¼­¸í °ËÁõÀÌ ¿Ã¹Ù¸£°Ô µÇ¾ú´ÂÁö¸¦ È®ÀÎÇÏ±â À§ÇØ¼­´Â, ¸®ÅÏ°ª È®ÀÎ°ú ÇÔ²² LastErrCode µîÀ¸·Î ¿À·ù ¿©ºÎ¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù.</B>
 */
function Verify_SignedData( signedData, option, directoryServer )
{
  var verified_msg;
  var errCode;

  if( IsNetscape() )
  {
    alert("Not supported function");
    return "";
  }
  else
  {
    verified_msg = document.XecureWeb.VerifySignedData( signedData, option, directoryServer );
  }

  // VerifySignedData´Â ÀÎÁõ¼­ °ËÁõ½Ã ¿À·ù°¡ ¹ß»ýÇÏ´õ¶óµµ ¿ø¹® ÃßÃâÀÌ ¼º°øÇÏ¸é ¿ø¹®À» ¸®ÅÏÇÏ±â ¶§¹®¿¡
  // ¹Ýµå½Ã LastErrCode¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù.
  errCode = document.XecureWeb.LastErrCode();
  if( errCode != 0 )
    XecureWebError();

  return verified_msg;
}

//
// only over XecureWeb Client v5.4.x
//
// applicable cert location : usbtoken_kb, usbtoken_kiup
//
function Set_PinNumber( pin )
{
  var ret = -1;

  if( IsNetscape() )
  {
    alert("Not supported function");
  }
  else
  {
     ret = document.XecureWeb.SetPinNum( pin );
  }

  return ret;
}

// type 10 : YessignCA
// type 11 : XecureCA
/**
 * ÂüÁ¶ÄÚµå¿Í ÀÎ°¡ÄÚµå¸¦ °¡Áö°í °øÀÎÀÎÁõ±â°ü¿¡ Á¢¼ÓÇÏ¿© ÀÎÁõ¼­¸¦ ¹ß±Þ¹Þ´Â´Ù. ÀÎÁõ¼­ ¹ß±Þ À§Ä¡´Â ÇÏµåµð½ºÅ©/ICÄ«µå ÀÌ´Ù.
 *
 * @ingroup CMPAPI
 * @param type CA TYPE 10: YessignCA, 11: XecureCA
 * @param ref_code ÂüÁ¶ÄÚµå
 * @param auth_code ÀÎ°¡ÄÚµå
 *
 * @return Success : 0<BR>
 * Fail : -1
 */
function RequestCertificate ( type, ref_code, auth_code )
{
  var r;
  var ca_type;
  var ca_ip;
  var ca_port;

  if(type == 10) {
    ca_type = yessign_ca_type;
    ca_ip = yessign_ca_ip;
    ca_port = yessign_ca_port;
  }
  else if(type == 11) {
    ca_type = xecure_ca_type;
    ca_ip = xecure_ca_ip;
    ca_port = xecure_ca_port;
  }
  else if(type == 12) {
    ca_type = xecure_ca_type_1;
    ca_ip = xecure_ca_ip_1;
    ca_port = xecure_ca_port_1;
  }
  else {
    alert("Input type error!");
    return 0;
  }

  if(IsNetscape())
  {
    if( IsNetscape60() )  // Netscape 6.0
      r = document.XecureWeb.nsIXecurePluginInstance.RequestCertificate2 ( ca_port, ca_ip, ref_code, auth_code, ca_type );
    else
      r = document.XecureWeb.RequestCertificate2 ( ca_port, ca_ip, ref_code, auth_code, ca_type );
  }
  else
  {
    r = document.XecureWeb.RequestCertificate ( ca_port, ca_ip, ref_code, auth_code, ca_type);
  }

  if ( r != 0 ) XecureWebError();

  return r;
}

// type 00 : YessignCA
// type 11 : XecureCA
/**
 * ÀÌ ÇÔ¼ö¸¦ ½ÇÇà½ÃÅ°¸é °»½ÅÇÒ ÀÎÁõ¼­¸¦ ¼±ÅÃÇÑÈÄ ±× ÀÎÁõ¼­¸¦ °»½ÅÇÏ¿© ¼±ÅÃµÈ À§Ä¡¿¡ ´Ù½Ã ÀúÀå½ÃÅ²´Ù. ( ÇÏµåµð½ºÅ©/ÇÃ·ÎÇÇ µð½ºÅ©/ICÄ«µå)
 *
 * @ingroup CMPAPI
 * @return Success : 0<BR>
 * Fail : -1
 */
function RenewCertificate ( type )
{
  var r;
  var ca_type;
  var ca_ip;
  var ca_port;

  if(type == 10) {
    ca_type = yessign_ca_type;
    ca_ip = yessign_ca_ip;
    ca_port = yessign_ca_port;
  }
  else if(type == 11) {
    ca_type = xecure_ca_type;
    ca_ip = xecure_ca_ip;
    ca_port = xecure_ca_port;
  }
  else if(type == 12) {
    ca_type = xecure_ca_type_1;
    ca_ip = xecure_ca_ip_1;
    ca_port = xecure_ca_port_1;
  }
  else {
    alert("Input type error!");
    return 0;
  }

  if(IsNetscape())
  {
    if( IsNetscape60() )  // Netscape 6.0
      r = document.XecureWeb.nsIXecurePluginInstance.RenewCertificate2( ca_port, ca_ip, ca_type, pwd_fail );
    else
      r = document.XecureWeb.RenewCertificate2( ca_port, ca_ip, ca_type, pwd_fail );
  }
  else{
    r = document.XecureWeb.RenewCertificate ( ca_port, ca_ip, ca_type, pwd_fail );
  }

  if ( r != 0 )   XecureWebError();

  return r;
}

// type 00 : YessignCA
// type 11 : XecureCA
/**
 * ÀÌ ÇÔ¼ö¸¦ ½ÇÇà½ÃÅ°¸é Æó±âÇÒ ÀÎÁõ¼­¸¦ ¼±ÅÃÇÑÈÄ ±× ÀÎÁõ¼­¸¦ Æó±âÇÏ°í ÀúÀåµÈ<BR>
 * À§Ä¡¿¡¼­ »èÁ¦½ÃÅ²´Ù. ( ÇÏµåµð½ºÅ©/ÇÃ·ÎÇÇ µð½ºÅ©/ICÄ«µå)
 *
 * @ingroup CMPAPI
 * @param type  00 : YessignCA, 11 : XecureCA
 * @param jobcode <BR>
 * ÀÎÁõ¼­ Æó±â : 17<BR>
 * ÀÎÁõ¼­ È¿·ÂÁ¤Áö : 256
 * @param reason (Æó±â/È¿·ÂÁ¤Áö »çÀ¯ )<BR>
 * 1 : keyCompromise ( default )<BR>
 * 2 : cACompromise<BR>
 * 3 : affiliationChanged<BR>
 * 4 : superseded<BR>
 * 5 : cessationOfOperation<BR>
 * 6 : certificateHold
 *
 * @return Success : 0<BR>
 * Fail : -1
 */
function RevokeCertificate ( type, jobcode, reason )
{
  var r;
  var ca_type;
  var ca_ip;
  var ca_port;

  if(type == 10) {
    ca_type = yessign_ca_type;
    ca_ip = yessign_ca_ip;
    ca_port = yessign_ca_port;
  }
  else if(type == 11) {
    ca_type = xecure_ca_type;
    ca_ip = xecure_ca_ip;
    ca_port = xecure_ca_port;
  }
  else if(type == 12) {
    ca_type = xecure_ca_type_1;
    ca_ip = xecure_ca_ip_1;
    ca_port = xecure_ca_port_1;
  }
  else {
    alert("Input type error!");
    return 0;
  }

  if(IsNetscape())
  {
    if( IsNetscape60() )  // Netscape 6.0
      r = document.XecureWeb.nsIXecurePluginInstance.RevokeCertificate2( ca_port, ca_ip, jobcode, reason, ca_type, pwd_fail );
    else
      r = document.XecureWeb.RevokeCertificate2( ca_port, ca_ip, jobcode, reason, ca_type,  pwd_fail);
  }
  else {
    r = document.XecureWeb.RevokeCertificate ( ca_port, ca_ip, jobcode, reason, ca_type, pwd_fail );
  }

        if ( r != 0 )   XecureWebError();

  return r;
}

/**
 * RSA 1024 bit °ø°³Å°/°³ÀÎÅ°½ÖÀ» »ý¼ºÇÑÈÄ, °³ÀÎÅ° Á¤º¸´Â Client ¿¡¼­ ÀúÀåÇÏ°í<BR>
 * °ø°³Å° Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. (»ç¼³ ÀÎÁõ¼­ ¹ß±Þ/°»½Å½Ã ÀÌ¿ëµÇ¸ç, ÀÎÁõ¼­ ¹ß±Þ½Ã¿¡<BR>
 * ÀÔ·ÂµÈ ÇÊ¿äÇÑ Á¤º¸µé°ú ÀÌ ÇÔ¼ö¿¡¼­ ¸®ÅÏµÈ °ø°³Å°¸¦ °¡Áö°í »ç¼³ÀÎÁõ±â°ü¿¡<BR>
 * Á¢¼ÓÇÏ¿© ÀÎÁõ¼­¸¦ ¹ß±Þ/°»½Å ÇÑ´Ù. )
 *
 * @ingroup SFCA_CMPAPI
 * @return Success : »ý¼ºµÈ °ø°³Å° ¹®ÀÚ¿­<BR>
 * Fail : ¡°¡±
 *
 */
function GenCertReq ( )
{
  if( IsNetscape60() )    // Netscape 6.0
    cert_req = document.XecureWeb.nsIXecurePluginInstance.GenerateCertReq( 1024 );
  else
    cert_req = document.XecureWeb.GenerateCertReq( 1024 );

  if ( cert_req == "" ) XecureWebError() ;

  return cert_req;
}

/**
 * ¹ß±Þ/°»½ÅµÈ »ç¼³ ÀÎÁõ¼­¸¦ ÀúÀå½ÃÅ²´Ù. (ÀúÀå °¡´É¸ÅÃ¼ : ÇÏµåµð½ºÅ©/ICÄ«µå)
 *
 * @ingroup SFCA_CMPAPI
 * @param cert_type ¹ß±ÞµÈ ÀÎÁõ¼­ Á¾·ù<BR>
 * 1 : ÀÎÁõ±â°ü ÀÎÁõ¼­<BR>
 * 2 : »ç¿ëÀÚ ÀÎÁõ¼­<BR>
 * 5 : ¾ÏÈ£È­ÇÏ¿© ÀúÀåÇÒ »ç¿ëÀÚ ÀÎÁõ¼­<BR/.
 * @param cert : ¹ß±ÞµÈ ÀÎÁõ¼­
 */
function InstallCertificate (cert_type, cert)
{
  if( IsNetscape60() )    // Netscape 6.0
    document.XecureWeb.nsIXecurePluginInstance.InstallCertificate(cert_type, cert );
  else
    document.XecureWeb.InstallCertificate(cert_type, cert );
}

/**
 * ClientSMÀÇ ÀÎÁõ¼­ °ü¸®ÀÚ ¸Þ´º¸¦ À¥ »ó¿¡¼­ Á÷Á¢ È£ÃâÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù.
 * @ingroup etcAPI
 */
function ShowCertManager()
{
  if( IsNetscape60() )    // Netscape 6.0
    document.XecureWeb.nsIXecurePluginInstance.ShowCertManager();
  else
    document.XecureWeb.ShowCertManager();
}

function DeleteCertificate( dn )
{
  var r;

  if( IsNetscape60() )    // Netscape 6.0
    r = document.XecureWeb.nsIXecurePluginInstance.DeleteCertificate( XecureEscape(dn) );
  else
    r = document.XecureWeb.DeleteCertificate ( XecureEscape(dn) );

  if( r != 0 )  XecureWebError() ;
  else    alert('ÀÎÁõ¼­¸¦ »èÁ¦ÇÏ¿´½À´Ï´Ù.');
}

/**
 * [ ClinetSM : 2.3.3 / AcitveX 4.1.2.3 ÀÌÀü Version¿ë ]<BR>
 * ¼­¸íÃ¢ÀÌ³ª ÀÎÁõ¼­LoginÃ¢ÀÇ ÀÌ¹ÌÁö¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ¹ÌÁö BMP ÆÄÀÏÀ» Á¦ÀÛÇÑ´Ù. (¿©±â¼­´Â login.bmp(ÇØ»óµµ:290x64) ·Î °¡Á¤)<BR>
 * XecureWeb ver4 server moduleÀÌ ¼³Ä¡µÇ¾î ÀÖ´Â µð·ºÅä¸®¸¦ <BR>
 * /user/xecureweb_ver4¶ó °¡Á¤ÇÏ¸é<BR>
 * /user/xecureweb_ver4/object/ ¾Æ·¡¿¡ login.bmp¸¦ º¹»çÇÑ´Ù.<BR>
 * /user/xecureweb_ver4/object/xecureweb.js ÆÄÀÏÀ» ¿­°í bannerUrlÀ» ¼öÁ¤ÇÑ´Ù.<BR>
 * ¿¹) var bannerUrl=<BR>
 * ¡°http://¡± + window.location.hostname + ¡°/XecureObject/login.bmp¡±;<BR>
 * BMPº¯°æ½Ã..´Ù¸¥ÀÌ¸§À¸·Î ÀúÀåÇÏ¿©¾ß ´Ù½Ã DownLoad¹ÞÀ» ¼ö ÀÖ´Ù.
 * @ingroup etcAPI
 */
function PutBannerUrl()
{
  if( IsNetscape60() )    // Netscape 6.0
  {
    document.XecureWeb.nsIXecurePluginInstance.PutBigBannerUrl( xgate_addr, bannerUrl);
  }
  else
  {
    document.XecureWeb.PutBigBannerUrl( xgate_addr, bannerUrl);
  }
}

/**
 * »ç¼³ ÀÎÁõ±â°üÀ» »ç¿ë½Ã »ç¼³ÀÎÁõ±â°ü ÀÎÁõ¼­¸¦ »ç¿ëÀÚ¿¡°Ô ¹èÆ÷ÇÑ´Ù.<BR>
 *
 * @ingroup etcAPI
 * @return Success : 0<BR>
 * Fail : -1
 */
function PutCACert()
{
  var r ;

  if( IsNetscape60() )    // Netscape 6.0
    r = document.XecureWeb.nsIXecurePluginInstance.PutCACert( XecureEscape(pCaCertName), pCaCertUrl);
  else
    r = document.XecureWeb.PutCACert( XecureEscape(pCaCertName), pCaCertUrl);

  if( r != 0 )  XecureWebError() ;
}

function isNewPlugin(desc)
{
  index = desc.indexOf('v.', 0);
  if (index < 0)
    return false;
  desc += ' ';

  versionString = desc.substring(index +2, desc.length);
  arrayOfStrings = versionString.split('.');
  thisMajor = parseInt(arrayOfStrings[0], 10);
  thisMinor = parseInt(arrayOfStrings[1], 10);
  thisBuild = parseInt(arrayOfStrings[2], 10);

  if (thisMajor > versionMaj) return true;
  if (thisMajor < versionMaj) return false;

  if (thisMinor > versionMin) return true;
  if (thisMinor < versionMin) return false;

  if (thisBuild > versionRel) return true;
  if (thisBuild < versionRel) return false;

  return true;
}

function downloadNow () {
  if ( navigator.javaEnabled() ) {
    trigger = netscape.softupdate.Trigger;
    if ( trigger.UpdateEnabled() ) {
      if (navigator.platform == "Win32") {
        trigger.StartSoftwareUpdate( packageURL, trigger.DEFAULT_MODE);
      }
      else alert('ÀÌ ÇÃ·¯±× ÀÎÀº À©µµ¿ìÁî 95/98/NT È¯°æ¿¡¼­¸¸ ÀÛµ¿ÇÕ´Ï´Ù.')
    }
    else
      alert('³Ý½ºÄÉÀÔÀÇ SmartUpdate ¼³Ä¡¸¦ °¡´ÉÇÏµµ·Ï ÇØ¾ßÇÕ´Ï´Ù.');
  }
  else
    alert('Java ½ÇÇàÀ» °¡´ÉÇÏµµ·Ï ÇØ¾ßÇÕ´Ï´Ù.');
}

function isOldPlugin(desc,version)  // by Zhang
{
  index = desc.indexOf('v.', 0);
  if (index < 0)  return true;

  desc += ' ';
  versionString = desc.substring(index +2, desc.length);
  arrayOfStrings = versionString.split('.');
  thisMaj = parseInt(arrayOfStrings[0], 10);
  thisMin = parseInt(arrayOfStrings[1], 10);
  thisRel = parseInt(arrayOfStrings[2], 10);

  arrayOfStrings = version.split('.');
//  verMaj = parseInt(arrayOfStrings[0], 10);
//  verMin = parseInt(arrayOfStrings[1], 10);
//  verRel = parseInt(arrayOfStrings[2], 10);
  s_verMaj = parseInt(arrayOfStrings[0], 10);
  s_verMin = parseInt(arrayOfStrings[1], 10);
  s_verRel = parseInt(arrayOfStrings[2], 10);

  if (thisMaj > s_verMaj) return false;
  if (thisMaj < s_verMaj) return true;

  if (thisMin > s_verMin) return false;
  if (thisMin < s_verMin) return true;

  if (thisRel > s_verRel) return false;
  if (thisRel < s_verRel) return true;

  return false;
}

function DownloadPackage(packageURL) // by Zhang
{
  if ( navigator.javaEnabled() ) {
    trigger = netscape.softupdate.Trigger;
    if ( trigger.UpdateEnabled() ) {
      if (navigator.platform == "Win32") {
        trigger.StartSoftwareUpdate( packageURL, trigger.DEFAULT_MODE);
      }
      else
        alert('ÀÌ ÇÃ·¯±× ÀÎÀº À©µµ¿ìÁî 95/98/NT È¯°æ¿¡¼­¸¸ ÀÛµ¿ÇÕ´Ï´Ù.');
    }
    else
      alert('³Ý½ºÄÉÀÔÀÇ SmartUpdate ¼³Ä¡¸¦ °¡´ÉÇÏµµ·Ï ÇØ¾ßÇÕ´Ï´Ù.');
  }
  else
    alert('Java ½ÇÇàÀ» °¡´ÉÇÏµµ·Ï ÇØ¾ßÇÕ´Ï´Ù.');
}

function XecureWebPlugin(version) // by Zhang
{
  if (navigator.appName == 'Netscape' && UserAgent() == "Mozilla/4")
  {
      var XecureMime = navigator.mimeTypes["application/x-SoftForum-XecSSL40"];
    if (XecureMime) {   // Xecure PlugIn ÀÌ ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ´Â °æ¿ì
      if ( isOldPlugin(XecureMime.enabledPlugin.description,version))
        DownloadPackage(packageURL);
    }
    else {     // Xecure PlugIn ÀÌ ¼³Ä¡µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì
      DownloadPackage(packageURL);
    }
  }
}

/**
 * Netscape¸¦ À§ÇØ&lt;EMBED&gt; Tag¸¦, Internet Explorer¸¦ À§ÇØ &lt;OBJECT&gt; Tag¸¦ document.writeÇÑ´Ù.<BR>
 * <BR>
 * example><BR>
 * &lt;html><BR>
 * &lt;head><BR>
 * &lt;form name='xecure' >&lt;input type=hidden name='p'>&lt;/form><BR>
 * &lt;script language='javascript' src='/XecureObject/xecureweb.js'>&lt;/script><BR>
 * &lt;script language='javascript' src='/XecureObject/xecureweb_file.js'>&lt;/script><BR>
 * &lt;script><BR>
 * PrintObjectTag();<BR>
 * PrintFileObjectTag();<BR>
 * &lt;/script><BR>
 * &lt;/head><BR>
 * &lt;body> &lt;/body>&lt;/html>
 * @ingroup etcAPI
 */
/**
function PrintObjectTag()
{
  if( IsNetscape60() )
    alert("Netscape 6.0Àº Áö¿øÇÏÁö ¾Ê½À´Ï´Ù") ;
  else
  {
    if(navigator.appName == 'Netscape')
    {
      document.write("<EMBED type='application/x-SoftForum-XecSSL40' hidden=true name='XecureWeb'></EMBED><NOEMBED>No XecureWeb PlugIn</NOEMBED>");
    }
    else
    {
      // param ¼³Á¤( name : value )
      //
      // [¾ð¾î ¼³Á¤]
      //    lang : KOREAN / ENGLISH
      //    ex) <PARAM NAME="LANG" VALUE="KOREAN">
      //
      // [º¸¾È ¿É¼Ç] only over XecureWeb Client v5.3.0.1
      //    "º¸¾È ¿É¼Ç"ÀÇ Àû¿ëÀº ¹Ýµå½Ã °³¹ßÆÀÀ» ÅëÇØ ÀÚ¼¼ÇÑ ³»¿ëÀ» È®ÀÎÇÑ ÈÄ »ç¿ëÇÏ½Ã±â ¹Ù¶ø´Ï´Ù.
      //    sec_option :
      //  - xgate ÁÖ¼Ò·Î ¼­¸í °ËÁõ(µðÆúÆ®´Â host nameÀ¸·Î ¼­¸í °ËÁõ)   : 0x00000080 = 128
      //  - ÀÎÁõ¼­ ¾ÏÈ£ Àç»ç¿ë(ICÄ«µåÀÇ °æ¿ì ÇÉ¹øÈ£µµ Àç»ç¿ë)
      //        USBTOKE_KBÀÇ °æ¿ì, SetPinNumÀ¸·Î ÇÉ¹øÈ£¸¦ presetÇØ¾ß ÇÔ         : 0x00000040 =  64
      //  - ¼­¸í½Ã ÀÎÁõ¼­ ¼±ÅÃÃ¢¾øÀÌ Ä³½ÃµÈ ÀÎÁõ¼­ »ç¿ë(only for IC card, USBTOKEN_KB)
      //        USBTOKE_KBÀÇ °æ¿ì´Â Ä³½ÃÇÏÁö ¾Ê°í ÀÚµ¿À¸·Î ´Ù½Ã ÀÐ¾îµéÀÓ              : 0x00000020 =  32
      //  - ·Î±×ÀÎ½Ã ÀÎÁõ¼­ ¼±ÅÃÃ¢¾øÀÌ Ä³½ÃµÈ ÀÎÁõ¼­ »ç¿ë(only for IC card) : 0x00000010 =  16
      //    sec_context : ¼­¸í°ª
      //    sec_desc : ÀÓÀÇÀÇ ¹®ÀÚ¿­(storage°¡ iccard·Î ¼³Á¤µÈ °æ¿ì icÄ«µå ÇÉ¹øÈ£ ÀÔ·ÂÃ¢¿¡ ³ªÅ¸³ª´Â ¾È³»¹®±¸. ¼³Á¤µÇÁö ¾ÊÀ¸¸é default ¹®±¸°¡ ³ªÅ¸³²)
      //
      // [ÀÎÁõ¼­ ÀúÀå¸ÅÃ¼ ¼³Á¤] only over XecureWeb Client v5.3.0.1
      //    storage : "HARD" / "REMOVABLE" / "ICCARD" / "CSP" / "VSC" / "USBTOKEN","USBTOKEN_KB","USBTOKEN_KIUP"
      //    ex1) <PARAM NAME="STORAGE" VALUE="HARD">
      //    ex2) <PARAM NAME="STORAGE" VALUE="HARD,REMOVABLE,ICCARD"> ==> ¿©·¯ °³ÀÇ ÀúÀå¸ÅÃ¼¸¦ ¼³Á¤ÇÒ ¶§¿¡´Â Ã¹¹øÂ° ÀúÀå¸ÅÃ¼°¡ ¿ì¼± ¼±ÅÃµÇ¾îÁü
      //
      // [Å°½ºÆ®·ÎÅ© ÇØÅ·¹æÁö ¿É¼Ç] only over XecureWeb Client v5.3.0.1
      //    seckey : KeyStroke ÇØÅ·¹æÁöÅø Àû¿ë ¿©ºÎ, ÇØ´çÇÏ´Â vendor¿¡ ´ëÇÑ string value ÀÔ·Â
      //             ÇöÀç[2003/10/30] °¡´ÉÇÑ string value
      //             - "XW_SKS_SOFTCAMP_KEYPAD" : ¼ÒÇÁÆ®Ä·ÇÁÀÇ Å°ÆÐµå ¹öÀü
      //             - "XW_SKS_SOFTCAMP_DRIVER" : ¼ÒÇÁÆ®Ä·ÇÁÀÇ µå¶óÀÌ¹ö ¹öÀü
      //             - "XW_SKS_KINGS_DRIVER"    : Å·½ºÁ¤º¸Åë½ÅÀÇ µå¶óÀÌ¹ö ¹öÀü
      //             - "_WITH_SKS_ENCRYPT"      : Æû µ¥ÀÌÅÍÀÇ ÆÐ½º¿öµå Å¸ÀÔ¿¡ ´ëÇØ¼­ ¾ÏÈ£È­ => BlockEnc È£Ãâ½Ã ³»ºÎ¿¡¼­ ´Ù½Ã º¹È£È­ÇÔ(xwcs_client.dll »ç¿ë)
      //    ex) <PARAM NAME="SECKEY" VALUE="XW_SKS_SOFTCAMP_KEYPAD"> ==> ¼ÒÇÁÆ®Ä·ÇÁÀÇ Å°ÆÐµå ¹öÀü Àû¿ë
      //    ex) <PARAM NAME="SECKEY" VALUE="XW_SKS_KINGS_DRIVER_WITH_SKS_ENCRYPT"> ==> Å·½ºÁ¤º¸Åë½ÅÀÇ µå¶óÀÌ¹ö ¹öÀü Àû¿ë + ÆÐ½º¿öµå Å¸ÀÔ ¾ÏÈ£È­
      //    ex) <PARAM NAME="SECKEY" VALUE="_WITH_SKS_ENCRYPT"> ==> ÆÐ½º¿öµå Å¸ÀÔ ¾ÏÈ£È­¸¸ Áö¿ø
      //
      // [¶óÀÌ¼¾½º] only over XecureWeb Client v5.4.x
      //    XecureWeb ClientÀÇ Æ¯Á¤ ±â´É¿¡ ´ëÇØ¼­ »çÀÌÆ® ¶óÀÌ¼¾½º°¡ °ËÁõµÉ ¶§¿¡¸¸ »ç¿ë °¡´É
      //    ÇöÀç ¶óÀÌ¼¾½º°¡ Àû¿ëµÈ ±â´É
      //      - ¼­¸í °ËÁõ(VerifySignedData)
      //    ex) <PARAM NAME="LICENSE" VALUE="°³¹ßÆÀ¿¡¼­ Á¦°øÇÏ´Â ¼­¸í°ª">

      //document.write('<OBJECT ID="XecureWeb" CLASSID="CLSID:7E9FDB80-5316-11D4-B02C-00C04F0CD404" CODEBASE="http://phobos.softforum.co.kr:8188/XecureObject/xw_install.cab#Version=5,4,1,0" width=0 height=0>No XecureWeb PlugIn</OBJECT>');

      // test
      //document.write('<OBJECT ID="XecureWeb" CLASSID="CLSID:7E9FDB80-5316-11D4-B02C-00C04F0CD404" CODEBASE="http://phobos.softforum.co.kr:8188/XecureObject/xw_install.cab#Version=5,4,1,0" width=0 height=0>');
      //document.write('<param name="storage" value="usbtoken_kb,hard,removable,csp,vsc"><param name="sec_option" value=96><param name="sec_context" value="30820649020101310b300906052b0e03021a0500302506092a864886f70d010701a018041670686f626f732e736f6674666f72756d2e636f2e6b72a0820467308204633082034ba003020102020103300d06092a864886f70d01010505003077310b3009060355040613024b52311e301c060355040a1315536f6674666f72756d20436f72706f726174696f6e3121301f06035504031318536f6674666f72756d20526f6f7420417574686f726974793125302306092a864886f70d010901161663616d617374657240736f6674666f72756d2e636f6d301e170d3033303132313030303030305a170d3333303131333030303030305a308192310b3009060355040613024b52311e301c060355040a1315536f6674666f72756d20436f72706f726174696f6e311e301c060355040b1315536563757269747920522644204469766973696f6e311c301a06035504031313536f6674666f72756d205075626c69632043413125302306092a864886f70d010901161663616d617374657240736f6674666f72756d2e636f6d30820121300d06092a864886f70d01010105000382010e00308201090282010041a27ed4a985ee6b9a1e8823537a34a4da4cdad762478acfe7d8727ba227f7606a108eacbb991675865e374d7a700e537a1662bb9dcd27b89f99e0c91ac963390a11a0f6d945b97bde543a9f05ffe8bfeeb2cdfbbd939f1242d4ed645daa0e8be02813d5360eb3784b4859928df7d397d55febbaf00a83de11e047121cffc72c2bccd28b3cf8dd74f5dbb22b1b16b9c710f74a9b0243fc7c67000f8c1e343ac094e7b3a459ed7b9fb679019f4ef6ab425644ca895e63c0e67b9ada35034004f9eabf41d30bdcd62a6b3dc115e4c226b810b12e51c2b82414830b1995adc7aa94c3f37434aaa260ce4117f4e9d23f9ed9caa9e6b856815984009958e6271731490203010001a381de3081db301f0603551d2304183016801409b5e27e7d2ac24a8f56bb67accebb93f5318fd3301d0603551d0e0416041418053cf13370b5ae2123a28f9e68f75731330788300e0603551d0f0101ff04040302010630120603551d130101ff040830060101ff02010030750603551d1f046e306c306aa068a06686646c6461703a2f2f6c6461702e736f6674666f72756d2e636f6d3a3338392f434e3d58656375726543524c535256432c4f553d536563757269747920522644204469766973696f6e2c4f3d536f6674666f72756d20436f72706f726174696f6e2c433d4b52300d06092a864886f70d01010505000382010100329b1c2e5bf79586af02652e689f5451332746a7d4d290ff39c061612c93e8225837ee83eff242b50c27466961f4440f9900b202edbbcc1ebde1b63f31e76f6fe671c3afdf9ce8e513ec1e74ffd1b64658cdc3aa5db763b58dd1a9ca9671d50ea84c04fd491696a7dbf545d9058fef506da13ed4cbc292198a493d1a6225ec88cda9a94e79edc655655b223c5ec32ffacee0a8eaa3c87f2848e5085a32249426e66ee83611d1d3357113fc0a68e73f1d797430398d70a9a89b5ee124e3a7e1568582a74bc0b675988ffda2e34437cc0e303b98858c08fec39ad512c3a70f549716e82d6f4a79327cc71a1c20c03365af8b2898afb34b3b287e44b59731708d29318201a33082019f020101307c3077310b3009060355040613024b52311e301c060355040a1315536f6674666f72756d20436f72706f726174696f6e3121301f06035504031318536f6674666f72756d20526f6f7420417574686f726974793125302306092a864886f70d010901161663616d617374657240736f6674666f72756d2e636f6d020103300906052b0e03021a0500300d06092a864886f70d0101010500048201002913691bf3328c68353c827147ed29ebb80e17843131f0ebfdab00e355c52636fb8f13cf98cda2f5623f7449e1206d7f61be5d9f2fbd1cda7bf3d86b2c7ac29091a208177bc722a023d21ba3831264a715bae402aee27b0f401bc25ca72430fcc793a904709b449274cc071f1635a951aa99637c0564ca71ea5a8f10b5c07cfa5032e848e62411dda1bae95ba2ce759b2535b95a35109db6308098e85a8394b7ff180fe237e90cfaf6c6ba7d991edf878ebc7adbe68ea9322371141ddc1ba7560fdcf3ec59ffce70bcbf1029faa5dad1581c9a47d3f347c250c9d01d256243635dae1254d03a27e5bec661672f5a87ba2973c8ddf4ca20d653f7d25dec17e9b8">No XecureWeb PlugIn</OBJECT>');

      document.write('<OBJECT ID="XecureWeb" CLASSID="CLSID:7E9FDB80-5316-11D4-B02C-00C04F0CD404" CODEBASE="/XecureObject/xw_install.cab#Version=7,2,2,5" width=0 height=0><param name="lang" value="korean"><param name="lang" value="korean"><param name="LICENSE" value="3082065c020101310b300906052b0e03021a0500303806092a864886f70d010701a02b0429313a70686f626f732e736f6674666f72756d2e636f2e6b723a5665726966795369676e656444617461a0820467308204633082034ba003020102020103300d06092a864886f70d01010505003077310b3009060355040613024b52311e301c060355040a1315536f6674666f72756d20436f72706f726174696f6e3121301f06035504031318536f6674666f72756d20526f6f7420417574686f726974793125302306092a864886f70d010901161663616d617374657240736f6674666f72756d2e636f6d301e170d3033303132313030303030305a170d3333303131333030303030305a308192310b3009060355040613024b52311e301c060355040a1315536f6674666f72756d20436f72706f726174696f6e311e301c060355040b1315536563757269747920522644204469766973696f6e311c301a06035504031313536f6674666f72756d205075626c69632043413125302306092a864886f70d010901161663616d617374657240736f6674666f72756d2e636f6d30820121300d06092a864886f70d01010105000382010e00308201090282010041a27ed4a985ee6b9a1e8823537a34a4da4cdad762478acfe7d8727ba227f7606a108eacbb991675865e374d7a700e537a1662bb9dcd27b89f99e0c91ac963390a11a0f6d945b97bde543a9f05ffe8bfeeb2cdfbbd939f1242d4ed645daa0e8be02813d5360eb3784b4859928df7d397d55febbaf00a83de11e047121cffc72c2bccd28b3cf8dd74f5dbb22b1b16b9c710f74a9b0243fc7c67000f8c1e343ac094e7b3a459ed7b9fb679019f4ef6ab425644ca895e63c0e67b9ada35034004f9eabf41d30bdcd62a6b3dc115e4c226b810b12e51c2b82414830b1995adc7aa94c3f37434aaa260ce4117f4e9d23f9ed9caa9e6b856815984009958e6271731490203010001a381de3081db301f0603551d2304183016801409b5e27e7d2ac24a8f56bb67accebb93f5318fd3301d0603551d0e0416041418053cf13370b5ae2123a28f9e68f75731330788300e0603551d0f0101ff04040302010630120603551d130101ff040830060101ff02010030750603551d1f046e306c306aa068a06686646c6461703a2f2f6c6461702e736f6674666f72756d2e636f6d3a3338392f434e3d58656375726543524c535256432c4f553d536563757269747920522644204469766973696f6e2c4f3d536f6674666f72756d20436f72706f726174696f6e2c433d4b52300d06092a864886f70d01010505000382010100329b1c2e5bf79586af02652e689f5451332746a7d4d290ff39c061612c93e8225837ee83eff242b50c27466961f4440f9900b202edbbcc1ebde1b63f31e76f6fe671c3afdf9ce8e513ec1e74ffd1b64658cdc3aa5db763b58dd1a9ca9671d50ea84c04fd491696a7dbf545d9058fef506da13ed4cbc292198a493d1a6225ec88cda9a94e79edc655655b223c5ec32ffacee0a8eaa3c87f2848e5085a32249426e66ee83611d1d3357113fc0a68e73f1d797430398d70a9a89b5ee124e3a7e1568582a74bc0b675988ffda2e34437cc0e303b98858c08fec39ad512c3a70f549716e82d6f4a79327cc71a1c20c03365af8b2898afb34b3b287e44b59731708d29318201a33082019f020101307c3077310b3009060355040613024b52311e301c060355040a1315536f6674666f72756d20436f72706f726174696f6e3121301f06035504031318536f6674666f72756d20526f6f7420417574686f726974793125302306092a864886f70d010901161663616d617374657240736f6674666f72756d2e636f6d020103300906052b0e03021a0500300d06092a864886f70d01010105000482010009fb7f805e9c8b7d6a35f6519d3a4a5f5cf2b394e622003b43cdf4f5a80d9b032586f8b18b267a2188e1146a8bdca1d0461cd548c1378dacfbce16a228fe14d35537c86abe3a42fa4e70ebd74774d17ba792aca313f49456d09dd72dadb67767c4a452100b32d5f1595d055aa3f38d992473a3896129f79b99208294170a7aedc553720fc55b80668f3b76f43dfa0ba914697fc9691e271c9be102822cd9968919de6a62b921112e7ee2fba9b7e7a48a1378a7fa61b14d5738ab066f6b816642b37117aec32e18010ad8feae452c5f5a70a10d67973647d24f68169e80a8dc971823235ae51d77186ae98fee1e28455dc930cf2aa51f6d12eb02e452e00957c3">No XecureWeb PlugIn</OBJECT>');
    }
  }
}
*/

// TO-BE

function PrintObjectTag()
{
  if( IsNetscape60() )
    alert("Netscape 6.0Àº Áö¿øÇÏÁö ¾Ê½À´Ï´Ù") ;
  else
  {
    if(navigator.appName == 'Netscape')
    {
      document.write("<EMBED type='application/x-SoftForum-XecSSL40' hidden=true name='XecureWeb'></EMBED><NOEMBED>No XecureWeb PlugIn</NOEMBED>");
    }
    //MS IE 8.0
    else if( (navigator.appName == "Microsoft Internet Explorer") && (navigator.userAgent.toLowerCase().indexOf("trident/4.0") != -1) ) {
      document.write('<OBJECT ID="XecureWeb" CLASSID="CLSID:7E9FDB80-5316-11D4-B02C-00C04F0CD404" CODEBASE="http://download.softforum.co.kr/Published/XecureWeb/v7.2.2.7/xw_install.cab#Version=7,2,2,7" width=0 height=0><param name="lang" value="korean"><PARAM NAME="STORAGE" VALUE="HARD,REMOVABLE,ICCARD,PKCS11"><PARAM NAME="SECKEY" VALUE="XW_SKS_INCA_DRIVER">No XecureWeb PlugIn</OBJECT>');
    }
    else
    {

      document.write('<OBJECT ID="XecureWeb" CLASSID="CLSID:7E9FDB80-5316-11D4-B02C-00C04F0CD404" CODEBASE="http://download.softforum.co.kr/Published/XecureWeb/v7.2.2.5/xw_install.cab#Version=7,2,2,5" width=0 height=0><param name="lang" value="korean"><PARAM NAME="STORAGE" VALUE="HARD,REMOVABLE,ICCARD,PKCS11"><PARAM NAME="SECKEY" VALUE="XW_SKS_INCA_DRIVER">No XecureWeb PlugIn</OBJECT>');
    }
  }
}


function get_sid()
{
  var sid = document.XecureWeb.BlockEnc ( xgate_addr, "", "", "GET" );

  if( sid == "")  return XecureWebError() ;

  return sid;
}

// applet¿¡¼­ servletÀ¸·Î º¸³¾ °ªÀ» ¾ÏÈ£È­ ÇÏ´Â function
function enc(str) {
  var state='';
  var plain='';
  var escaped_state='';
  plain=String(str);

  if (navigator.appName == 'Netscape')
    state=XecureWeb.BlockEnc(xgate_addr, path, escape(plain), "POST");
  else
      state=XecureWeb.BlockEnc(xgate_addr, path, plain, "POST");
    //escaped_state=escape_url(state);
    escaped_state=escape_url_applet(state);
//    alert("POST:" + escaped_state);
  return escaped_state;
}

// servlet¿¡¼­ appletÀ¸·Î º¸³»ÁØ °ªÀ» º¹È£È­ ÇÏ´Â function
function dec(str) {
  var result=BlockDec(str);
  return result;
}

function XecureNavigate2iframe( url, target, feature, sid)
{
  var qs ;
  var path = "/";
  var cipher;
  var xecure_url;

  path = getPath(url);

  cipher = document.XecureWeb.BlockEnc(xgate_addr, path, XecureEscape(qs),"POST");

  if( cipher.length == 0 )  return XecureWebError() ;

  xecure_url = path + "?q=" + sid + ";" + escape_url(cipher);
  if (feature=="" || feature==null) open ( xecure_url, target );
  else open(xecure_url, target, feature );
}

function getPath(url)
{
  var path = "/";
  // get path info & query string & hash from url
  qs_begin_index = url.indexOf('?');
  // if action is relative url, get base url from window location
  if ( url.charAt(0) != '/' && url.substring(0,7) != "http://" ) {
    path_end = window.location.href.indexOf('?');
    if(path_end < 0)  path_end_str = window.location.href;
    else        path_end_str = window.location.href.substring(0,path_end);
    path_relative_base_end = path_end_str.lastIndexOf('/');
    path_relative_base_str = path_end_str.substring(0,path_relative_base_end+1);
    path_begin_index = path_relative_base_str.substring (7,path_relative_base_str.length).indexOf('/');
    if (qs_begin_index < 0){
      path = path_relative_base_str.substring( 7+path_begin_index,path_relative_base_str.length ) + url;
    }
    else {
      path = path_relative_base_str.substring( 7+path_begin_index,path_relative_base_str.length )
         + url.substring(0, qs_begin_index );
    }
  }
  else if ( url.substring(0,7) == "http://" ) {
    path_begin_index = url.substring (7, url.length).indexOf('/');
    if (qs_begin_index < 0){
      path = url.substring( path_begin_index + 7, url.length);
    }
    else {
      path = url.substring(path_begin_index + 7, qs_begin_index );
    }
  }
  else if (qs_begin_index < 0){
    path = url;
  }
  else {
    path = url.substring(0, qs_begin_index );
  }
  return path;
}

// option bit : _4_ _3_ _2_ _1_
//                       |   |
//                       |   --- 0 : ¸ðµç ÀÎÁõ¼­ ¸®½ºÆ®¾÷, 1 : ·Î±×ÀÎÇÑ ÀÎÁõ¼­ »ç¿ë
//                       ------- 0 : »ç¿ëÀÚ¿¡°Ô idn ÀÔ·Â ¿ä±¸, 1 : idn¿¡ "NULL" setting, ¼­¹ö¿¡¼­ idn ¼³Á¤

/**
 * ÀÎÁõ¼­ÀÇ ½Äº°¹øÈ£¸¦ °ËÁõÇÑ´Ù.<BR/>
 *
 * @ingroup etcAPI
 * @param Idn <PRE>°ËÁõÇÒ ÀÎÁõ¼­ÀÇ ½Äº°¹øÈ£<BR>
 * Idn¿¡ ¡°¡±ÀÌ¸é »ç¿ëÀÚ·ÎºÎÅÍ IDNÀ» ÀÔ·Â¹Þ´Â´Ù.<BR>
 * option bit : _4_ _3_ _2_ _1_<BR>
 *                       |   |<BR>
 *                       |   --- 0 : ¸ðµç ÀÎÁõ¼­ ¸®½ºÆ®¾÷, 1 : ·Î±×ÀÎÇÑ ÀÎÁõ¼­ »ç¿ë<BR>
 *                          ------- 0 : »ç¿ëÀÚ¿¡°Ô idn ÀÔ·Â ¿ä±¸, 1 : idn¿¡ "NULL" setting, ¼­¹ö¿¡¼­ idn ¼³Á¤</PRE>
 * @param TimeStamp ¼­¹öÀÇ Å¸ÀÓ½ºÅÆ
 * @param ServerCertPem pemÅ¸ÀÔÀÇ ¼­¹öÀÎÁõ¼­
 *
 * @return ¼º°øÇÏ¸é VIDÁ¤º¸¸¦ envelopÇÑ °á°ú ¸®ÅÏ
 * ½ÇÆÐ½Ã ¡°¡± ¸®ÅÏ
 */
function VerifyVirtualID(Idn, TimeStamp, ServerCertPem)
{
  var msg;

  var option = 0;

  option = 0;   // ¸ðµç ÀÎÁõ¼­ ¸®½ºÆ®¾÷, »ç¿ëÀÚ¿¡°Ô idn ÀÔ·Â ¿ä±¸
//  option = 1;   // ·Î±×ÀÎÇÑ ÀÎÁõ¼­ »ç¿ë, »ç¿ëÀÚ¿¡°Ô idn ÀÔ·Â ¿ä±¸
// only over XecureWeb Client v5.3.0.1
//  option = 2;   // ¸ðµç ÀÎÁõ¼­ ¸®½ºÆ®¾÷, idn¿¡ "NULL" ¼³Á¤
//  option = 3;   // ·Î±×ÀÎÇÑ ÀÎÁõ¼­ »ç¿ë, idn¿¡ "NULL" ¼³Á¤

  if( IsNetscape() )
  {
    msg = document.XecureWeb.VerifyAndGetVID(xgate_addr, ServerCertPem, TimeStamp, escape(accept_cert), option, escape(Idn));
  }
  else
  {
    msg = document.XecureWeb.VerifyAndGetVID(xgate_addr, ServerCertPem, TimeStamp, accept_cert, option, Idn);
  }

  return msg;

}

// nOption is 0 : (default value) File version, which is checked by 'Internet Explorer'
//            1 : Product version
//            2 : File Description
/**
 * XecureWeb Control ¿¡ °ü·ÃµÈ ¹öÀü Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù.
 *
 * @ingroup etcAPI
 * @param nOption <BR>
 * 0 : (default value) File version, which is checked by 'Internet Explorer'<BR>
 * 1 : Product version<BR>
 * 2 : File Description
 *
 * @return nOption ¿¡ µû¸¥ ¹öÀü Á¤º¸<BR>
 * ±×³É GetVersion()À» È£ÃâÇÏ¸é Object tag¿¡¼­ ÂüÁ¶ÇÏ´Â ¹öÀüÀ» ¾òÀ» ¼ö ÀÖ´Ù.<BR>
 * ¸®ÅÏ°ªÀº ¡°7, 0, 5, 0¡± °ú °°Àº Çü½ÄÀÌ´Ù.
 *
 */
function GetVersion(nOption)
{
  var ver;

  if( IsNetscape() )
  {
    alert("Not supported function");
    ver = "";
  }
  else
  {
    ver = document.XecureWeb.GetVerInfo(nOption);
    if( ver == "" )
      alert("No version information");
  }

  return ver;
}

// only over XecureWeb Client v5.3.0.1
/**
 * infoURL·ÎºÎÅÍ °¡Á®¿Â ¼­¸íµÈ ¾÷µ¥ÀÌÆ® Á¤º¸ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© ÇÊ¿äÇÑ ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ¿© ¼³Ä¡ÇÑ´Ù.<BR>
 *
 * @ingroup etcAPI
 * @param infoURL : ¾÷µ¥ÀÌÆ® Á¤º¸ÆÄÀÏÀÌ ÀÖ´Â URL<BR>
 * Ex) infoURL = ¡°http://download.softforum.co.kr/ XecureWeb/Update/info.ini.sig¡±
 *
 * @return 0 : ¼º°ø, 1 : »ç¿ëÀÚ Ãë¼Ò, 2 : ¾÷µ¥ÀÌÆ®ÇÒ ÆÄÀÏÀ» ´Ù¸¥ ¾ÖÇÃ¸®ÄÉÀÌ¼Ç¿¡¼­ »ç¿ëÁß, 3 : ÀÌ¹Ì ¾÷µ¥ÀÌÆ®µÇ¾úÀ½, 4 : ¾÷µ¥ÀÌÆ® ±ÇÇÑÀÌ ¾ø´Â »ç¿ëÀÚ, 5 : ÃÖ½Å ¹öÀüÀÓ, -1 : ½ÇÆÐ
 */
function UpdateModules( infoURL )
{
  var ret;

  if( IsNetscape() )
  {
    alert("Not supported function");
    ret = 0;
  }
  else
  {
    // success : 0, cancel : 1, file(s) holded : 2, already updated : 3, invalid user : 4, need not : 5
    // error : -1
    ret = document.XecureWeb.UpdateModules( infoURL );
  }

  return  ret;
}

// only over XecureWeb Client v5.3.0.1
/**
 * »ç¿ëÀÚ PC¿¡ ÀúÀåµÈ ¾÷µ¥ÀÌÆ® Á¤º¸ÆÄÀÏÀÇ ³»¿ëÀ» º¯°æÇÑ´Ù.<BR>
 * <BR>
 * example><BR>
 * SetUpdateInfo( ¡°PERIOD¡±, ¡°Apply¡±, ¡°0¡± );<BR>
 * => ÇÏ·ç·Î ¼³Á¤µÇ¾î ÀÖ´Â ¾÷µ¥ÀÌÆ® ÁÖ±â¸¦ ÀÏ½ÃÀûÀ¸·Î ¹«È¿È­½ÃÅ´<BR>
 *
 * @ingroup etcAPI
 * @param section ´Ù¿î·ÎµåµÈ ¾÷µ¥ÀÌÆ® Á¤º¸ÆÄÀÏÀÇ section name
 * @param key section³»ºÎÀÇ key name
 * @param value1 º¯°æÇÒ ½ÇÁ¦ value
 *
 * @return 0 : ¼º°ø, -1 : ½ÇÆÐ
 */
function SetUpdateInfo( section, key, value1 )
{
  var ret;

  if( IsNetscape() )
  {
    alert( "Not supported function" );
    ret = 0;
  }
  else
  {
    ret = document.XecureWeb.SetUpdateInfoString( section, key, value1 );
  }

  return ret;
}

// inserted by knlee 2003/06/10
function SetProviderList()
{
  var ret;

  //var provName = "TrustedNet Connect 2 Smart Card CSP;Microsoft Base Cryptographic Provider v1.0;Microsoft Enhanced Cryptographic Provider v1.0";
  var provName = "TrustedNet Connect 2 Smart Card CSP;Keycorp CSP";

  if( IsNetscape() )
  {
    alert("Not supported function");
    return -1;
  }
  else
  {
    ret = document.XecureWeb.SetProvider(provName);
    if( ret != 0 )
      alert("Set Provider name is Fail!");
  }

  return ret;
}

// applet¿¡¼­ servletÀ¸·Î º¸³¾ °ªÀ» ¾ÏÈ£È­ ÇÏ´Â function
function enc(str) {
  var state='';
  var plain='';
  var escaped_state='';
//  plain=String(str);

  alert("enc : " + str.length);
  if (navigator.appName == 'Netscape')
    state=XecureWeb.BlockEnc(xgate_addr, "/off", escape(str), "POST");
  else
      state=XecureWeb.BlockEnc(xgate_addr, "/off", str, "POST");
    //escaped_state=escape_url(state);
//    escaped_state=escape_url_applet(state);
    alert("POST:" + state.length);
  alert("enc end");
  return state;
}

// servlet¿¡¼­ appletÀ¸·Î º¸³»ÁØ °ªÀ» º¹È£È­ ÇÏ´Â function
function dec(str) {
  var result=BlockDec(str);
  return result;
}

function quick_escape(str)
{
  var len, leftlen, cut, i, j, pos, k;
  var out = "", out1 = "", out2 = "";

  len = str.length;
  if(len > 160) {
    leftlen = len/2;
    cut = Math.round(leftlen);
    out1 = quick_escape(str.substring(0, cut));
    out2 = quick_escape(str.substring(cut));
    out = out1 + out2;
  }else {
    pos = 0;
    j = -2;
    k = -2;
    while (pos > -1 && pos < len)
    {
      if(j == -2)
        j = str.indexOf('+', pos);
      if(k == -2)
        k = str.indexOf('=', pos);
      if(j < 0 && k < 0) {
        out += str.substring(pos);
        break;
      }
      if ((j < k && j > -1) || (j > -1 && k < 0))
      {
        out += str.substring(pos, j);
        out += '%2B';
        pos = j + 1;
        j = -2;
      }
      else if ((j > k && k > -1) || (k > -1 && j < 0))
      {
        out += str.substring(pos, k);
        out += '%3D';
        pos = k + 1;
        k = -2;
      }
      else{
        out += str.substring(pos);
        pos = -1;
      }
    }
  }
  return out;
}
function escape_url_applet(in_str)
{
  var len, leftlen, cut;
  var out = "", out1 = "", out2 = "";

  len = in_str.length;

  if(len > 160) {
    leftlen = len/2;
    cut = Math.round(leftlen);
    out1 = quick_escape(in_str.substring(0, cut));
    out2 = quick_escape(in_str.substring(cut));
    out = out1 + out2;
  }else {
    out = quick_escape(in_str);
  }
  alert("escape_url_applet end : " + out.length);
  return out;
}

/*
  *** valid for only XWebFilCom v5.5.x ***

  It is possible to combine following option flags
  [EXCEPTION]
     - 1,2 cannot be used simultaneously
     - 4 is valid for only 1

  envOption  =   1 : ÀÎÁõ¼­±â¹Ý ÀüÀÚºÀÅõ
             =   2 : ÆÐ½º¿öµå±â¹Ý ÀüÀÚºÀÅõ
             =   4 : ¿©·¯ °³ÀÇ ÀÎÁõ¼­·Î ÀüÀÚºÀÅõ
             =   8 : CMS Å¸ÀÔÀ¸·Î Envelop
             = 256 : ·Î±×ÀÎÇÑ ÀÎÁõ¼­·Î ÀüÀÚºÀÅõ

  return value
     - success : enveloped message
     - fail    : ""
*/
function EnvelopData( inMsg, pwd, certPem, envOption )
{
  var envMsg;


  envMsg = document.XecureWeb.EnvelopData(
      xgate_addr,
      XecureEscape(accept_cert),
      XecureEscape(inMsg),
      envOption,
      pwd,
      certPem,
      "",
      0,
      "",
      3 );

    if( envMsg == "" )
    {
    XecureWebError();
    }

  return envMsg;
}

// added Park, sohyun
// MultiSignData Ãß°¡
//Multi_SignÀ» ÇÏ±âÀ§ÇØ Ã³À½¿¡ ½ÇÇà.
//º¯¼ö ÃÊ±âÈ­, Sign Id ¹ÞÀ½.
var s_sign_desc = "MultiSign";
var s_bannerPath = "CHB_EFMS";
var cert_serial = "0376b015";

/*
 * Multi_SignÀ» ÇÏ±âÀ§ÇØ Ã³À½¿¡ ½ÇÇà<BR/>
 */
function Multi_Sign_Init()
{
    var multiSignId;

    multiSignId = document.XecureWeb.MultiSignInit();  //MultiSignInit()È£Ãâ

    if( multiSignId < 0 )
    {
        XecureSignError();
    }
    else
    {
    }
    return multiSignId;
}

/*
 * Multi_Sign µ¥ÀÌÅÍ¸¦ ¼³Á¤ÇÑ´Ù.
 */
function Set_Multi_Sign_Data(multiSignId, plain)
{
    var     originalDataTotalSize = 0;

    if(multiSignId != "")
    {
        originalDataTotalSize = document.XecureWeb.SetMultiSignData(multiSignId, plain);

        if( originalDataTotalSize < 0 )
        {
            XecureSignError();
        }
        else
        {
        }
    }
    else
    {
    alert("MultiSignInit¸¦ ¸ÕÀú ÇØÁÖ½Ê½Ã¿À");
    }

    return originalDataTotalSize;
}

// option :
//              0 : ¼­¸í ¿ø¹® Ãâ·Â ¾ÈÇÔ
//              1 : ¼­¸í ¿ø¹® Ãâ·Â
//x2            0 : hex encoding
//x2            1 : BASE64 encoding
// mask : 0 : all certificates
//        1 : only user certificates
//        2 : only coperation certificates

// ÃÖ½ÅÀº MultiSign ÇÔ¼ö ÁÖ¼® Âü°í

function Multi_Sign(multiSignId, Option)
{
    var result = 0;

    if(multiSignId != "")
    {
        result = document.XecureWeb.MultiSignEx(multiSignId, xgate_addr, accept_cert, sign_desc, Option, 2);

        if( result < 0 )
        {
            alert("¼­¸í¿¡ ½ÇÆÐÇß½À´Ï´Ù.");//XecureSignError();
        }
        else
        {
            alert("¼­¸í ¼º°ø");
        }
    }
    else
    {
        alert("MultiSignInit¸¦ ¸ÕÀú ÇØÁÖ½Ê½Ã¿À");
    }
    return result;
}

/**
 * MultiSign ³»ºÎ¿¡¼­ »ç¿ëÇÏ´Â ±â´É.<BR>
 */
function Get_Multi_Signed_Data(multiSignId, index)
{
    var signedData = "";

    if(multiSignId != "")
    {
        signedData = document.XecureWeb.GetMultiSignedData(multiSignId,
index);
        if( signedData == "" )
        {
        XecureSignError();
        }
        else
        {
                //alert("°¡Á®¿À±â ¼º°ø");
        }
    }
    else
    {
        alert("MultiSignInit¸¦ ¸ÕÀú ÇØÁÖ½Ê½Ã¿À");
    }
    return signedData;
}

//Multi_SignÀ» À§ÇØ ¸¶Áö¸·¿¡ Call
//»ç¿ëÇÑ ¸Þ¸ð¸® °ø°£ free
/**
 * MultiSign ³»ºÎ¿¡¼­ »ç¿ëµÇ´Â ±â´ÉÀ¸·Î »ç¿ëÇÑ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù.<BR>
 */
function Multi_Sign_Final(multiSignId)
{
    var result;

    result = document.XecureWeb.MultiSignFinal(multiSignId);

    if( result < 0)
    {
        XecureSignError();
    }
    else
    {
        multiSignId = 0;
    }

    return result;
}

/**
 * ÁÖ¾îÁø ±¸ºÐÀÚ·Î ±¸ºÐµÈ Æò¹®À» ¹Þ¾Æ. °¢°¢ÀÇ token¿¡ ´ëÇØ¼­ ÀüÀÚ¼­¸íÀ» ÇÑ´Ù.<BR>
 * ÀÌ¶§, ÀüÀÚ¼­¸íµÈ °ª ¶ÇÇÑ ±¸ºÐÀÚ·Î ±¸ºÐµÈ´Ù.<BR>
 *
 * @param total ¼­¸íÇÒ µ¥ÀÌÅÍÀÇ °¹¼ö
 * @param sign_msg ¼­¸íÇÒ µ¥ÀÌÅÍ
 * @param delimeter ÀÔ·Â ¸Þ½ÃÁöÀÇ ±¸ºÐÀÚ
 * @return ±¸ºÐÀÚ·Î ÀÌ·ç¾îÁø ÀüÀÚ¼­¸í µ¥ÀÌÅÍ
 */
function MultiSign(total,sign_msg,delimeter)
{
    var signed_msg = "";
    var multiSign_id = "";
    var tmp = sign_msg;
    var index= "";
    var length = "";
    var signed_tmp;// = "";
    var ret = "";

    if (total <= 0 || sign_msg == "")
    {
        alert("¼­¸íÇÒ µ¥ÀÌÅ¸°¡ ¾ø½À´Ï´Ù");
        return;
    }

    //MultiÀüÀÚ¼­¸í ÃÊ±âÈ­
    multiSign_id = Multi_Sign_Init();

    //¼­¸í°ª ¼¼ÆÃ
    for(i =0;i < total ;i++)
    {
        length = tmp.length;
        index = tmp.indexOf(delimeter);

        Set_Multi_Sign_Data(multiSign_id,tmp.substring(0,index));
        tmp = tmp.substring(index+1,length);
    }
    //¼­¸í°ª »ý¼º
    ret = Multi_Sign(multiSign_id,131072);//HEX  encoding

    if(ret != 0)
    {
        return ;
    }

    //¼­¸í°ª ÃßÃâ
    for(i = 0; i < total ; i++)
    {
        signed_tmp = Get_Multi_Signed_Data(multiSign_id,i);

        if( signed_tmp == "")
        {
                alert('aaa');
                break;
        }
        signed_msg += signed_tmp + delimeter;
    }

        Multi_Sign_Final(multiSign_id);

    return signed_msg;
}


/**
 * ÁÖ¾îÁø ±¸ºÐÀÚ·Î ±¸ºÐµÈ Æò¹®À» ¹Þ¾Æ. °¢°¢ÀÇ token¿¡ ´ëÇØ¼­ ÁÖ¾îÁø serialÀ» °¡Áø ÀÎÁõ¼­·Î ÀüÀÚ¼­¸íÀ» ÇÑ´Ù.<BR>
 * ÀÌ¶§, ÀüÀÚ¼­¸íµÈ °ª ¶ÇÇÑ ±¸ºÐÀÚ·Î ±¸ºÐµÈ´Ù.<BR>
 *
 * @param total ¼­¸íÇÒ µ¥ÀÌÅÍÀÇ °¹¼ö
 * @param sign_msg ¼­¸íÇÒ µ¥ÀÌÅÍ
 * @param delimeter ÀÔ·Â ¸Þ½ÃÁöÀÇ ±¸ºÐÀÚ
 * @param serial ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ÀÇ ½Ã¸®¾ó ¹øÈ£
 * @param locaton ¼­¸í¿¡ »ç¿ëÇÒ ÀÎÁõ¼­ÀÇ À§Ä¡ Á¤º¸
 * @return ±¸ºÐÀÚ·Î ÀÌ·ç¾îÁø ÀüÀÚ¼­¸í µ¥ÀÌÅÍ
 * @see MultiSign
 */
function MultiSignWithSerial(total, sign_msg, delimeter,serial,locaton)
{
    var signed_msg = "";
    var multiSign_id = "";
    var tmp = sign_msg;
    var index= "";
    var length = "";
    var signed_tmp = "";
    var ret = "";

    if (total <= 0 || sign_msg == "")
    {
        alert("¼­¸íÇÒ µ¥ÀÌÅ¸°¡ ¾ø½À´Ï´Ù");
        return;
    }

    //MultiÀüÀÚ¼­¸í ÃÊ±âÈ­
    multiSign_id = Multi_Sign_Init();

    //¼­¸í°ª ¼¼ÆÃ
    for(i =0;i < total ;i++)
    {
        length = tmp.length;
        index = tmp.indexOf(delimeter);

        Set_Multi_Sign_Data(multiSign_id,tmp.substring(0,index));
        tmp = tmp.substring(index+1,length);
    }
    ret = Multi_Sign_with_serial(multiSign_id, 256+65536+131072, serial,locaton); //base64  encoding
    if(ret != 0)
    {
        return ;
    }

    //¼­¸í°ª ÃßÃâ
    for(i = 0; i < total ; i++)
    {
        signed_tmp = Get_Multi_Signed_Data(multiSign_id,i);
        signed_msg += signed_tmp + delimeter;
    }
    return signed_msg;
}