// nara_cert.js
var cont =
'<OBJECT ID="NaraLM" height=0 width=0 '
+'CLASSID="CLSID:9FC84F7D-D177-4A75-A7BB-429DA5BD0A3E" onReadyStateChange="javascript:initCryptoApi()" '
+'CODEBASE="/ntax/NaraLM.cab#version=3,1,7,5"></OBJECT>';
document.write(cont);






var strErrMsg = "";
var strErrCode = "";
var strErrFuncName = "";

function setErrorCode( strCode )
{
	strErrCode = strCode;
	return;
}

function setErrorMessage( strMsg )
{
	strErrMsg = strMsg;
	return;
}

function setErrorFunctionName( strFunctionName )
{
	strErrFuncName = strFunctionName;
	return;
}

function getErrorString()
{
	var buf = getErrorCode();
	buf += getErrorMessage();
	return buf;	
}

function getErrorCode()
{
	var buf = strErrCode;
	strErrCode = "";
	return buf;
}

function getErrorMessage()
{
	var buf = strErrMsg;
	strErrMsg = "";
	return buf;
}

function GetLastErrMsg()
{
	return NaraLM.GetLastErrMsg();
}

var bCryptoToolkitInstalled = true;

function initCryptoApi()
{
	bUseKMCert = true;
	strHashAlg = "SHA1";	
	strEncryptAlg = "SEED-CBC"	// SEED-CBC or ARIA-CBC		: ´ëÄªÅ° ¾Ë°í¸®Áò
	szEncryptKeyLen = 16;		// SEED(16), ARIA(16/24/32) : ´ëÄªÅ° ±æÀÌ
	if ( bCryptoToolkitInstalled )
	{
//		SetCertDialogImage( "" );
		NaraLM.SetCertDlgImage( "http://naratax.com/images/tax.bmp" );
		NaraLM.SetCAInfo( 0 );
	}
	return;
}

function SetSessionID( SessionID )
{
	NaraLM.SetSessionID( SessionID );
	return;
}

function getUserSignCert( strCertID )
{
	initCryptoApi();

	var bReturn = selectCertificate( strCertID );
	if ( !bReturn )
	{
		setErrorFunctionName( "getUserSignCert()" );
		return "";
	}
	
	var strCert = NaraLM.GetUserSignCert();
	if ( strCert == "" )
	{
		setErrorFunctionName( "getUserSignCert()" );
		return "";
	}

	return strCert;
}

function getCertSubjectDN( strCert )
{
	if ( strCert == null || strCert == "" )
	{
		setErrorCode("NO_DATA_VALUE");
		setErrorMessage( "" );
		setErrorFunctionName( "getCertSubjectDN()" );
		return "";
	}

	var buf = NaraLM.GetSubjectDNFromCert( strCert );
	if ( buf == "" )
	{
		setErrorCode( "" );
		setErrorMessage( GetLastErrMsg() );
		setErrorFunctionName( "getCertSubjectDN()" );
		return "";
	}
	
	return buf;
}

function getCertNotAfter( strCert )
{
	if ( strCert == null || strCert == "" )
	{
		setErrorCode("NO_DATA_VALUE");
		setErrorMessage( "" );
		setErrorFunctionName( "getCertNotAfter()" );
		return "";
	}

	var buf = NaraLM.GetCertInfoFromCert( strCert, 6 );
	if ( buf == "" )
	{
		setErrorCode( "" );
		setErrorMessage( GetLastErrMsg() );
		setErrorFunctionName( "getCertNotAfter()" );
		return "";
	}
	
	return buf;
}

function selectCertificate( strCertID )
{
	if ( strCertID == null || strCertID == "" )
	{
		setErrorCode( "NO_USER_ID" );
		setErrorMessage( "" );
		setErrorFunctionName( "selectCertificate()" );
		return false;
	}
	SetSessionID( strCertID );
	
	var bReturn = NaraLM.LoadUserKeyCertDlg( bUseKMCert );
	if ( !bReturn )
	{
		setErrorCode( GetLastErrMsg() );
		setErrorMessage( "" );
		setErrorFunctionName( "selectCertificate()" );
		return false;
	}

	return bReturn;
}

function clearCertificateInfo( strCertID )
{
	if ( strCertID == null || strCertID == "" )
	{
		setErrorCode( "NO_USER_ID" );
		setErrorMessage( "" );
		setErrorFunctionName( "clearCertificateInfo()" );
		return false;
	}
	SetSessionID( strCertID );
	NaraLM.UnloadUserKeyCert();

	return true;
}

function checkCertValidity( strCert )
{
	if ( strCert == null || strCert == "" )
	{
		setErrorCode("NO_DATA_VALUE");
		setErrorMessage( "" );
		setErrorFunctionName( "checkCertValidity()" );
		return false;
	}
	
	//ANY  / 
	NaraLM.SetCertPolicy( "1.2.410.200004.5.2.1.2|1.2.410.200004.5.4.1.1|1.2.410.200004.5.2.1.1|1.2.410.200005.1.1.6.8|1.2.410.200004.5.4.1.2|1.2.410.200004.5.1.1.7|1.2.410.200012.5.1.1.281|1.2.410.200005.1.1.5" );
	var bReturn = NaraLM.ValidateCert( strCert );
	if ( !bReturn )
	{
		setErrorCode( "" );
		setErrorMessage( GetLastErrMsg() );
		setErrorFunctionName( "checkCertValidity()" );
		return false;
	}

	return bReturn;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// get_sign_cert()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function get_sign_cert()
{
	var strCertID = "LoginID@DomainName";

	/*
	// ÀÎÁõ¼­¼±ÅÃÃ¢À» À§ÇÑ »çÀÌÆ®³×ÀÓ ¼³Á¤: ¸Å¹ø ÀÎÁõ¼­¸¦ »ç¿ëÇÏ±â(ÀÎÁõ¼­ ¼±ÅÃÃ¢À» ¶ç¿ì±â) Àü¿¡ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØÁØ´Ù.
	bRet = SetSiteName("kica");
	if ( !bRet )
	{
		alert( getErrorString() );
		return;
	}
	*/

	//	»ç¿ëÀÚ ¼­¸í¿ë ÀÎÁõ¼­ ¾ò±â
	var strSignCert = getUserSignCert( strCertID );
	if ( strSignCert == "" )
	{
		var strErr = getErrorString();
		if ( strErr == "" )	//	»ç¿ëÀÚ°¡ ÀÎÁõ¼­ ¼±ÅÃÀ» Ãë¼ÒÇÑ °æ¿ì
		{
			alert( "ÀÎÁõ¼­ ¼±ÅÃÀ» Ãë¼ÒÇÏ¿´½À´Ï´Ù");
			clearCertificateInfo( strCertID );
			return false;
		}
		else
		{
			alert( strErr );
			return false;
		}
	}
	else
	{
		if(checkCertValidity(strSignCert) == false)
		{
			alert( "[¾Ë¸²] ÀÎÁõ¼­°¡ À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù.\n\n¹ü¿ë°øÀÎ / ÀüÀÚ¼¼±Ý°è»ê¿ë ÀÎÁõ¼­°¡ ¾Æ´Ï°Å³ª \n\nÀ¯È¿ÇÏÁö ¾ÊÀº ÀÎÁõ¼­¸¦ ¼±ÅÃ ÇÏ¼Ë½À´Ï´Ù." );
			clearCertificateInfo( strCertID );
			return false;
		}
		document.CertInfo.PemCert.value = strSignCert;
	}

	clearCertificateInfo( strCertID );
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// show_cert_info()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function show_cert_info()
{
	var strCert = document.CertInfo.PemCert.value;

	var strSubject = getCertSubjectDN( strCert );
	if ( strSubject == "" )
	{
		alert( getErrorString() );
		return false;
	}
	else
	{
		document.CertInfo.CertDN.value = strSubject;
	}
	
	var strEndTime = getCertNotAfter( strCert );
	if ( strEndTime == "" )
	{
		alert( getErrorString() );
		return false;
	}
	else
	{
		// ÀÎÁõ¼­ÀÇ À¯È¿±â°£À» Ã¼Å©ÇÑ´Ù.
		// ServerTime (¼­¹ö½Ã°£ÀÌ¹Ç·Î ´Ù¸¦¼ö ÀÖ´Ù.. ½Ã°£±îÁö Ã¼Å©ÇÏÁö ¾Ê°í ³â¿ùÀÏ¸¸ Ã¼Å©ÇÏµµ·Ï ÇÑ´Ù.)
		// 2010/07/19 17:51:00
		var ETArr = strEndTime.split(/[ ]/gi);
		var DArr = ETArr[0].split(/\//gi);
		var et = new Date(Number(DArr[0]), Number(DArr[1]), Number(DArr[2]), 0, 0, 0);
		try{
			if(ServerTime){
				if(ServerTime.getTime() >= et.getTime()){
					
					alert("À¯È¿±â°£ÀÌ ¸¸·á ¹× À¯È¿¹üÀ§¸¦ ¹þ¾î³­ ÀÎÁõ¼­ ÀÔ´Ï´Ù.\n\nÀÎÁõ¼­¸¦ »õ·Î ¹ß±Þ ¹× µî·ÏÈÄ ÀÌ¿ëÇÏ¼¼¿ä.\n\n");
					return false;
				}
			}
		}catch(e){

		}
		document.CertInfo.ValidBefore.value = strEndTime;
	}

	return ;
}
