///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// BCQRE BGPT Client(BGPTWCtl / BGPTPI) Toolkit Common Script v1.0
//
// Version | Date | Comment
// v1.0 | 2009.10.19 |  BGPTWCtl/BGPTPI 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function SetupObjBWC(objCheckmode)
{
	
	// BGPTWCtl Object 
	document.writeln("<OBJECT");
	document.writeln("classid='clsid:835DC397-5F61-4C31-B0AC-384ECE3BE087'");
	document.writeln("CODEBASE='/new_women/gpki/BGPTWCtl.cab#version=1,0,6,1'");
	document.writeln("id='ObjBWC'>");
	document.writeln("</OBJECT>");
	
	if(objCheckmode == true) {
		if(CheckObjBWC() == false) {
			location.href="/new_women/gpki/InstallProc.html";
		}
	}
}

function CheckObjBWC()
{

	if(ObjBWC == null || ObjBWC.object == null)
		return false;
	else
		return true;
}

// BGPT Client Toolkit Property Setting Function
function InitObjBWC()  
{
	ObjBWC.SetProperty("CertValid_Path", "ON");
	ObjBWC.SetProperty("CertValid_Time", "ON");
	ObjBWC.SetProperty("CertValid_CRL", "ON");
	
	ObjBWC.SetProperty("CertValidClient_Path", "ON");
	ObjBWC.SetProperty("CertValidClient_Time", "ON");
	ObjBWC.SetProperty("CertValidClient_CRL", "ON");
}


var MICROSOFT_WINDOWS = 0;
var LINUX_X86 = 1;
var LINUX_X64 = 2;
var UNSUPPORTED_OS = 3;

var MICROSOFT_IE = 10;
var MOZILLA_FF3 = 11;
var APPLE_SAFARI = 12;
var GOOGLE_CHROME = 13;
var OPERASOFTWARE_OPERA = 14;
var UNSUPPORTED_FF = 20;
var UNSUPPORTED_SAFARI = 21;
var UNSUPPORTED_BROWSER = 22;

var USER_OS;
var USER_BROWSER;

var BGPTWCTL_VERSION = "1,0,6,1";
var BGPTPI_VERSION = "1.0.6.1";

// BGPT Client pacage path
var BGPTWCTL_URL = "/new_women/gpki/BGPTWCtl.cab";
var BGPTPI_LINUX_X86_XPI_URL = "/BGPT/bgptpi_linux_x86.xpi";
var BGPTPI_LINUX_X86_64_XPI_URL = "/bgptpi_linux_x86-64.xpi";


// BGPT Client Toolkit Install & Check Function

// environment check
function DetectedOS()
{
	var strUserAgent;
	var strPatternWindows = /windows/i;
	var strPatternLinux = /linux/i;
	var strPatternLinux64 = /x86_64/i;

	strUserAgent = navigator.userAgent.toLowerCase();
	if(strPatternWindows.test(strUserAgent) == true)
	{
		return MICROSOFT_WINDOWS;
	}
	else if(strPatternLinux.test(strUserAgent) == true)
	{
		if(strPatternLinux64.test(strUserAgent) == true)
		{
			return LINUX_X64;
		}
		else
		{
			return LINUX_X86;
		}
	}
	else
	{
		return UNSUPPORTED_OS;
	}
}

function ISFirefox3(strUserAgent)
{
	var strPatternFireFox3 = /firefox\/3/i;
	if(strPatternFireFox3.test(strUserAgent) == true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function ISFirefox4(strUserAgent)
{
	var strPatternFireFox4 = /firefox\/4/i;
	if(strPatternFireFox4.test(strUserAgent) == true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function ISSafari4(strUserAgent)
{
	var strPatternSafari4 = /Version/i;
	if(strPatternSafari4.test(strUserAgent) == true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function DetectedBrowser()
{
	var strAppName = navigator.appName.toLowerCase();
	if(strAppName == "netscape")
	{
		var strUserAgent;
		var strPatternFireFox = /firefox/i;
		var strPatternAppleWebKit = /safari/i;
		
		strUserAgent = navigator.userAgent.toLowerCase();
		
		if(strPatternFireFox.test(strUserAgent) == true)
		{
			if(ISFirefox3(strUserAgent))
			{
				return MOZILLA_FF3;
			}
			else if(ISFirefox4(strUserAgent))
			{
				return MOZILLA_FF3;
			}
			else
			{
				return UNSUPPORTED_FF;
			}
		}
		else if(strPatternAppleWebKit.test(strUserAgent) == true)
		{
			var strPatternChrome = /chrome/i;
			if(strPatternChrome.test(strUserAgent) == true)
			{
				return GOOGLE_CHROME;
			}
			else if(ISSafari4(strUserAgent))
			{
				return APPLE_SAFARI;
			}
			else
			{
				return UNSUPPORTED_SAFARI;
			}
		}
		else
		{
			return UNSUPPORTED_BROWSER;
		}
	}
	else if(strAppName == "opera")
	{
		return OPERASOFTWARE_OPERA;
	}
	else
	{
		return MICROSOFT_IE;
	}		
}



function CheckObjBPI()
{
	try
	{
		var strBGPTPIMime = navigator.mimeTypes["application/bgptpi-plugin"];
		var strDescription = strBGPTPIMime.enabledPlugin.description;
	}
	catch(ex)
	{
		return false;
	}

	var index = strDescription.indexOf('v.', 0);
	if(index < 0)
	{
		return false;
	}
	strDescription += ' ';

	var strVersion = strDescription.substring(index+2, strDescription.length);
	var arrayVersionInfo = strVersion.split('.');
	var thisMajor = parseInt(arrayVersionInfo[0], 10);
	var thisMinor = parseInt(arrayVersionInfo[1], 10);
	var thisRelease = parseInt(arrayVersionInfo[2], 10);
	var thisTest = parseInt(arrayVersionInfo[3], 10);
	
	index = BGPTPI_VERSION.indexOf('v.', 0);
	BGPTPI_VERSION += ' ';
	
	var strCurrentVersion = BGPTPI_VERSION.substring(index+1, BGPTPI_VERSION.length);
	var arrayCurrentVersionInfo = strCurrentVersion.split('.');
	var versionMaj = parseInt(arrayCurrentVersionInfo[0], 10);
	var versionMin = parseInt(arrayCurrentVersionInfo[1], 10);
	var versionRel = parseInt(arrayCurrentVersionInfo[2], 10);
	var versionTel = parseInt(arrayCurrentVersionInfo[3], 10);
	
	if(thisMajor > versionMaj)
	{
		return true;
	}
	if(thisMajor < versionMaj)
	{
		return false;
	}
	if(thisMinor > versionMin)
	{
		return true;
	}
	if(thisMinor < versionMin)
	{
		return false;
	}
	if(thisRelease > versionRel)
	{
		return true;
	}
	if(thisRelease < versionRel)
	{
		return false;
	}
	if(thisTest > versionTel)
	{
		return true;
	}
	if(thisTest < versionTel)
	{
		return false;
	}

	return true;
}

function SetupObjBCT(objCheckmode)
{
	
	// environment get
	USER_OS = DetectedOS();
	USER_BROWSER = DetectedBrowser();
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		
		if(USER_BROWSER == MICROSOFT_IE)
		{
			
			// BGPTWCtl Object 
			document.writeln("<OBJECT");
			document.writeln("classid='clsid:835DC397-5F61-4C31-B0AC-384ECE3BE087'");
			document.writeln("CODEBASE='" + BGPTWCTL_URL + "#version=" + BGPTWCTL_VERSION + "'");
			document.writeln("id='ObjBWC'>");
			document.writeln("</OBJECT>");
			
			if(objCheckmode == true)
			{
				
				// not controller -> 
				if(CheckObjBWC() == false)
				{
					location.href="/new_women/gpki/InstallProc.html";
				}
			}
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			
			// BGPTPI Object e
			if(CheckObjBPI() == true)
			{
				
				document.writeln("<embed id='ObjBPI' type='application/bgptpi-plugin' width=0 height=0 hidden=true></embed>");
			}
			else
			{
				
				// BGPTPI not last version  
				location.href="/new_women/gpki_demo/BGPTWCtl.exe";
				alert( "¼³Ä¡°¡ ¿Ï·á ÈÄ ºê¶ó¿îÀú¸¦ ´ÝÀ¸½Å ÈÄ ´Ù½Ã Á¢¼ÓÇÏ¿© ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù." );
				
			}
		}
		else
		{
			alert("  °í°´´ÔÀÌ »ç¿ë ÁßÀÌ½Å ºê¶ó¿ìÀú´Â BGPT¿¡¼­ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ¾çÇØ ºÎÅ¹ µå¸³´Ï´Ù.\nBGPT Client ToolkitÀº Microsoft Internet Explorer(6.0 ÀÌ»ó), Firefox(3.0 ÀÌ»ó), Safari(4.0 ÀÌ»ó), Google Å©·Ò(3.0 ÀÌ»ó), Opera(9.0 ÀÌ»ó)¸¦ Áö¿øÇÕ´Ï´Ù.   ");
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			// BGPTPI Object 
			if(CheckObjBPI() == true)
			{
				document.writeln("<EMBED ID='ObjBPI' TYPE='application/bgptpi-plugin' hidden='true'></EMBED>");
			}
			else
			{
				// BGPTPI plugin no last version
				location.href="./InstallProc.html";
			}
		}
		else
		{
			alert("   °í°´´ÔÀÌ »ç¿ë ÁßÀÌ½Å ºê¶ó¿ìÀú´Â BGPT¿¡¼­ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ¾çÇØ ºÎÅ¹ µå¸³´Ï´Ù.\nBGPT Client ToolkitÀº Firefox(3.0 ÀÌ»ó) ¹öÀü¸¸À» Áö¿øÇÕ´Ï´Ù.   ");
		}
	}
	else
	{
		alert("  °í°´´ÔÀÌ »ç¿ë ÁßÀÌ½Å ¿î¿µÃ¼Á¦´Â BGPT¿¡¼­ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ¾çÇØ ºÎÅ¹ µå¸³´Ï´Ù.\nBGPT Client ToolkitÀº Microsoft Windows¿Í Linux (x86 / x64)¸¸À» Áö¿øÇÕ´Ï´Ù.  ");
	}
}

function SetupObjError()
{
	alert("BGPT Client ToolkitÀÌ Áö¿øÇÏÁö ¾Ê´Â ¿î¿µÃ¼Á¦ È¤Àº ºê¶ó¿ìÁ®¸¦ »ç¿ë ÁßÀÌ½Ã°Å³ª, Object ¼±¾ðÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù.\n\n°ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇÏ¿© ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù.");
	return;
}


// BGPT Client Toolkit Property Setting Function
function InitObjBCT()
{
	/* º» ¼Ó¼º ¼³Á¤ °ü·Ã ÇÔ¼ö´Â ÇÊ¿ä¿¡ µû¶ó ÁÖ¼®À» Ç®°Å³ª, ¼³Á¤ÇÏ¿© ÀûÀýÈ÷ Á¶ÇÕÇÑ ÈÄ »ç¿ëÇÏ°Å³ª, ÇÊ¿ä ¼Ó¼ºº°·Î º°µµÀÇ javascript ÇÔ¼ö·Î º¯°æÇÏ¿© »ç¿ëÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù. */	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			/* ÀÎÁõ¼­ ¼±ÅÃÃ¢ ÇÊÅÍ¸µ °ü·Ã ¼Ó¼º ¼³Á¤ */
			// ÀÎÁõ¼­ÀÇ DNÀ» ÅëÇØ ¼±ÅÃ °¡´É ÀÎÁõ¼­¸¦ Á¦ÇÑÇÏ°íÀÚ ÇÏ´Â °æ¿ì »ç¿ëÇÏ¸ç, ÀÔ·Â°ªÀÌ º¹¼öÀÎ °æ¿ì '$'¸¦ ±¸ºÐÀÚ·Î Ã³¸®ÇÕ´Ï´Ù.
			//document.ObjBWC.SetProperty("Filter_IDN", "O=Government of Korea,C=KR"); // ¿¹) GPKI ¹ß±Þ ÀÎÁõ¼­¸¸ ¼±ÅÃ °¡´É
			
			// ÀÎÁõ¼­ÀÇ ¹ß±Þ ±â°üÀ» ÅëÇÏ¿© ¼±ÅÃ °¡´É ÀÎÁõ¼­¸¦ Á¦ÇÑÇÏ°íÀÚ ÇÏ´Â °æ¿ì »ç¿ëÇÏ¸ç, ÀÔ·Â°ªÀÌ º¹¼öÀÎ °æ¿ì '$'¸¦ ±¸ºÐÀÚ·Î Ã³¸®ÇÕ´Ï´Ù.
			//document.ObjBWC.SetProperty("Filter_CAType", "GPKI_GENERAL$GPKI_OFFICIAL$YESSIGN"); // ¿¹) GPKI °³ÀÎ¿ë, ±â°ü¿ë ÀÎÁõ¼­¿Í ±ÝÀ¶°áÀç¿ø ÀÎÁõ¼­¸¸ÀÌ ¼±ÅÃ °¡´ÉÇÏµµ·Ï Á¦ÇÑ
	
			// ÀÎÁõ¼­ÀÇ OID¸¦ ÅëÇÏ¿© ¼±ÅÃ °¡´É ÀÎÁõ¼­¸¦ Á¦ÇÑÇÏ°íÀÚ ÇÏ´Â °æ¿ì »ç¿ëÇÏ¸ç, ÀÔ·Â°ªÀÌ º¹¼öÀÎ °æ¿ì '$'¸¦ ±¸ºÐÀÚ·Î Ã³¸®ÇÕ´Ï´Ù.
			//document.ObjBWC.SetProperty("Filter_OID", "1.2.410.100001.5.3.1.3"); // ¿¹) ÀÎÁõ¼­ OID°¡ 1.2.410.100001.5.3.1.3¿¡ ÇØ´çÇÏ´Â °æ¿ì¿¡¸¸ Ã³¸®ÇÏµµ·Ï ¼³Á¤
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				//document.getElementById('ObjBPI').ObjBPI.SetProperty("Filter_DN", "O=Government of Korea,C=KR");
				
				//document.getElementById('ObjBPI').ObjBPI.SetProperty("Filter_Storage", "HDD_DISK");
				//document.getElementById('ObjBPI').ObjBPI.SetProperty("Filter_Storage", "REMOVABLE_DISK");
			}
			catch(ex)
			{
				alert("BGPTPI ÇÃ·¯±×ÀÎ¿¡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n" + ex);
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				//document.ObjBPI.setProperty("Filter_DN", "O=Government of Korea,C=KR");
				
				//document.ObjBPI.setProperty("Filter_Storage", "HDD_DISK");
				//document.ObjBPI.setProperty("Filter_Storage", "REMOVABLE_DISK");
			}
			catch(ex)
			{
				alert("BGPTPI ÇÃ·¯±×ÀÎ¿¡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n" + ex);
			}
		}
	}
	
	return;
}

function BCTErrorInfo()
{
	// ¿¡·¯ Á¤º¸ Ãâ·Â : »ç¿ë È¯°æ¿¡ µû¶ó, ÀûÀýÈ÷ º¯°æÇÏ¿© »ç¿ëÇÕ´Ï´Ù.
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			alert("BGPTWCtl ¸ðµâ¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n¿À·ùÁ¤º¸ : [" + document.ObjBWC.GetErrorNum() + "] - " + document.ObjBWC.GetErrorMsg());
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				alert("BGPTPI ÇÃ·¯±×ÀÎ¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n¿À·ùÁ¤º¸ : [" + document.getElementById('ObjBPI').GetErrorNum() + "] - " + document.getElementById('ObjBPI').GetErrorMsg());
			}
			catch(ex)
			{
				alert("BGPTPI ÇÃ·¯±×ÀÎ¿¡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n" + ex);
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				alert("BGPTPI ÇÃ·¯±×ÀÎ¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n¿À·ùÁ¤º¸ : [" + document.ObjBPI.getErrorNum() + "] - " + document.ObjBPI.getErrorMsg());
			}
			catch(ex)
			{
				alert("BGPTPI ÇÃ·¯±×ÀÎ¿¡¼­ ¿¹¿Ü°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n" + ex);
			}
		}
	}
}

function Sign(inDataFlag, algID, plainData)
{
	var strSignedData = "";
	
	// ÀüÀÚ¼­¸í ¼öÇà ½Ã v1.0¿¡¼­´Â inData, algID°¡ È®Àå¼ºÀ» À§ÇØ¼­¸¸ Á¸ÀçÇÏ´Â ÆÄ¶ó¹ÌÅÍÀÌ¸ç, ÀÏ¹ÝÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¿© »ç¿ëÇÕ´Ï´Ù.
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			strSignedData = document.ObjBWC.SignData(inDataFlag, algID, plainData);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strSignedData = document.getElementById('ObjBPI').SignData(inDataFlag, algID, plainData);
			}
			catch(ex)
			{
				return strSignedData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strSignedData = document.ObjBPI.signData(inDataFlag, algID, plainData);
			}
			catch(ex)
			{
				return strSignedData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strSignedData;
}

function Verify(inDataFlag, signedData, plainData)
{
	var strVerifyData = "";
	
	// plainData´Â ¼­¸í µ¥ÀÌÅÍ¿¡ ¿ø¹®ÀÌ Æ÷ÇÔµÇÁö ¾ÊÀº °æ¿ì¿¡¸¸ ÀÔ·ÂÇÕ´Ï´Ù.
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			strVerifyData = document.ObjBWC.VerifyData(inDataFlag, signedData, plainData);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strVerifyData = document.getElementById('ObjBPI').VerifyData(inDataFlag, signedData, plainData);
			}
			catch(ex)
			{
				return strVerifyData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strVerifyData = document.ObjBPI.verifyData(inDataFlag, signedData, plainData);
			}
			catch(ex)
			{
				return strVerifyData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strVerifyData;
}

function GenSymmetricKey(algID)
{
	var strSymKey = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			// ¼±ÅÃÇÑ ¾Ë°í¸®Áò¿¡ ÀûÇÕÇÑ ÀÓÀÇÀÇ ´ëÄªÅ° »ý¼º
			strSymKey = document.ObjBWC.GenSymKey(algID);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strSymKey = document.getElementById('ObjBPI').GenSymKey(algID);
			}
			catch(ex)
			{
				return strSymKey;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strSymKey = document.ObjBPI.genSymKey(algID);
			}
			catch(ex)
			{
				return strSymKey;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strSymKey;
}

function Encrypt(algID, symKey, data)
{
	var strEncryptedData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			// ´ëÄªÅ° ¾ÏÈ£È­ ¼öÇà
			strEncryptedData = document.ObjBWC.EncryptData(algID, symKey, data);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strEncryptedData = document.getElementById('ObjBPI').EncryptData(algID, symKey, data);
			}
			catch(ex)
			{
				return strEncryptedData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strEncryptedData = document.ObjBPI.encryptData(algID, symKey, data);
			}
			catch(ex)
			{
				return strEncryptedData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strEncryptedData;
}

function Decrypt(algID, symKey, data)
{
	var strDecryptedData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			// ´ëÄªÅ° º¹È£È­ ¼öÇà
			strDecryptedData = document.ObjBWC.DecryptData(algID, symKey, data);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strDecryptedData = document.getElementById('ObjBPI').DecryptData(algID, symKey, data);
			}
			catch(ex)
			{
				return strDecryptedData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strDecryptedData = document.ObjBPI.decryptData(algID, symKey, data);
			}
			catch(ex)
			{
				return strDecryptedData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strDecryptedData;
}

function Envelop(algID, recipientCerts, data)
{
	var strEnvelopedData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			// ºñ´ëÄªÅ° ¾ÏÈ£È­ ¼öÇà
			strEnvelopedData = document.ObjBWC.EnvelopData(algID, recipientCerts, data);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strEnvelopedData = document.getElementById('ObjBPI').EnvelopData(algID, recipientCerts, data);
			}
			catch(ex)
			{
				return strEnvelopedData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strEnvelopedData = document.ObjBPI.envelopData(algID, recipientCerts, data);
			}
			catch(ex)
			{
				return strEnvelopedData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strEnvelopedData;
}

function RequestSession(serverCert, algID, sessionID)
{
	
	var strRequestData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			
			// ¼­¹ö kmCert ¼³Á¤(Base64 ÀÎÄÚµù ¹®ÀÚ¿­)
			ObjBWC.SetProperty("ServerCert", serverCert);
			strRequestData = document.ObjBWC.RequestSession(algID, sessionID);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				
				document.getElementById('ObjBPI').SetProperty("ServerCert", serverCert);
				strRequestData = document.getElementById('ObjBPI').RequestSession(algID, sessionID);
			}
			catch(ex)
			{
				return strRequestData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				document.ObjBPI.setProperty("ServerCert", serverCert);
				strRequestData = document.ObjBPI.requestSession(algID, sessionID);
			}
			catch(ex)
			{
				return strRequestData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strRequestData;
}

function SessionEncrypt(sessionID, data)
{
	var strSessionEncryptData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			strSessionEncryptData = document.ObjBWC.SessionEncrypt(sessionID, data);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strSessionEncryptData = document.getElementById('ObjBPI').SessionEncrypt(sessionID, data);
			}
			catch(ex)
			{
				return strSessionEncryptData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strSessionEncryptData = document.ObjBPI.sessionEncrypt(sessionID, data);
			}
			catch(ex)
			{
				return strSessionEncryptData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strSessionEncryptData;
}

function SessionDecrypt(sessionID, encData)
{
	var strSessionDecryptData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			strSessionDecryptData = document.ObjBWC.SessionDecrypt(sessionID, encData);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				strSessionDecryptData = document.getElementById('ObjBPI').SessionDecrypt(sessionID, encData);
			}
			catch(ex)
			{
				return strSessionDecryptData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				strSessionDecryptData = document.ObjBPI.sessionDecrypt(sessionID, encData);
			}
			catch(ex)
			{
				return strSessionDecryptData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strSessionDecryptData;
}

function RequestVerifyVID(serverCert, userID)
{
	var strRequestData = "";
	
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
		    // ¼­¹ö kmCert ¼³Á¤(Base64 ÀÎÄÚµù ¹®ÀÚ¿­)
			ObjBWC.SetProperty("ServerCert", serverCert);
			strRequestData = document.ObjBWC.RequestVerifyVID(userID);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				document.getElementById('ObjBPI').SetProperty("ServerCert", serverCert);
				strRequestData = document.getElementById('ObjBPI').RequestVerifyVID(userID);
			}
			catch(ex)
			{
				return strRequestData;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				document.ObjBPI.setProperty("ServerCert", serverCert);
				strRequestData = document.ObjBPI.requestVerifyVID(userID);
			}
			catch(ex)
			{
				return strRequestData;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return strRequestData;
}

function DestroySession(sessionID)
{
	var nResult;
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			nResult = document.ObjBWC.DestroySession(sessionID);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				nResult = document.getElementById('ObjBPI').DestroySession(sessionID);
			}
			catch(ex)
			{
				return nResult;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				nResult = document.ObjBPI.destroySession(sessionID);
			}
			catch(ex)
			{
				return nResult;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return nResult;
}

function GetProperty(field)
{
	var nResult;
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			nResult = document.ObjBWC.GetProperty(field);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				nResult = document.getElementById('ObjBPI').GetProperty(field);
			}
			catch(ex)
			{
				return nResult;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				nResult = document.ObjBPI.getProperty(field);
			}
			catch(ex)
			{
				return nResult;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return nResult;
}

function GetCertInfo(signerCert, certfield)
{
	var nResult;
	if(USER_OS == MICROSOFT_WINDOWS)
	{
		if(USER_BROWSER == MICROSOFT_IE)
		{
			nResult = document.ObjBWC.GetCertInfo(signerCert, certfield);
		}
		else if(USER_BROWSER == MOZILLA_FF3 || USER_BROWSER == APPLE_SAFARI || USER_BROWSER == GOOGLE_CHROME || USER_BROWSER == OPERASOFTWARE_OPERA)
		{
			try
			{
				nResult = document.getElementById('ObjBPI').GetCertInfo(signerCert, certfield);
			}
			catch(ex)
			{
				return nResult;
			}
		}
	}
	else if(USER_OS == LINUX_X86 || USER_OS == LINUX_X64)
	{
		if(USER_BROWSER == MOZILLA_FF3)
		{
			try
			{
				nResult = document.ObjBPI.getCertInfo(signerCert, certfield);
			}
			catch(ex)
			{
				return nResult;
			}
		}
	}
	else
	{
		SetupObjError();
	}
	
	return nResult;
}

