//====================================================================
// JRE Install Start !!
//====================================================================

/*
 * 이부분만 수정하세요
 */
var returnJreInstallPage = "/EgovPageLink.do?link=/cmm/uat/uia/java_install"; // return page, JAVA 설치 페이지
var returnMagicInstallPage = "/EgovPageLink.do?link=/cmm/uat/uia/MB_install"; // return page, MagicLine 설치 페이지
var returnIndexPage = "EgovPageLink.do?link=/cmm/uat/uia/win_close"; //

var browser;
var sUserAgent = window.navigator.userAgent;
var isMsie = sUserAgent.toLowerCase().indexOf('msie') >-1 ;
var isWin = (window.navigator.platform =='Win32')||(window.navigator.platform=='Windows');
var isMac = (window.navigator.platform =='Mac68K')||(window.navigator.platform == 'MacPPC') || (window.navigator.platform == 'MacIntel') || (window.navigator.platform.indexOf("Mac") > -1 ) ;
var isUnix = (window.navigator.platform == 'X11') && !isWin && !isMac;
var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false;
isWin98 = sUserAgent.indexOf('Win98')>-1 || sUserAgent.indexOf('Windows 98')>-1;
isWinME = sUserAgent.indexOf('Win 9x 4.90')>-1 || sUserAgent.indexOf('Windows ME')>-1;
isWin60 = sUserAgent.indexOf('Windows NT 6') >-1;


/**
 * by kj 
 * installProgressJRE(): java가 설치되어있는지 체크 
 * java 설치 페이지로 이동하여 java를 설치 할 수 있도록 구현함.
 * java 설치 요건이 충족되면 return false
 * java 설치 요건이 충족되지 못하면 java설치 페이지로 이동. 
 * @param flag
 * @return java 설치 페이지 혹은 false  
 */
function installProgressJRE(){
	deployJava.getBrowser();
	browser =	deployJava.browserName2;
	if(browser == 'Safari' || browser == 'Opera'){
		if(!java16VersionSafariCheck()){
			returnPage(returnJreInstallPage);
			return false;
		}else{
			return true;
		}
	}else if(browser == 'MSIE'){
		if(!java16VersionMSIECheck()){
			returnPage(returnJreInstallPage);
			return false;
		}else{
			return true;
		}
	}else{
		if(!java16VersionCheck()){
			returnPage(returnJreInstallPage);
			return false;
		}else{
			return true;
		}
	}
}

/**
 * installJRE() : java 설치 페이지에서 사용
 * installProgressJRE()에서 java 설치요건이 충족되지 못한경우
 * 이 함수를 사용하고 혹 도중에 충족이 되었을경우 index 페이지로 이동함.
 * @return
 */
function installJRE(){
	deployJava.getBrowser();
	browser =	deployJava.browserName2;
	if(browser == 'MSIE'){
		if(!java16VersionMSIECheck()){
			document.getElementById('MagicLineDiv').innerHTML= getInstallJRETag(browser);
			//document.write(getInstallJRETag(browser));
		}else{
			returnPage(returnIndexPage);
		}
	}else if(browser == 'Safari' || browser == 'Opera'){
		if(!java16VersionSafariCheck()){
			document.getElementById('MagicLineDiv').innerHTML= getInstallJRETag(browser);
			//document.write(getInstallJRETag(browser));
		}else{
			returnPage(returnIndexPage);
		}
	}else{
		if(!java16VersionCheck()){
			document.getElementById('MagicLineDiv').innerHTML= getInstallJRETag(browser);
			//document.write(getInstallJRETag(browser));
		}else{	
			returnPage(returnIndexPage);
			
		}
	}
}


function java16VersionMSIECheck(){
	var jres = deployJava.getJREs();
	
	if(deployJava.versionCheck('1.5.0_20+') ){
		for(var i=0; i< jres.length; i++){
			if(jres[i].indexOf('1.6.0') >-1){
				if(deployJava.versionCheck('1.6.0_17+')){
					return	true;					
				}else{
					return false;
				}
			}
		}
		return true;
	}else{
		for(var i=0; i< jres.length; i++){
			if(jres[i].indexOf('1.5.0')){
				return true;
			}
			if(jres[i].indexOf('1.6.0')){
				return true;
			}
		}
		return false;
	}
}


//Netscape Family JRE Version Check!!
function java16VersionCheck(){
	if(isMac){
		Java0StatusS = PluginDetect.isMinVersion('Java', '1.5.0+', '/GPKIlib/getJavaInfo.jar');
		if(Java0StatusS == 1){
			return true;
		}else{
			return false;
		}
	}else{
		if(deployJava.versionCheck('1.6.0_17+')){
			return true;
		}
	}
	return false;
}

// Safari JRE Version Check!!
function java16VersionSafariCheck(){
	var JavaVersionS = "";
	var Java0StatusS;
	if(isMac){
		JavaVersionS = PluginDetect.getVersion('Java', '/GPKIlib/getJavaInfo.jar');
	    Java0StatusS = PluginDetect.isMinVersion('Java', '1.5.0', '/GPKIlib/getJavaInfo.jar');
		 if(JavaVersionS.indexOf('1,5')>-1)
			 return true;
		 else if(JavaVersionS.indexOf('1,6')>-1)
			 return true;
		 else if(JavaVersionS.indexOf('1,7')>-1)
			 return true;
		 else 
			 return false;
	}else{
		JavaVersionS = PluginDetect.getVersion('Java', '/GPKIlib/getJavaInfo.jar');
	    Java0StatusS = PluginDetect.isMinVersion('Java', '1.6.0', '/GPKIlib/getJavaInfo.jar');
		 if(JavaVersionS.indexOf('1,6')>-1)
			 return true;
		 else if(JavaVersionS.indexOf('1,7')>-1)
			 return true;
		 else 
			 return false;
	}
}


/**
 *  JRE Download시 환경에 따라 JRE설치 파일 URL을 불러온다.
 * @return
 */
function javaInstallUrl(){
	
	var installUrl = "";
	var port = location.port;
	var common_url;

	if(port == "" || port == "80"){
		common_url  = 'http://download.hometax.go.kr.krweb.nefficient.com/hts1/';		// 운영서버 (CDN)
	}else{
		common_url  = 'http://www.egovframe.go.kr/';										// 개발서버
	}

	if(isWin){ // windows
		if(isWin98 || isWinME){
			installUrl = common_url+"wmagic/ie/jre-1_5_0_22-windows-i586-p.exe";		// win98 || winMe일 경우에 jre 1.5버전 설치
		}else{
			if(isMsie){
				var jres = deployJava.getJREs();
				for(var i=0; i< jres.length; i++){
					if(jres[i].indexOf('1.6.0') >-1){
						return installUrl = common_url+"wmagic/ie/jre-6u20-windows-i586-s.exe";
					}
				}
				return installUrl = common_url+"wmagic/ie/jre-1_5_0_22-windows-i586-p.exe";		//  jre 1.5버전 설치
			}else{
				return installUrl = common_url+"wmagic/ie/jre-6u20-windows-i586-s.exe";
			}
		}
	}else if(isMac){ // mac
		if(sUserAgent.indexof('10_4')>-1){
			installUrl = common_url+"wmagic/mac/JavaForMacOSX10.5Update6.dmg";	
		}else{
			installUrl = common_url+"wmagic/mac/JavaForMacOSX10.6Update1.dmg";
		}
	}else if(isUnix){ // unix
		installUrl = common_url+"wmagic/linux/jre-6u17-linux-i586-rpm.bin";
	}else{ // 기타 OS
		alert('지원하지 않는 OS 입니다.');
		return;
	}
	return installUrl;
}


function returnPage(page){
	location.href = page;
}

function getInstallJRETag(current_browser){
	  
	  var objectTag = "";
	      objectTag = ' <OBJECT ';
	      objectTag +=' ID = "MagicXSign1"';
	      objectTag +=' classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"';
	      objectTag +=' width="0"';
	      objectTag +=' height="0"';
	      objectTag +=' codebase="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=6,0,2,6">';
	      objectTag +='</OBJECT> ';
	      
		var embedTag = ' <object';
		    embedTag +=' classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"';
		    embedTag +=' codebase = "http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=6,0,2,6"';
		    embedTag +=' WIDTH = "0px" HEIGHT = "0px" >';
		    embedTag +=' <PARAM NAME = CODEBASE VALUE = "http://java.sun.com/update/1.6.0/jinstall-6-fcs-windows-i586.cab" >';
		    embedTag +=' <param name = "type" value = "application/x-java-applet;jpi-version=1.6.0_07">';
		    embedTag +=' <param name = "scriptable" value = "true">';
			embedTag +=' <comment>';
			embedTag +='	 <embed';
		    embedTag +='      type = "application/x-java-applet"';
		    embedTag +='      JAVA_CODEBASE = "http://java.sun.com/update/1.6.0/jinstall-6-fcs-windows-i586.cab"';
		    embedTag +='      WIDTH = "0px"';
		    embedTag +='      HEIGHT = "0px"';
		    embedTag +='			scriptable = true';
		    embedTag +='			pluginspage = "http://java.sun.com/update/1.6.0/jre-6-windows-i586.xpi">';
		    embedTag +='			<noembed>';
		    embedTag +='      </noembed>';
			embedTag +='	</embed>';
		    embedTag +=' </comment>';
			embedTag +=' </object>';      

		if(current_browser == "MSIE")
			return objectTag; 
		else if(current_browser == "Netscape Family")
			return embedTag;
		else 
			return objectTag + embedTag;
}


//====================================================================
// JRE Install End !!
//====================================================================

//====================================================================
//MagicLine4 Run START !!
//====================================================================
/**
 * MagicLine Tag Make
 * 
 * @param installprocess : default, check(설치페이지이동 및 인증서창), enc(암복호화시-NTS용)
 */
function magicLineAppletTag(installprocess){

	var port = location.port;
	var host = location.host;
	var codebaseurl ='http://www.egovframe.go.kr/';
	var libPath = '/GPKIlib';
	var downPath = libPath;
	
	//var KCSMagicLineResVer ='1.0.0.2';	
	
	var MagicLineVer = '1.0.2.12';
	var MagicLineLauncherVer = '1.0.4.2';
	var MagicLineResVer = '1.0.0.9';
	var MagicLineTrustedRootCertVer = '1.0.0.3';
	var JcoasVer = '1.3.1.3';
	var UbiKeyVer = '1.0.0.9';
	
	
	//var KCSMagicLineResJar = 'KCSMagicLineRes-'+KCSMagicLineResVer+'.jar';
	var MagicLineJar = 'MagicLine-'+MagicLineVer+'.jar';
	var MagicLineLauncherJar = 'MagicLineLauncher-'+MagicLineLauncherVer+'.jar';
	var MagicLineResJar = 'MagicLineRes-'+MagicLineResVer+'.jar';
	var MagicLineTrustedRootCertJar = 'MagicLineTrustedRootCert-'+MagicLineTrustedRootCertVer+'.jar';
	var JcoasJar = 'jcaos-'+JcoasVer+'.jar';
	var UbiKeyJar = 'ubikey-'+UbiKeyVer+'.jar';
	
	// MagicLine debug Log state
	// - false : 사용안함
	// - true : 사용함
	var MagicLineDebugModeValue="true";

	// 인증서 선택창의 탭 관리 설정
	// - ALL : 일반/관리 탭을 사용함
	// - General : 관리탭을 사용하지 않음 (Default)
	// - Management : 관리탭을 사용하지 않음
	var MagicLineTabValue="General";

	// 저장매체 타입 설정
	// 복수개의 저장매체 선택시 ';' 으로 구분하여 입력
	//
	// - ALL : 모든 저장 매체 (Default)
	// - Disk : 하드 디스크(시스템 디스크 - Windows 의 경우 C 드라이브)
	// - RemovableDisk : 이동식 디스크
	// - SmartCard : 저장토큰(스마트카드)
	// - PKCS11Token : 보안토큰(PKCS#11)
	// - Phone : 휴대폰
	// MagicLineHTML += '	<param name="MagicLineStorageType" value="Disk;RemovableDisk;SmartCard;PKCS11Token;"/>';
	var MagicLineStorageTypeValue="ALL";

	// 인증 도메인 설정
	// 복수개의 인증 도메인 선택시 ';' 으로 구분하여 입력
	//
	// - ALL : 모든 도메인 설정 (즉 NPKI;GPKI)  (Default)
	// - NPKI : NPKI 도메인 설정
	// - GPKI : GPKI 도메인 설정
	var MagicLineDomainValue = 'NPKI;GPKI;';

	// 인증기관 설정
	// 복수개의 인증기관 선택시 ';' 으로 구분하여 입력
	// 
	// - ALL : 모든 인증기관 설정  (Default)
	// [NPKI]
	// - YESSIGN : 금융결제원
	// - SIGNKOREA : 코스콤
	// - TRADESIGN : 한국무역정보통신
	// - SIGNGATE : 한국정보인증(KICA)
	// - CROSSCERT : 한국전자인증
	// - NCASIGN : 한국전산원
	// [GPKI]
	// - MOPAS : 행정안전부 (인증 도메인 설정시 GPKI 가 설정된 경우 Default)
	var MagicLineCANameValue="ALL";

	// 인증서 정책 OID 설정
	// 복수개의 인증서 정책 OID 선택시 ';' 으로 구분하여 입력
	// - ALL : 모든 인증서 정책 OID 수용  (Default)
	// - 기타 세부 OID 는 각 인증 도메인별 규격을 참고
	var MagicLineCertPolicyValue="ALL";

	// 키사용 용도(KeyUsage) 설정
	// 복수개의 키사용 용도 선택시 ';' 으로 구분하여 입력
	// - ALL : 모든 키사용 용도 설정 (Default)
	// - SIGN : 서명용 인증서
	// - KM : 암호용 인증서
	var MagicLineKeyUsageValue="ALL";

	// 키보드보안 설정
	// - none : 사용안함 
	// - softforum : 소프트포럼
	// - ezkeytec : 이즈키텍
	var MagicLineKeyboardSecValue='ezkeytec';
	
	// 휴대폰 설정
	// - infovine 또는 인포바인 : 인포바인 휴대폰 서비스
	// - signgate 또는 정보인증 : 정보인증 모바일키 휴대폰 서비스
	var MagicLineMobilePhoneValue;
	if(isMsie)
		MagicLineMobilePhoneValue="infovine;signgate;";
	else
		MagicLineMobilePhoneValue="infovine;";
	//인포바인일 경우 사용하는 정보
	var InfovineInfoValue="CHANNELNAME:NTS_HTS;CERT_COMPANY:DREAMSECURITY;";

	// 매직라인 설치 조건
	// defalt  : 설치 체크 없이 자동 설치
	// check   : 사용자 매직라인 미설치, 및 업그레이드 일 경우 javascript:goMagicLineProgressCheck() 실행
	//           index page 및 로그인 페이지에서 사용
	//           ex)javascript:goMagicLineProgressCheck() -> 설치 페이지로 이동
	// install : 설치 페이지에서 적용
	//           ex)javascript:goMagicLineProgressFinish() -> 설치 페이지에서 업무 페이지로 이동
	var MagicLineInstallProgressValue=installprocess;
	
	//사용자의 브라우저
	var UserBrowserValue=browser;
	
	var SessionIDValue="";
	
	var MagicLineSite = 'nts';

	var MagicLineHTML2 = '';
	
	var b = false;

	if(isMsie){
		MagicLineHTML2 += ' <object id="MagicLine" name="MagicLine" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" codetype="application/java" type="application/x-java-applet" width="0" height="0"  alt="매직라인" >';//onfocus="javascript:ttt(this);"
		MagicLineHTML2 += ' <param name="java_code" value="com.dreamsecurity.applet.launcher.MagicLineLauncher.class"/>';
		MagicLineHTML2 += ' <param name="java_codebase" value="'+codebaseurl+';"/>';
		MagicLineHTML2 += ' <param name="type" value="application/x-java-applet;jpi-version=1.5"/>';
		//MagicLineHTML2 += ' <param name="classloader_cache" value="false"/>';
	}else{
		MagicLineHTML2 += '<div style="position:absolute;top:0px;left:0px;width:0px;height:0px;z-index:1;visibility:hidden;">';
		MagicLineHTML2 += '<applet id="MagicLine" codebase="'+codebaseurl+'"  code="com.dreamsecurity.applet.launcher.MagicLineLauncher.class" width=200 height=75 MAYSCRIPT >'; // style="visibility:hidden;" width="0" height="0" style="outline: none;display:inline" style="visibility:hidden;overflow:hidden;width:0;height:0;margin:0;padding:0;"
	}
	
	MagicLineHTML2 += ' <param name="archive" value="'+libPath+'/'+MagicLineLauncherJar+','+libPath+'/'+JcoasJar+','+libPath+'/'+UbiKeyJar+'"/>';
	//MagicLineHTML2 += ' <param name="cache_archive" value="'+libPath+'/'+NTSMagicLineLauncherJar+','+libPath+'/'+MagicLineLauncherJar+','+libPath+'/'+JcoasJar+','+libPath+'/'+UbiKeyJar+'"/>';
	//MagicLineHTML2 += ' <param name="cache_version" value="'+NTSMagicLineLauncherVer+','+MagicLineLauncherVer+','+JcoasVer+','+UbiKeyVer+'"/>';
	if((installprocess == 'check') && isWin60){
		MagicLineHTML2 += ' <param name="separate_jvm" value="true"/>';
	}
	// ## MagicLine's Parameter. ##
	//MagicLineHTML2 += ' <param name="initial_focus" value="false"/>';
	MagicLineHTML2 += ' <param name="MagicLineCacheFile" value="'+MagicLineJar+';"/>';
	MagicLineHTML2 += ' <param name="MagicLineCacheFileVersion" value="'+MagicLineVer+';"/>';
	MagicLineHTML2 += ' <param name="MagicLinePath" value="'+downPath+'"/>';
	MagicLineHTML2 += ' <param name="MagicLineResourceFile" value="'+MagicLineResJar+'"/>';
	MagicLineHTML2 += ' <param name="MagicLineResoureVersion" value="'+MagicLineResVer+';"/>';
	MagicLineHTML2 += ' <param name="MagicLineLauncherVersion" value="'+MagicLineLauncherVer+'"/>';
	MagicLineHTML2 += ' <param name="MagicLineRealAppletName" value="com.dreamsecurity.ui.MagicXSignRealAppletProcImpl"/>'; 
	MagicLineHTML2 += ' <param name="MagicLineTrustedRootCertFile" value="'+MagicLineTrustedRootCertJar+'"/>';
	MagicLineHTML2 += ' <param name="MagicLineTrustedRootCertVersion" value="'+MagicLineTrustedRootCertVer+'"/>';
	MagicLineHTML2 += ' <param name="MagicLineDebugMode" value="' + MagicLineDebugModeValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineTab" value="' + MagicLineTabValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineStorageType" value="' + MagicLineStorageTypeValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineDomain" value="' + MagicLineDomainValue + '"/>';	
	MagicLineHTML2 += ' <param name="MagicLineCAName" value="' + MagicLineCANameValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineCertPolicy" value="' + MagicLineCertPolicyValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineKeyUsage" value="' + MagicLineKeyUsageValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineKeyboardSec" value="' + MagicLineKeyboardSecValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineMobilePhone" value="' + MagicLineMobilePhoneValue + '"/>';
	MagicLineHTML2 += ' <param name="InfovineInfo" value="' + InfovineInfoValue + '"/>';
	MagicLineHTML2 += ' <param name="MagicLineInstallProgress" value="'+MagicLineInstallProgressValue+'"/>';
	//MagicLineHTML2 += ' <param name="MagicLineSite" value="' + MagicLineSite + '"/>';
	MagicLineHTML2 += ' <param name="sitebase" value="' + codebaseurl + '"/>';
	//MagicLineHTML2 += ' <param name="SessionID" value="' + SessionIDValue + '"/>';
	if(isMsie){
		MagicLineHTML2 += ' </object>';
	}else{
		MagicLineHTML2 += '</applet>';
		MagicLineHTML2 += '</div>';	
	}
	return MagicLineHTML2;
}

function runMagicLine(installProcess){
	installProgressJRE();
	if(isMsie){
		var magicElement = document.createElement('div');
		magicElement.id='MagicElement';
		magicElement.className = 'MagicElement';
		magicElement.innerHTML = magicLineAppletTag(installProcess);
		var ref_node =  document.getElementsByTagName("HEAD")[0];
		ref_node.parentNode.insertBefore(magicElement, ref_node);
	}else{
		document.write(magicLineAppletTag(installProcess));
	}	
}

//====================================================================
//MagicLine4 Run END !!
//====================================================================

function ttt(obj){
	document.focus();
}


//------------------------------------------- [Init 에 필요한 정보] --------------------------------------------------------------------//
//서버인증서(Base64Encode)
var ServerCert   		= "MIID5jCCAs6gAwIBAgIQSYexPQLd1LW4+HKjW0HZIDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJLUjEcMBoGA1UEChMTR292ZXJubWVudCBvZiBLb3JlYTENMAsGA1UECxMER1BLSTEUMBIGA1UEAxMLQ0ExMzEwMDAwMDEwHhcNMDkwMjAzMDI1MTQxWhcNMTEwNTAzMDI1MTQxWjBdMQswCQYDVQQGEwJLUjEcMBoGA1UECgwTR292ZXJubWVudCBvZiBLb3JlYTEYMBYGA1UECwwPR3JvdXAgb2YgU2VydmVyMRYwFAYDVQQDDA1TVlIxMzExMDAwMDExMIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgEWtLpCHdiiIql8cya4QU110sKZWCFVJkGqQU9VnKWeDfSuawbxIDcUZ806bADEIzTCiJ93iixsDTZbKLi4FW683f9+PNrI3Qhc1N0mQ/K6BNT20NH1RvhINXptsKr0+BaRRjRO1rZ11INHLj9eC9tpOP1RbPt17vNSEVQJeSM1bAgMBAAGjggEyMIIBLjAfBgNVHSMEGDAWgBQBzxeuBI2HzLdVC3Fsa0ic5rGylTAdBgNVHQ4EFgQUHyZEYWloVTQghYTbvB5chlKgRNYwDgYDVR0PAQH/BAQDAgUgMBgGA1UdIAQRMA8wDQYJKoMaho0hAgECMAAwgYkGA1UdHwSBgTB/MH2ge6B5hndsZGFwOi8vbGRhcC5nY2MuZ28ua3I6Mzg5L2NuPWNybDAwMTQsY249Q0ExMzEwMDAwMDEsb3U9R1BLSSxvPUdvdmVybm1lbnQgb2YgS29yZWEsYz1LUj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25saXN0O2JpbmFyeTA2BggrBgEFBQcBAQQqMCgwJgYIKwYBBQUHMAGGGmh0dHA6Ly9ndmEuZ3BraS5nby5rcjo4MDgwMA0GCSqGSIb3DQEBBQUAA4IBAQBW1qIyTKmabx1rTYazMKE7B22Knum7/bFeqDmzHKXPdIbxCtj5VmcFV/hQLYkMwor2lB27gpGUpqgcPj+5Hazd3nM9bmL+R+IBm6qKtWPfWDT8aN2wczSpW794h89J9i2hNqLTiyTZNgJE87IJND+zqwMAvP9JUX380b7MF1Gtsc5NLuXijA0eRhfhuyGoEUUbULeDf759VYMGBidmGvcJBM7afLPG0ZcNojTdwkdlXa4RoXYe9ps5wn78sjUcJox3ChOaWsZmqMw7+4OTTjO18ohAiBu5mdUtyrhnB/SYtvPElp1TUMXNh7csQBMmnXENKw8BAuo/sWxrKQbXWJl8";

var AlgoMode 			= 0x30;				         			// 암복호 알고리즘 (
																							// 0x20 : SYM_ALG_3DES_CBC, 
																							// 0x30 : SYM_ALG_SEED_CBC, 
																							// 0x40 : SYM_ALG_NEAT_CBC, 
																							// 0x50 : SYM_ALG_ARIA_CBC,
			         																// 0x60 : SYM_ALG_NES_CBC) 

var WorkDir		        = "";										// 작업디렉토리(모듈 설치된 위치) 		

var GNCertType  		= 0x00;				         		// GPKI, NPKI 인증서 모두 : 0x00, GPKI 만 : 0x01, NPKI 만 :0x02	

var ValidCertInfo 		= "";										// "1 2 410 100001 2 2 1|1 2 410 100001 2 1 2|";	 특정인증서만 로딩 할 경우에 정책코드를 나열한다.	

var ReadCertType 		= 0x01; 				        		// 서명용인증서 : 0x01, 암호키분배용 인증서 : 0x02

var KeyStrokeType 		= 0x00;			 	         			// 키보드 보안 API (0x01 : softcamp, 0x00 : 적용안함)

var CertOption			= 0x01;							        // 0x00 : 로그인한 세션인증서로만 서명한다. (해당인증서만 로딩한다.) 

var SiteID 			= "Test_MagicLine";			        		        // SiteID :세션정보를 획득하는 키값

//var ServerAddr 			= "www.egovframe.go.kr"; 				

var tagStart	= "<MagicLine:ENCRYTPED_DATA>";
var tagEnd		= "</MagicLine:ENCRYTPED_DATA>";
var ServiceStartPageURL = "/index.jsp";



document.writeln('<form name="magicLine4Form" METHOD="POST">');
document.writeln('      <input name="encryptedData" type="hidden"/>');
document.writeln('      <input name="signedData" type="hidden"/>');
document.writeln('</form>');



/*********************************************************************/
//				init		                     //
/*********************************************************************/
function Init()
{
	var nResult;

	nResult = document.MagicLine.Init(WorkDir, ServerCert, AlgoMode, GNCertType, ValidCertInfo, ReadCertType, KeyStrokeType);
	if( nResult == 1 || nResult == 100) 
	{	
		return 1;
	}
	else
	{
		strReturnData = document.MagicLine.GetReturnData();
		alert(strReturnData);
		return nResult;
	}
}

// C/S 용 인증서 사용자 인터페이스 
/*********************************************************************/
//                   Login                //
/*********************************************************************/
function Login(form)
{
	var strData;
	var nResult;
	var strReturnData;
	var strSendData; 
	strData= MagicLine4Submit(form); 
	nResult = Init();
	if( nResult == 117)
		return;

	var sessionID = "";
        if( form.challenge.value != null)     
		sessionID = form.challenge.value;

	if( document.MagicLine.setSessionID(sessionID) != 1) 
	{
		return;
	}
	nResult = document.MagicLine.Login(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 )
	{
		document.magicLine4Form.encryptedData.value = tagStart + strReturnData + tagEnd;
		document.magicLine4Form.method = form.method;
		document.magicLine4Form.action = form.action;
		document.magicLine4Form.submit();
	}
	else
	{
		if( nResult != 106)
			alert(strReturnData); 
	}

}



//********************************************************************//
//		Logout					              //
//--------------------------------------------------------------------//
//		로그아웃(세션정보 삭제)				      //	
//********************************************************************//
function Logout()
{
	var strData;
	var nResult;
	var strReturnData;
	var strSendData; 

	nResult = Init();
	if( nResult == 117)
		return;
		
	nResult = document.MagicLine.Logout(SiteID);
	
	if( nResult == 1 ) 
	{
		// 메인 페이지로 돌아가기
		alert("로그인한 세션이 종료되었습니다.");
		location.href = ServiceStartPageURL;
	}
}
// cs 용 인증서 사용자인터페이스를 사용한 SignAndEnv
/*********************************************************************/
//		       EnvelopedSignData			  //
/*********************************************************************/
function EnvelopedSignData(form)
{
	var strData;
	var nResult;
	var strReturnData;
	var strSendData; 
	strData= MagicLine4Submit( form); 
	nResult = Init();
	if( nResult == 117)
		return;

	var sessionID = "";
    	if( form.challenge.value != null)
		sessionID = form.challenge.value;

	if( document.MagicLine.setSessionID(sessionID) != 1) 
	{
		return;
	}
	nResult = document.MagicLine.EnvelopedSignData(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1) // Issue 실패
	{
		document.magicLine4Form.encryptedData.value = tagStart + strReturnData + tagEnd;
		document.magicLine4Form.method = form.method;
		document.magicLine4Form.action = form.action;
		document.magicLine4Form.submit();

	}
	else
	{
		if(nResult != 106 && strReturnData != null)
			alert(strReturnData);	
	}
	

}

/*********************************************************************/
//		       EnvelopData			  //
/*********************************************************************/
function EnvelopedData(form)
{
	var strData;
	var nResult;
	var strReturnData;
	var strSendData; 
	strData= MagicLine4Submit( form); 
	nResult = Init();
	if( nResult == 117)
		return;
	
	var sessionID = "";
    	if( form.challenge.value != null)
		sessionID = form.challenge.value;

	if( document.MagicLine.setSessionID(sessionID) != 1) 
	{
		return;
	}

	nResult = document.MagicLine.EnvelopData(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();

	if( nResult == 1 ) 
	{
		document.magicLine4Form.encryptedData.value = tagStart + strReturnData + tagEnd;
		document.magicLine4Form.method = form.method;
		document.magicLine4Form.action = form.action;
		document.magicLine4Form.submit();	
	}
	else
	{
		if(nResult != 106 && strReturnData != null)
			alert(strReturnData);
	}
}


/*********************************************************************/
//		      SignedDataForm(form)										//
/*********************************************************************/
function SignedDataForm(form)
{
	var strData;
	var nResult;
	var strReturnData;
	nResult = Init();
	if( nResult == 117)
		return;
		
	strData= MagicLine4Submit(form) 
	strReturnData = SignedData(strData);

	if( strReturnData != "" ) // 성공 
	{
		document.magicLine4Form.encryptedData.value = tagStart + strReturnData + tagEnd;
		document.magicLine4Form.method = form.method;
		document.magicLine4Form.action = form.action;
		document.magicLine4Form.submit();	
	}
}

/*********************************************************************/
//		      SignedData(data)										//
/*********************************************************************/
function SignedData(data)
{
	var nResult;
	var strReturnData;
	nResult = Init();
	if( nResult == 117)
		return;
	nResult = document.MagicLine.SignedData(SiteID, CertOption, data);
	strReturnData = document.MagicLine.GetReturnData();
	
	if( nResult == 1 ) 
	{
		return strReturnData;
	}
	else
	{
		if(nResult != 106 && strReturnData != null)
			alert(strReturnData);
		return "";
	}
}

/*********************************************************************/
//		      EncryptedSignData										//
/*********************************************************************/
function EncryptedSignData(form)
{
	var strData;
	var nResult;
	var strReturnData;
	nResult = Init();
	if( nResult == 117)
		return;
	strData= MagicLine4Submit( form) 
	nResult = document.MagicLine.EncryptedSignData(SiteID, CertOption, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) // Issue 실패
	{
		document.magicLine4Form.encryptedData.value = tagStart + strReturnData + tagEnd;
		document.magicLine4Form.method = form.method;
		document.magicLine4Form.action = form.action;
		document.magicLine4Form.submit();	
	}
	else
	{
		if(nResult != 106 && strReturnData != null)
			alert(strReturnData);
	}
}
/***************************************************************************/
//							국세청에서 사용하는 웹구간 암호화
/**************************************************************************/
function EncryptWebData(form){
	var strData;
	var nResult;
	var strReturnData;

	strData= MagicLine4Submit( form) 

	nResult = Init();
	if( nResult == 117)
		return;
	
	nResult = document.MagicLine.encryptWebData(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) 
	{
		return strReturnData;
	}
	else
	{
		alert("Encrypt Fail");
		alert(strReturnData);
		return "";
	}
}
	
/***************************************************************************/
//							국세청에서 사용하는 웹구간 복호화
/**************************************************************************/
function DecryptWebData(form){
	var strData;
	var nResult;
	var strReturnData;

	strData= MagicLine4Submit( form) 

	nResult = Init();
	if( nResult == 117)
		return;
	
	nResult = document.MagicLine.decryptWebData(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) 
	{
		return strReturnData;
	}
	else
	{
		alert("Decrypt Fail");
		alert(strReturnData);
		return "";
	}
}	

/*********************************************************************/
//               국세청용 키공유
/*********************************************************************/
function GenSessionKey(form){
	var strData;
	var nResult;
	var strReturnData;

	strData= MagicLine4Submit( form) 

	nResult = Init();
	if( nResult == 117)
		return;
	
	nResult = document.MagicLine.genSessionKey(ServerCert);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) 
	{
		return strReturnData;
	}
	else
	{
		alert("GenSessionKey Fail");
		alert(strReturnData);
		return "";
	}
}	

/**********************************************************************/
//                     국세청 전자서명
/**********************************************************************/
function Signature(form){
	var strData;
	var nResult;
	var strReturnData;

	strData= MagicLine4Submit( form) 

	nResult = Init();
	if( nResult == 117)
		return;
	
	nResult = document.MagicLine.signatureData(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) 
	{
		return strReturnData;
	}
	else
	{
		alert("Signature Fail");
		alert(strReturnData);
		return "";
	}
}

	

/*********************************************************************/
//		      Encrypt												//
/*********************************************************************/
function Encrypt(form)
{
	var strData;
	var nResult;
	var strReturnData;

	strData= MagicLine4Submit( form) 

	nResult = Init();
	if( nResult == 117)
		return;
	
	nResult = document.MagicLine.Encrypt(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();

	if( nResult == 1 ) 
	{
		document.magicLine4Form.encryptedData.value = tagStart + strReturnData + tagEnd;
		document.magicLine4Form.method = form.method;
		document.magicLine4Form.action = form.action;
		document.magicLine4Form.submit();
	}
	else
	{
		alert(strReturnData);
	}
}

/*********************************************************************/
//		      EncryptLink											//
/*********************************************************************/
function EncryptLink(link)
{
	var strData;
	var nResult;
	var strReturnData;
	nResult = Init();
	if( nResult == 117)
		return;
	strData= MagicLine4Link(link); 
	link.href += "encryptedData=";	
	nResult = document.MagicLine.Encrypt(SiteID, strData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) 
	{

		strData = replaceEscapeString( strReturnData ) 
		link.href += tagStart + strData + tagEnd;
	}
	else
	{
		alert(strReturnData);
	}
}


/*********************************************************************/
//		      Decrypt												//
/*********************************************************************/
function Decrypt(encData)
{
	var strData;
	var nResult;
	var strReturnData = "";
	
	nResult = Init();
	if( nResult == 117)
		return;

	nResult = document.MagicLine.Decrypt(SiteID, encData);
	strReturnData = document.MagicLine.GetReturnData();
	if( nResult == 1 ) 
	{
		return strReturnData;
	}
	else
	{
		alert("Decrypt Fail");
		alert(strReturnData);
		return "";
	}
}

/*********************************************************************/
//		      WrapperTag 											//
/*********************************************************************/
//  <GPKI_ENC> Data </GPKI_ENC>	로 만든다.                
function WrapperTag(Msg)
{
	var TagData;
	
	TagDat = "<GPKI_ENC>";
	TagData += Msg;
	TagData += "</GPKI_ENC>"
	
	alert(TagDat);
	return TagData; 
}


/*********************************************************************/
//	               MagicLine4Submit(form)									//
/*********************************************************************/
function MagicLine4Submit( form ) 
{
	var queryString = "";
	var qs_index = "";
	var action = "";
	var noenc_qs = "";
	if ( form.action.indexOf('?') != -1 )
	{
		//action=> ?asdf=asdf&asdf=aa?12=34 부분의 마지막 ?뒤의 Query는 암호화를 한다.	
		alert(form.action);
		action = form.action;
		document.magicLine4Form.action = action.substring( 0, form.action.lastIndexOf('?') );
		queryString = action.substring( action.lastIndexOf('?') + 1, action.length) + '&';
	} 
	else
	{
		document.magicLine4Form.action = form.action;
	}
	
	queryString += makeQueryString(form);
	return queryString;

}
/*********************************************************************/
//	               MagicLine4Link(link)		                //
/*********************************************************************/
function MagicLine4Link( link ) 
{
	nResult = Init();
	if( nResult == 117)
		return;
	var action = "";
	var queryString = "";
	var noenc_qs = "";
	var strResult ="";
	var strCode = ""
	var strMsg = ""
	
	if ( link.protocol != "http:" )
	{
		alert("http 프로토콜만 사용가능합니다");
		return true;
	}
		
	if (link.search.length < 1) 
	{
		alert("암호화할 Data가 없습니다.");
		return false;
	}
	
	action = "http://" + link.hostname + ":" + link.port + "/" + link.pathname;
	queryString = link.search.substring( link.search.lastIndexOf('?') + 1, link.search.length);

	link.href = action + "?";	
	return queryString;
}

function makeQueryString( form ) 
{
	var name  =  new Array(form.elements.length); 
	var value =  new Array(form.elements.length); 
	var flag  = false;
	var j     = 0;
	var plain_text ="";

	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) 
				{
					name[j] = form.elements[i].name; 
					value[j] = 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;
				}
				else
				{
					value[j] = form.elements[i].value;
				}
				j++;
			}
		}
	}

//	for (i = 0; i < j; i++) 
//	{
//		str = value[i]; 
//		value[i] = replaceEscapeString(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;
}

// submit 전송할 데이터 대체
function replaceEscapeString( qureyString ) 
{
	var i;
	var ch;
	var rstring = '';
	var qstring = '';

	qstring = String(qureyString);

	for (i = 0; i < qstring.length; i++) 
	{
		ch = qstring.charAt(i);

		if (ch == ' ')  rstring += '%20';
		else 
		if (ch == '%')  rstring += '%25';
		else 
		if (ch == '&')  rstring += '%26';
		else 
		if (ch == '+')  rstring += '%2B';
		else 
		if (ch == '=')  rstring += '%3D';
		else 
		if (ch == '?')  rstring += '%3F';
		else rstring += ch;
	}

	return rstring;
}
