/*************************************************
 * MagicPassJs
 * ¸ÅÁ÷ÆÐ½ºÀÇ ±â´É Á¤ÀÇ
 * Copyright 2010, DreamSecurity. http://www.dreamsecurity.com
 * 
 * @author Naruware ÇÑ¿µ¼ö/¹ÚÁ¾ÈÆ
 * @since 12 May 2010.
 * @version 2.0.5
 *************************************************/
MagicPass = {};
MagicPass.siteTitle					= "ÇÑ±¹»ê¾÷±â¼úÁøÈï¿ø";
MagicPass.siteName					= "KIAT";
MagicPass.applCode					= "APPLDEFAULT";
MagicPass.pkiType					= "NPKI";
MagicPass.path						= window.location.protocol + "//" + window.location.host + "/magicsso";		//¸ÅÁ÷ÆÐ½º ¼³Ä¡°æ·Î
MagicPass.baseUrl					= "/index_sso.html";		//¸ÅÁ÷ÆÐ½º Ã³¸® ÈÄ, ÀÌµ¿ÇÒ URL(»çÀÌÆ® ¸ÞÀÎÆäÀÌÁö)
MagicPass.logoutUrl					= MagicPass.path + "/logout.asp";		//¸ÅÁ÷ÆÐ½º Ã³¸® ÈÄ, ÀÌµ¿ÇÒ URL(»çÀÌÆ® ¸ÞÀÎÆäÀÌÁö)
MagicPass.secureUrl					= MagicPass.path + "/secure.asp";		//¾ÏÈ£È­ Ã³¸® URL

/* MagicPass Option Definitions */
MagicPass.option = {};
MagicPass.option.debugScript		= true;		//ÀÚ¹Ù½ºÅ©¸³Æ® µð¹ö±×¸ðµå
MagicPass.option.debugApplet		= true;		//ÀÚ¹Ù¾ÖÇÃ¸´ µð¹ö±×¸ðµå
MagicPass.option.isAutoLogin		= true;		//ÀÚµ¿·Î±×ÀÎ(¸ÅÁ÷ÆÐ½º°¡ ·Î±×ÀÎµÇ¾î ÀÖ´Â »óÅÂ¿¡ Á¢±Ù ½Ã, ÀÚµ¿À¸·Î »çÀÌÆ®·Î±×ÀÎ)
MagicPass.option.useCertificate		= true;		//ÀÎÁõ¼­ ·Î±×ÀÎ »ç¿ë¿©ºÎ
MagicPass.option.useApplet			= false;		//¾ÖÇÃ¸´ »ç¿ë¿©ºÎ(IEÀÌ¿Ü¿¡¼­´Â ÀÚµ¿À¸·Î ¾ÖÇÃ¸´»ç¿ë)
MagicPass.option.useMagicPassS		= false;		//MagicPassS(RMI Server) »ç¿ë¿©ºÎ(WindowsÀÌ¿Ü(Linux, Mac and etc.)¿¡¼± ÀÚµ¿À¸·Î MagicPassS»ç¿ë)
MagicPass.option.JS_monitor			= {use : true, interval : 5000, object : null};		//ÀÚ¹Ù½ºÅ©¸³Æ® ·Î±×¾Æ¿ô°¨Áö(ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ÇØ´ç interval ·Î ¸ÅÁ÷ÆÐ½º ·Î±×¾Æ¿ô»óÅÂ °¨Áö)
MagicPass.option.MP_monitor			= {use : false, interval : 7000};		//¸ÅÁ÷ÆÐ½ºÀÇ ÀÚµ¿¼¼¼Ç¾Æ¿ô ±â´É(ÆäÀÌÁö°¡ ¸ÅÁ÷ÆÐ½º¸¦ ÇØ´ç interval ÀÌ³»¿¡ IsLogon È£ÃâÀÌ ¾øÀ¸¸é ·Î±×¾Æ¿ô)

/* MagicPass Client-Modules Version Definitions */
MagicPass.version = {
		"MagicLoaderX"		: "1,0,1,10",
		"MagicPassX"		: "1,0,4,3",
		"MPCertX"			: "1,0,1,6",
		"applet"			: "1.0.0.4",
		"appletResource"	: "1.0.0.3"
};

/*--------------------------------------------------------------
	In the below will be Optimazing
--------------------------------------------------------------*/
MagicPass.settings = {};
MagicPass.loginSettings = {};
ClientEnvironments = {};

/* MagicPass runtime variable Definitions */ 
MagicPass.pageLoaded				= false;		//ÇÃ·¯±×ÀÎ »ç¿ë °¡´É¿©ºÎ
MagicPass.pluginUsable				= false;		//ÇÃ·¯±×ÀÎ »ç¿ë °¡´É¿©ºÎ
MagicPass.isReading					= false;		//ÇÃ·¯±×ÀÎÀ» ÀÐ¾î¿À´Â ÁßÀÎÁö ¿©ºÎ
MagicPass.isSetting					= false;		//¸ÅÁ÷ÆÐ½º ´Ù¿î·Îµå/¼³Ä¡ ÁßÀÎÁö ¿©ºÎ
MagicPass.serverCertificate			= null;		//¸ÖÆ¼µµ¸ÞÀÎ¿¬°èµÉ¶§ ÇöÀç ¾îÇÃ¸®ÄÉÀÌ¼Ç ÄÚµå ÀúÀå
MagicPass.loginType					= null;		//·Î±×ÀÎÅ¸ÀÔ
MagicPass.cookieName				= "_MPSC_=";		//¼­¹öÀÎÁõ¼­¸¦ ´ãÀ» ÄíÅ°¸í

/* Setting Definitions */
MagicPass.settings.alias			= "MagicPassPlugin";		//ÇÃ·¯±×ÀÎ º°Äª
MagicPass.settings.object			= document.getElementById(MagicPass.settings.alias);		//ActiveXÀÇ MagicPassX °´Ã¼
MagicPass.settings.objectLoaderX	= document.getElementById("MagicLoaderX");		//ActiveXÀÇ MagicLoadeX °´Ã¼
MagicPass.settings.objectCertX		= document.getElementById("MPCertX");		//ActiveXÀÇ (N)MPCertX °´Ã¼
MagicPass.settings.configFile		= MagicPass.path + "/plugins/setup.txt";
MagicPass.settings.onlineFile		= MagicPass.path + "/plugins/setupOnLine.exe";
MagicPass.settings.updateFile		= MagicPass.path + "/plugins/setupOnLine_update.exe";
MagicPass.settings.settingFile		= MagicPass.path + "/plugins/setupOnLine_update_setting_file.exe";
MagicPass.settings.executeFile		= "DreamSecurity\\MagicPass\\MagicPass.exe";
MagicPass.settings.onlineUrl		= MagicPass.secureUrl + "?actionName=CIPHER&source=" + MagicPass.settings.onlineFile;
MagicPass.settings.updateUrl		= MagicPass.secureUrl + "?actionName=CIPHER&source=" + MagicPass.settings.updateFile;
MagicPass.settings.settingUrl		= MagicPass.secureUrl + "?actionName=CIPHER&source=" + MagicPass.settings.settingFile;
MagicPass.settings.executeUrl		= MagicPass.secureUrl + "?actionName=CIPHER&source=" + MagicPass.settings.executeFile;
MagicPass.settings.offlineUrl		= MagicPass.path + "/installer.html";

/* Login Settings Definitions */
MagicPass.loginSettings.ID			= 0;		//¾ÆÀÌµð ·Î±×ÀÎ
MagicPass.loginSettings.SSN			= 1;		//ÁÖ¹Î¹øÈ£ ·Î±×ÀÎ
MagicPass.loginSettings.EMPNO		= 2;		//»ç¿ø¹øÈ£ ·Î±×ÀÎ
MagicPass.loginSettings.CERT		= 3;		//ÀÎÁõ¼­ ·Î±×ÀÎ
MagicPass.loginSettings.cryptoAlgo	= "48";		//·Î±×ÀÎ ¾ÏÈ£È­ ¾Ë°í¸®Áò

/* Client Environment Definitions */
ClientEnvironments.os				= null;		//»ç¿ëÀÚ OS Á¾·ù
ClientEnvironments.browser			= null;		//»ç¿ëÀÚ ºê¶ó¿ìÀú Á¾·ù
ClientEnvironments.autoSetup		= true;		//ÀÚµ¿¼³Ä¡ ¼ÂÆÃ(¿ÀÇÁ¶óÀÎ¼³Ä¡ ÆäÀÌÁö¿¡¼­ ÀÚµ¿¼³Ä¡È®ÀÎÀ» È°¼ºÈ­ ÇÏÁö ¾ÊÀ» °æ¿ì false°¡ µÊ)
(function() {
	var userAgent=navigator.userAgent.toUpperCase();
	var browserList=["MSIE","FIREFOX","CHROME","SAFARI","OPERA"];
	
	ClientEnvironments.browser = "OTHERS";
	for(var i in browserList)
	{
		if(userAgent.indexOf(browserList[i])>-1)
		{
			ClientEnvironments.browser=browserList[i];
			break;
		}
	}
	
	var platform = navigator.platform.toUpperCase();
	var osList = ["WIN", "MAC", "LINUX"];

	ClientEnvironments.os = "OTHERS";
	for(var i in osList)
	{
		if(platform.indexOf(osList[i])>-1)
		{
			ClientEnvironments.os=(osList[i]=="WIN")?"WINDOWS":osList[i];
			break;
		}
	}
	
	if(document.cookie.indexOf("MagicPassAutoSetup")>-1)
	{
		ClientEnvironments.autoSetup=false;
	}

	if(ClientEnvironments.os != "WINDOWS")
	{
		MagicPass.option.useMagicPassS=true;
	}

	if(ClientEnvironments.browser != "MSIE")
	{
		MagicPass.option.useApplet = true;
	}
})();

/*--------------------------------------------------------------
	Function Definitions
--------------------------------------------------------------*/
/**
 * ¸ÅÁ÷ÆÐ½º ÇÃ·¯±×ÀÎÀÌ ·ÎµùµÈ ÀÌÈÄ ½ÇÇàÇÏµµ·Ï, ÀÛ¾÷µÉ ³»¿ëÀ» Queue¿¡ ÀûÀçÇÕ´Ï´Ù.
 * ÀÌ¹Ì ·Îµù µÇ¾îÀÖ´Â °æ¿ì, ¹Ù·Î ½ÇÇà½ÃÅ²´Ù.
 * 
 * @param
 * 		title : ÀÛ¾÷¸í(ÀÛ¾÷ÀÎ½Ä¿ë ÅØ½ºÆ®)
 * 		job : ÀÛ¾÷ °´Ã¼(½ºÅ©¸³Æ® ÇÔ¼ö)
 * 		functionClass : ÀÛ¾÷ °´Ã¼°¡ Å¬·¡½ºÇü½ÄÀÏ °æ¿ì, Å¬·¹½º ÀÔ·Â
 */
MagicPass.job = function(title, job, functionClass)
{
	if(!MagicPass.pluginUsable)
	{
		if(MagicPass.job.queue == null) MagicPass.job.queue = [];
		MagicPass.job.queue.push([title, job, functionClass]);
	}
	else
	{
		MagicPass.log("[job]" + title + " Start");
		(job).call(funtionClass);
		MagicPass.log("[job]" + title + " End");
	}
};

/**
 * MagicPass.job¿¡¼­ ÀûÀçÇÑ ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù.
 */
MagicPass.jobExecute = function()
{ 
	if(MagicPass.pluginUsable)
	{
		if(MagicPass.job.queue != null)
		{
			for(var i = 0; i < MagicPass.job.queue.length; i++)
			{
				MagicPass.log("[job]" + MagicPass.job.queue[i][0] + " Start");
				(MagicPass.job.queue[i][1]).call(MagicPass.job.queue[i][2]);
				MagicPass.log("[job]" + MagicPass.job.queue[i][0] + " End");
			}
		}
	}
};

/**
 * MagicPass.job¿¡¼­ ÀûÀçÇÑ ÀÛ¾÷À» Å¬¸®¾îÇÕ´Ï´Ù.
 */
MagicPass.jobClear = function()
{
	MagicPass.job.queue = null;
};

/**
 * ºê¶ó¿ìÀú ÄÜ¼Ö¿¡ ·Î±ëÇÕ´Ï´Ù. 
 * (´Ü, ºê¶ó¿ìÀú ÄÜ¼ÖÀ» Áö¿ø ¾ÈÇÏ´Â ºê¶ó¿ìÀú(IE, Operaµî)´Â µð¹ö±ë ÄÜ¼ÖÀ» <div>·Î »ý¼ºÇÕ´Ï´Ù.)
 * 
 * @param
 * 		str : ·Î±× ¸Þ¼¼Áö
 */
MagicPass.log = function(str)
{
	if(!MagicPass.option.debugScript) return;

	try
	{
		console.log(str);
	}
	catch(e) {}
};

/**
 * ¸ÅÁ÷ÆÐ½º¸¦ ÃÊ±âÈ­ ÇÕ´Ï´Ù.
 */
MagicPass.init = function(siteName)
{
	var site = siteName || MagicPass.siteName;
	
	var pkiType = (MagicPass.pkiType == "GPKI")? 0 : 1;
	MagicPass.loginType = (MagicPass.loginType == null) ? MagicPass.loginSettings.ID : MagicPass.loginType;
	
	MagicPass.settings.object.Init(pkiType, MagicPass.loginSettings.cryptoAlgo, MagicPass.loginType, site);

	MagicPass.log("[exec]init");
};

/**
 * ±â´É ½ÇÇà ÈÄ, °á°ú°ªÀ» ¹Þ´Â´Ù.
 */
MagicPass.getResult = function()
{
	var result = "";
	
	if(MagicPass.option.useApplet)
	{
		result = MagicPass.settings.object.Result();
	}
	else
	{
		result = MagicPass.settings.object.Result;
	}

	MagicPass.log("[exec]getResult-" + result);
	return result;
};

/**
 * ÇØ´ç »çÀÌÆ®¸íÀÇ ÅäÅ«À» ·Î±×¾Æ¿ô½ÃÅ²´Ù.
 *
 * @param
 * 		siteName : »çÀÌÆ®¸í(»ý·«°¡´É)
 */
MagicPass.logout = function(siteName)
{
	var site = siteName || MagicPass.siteName;
	
	MagicPass.settings.object.Logout(site);

	MagicPass.log("[exec]logout-" + site);
};

/**
 * »çÀÌÆ®¸¦ ·Î±×¾Æ¿ôÇÕ´Ï´Ù.
 * 
 * @param
 * 		returnUrl : ·Î±×¾Æ¿ô ÀÌÈÄ ÀÌµ¿ÇÒ URL
 * 		siteName : ÅäÅ«À» ·Î±×¾Æ¿ôÇÒ »çÀÌÆ®¸í
 */
MagicPass.siteLogout = function(siteName)
{
	var site = siteName || MagicPass.siteName;
	
	MagicPass.request(null, null, null, null, MagicPass.logoutUrl);

	MagicPass.logout(site);
	window.location.replace("http://www.kiat.or.kr/member/magicsso/logout.jsp?returnUrl=" + window.location);
};

/**
 * ¼­¹öÀÎÁõ¼­·Î °¨½Ñ(Envelope)ÇÑ Å°°ªÀ» ±¸ÇÕ´Ï´Ù.
 *
 * @param
 * 		siteName : »çÀÌÆ®¸í(»ý·«°¡´É)
 * 		isConnect : ¿¬°èÃ³¸® ¿©ºÎ
 * @return
 *		0		: ¼º°ø
 *		other	: ½ÇÆÐ
 */
MagicPass.getEnvKey = function(isConnect, siteName, applCode)
{
	var site = siteName || MagicPass.siteName;
	var appl = applCode || MagicPass.applCode;
	var code = null;
	
	if(isConnect)
	{
		code = MagicPass.settings.object.GetAppEnvKey(site, appl, MagicPass.serverCertificate); 
	}
	else
	{
		code = MagicPass.settings.object.GetLogonEnvKey(site, MagicPass.serverCertificate);
	}
	
	MagicPass.log("[exec]getEnvKey-" + code);
	return code;
};

/**
 * ¾ÏÈ£È­ °ËÁõÀ» À§ÇÑ ¼¼¼ÇÅ°¸¦ ±³È¯ÇÕ´Ï´Ù.
 *
 * @param
 *		encrytKey	: ¾ÏÈ£È­Å°
 *		siteName	: »çÀÌÆ®¸í(»ý·«°¡´É)
 * @return
 *		0		: ¼º°ø
 *		other	: ½ÇÆÐ
 */
MagicPass.changeKey = function(encryptKey, isConnect, siteName, applCode)
{
	var site = siteName || MagicPass.siteName;
	var appl = applCode || MagicPass.applCode;
	var code = null;
	
	if(isConnect)
	{
		code = MagicPass.settings.object.ChangeAppKey(site, appl, encryptKey);
	}
	else
	{
		code = MagicPass.settings.object.ChangeLogonKey(site, encryptKey);
	}
	
	MagicPass.log("[exec]changeKey-" + code);
	return code;
};

/**
 * ¾ÏÈ£È­¸¦ ¼öÇàÇÕ´Ï´Ù. (·Î±×ÀÎ¿¡¼­ »ç¿ë)
 * 
 * @param
 * 		loginForm	: ·Î±×ÀÎ <form>ÅÂ±× °´Ã¼
 * 		id			: ¾ÆÀÌµð <input>ÅÂ±× °´Ã¼
 * 		password	: ÆÐ½º¿öµå <input>ÅÂ±× °´Ã¼
 * 		siteName	: »çÀÌÆ®¸í(»ý·«°¡´É)
 */
MagicPass.encryptLogin = function(id, password, siteName)
{
	var site = siteName || MagicPass.siteName;
	var result = null;
	
	switch(MagicPass.loginType)
	{
		case MagicPass.loginSettings.ID :
			result = MagicPass.settings.object.EncryptLogonID(site, decodeURI(id.value), decodeURI(password.value));
			break;
		case MagicPass.loginSettings.CERT :
			result = MagicPass.settings.object.EncryptAuth(site, id);
			break;
	}
	

    MagicPass.log("[exec]encryptLogin-" + result);
    return result;
};

/**
 * ¾ÏÈ£È­¸¦ ¼öÇàÇÕ´Ï´Ù.
 * 
 * @param
 * 		text		: ¾ÏÈ£È­ÇÒ Æò¹®
 * 		siteName	: »çÀÌÆ®¸í(»ý·«°¡´É)
 * 		applCode	: ¾îÇÃ¸®ÄÉÀÌ¼Ç ÄÚµå(»ý·«°¡´É)
 */
MagicPass.encryptKey = function(text, siteName, applCode)
{
	var site = siteName || MagicPass.siteName;
	var appl = applCode || MagicPass.applCode;
	
	var result = MagicPass.settings.object.EncryptKey(site, appl, text);

	MagicPass.log("[exec]encryptKey-" + result);
	return result; 
};

/**
 * ÅäÅ«À» ÀúÀåÇÕ´Ï´Ù.
 *
 * @param
 *		encryptedToken	: ¾ÏÈ£È­µÈ ÅäÅ«
 * 		siteName		: »çÀÌÆ®¸í(»ý·«°¡´É)
 * @return
 *		0		: ¼º°ø
 *		other	: ½ÇÆÐ
 */
MagicPass.setToken = function(encryptedToken, siteName)
{
	var site = siteName || MagicPass.siteName;

	var result = MagicPass.settings.object.SetToken(site, encryptedToken);
	
	MagicPass.log("[exec]setToken(" + site + ", " + encryptedToken + ")");
	return result;
};

/**
 * ÅäÅ«À» ºÒ·¯¿Â´Ù.
 *
 * @param
 * 		siteName	: »çÀÌÆ®¸í(»ý·«°¡´É)
 * 		applCode	: ¾îÇÃ¸®ÄÉÀÌ¼Ç ÄÚµå(»ý·«°¡´É)
 * @return
 *		0		: ¼º°ø
 *		other	: ½ÇÆÐ
 */
MagicPass.getToken = function(siteName, applCode)
{
	var site = siteName || MagicPass.siteName;
	var appl = applCode || MagicPass.applCode;

	var result = MagicPass.settings.object.GetToken(site, appl);
	
	MagicPass.log("[exec]getToken-" + result);
	return result;
};

/**
 * ÇöÀç(¶Ç´Â ÀÎÀÚ·Î ¹ÞÀº) »çÀÌÆ®°¡ ·Î±×ÀÎ ÁßÀÎÁö È®ÀÎÇÕ´Ï´Ù.
 *
 * @param
 *		siteName	: »çÀÌÆ®¸í(»ý·«°¡´É)
 * @return
 *		true	: ·Î±×ÀÎÁß
 *		false	: ·Î±×ÀÎµÇÁö ¾ÊÀ½
 */
MagicPass.isLogin = function(siteName)
{
	var site = siteName || MagicPass.siteName;
	var result = false;

	if(MagicPass.settings.object.GetStatus(site) == 150) result = true;

	MagicPass.log("[exec]isLogin(" + site + ")-" + result);
	return result;
};

/**
 * ¸ÅÁ÷ÆÐ½ºÀÇ ¹öÀüÀ» È®ÀÎ. ´Ù¿î·Îµå/¾÷µ¥ÀÌÆ®/¼ÂÆÃÆÄÀÏ¾÷µ¥ÀÌÆ® ¿©ºÎ¸¦ È®ÀÎ.
 *
 * @return
 *		true		: ÃÖ½Å¹öÀü
 *		false		: ¹öÀüÈ®ÀÎÁß ¿¡·¯ ¹ß»ý
 *		String		: ´Ù¿î·Îµå/¾÷µ¥ÀÌÆ®/¼ÂÆÃÆÄÀÏ¾÷µ¥ÀÌÆ® URL
 */
MagicPass.versionCheck = function()
{
	if(!MagicPass.option.useApplet)
	{
		switch(MagicPass.settings.objectLoaderX.VersionCheck(MagicPass.settings.configFile))
		{
			case 0 :
				break;
			case 2 :
				MagicPass.downloadAndSetup(MagicPass.settings.onlineUrl);
				break;
			case 3 :
				MagicPass.downloadAndSetup(MagicPass.settings.updateUrl);
				break;
			case 4 :
				MagicPass.downloadAndSetup(MagicPass.settings.settingUrl);
				break;
			default :
				throw "";
				break;
		}

	}

	MagicPass.log("[exec]versionCheck");
	return true;
};

/**
 * ¸ÅÁ÷ÆÐ½º¸¦ ´Ù¿î·ÎµåÇÏ¿© ÀÚµ¿¼³Ä¡ÇÕ´Ï´Ù.
 *
 * @param
 *		url		: ´Ù¿î·ÎµåÇÒ ¼Â¾÷ÆÄÀÏÀÇ URL
 * @return
 *		true	: Á¤»ó ´Ù¿î·Îµå ¹× ¼³Ä¡¿Ï·á.
 *		false	: ºñÁ¤»ó ´Ù¿î·Îµå ¹× ºñÁ¤»ó ¼³Ä¡.
 */
MagicPass.downloadAndSetup = function(url)
{
	if(MagicPass.isSetting) return;
		
	var message = "";
	var code = -1;

	if (confirm("º¸¾È ·Î±×ÀÎ ÇÁ·Î±×·¥(¸ÅÁ÷ÆÐ½º)À» ¼³Ä¡ ¶Ç´Â ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù.\nÇØ´ç ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏÁö ¾ÊÀ¸¸é Á¤»óÀûÀ¸·Î ·Î±×ÀÎµÇÁö ¾Ê½À´Ï´Ù.\n°è¼Ó ¼³Ä¡¸¦ ÁøÇàÇÏ½Ã°Ú½À´Ï±î?"))
	{
		MagicPass.isSetting = true;

		//MagicPass°¡ ¼³Ä¡µÉ¶§, PortÁ¤º¸°¡ ¾øÀ¸¸é Á¤»óÀûÀÎ ¼³Ä¡°¡ ¾ÈµÇ´Â °ü°è·Î Port°¡ 80ÀÎ °æ¿ì :80À» ºÙ¿©ÁØ´Ù. 
		if(window.location.port == "")
		{
			url = window.location.protocol + "//" + window.location.host + ":80" + url.substring(new String(window.location.protocol + "//" + window.location.host).length);
		}

		code = MagicPass.settings.objectLoaderX.Download(url);

		if (code != 0)
		{
			MagicPass.isSetting = false;

			switch (code)
			{
				case 400:
					message = "»ç¿ëÀÚÀÇ ÁßÁö¿äÃ»";
					break;
				case 404:
					message = "Àß¸øµÈ ´Ù¿î·Îµå URL";
					break;
				default:
					message = "¾Ë¼ö¾ø´Â ¿øÀÎ";
					break;
			}
			
			MagicPass.error(message + "(À¸)·Î ´Ù¿î·Îµå°¡ ÁßÁöµÇ¾ú½À´Ï´Ù.\n[" + code + "]");
		}
		else
		{
			return;
		}

		MagicPass.log("[exec]downloadAndSetup");
	}

	MagicPass.setupOffLine();
	throw "";
};

/**
 * ¸ÅÁ÷ÆÐ½º°¡ ½ÇÇàÁßÀÎÁö ¿©ºÎ¸¦ È®ÀÎÇÕ´Ï´Ù.
 *
 * @return
 *		true	: ½ÇÇàÁß
 *		false	: ½ÇÇàµÇÁö ¾ÊÀ½
 */
MagicPass.isRunning = function()
{
	var result = false;
	
	if(!MagicPass.option.useApplet)
	{
		if(MagicPass.settings.object.GetStatus(MagicPass.siteName) != 103)
		{
			result = true;
		}
	}
	
	MagicPass.log("[exec]isRunning-" + result);
	return  result;
};

/**
 * ¸ÅÁ÷ÆÐ½º¸¦ ½ÇÇà½ÃÅ²´Ù.
 *
 * @return
 *		true	: Á¤»ó½ÇÇà
 *		false	: ½ÇÇà½ÇÆÐ
 */
MagicPass.start = function()
{
	var result = null;

	try
	{
		if(MagicPass.option.useApplet)
		{
			result = (MagicPass.settings.object.ProgramCheck()) ? true : MagicPass.settings.object.ProgramRun();
		}
		else
		{
			result = (MagicPass.settings.objectLoaderX.ProgramRun(MagicPass.settings.executeUrl, "", "MagicPass") == 0) ? true : false;
		}
		
		if(result)
		{
			MagicPass.pluginUsable = true;
		}
		else
		{
			throw "result is " + result;
		}
	}
	catch(e)
	{
		MagicPass.error("start Error " + e.message, false);
		window.setTimeout(function(){
			MagicPass.start();
		}, 2000);
		
		return;
	}

	MagicPass.log("[exec]start");

	MagicPass.pluginUsable = true;
	MagicPass.jobExecute();
};

/**
 * <Form>ÅÂ±×¿¡ ÀÔ·ÂµÈ µ¥ÀÌÅÍ¸¦ ¾ÏÈ£È­ Ã³¸®¸¦ À§ÇØ ÅäÅ«Çü½ÄÀ¸·Î Á¤ÀÇÇÕ´Ï´Ù.
 *
 * @param
 *		form	: <form>ÅÂ±× °´Ã¼
 * @return
 *		String	: ÀÏ¹ÝÅØ½ºÆ®
 */
MagicPass.makePlainText = function(loginForm)
{
	var result = "";
	
	if(typeof(loginForm) == "string")
	{
		result = String.fromCharCode(8593) + "loginData" + String.fromCharCode(8595) + loginForm;
	}
	else
	{
		for(var i = 0; i < loginForm.elements.length; i++)
		{
			if(loginForm.elements[i].type == "text" || loginForm.elements[i].type == "password" || loginForm.elements[i].type == "hidden")
			{
				result += String.fromCharCode(8593) + loginForm.elements[i].name + String.fromCharCode(8595) + loginForm.elements[i].value;
			}
		}
		result = result.substring(1);
	}
	
	MagicPass.log("[exec]makePlainText-" + result);
	return result;
};

/**
 * ¸ÅÁ÷ÆÐ½º ¿ÀÇÁ¶óÀÎ ¼³Ä¡¸¦ ÁøÇàÇÕ´Ï´Ù.
 */
MagicPass.setupOffLine = function()
{
	//window.open(MagicPass.settings.offlineUrl, "MagicPass_Setup_popup", "scrollbars=no, status=no, resizable=no, menubar=no, toolbar=no");

	var sizeWidth = (document.body) ? document.body.offsetWidth : window.screen.availWidth;
	var bodyTag = document.getElementsByTagName("body")[0];
	
	with(bodyTag.style){width="100%";height="100%";overflow="hidden";};
	bodyTag.innerHTML	= "<div style='z-index:0;position:absolute;top:0;left:0;min-weight:100%;min-height:100%;width:100%;height:100%;background:#000;filter:alpha(opacity=50);-moz-opacity:0.5;opacity:0.5'></div>"
						+ "<div style='position:absolute;top:200px;left:" + ((sizeWidth - 450) >> 1) + "px;'><iframe src='" + MagicPass.settings.offlineUrl + "' frameborder='0' border='0' width='450' height='300'></iframe></div>"
						+ bodyTag.innerHTML;
	/**
	 * DOM Ã³¸®¹æ½Ä
	 * IE6 ¿¡¼­ setAttributeÀÇ style ¼Ó¼ºÀÌ ¾ÈµÇ´Â °ü°è·Î ±×³É innerHTML·Î ¶§·Á ³Ö±â ÇÕ´Ï´Ù
	 *
	var cDiv = document.createElement("div");
	var cDiv2 = document.createElement("div");
	cDiv.setAttribute("style", "position:absolute;z-index:0;top:0;left:0;min-weight:100%;min-height:100%;width:100%;height:100%;background:#000;filter:alpha(opacity=50);-moz-opacity:0.5;opacity:0.5");
	cDiv2.setAttribute("style", "position:absolute;z-index:1;top:200px;left:" + ((sizeWidth - 450) >> 1) + "px;");
	cDiv2.innerHTML = "<iframe src='" + MagicPass.settings.offlineUrl + "' frameborder='0' border='0' width='450' height='300'></iframe>";
	bodyTag.insertBefore(cDiv2, bodyTag.firstChild);
	bodyTag.insertBefore(cDiv, bodyTag.firstChild);
	 */
	
	MagicPass.log("[exec]setupOffLine");
};

/**
 * ¸ÅÁ÷ÆÐ½º ½ÇÇàÀ» ÁøÇàÇÕ´Ï´Ù.
 */
MagicPass.pluginLoading = function()
{
	if(MagicPass.pluginUsable) return;
	
	MagicPass.log("[exec]pluginLoading");
	
	try
	{
		if(!MagicPass.isRunning())
		{
			if(MagicPass.versionCheck())
			{
				MagicPass.start();
			}
		}
		else
		{
			MagicPass.pluginUsable = true;
			MagicPass.jobExecute();
		}
	}
	catch(e)
	{
		window.setTimeout(function() {
			MagicPass.pluginLoading();
		}, 3000);
	}
};

/**
 * ¸ÅÁ÷ÆÐ½º ÇÃ·¯±×ÀÎ(ActiveX/Applet)À» ·ÎµùÇÕ´Ï´Ù.
 */
MagicPass.ready = function(flag)
{
	if(MagicPass.pluginUsable) return;
	if(!ClientEnvironments.autoSetup) return;
	
	if(MagicPass.isReading)
	{
		if(!flag) return;
	}
	else
	{
		MagicPass.isReading = true;
	}
	
	MagicPass.log("[exec]ready");

	try
	{
		var pluginArea = document.getElementById("MagicSSOPluginArea");
		
		if(pluginArea == null)
		{
			var bodyTag = document.getElementsByTagName("body")[0];
			var cDiv = document.createElement("div");
			cDiv.setAttribute("id", "MagicSSOPluginArea");
			bodyTag.appendChild(cDiv);

			pluginArea = document.getElementById("MagicSSOPluginArea");
			
			if(MagicPass.option.useApplet)
			{
				var jreSetupUrl = "http://java.com/ko/download/";
				
				if(ClientEnvironments.browser == "MSIE") jreSetupUrl = "http://java.sun.com/update/1.6.0/jinstall-6-fcs-windows-i586.cab";
				else if(ClientEnvironments.browser == "FIREFOX") jreSetupUrl = "http://www.java.com/ko/download/windows_xpi.jsp?locale=ko";
				
				pluginArea.innerHTML	= "<object classid='clsid:8AD9C840-044E-11D1-B3E9-00805F499D93' id='" + ((ClientEnvironments.browser == "MSIE") ? MagicPass.settings.alias : "") + "' width='1' height='1' codebase='" + jreSetupUrl + "'>"
										+ "	<param name='java_code' value='com.naru.app.applet.PassPortApplet.class' />"
										+ "	<param name='java_codebase' value='" + MagicPass.path + "/plugins/applet' />"
										+ "	<param name='java_archive' value='passport-applet.jar, passport-j.jar' />"
										+ "	<param name='type' value='application/x-java-applet;version=1.6' />"
										+ "	<param name='browser.type' value='" + ClientEnvironments.browser + "' />"
										+ "	<param name='client.type' value='" + ((MagicPass.option.useMagicPassS) ? "passportj" : "magicpass") + "' />"
										+ "	<param name='passport.debug' value='" + MagicPass.option.debugApplet + "' />"
										+ "	<param name='client.resources' value='passport-resource.jar' />"
										+ "	<param name='client.resources.version' value='" + MagicPass.version.appletResource + "' />"
										+ "	<param name='passport-j.resources' value='passport-j-resource.jar' />"
										+ "	<param name='passport-j.resources.version' value='" + MagicPass.version.applet + "' />"
										+ "	<param name='isBrowserMonitoring' value='" + MagicPass.option.MP_monitor.use + "' />"
										+ "	<param name='interval.browser.monitoring' value='" + MagicPass.option.MP_monitor.interval + "' />"
										+ "	<param name='mayscript' value='true' />"
										+ "	<comment>"
										+ "		<embed id='" + ((ClientEnvironments.browser == "MSIE") ? "" : MagicPass.settings.alias) + "' type='application/x-java-applet;version=1.6' width='1' height='1' "
										+ "			pluginspage='" + jreSetupUrl + "' "
										+ "			java_code='com.naru.app.applet.PassPortApplet.class' "
										+ "			java_codebase='" + MagicPass.path + "/plugins/applet' "
										+ "			java_archive='passport-applet.jar, passport-j.jar' "
										+ "			browser.type='" + ClientEnvironments.browser + "' "
										+ "			client.type='" + ((MagicPass.option.useMagicPassS) ? "passportj" : "magicpass") + "' "
										+ "			passport.debug='" + MagicPass.option.debugApplet + "' "
										+ "			client.resources='passport-resource.jar' "
										+ "			client.resources.version='" + MagicPass.version.appletResource + "' "
										+ "			passport-j.resources='passport-j-resource.jar' "
										+ "			passport-j.resources.version='" + MagicPass.version.applet + "' "
										+ "			isBrowserMonitoring='" + MagicPass.option.MP_monitor.use + "' "
										+ "			interval.browser.monitoring='" + MagicPass.option.MP_monitor.interval + "' "
										+ "			mayscript='true'></embed>"
										+ "		<noembed></noembed> "
										+ "	</comment>"
										+ "</object>";
			}
			else
			{
				pluginArea.innerHTML += "<object codebase='" + MagicPass.path + "/plugins/MagicPassX.cab#version=" + MagicPass.version.MagicPassX + "' classid='clsid:AD6870C0-44B7-42FB-A119-C2C6BD9CD005' id='" + MagicPass.settings.alias + "' width='1' height='1'></object>";
			}
		}
		
		if(MagicPass.settings.object == null)
		{
			MagicPass.settings.object = document.getElementById(MagicPass.settings.alias);
			throw "MagicPass.settings.object is " + MagicPass.settings.object;
		}
	}
	catch(e)
	{
		MagicPass.error("Starts delayed action. " + e.message, false);
		window.setTimeout(function(){
			MagicPass.ready(true);
		}, 1000);
		
		return;
	}
	
	MagicPass.pluginLoading();
};

/**
 * MagicLoaderX ÇÃ·¯±×ÀÎÀ» ·ÎµùÇÕ´Ï´Ù.
 */
MagicPass.readyLoaderX = function()
{
	if(MagicPass.option.useApplet || MagicPass.pluginUsable) return;

	try
	{
		var pluginArea = document.getElementById("MagicSSOPluginArea");

		if(document.getElementById("MagicLoaderX") == null)
		{
			pluginArea.innerHTML += "<object codebase='" + MagicPass.path + "/plugins/MagicLoaderX.cab#version=" + MagicPass.version.MagicLoaderX + "' classid='clsid:3D64E58D-CB55-4344-B809-CFE38F900838' id='MagicLoaderX' width='1' height='1'></object>";
			MagicPass.settings.objectLoaderX = document.getElementById("MagicLoaderX");
		}
	}
	catch(e)
	{
		window.setTimeout(function(){
			MagicPass.readyLoaderX();
		}, 1000);
	}
};

/**
 * NMPCertX(MPCertX) ÇÃ·¯±×ÀÎÀ» ·ÎµùÇÕ´Ï´Ù.
 */
MagicPass.readyCertX = function()
{
	if(!MagicPass.option.useCertificate) return;

	try
	{
		var pluginArea = document.getElementById("MagicSSOPluginArea");

		if(document.getElementById("MPCertX") == null)
		{
			var clsid = (MagicPass.pkiType == "NPKI") ? "1CCA7AD8-4FF3-4449-B994-FD5CD326444C" : "000FDEEC-E017-46A9-AEA9-5520CCA8E7D5";
			
			pluginArea.innerHTML += "<object codebase='" + MagicPass.path + "/plugins/NMPCertX.cab#version=" + MagicPass.version.MPCertX + "' classid='clsid:" + clsid +"' id='MPCertX' width='1' height='1'></object>";
			MagicPass.settings.objectCertX = document.getElementById("MPCertX");
		}
	}
	catch(e)
	{
		window.setTimeout(function(){
			MagicPass.readyCertX();
		}, 1000);
	}
};

/**
 * ¸ÅÁ÷ÆÐ½º Ã³¸®°ü·Ã ¿¡·¯¸Þ¼¼Áö¸¦ Ãâ·ÂÇÕ´Ï´Ù.
 *
 * @param
 *		error	: ¿¡·¯ÄÚµå(¶Ç´Â ¿¡·¯¹®±¸)
 *		flag 
 *			- true : alert¸Þ¼¼Áö ¶ç¿ìÁö ¾ÊÀ½
 *			- false(¶Ç´Â »ý·«) : alert¸Þ¼¼Áö ¶ç¿ò  
 * @return
 *		String	: ¿¡·¯¸Þ¼¼Áö
 */
MagicPass.error = function(error, flag)
{
	if(error == null || error == "")
	{
		MagicPass.log("[ERROR!] Error sentence is null"); 
		return;
	}

	var alertFlag = (typeof(flag) == "undefined") ? MagicPass.option.debugScript : flag;
	var message = null;

	if(!window.isNaN(error)) error = parseInt(error);
	
	if(typeof(error) == "number")
	{
		switch(error)
		{
			case 103	: message = "¸ÅÁ÷ÆÐ½º°¡ ½ÇÇàÁßÀÎÁö Æ®·¹ÀÌÀÇ ¾ÆÀÌÄÜÀ» È®ÀÎÇØ ÁÖ¼¼¿ä."; break;
			case 150	: message = "ÀÌ¹Ì ·Î±×ÀÎ ÁßÀÔ´Ï´Ù. ¸ÅÁ÷ÆÐ½º¸¦ È®ÀÎ ÈÄ ´Ù½Ã ½ÃµµÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 151	: message = "·Î±×ÀÎµÇÁö ¾Ê¾Ò°Å³ª, Á¢±ÙÇÒ ¼ö ¾ø´Â ½Ã½ºÅÛÀÔ´Ï´Ù."; break;
			case 9999	: message = "ÀÎÁõ¼­¹ö(MAS)°¡ ¿¬°áµÇÁö ¾Ê¾Ò°Å³ª ÀÛµ¿ÁßÀÌÁö ¾Ê½À´Ï´Ù."; break;

			case 10001	:
			case 10003	: message = "»ç¿ëÀÚ Á¤º¸°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."; break;
				
			case 70000	: message = "¸ÅÁ÷ÆÐ½º°¡ ·ÎµùÁßÀÌ°Å³ª ¼³Ä¡µÇÁö ¾Ê¾Ò½À´Ï´Ù. ·Îµù ¶Ç´Â ¼³Ä¡°¡ ¿Ï·áµÈ ÈÄ, ½ÃµµÇÏ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 70001	: message = "¾Æ¾Æµð¸¦ ÀÔ·ÂÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 70002	: message = "ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 70003	: message = "¾Æ¾Æµð ¶Ç´Â ºñ¹Ð¹øÈ£°¡ Àß¸ø ÀÔ·ÂµÇ¾ú½À´Ï´Ù."; break;
			case 70004	: message = "MagicPass(º¸¾È ·Î±×ÀÎ ÇÁ·Î±×·¥)À» ¼³Ä¡ÇÏÁö ¾Ê¾Ò°Å³ª ¼³Ä¡¸¦ ÁøÇàÇÏ°í ÀÖ½À´Ï´Ù.\n¼³Ä¡ ¿Ï·á ÈÄ, ´Ù½Ã ·Î±×ÀÎÀ» ½ÃµµÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 70005	: message = "¼­¹öÀÎÁõ¼­ Á¶È¸¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇÏ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 70006	: message = "¾ÏÈ£È­ Å°¸¦ È®ÀÎÇÏ´Â °úÁ¤¿¡¼­ ½ÇÆÐÇÏ¿´½À´Ï´Ù."; break;
			case 70007	: message = "¾ÏÈ£È­ ¼¼¼ÇÅ° ±³È¯°úÁ¤¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù."; break;
			case 70008	: message = "·Î±×ÀÎ Á¤º¸¸¦ ¾ÏÈ£È­ ÇÏ´Â °úÁ¤¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù."; break;
			case 70009	: message = "º¹È£È­ÇÑ µ¥ÀÌÅÍ°¡ ¾ø½À´Ï´Ù. °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇÏ½Ã±â ¹Ù¶ø´Ï´Ù."; break;
			case 70010	: message = "¾ÏÈ£È­ µ¥ÀÌÅÍ¸¦ º¹È£È­ ÇÏ´Â °úÁ¤¿¡¼­ ÇÊ¿äÇÑ ½Ã°£ µ¥ÀÌÅÍ°¡ À¯½ÇµÇ¾ú½À´Ï´Ù."; break;
			case 70011	: message = "¾ÏÈ£È­ µ¥ÀÌÅÍ¸¦ º¹È£È­ ÇÏ´Â °úÁ¤¿¡¼­ ÇÊ¿äÇÑ Å° µ¥ÀÌÅÍ°¡ À¯½ÇµÇ¾ú½À´Ï´Ù."; break;

			default	:
				if(error >= 801 && error < 1000) message = "ÀÎÁõ¼­ º»ÀÎÈ®ÀÎ¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. ´Ù½Ã ÇÑ¹ø ½ÃµµÇØÁÖ½Ã±â ¹Ù¶ø´Ï´Ù.";
				else if(error >= 1000 && error <= 2013) message = "ÀÛ¾÷Áß Ç¥ÁØº¸¾ÈAPI(GPKIAPI)¿¡¼­ ¿À·ù¸¦ ¹ß°ßÇÏ¿´½À´Ï´Ù.";
				else message = "¾Ë ¼ö ¾ø´Â ¿¡·¯ÀÔ´Ï´Ù.\n¹®Á¦°¡ Áö¼ÓµÉ °æ¿ì, °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇÏ½Ã±â ¹Ù¶ø´Ï´Ù.";
				break;
		}
		
		if(MagicPass.option.debugScript)message += "\nCODE " + error;
	}
	else
	{
		message = error;
	}
	
	if(alertFlag) window.alert(message);

	MagicPass.log("[ERROR!] " + message);
	return message;
};

/**
 * ¸ÅÁ÷ÆÐ½º¿¡ ÀúÀåµÇ´Â µ¥ÀÌÅÍÀÇ Ä³¸¯ÅÍ¼ÂÀ» ÁöÁ¤ÇÕ´Ï´Ù.
 * (ActiveX ¿¡¼­¸¸ »ç¿ë)
 * 
 * @param
 * 		charsetName : euc-kr, ansi (ÀÌ¿Ü´Â Áö¿ø ¾ÈÇÔ. (0:ANSI, 1:euc-kr))
 */
MagicPass.setCharset = function(charsetName, siteName)
{
	var charset = charsetName || "euc-kr";
	var site = siteName || MagicPass.siteName;
	
	if(!MagicPass.option.useApplet)
	{
		MagicPass.settings.object.SetCharSet(site, ((charset.toLowerCase() == "euc-kr") ? 1 : 0));
	}

	MagicPass.log("[exec]setCharset-" + charset);
};

/**
 * ¸ÅÁ÷ÆÐ½º ·Î±×ÀÎ Á¤º¸¿¡ Ç¥½ÃµÇ´Â ÀÌ¸§À» ÁöÁ¤ÇÕ´Ï´Ù.
 * 
 * @param
 * 		delegateName : Ç¥½Ã ÀÌ¸§ (ÁöÁ¤¾ÈÇÏ¸é, siteTitle ·Î ÁöÁ¤)
 */
MagicPass.setDelegateName = function(delegateName, siteName)
{
	var delegateName = delegateName || MagicPass.siteTitle;
	var site = siteName || MagicPass.siteName;
	
	MagicPass.settings.object.SetSiteDelegate(site, delegateName);
	MagicPass.log("[exec]setDelegateName-" + delegateName);
};

/**
 * ºê¶ó¿ìÀú Á¾·áµÇ¾ú´ÂÁö È®ÀÎÇÏ¿© ·Î±×¾Æ¿ôÀ» ½ÇÇàÇÕ´Ï´Ù.
 */
MagicPass.browserOffCheck = function(siteName)
{
	var processName = null;
	var site = siteName || MagicPass.siteName;
	
	if(ClientEnvironments.os == "WINDOWS")
	{
		switch(ClientEnvironments.browser)
		{
			//case "MSIE"		: processName = "iexplore.exe"; break;	//ActiveX »ç¿ë½Ã ÀÚÃ¼ÀûÀ¸·Î ºê¶ó¿ìÀú Ã¼Å©ÇÔ.
			case "FIREFOX"	: processName = "firefox.exe"; break;
			case "SAFARI"	: processName = "Safari.exe"; break;
			case "CHROME"	: processName = "chrome.exe"; break;
			case "OPERA"	: processName = "opera.exe"; break;
		}
	}
	else
	{
		switch(ClientEnvironments.browser)
		{
			case "FIREFOX"	: processName = "firefox"; break;
			case "SAFARI"	: processName = "Safari"; break;
			case "CHROME"	: processName = "chrome"; break;
			case "OPERA"	: processName = "opera"; break;
		}
	}

	if(processName != null)
	{
		MagicPass.settings.object.setBrowserCheck(site, processName);
	}

	MagicPass.log("[exec]browserCheck-" + processName);
};

/**
 * ÀÚµ¿·Î±×¾Æ¿ô ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù. 
 * (ÁöÁ¤µÈ ½Ã°£°£°Ý ÀÌ»ó ½ºÅ©¸³Æ®°¡ ¸ÅÁ÷ÆÐ½º·Î ¾×¼¼½º°¡ ¾øÀ¸¸é ¸ÅÁ÷ÆÐ½ºÀÇ »çÀÌÆ® ÅäÅ« ·Î±×¾Æ¿ô)
 * 
 * @param
 * 		interval : Ã¼Å© ½Ã°£°£°Ý(1ÃÊ´ÜÀ§; 1/1000ÃÊ ¾Æ´Ô)
 */
MagicPass.siteMonitorLogout = function(interval, siteName)
{
	if(!MagicPass.option.MP_monitor.use) return;
	
	var intervalTime = interval || MagicPass.option.MP_monitor.interval;
	var site = siteName || MagicPass.siteName;
	
	MagicPass.settings.object.SetAutoLogoutSite(site, intervalTime / 1000);

	MagicPass.log("[exec]siteMonitorLogout-" + intervalTime);
};

/**
 * Ajax Ã³¸®¸¦ Áö¿øÇÕ´Ï´Ù.
 * 
 * @param
 * 		mode : secure.jspÀÇ actionNameÀ» ÁöÁ¤ÇÕ´Ï´Ù.
 * 		callbackFunction : ÄÝ¹éÇÔ¼ö(Ajax Ã³¸® ÈÄ, È£Ãâ ÇÔ¼ö)
 * 		funtionClass : ÄÝ¹éÇÔ¼ö°¡ Å¬·¡½ºÇü½ÄÀÏ °æ¿ì, Å¬·¡½º¸¦ ÀÔ·Â
 * 		params : secure.jsp·Î È£ÃâÇÒ¶§ ÆÄ¶ó¹ÌÅÍ¸¦ Á¤ÀÇÇÕ´Ï´Ù.(String ¶Ç´Â Map Å¸ÀÔ)
 * 		url : secure.jsp ÀÌ¿ÜÀÇ url·Î AjaxÃ³¸®¸¦ ¿äÇÒ¶§ ÆÄÀÏÀÇ URLÀ» ÁöÁ¤ÇÕ´Ï´Ù.
 * 		async
 * 			true : ºñµ¿±â ¹æ½ÄÀ¸·Î ÄÝ¹éÇÔ¼ö È£Ãâ
 * 			false : µ¿±â ¹æ½ÄÀ¸·Î ÄÝ¹éÇÔ¼ö È£Ãâ
 */
var xmlHttpRequest = null;
MagicPass.request = function(mode, callbackFunction, funtionClass, params, url, async)
{
	if(xmlHttpRequest == null)
	{
		try
		{
			xmlHttpRequest = new XMLHttpRequest();
		}
		catch(e)
		{
			try
			{
				xmlHttpRequest = new ActiveXObject("Msxml2.HTTP");
			}
			catch(f)
			{
				xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
	}
	
	var param = "actionName=" + mode;

	//¸ÊÇü½ÄÀÇ ÆÄ¶ó¹ÌÅÍ¸¦ Ã³¸®ÇÕ´Ï´Ù
	for(var i in params)		
	{
		param += "&" + i + "=" + encodeURIComponent(params[i]);
	}

	var actionUrl = url || MagicPass.secureUrl;		//Ajax·Î Ã³¸®µÉ ÆäÀÌÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù

	//Ajax È£ÃâÀ» ½ÃµµÇÕ´Ï´Ù
	xmlHttpRequest.open("POST", actionUrl, false);
	xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttpRequest.send(param);
	
	var sync = async || false;

	if(sync)
	{
		xmlHttpRequest.onreadystatechange = function()
		{
			if(xmlHttpRequest.readyState == 4)
			{
				if(xmlHttpRequest.status == 200)
				{
					(callbackFunction).call(funtionClass, xmlHttpRequest.responseXML);
				}
				else 
				{
					MagicPass.error(xmlHttpRequest.statusText + " [" + xmlHttpRequest.status + "]");
				}
			}
		};
	}
	else
	{
		if(typeof(callbackFunction) == "function")
		{
			callbackFunction.call(funtionClass, xmlHttpRequest.responseXML);
		}
	}
};

/**
 * XML¿¡¼­ Æ¯Á¤ ÅÂ±×ÀÇ °ªÀ» ÆÄ½ÌÇÕ´Ï´Ù.
 * 
 * @param
 * 		xmlData XML¿ÀºêÁ§Æ®
 * 		tag ÃßÃâ´ë»ó Tag
 * 
 * @return
 * 		ÃßÃâ´ë»óÅÂ±×ÀÇ nodeValue(StringÅ¸ÀÔ)
 */
MagicPass.xmlParse = function(xmlData, tag)
{
    var result = "";

    try
    {
    	result = xmlData.getElementsByTagName(tag)[0].firstChild.nodeValue;
    }
    catch(e)
    {
    	MagicPass.error("Undefined tag(" + tag + ") called", false);
    }

    return result;
};

/**
 * HTML¿¤¸®¸ÕÆ®¿¡ ÀÌº¥Æ®¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
 * 
 * @param
 * 		targetObj °´Ã¼
 * 		eventType ÀÌº¥Æ®Á¾·ù (click, keypress, ...)
 * 		callbackFunction ÀÌº¥Æ® ÈÄ Ã³¸®
 */
MagicPass.addEvent = function(targetObj, eventType, callbackFunction)
{
	try
	{
		if(window.addEventListener) targetObj.addEventListener(eventType, callbackFunction, false);
		else targetObj.attachEvent("on" + eventType, callbackFunction);
	}
	catch(e)
	{
		MagicPass.error(targetObj + " add '" + eventType + "' event is fail.\n cause : " + e.message, false);
	}
};

/**
 * ¼­¹öÀÎÁõ¼­°ªÀ» ºÒ·¯¿Â´Ù.
 * (¼­¹öÀÎÁõ¼­¸¦ ÆäÀÌÁö ÀüÈ¯½Ã ¸Å¹ø È£ÃâÇÏ´Â ºÎÇÏ¸¦ ¾ø¾Ö±â À§ÇØ ÄíÅ°¿¡ ÀúÀåÇØµÓ´Ï´Ù.)
 */
MagicPass.getServerCertificate = function()
{
	if(MagicPass.serverCertificate != null) return;

	MagicPass.log("getServerCertificate");
	var currentCookie = document.cookie + ";";
	var startPoint = currentCookie.indexOf(MagicPass.cookieName);
	
	if(startPoint > -1)
	{
		var s = currentCookie.substring(startPoint + MagicPass.cookieName.length);
		s = s.substring(0, s.indexOf(";"));
		
		if(s != "")
		{
			MagicPass.serverCertificate = window.unescape(s);
			return;
		}
	}
	
	MagicPass.request("GET_SERVER_CERTIFICATION", MagicPass.setServerCertificate);
};

/**
 * ¼­¹öÀÎÁõ¼­ÀÇ °ªÀ» ÀúÀåÇÕ´Ï´Ù.
 */
MagicPass.setServerCertificate = function(xmlData)
{
	var success = MagicPass.xmlParse(xmlData, "success");
	var message = MagicPass.xmlParse(xmlData, "message");
	
	if(success)
	{
		MagicPass.serverCertificate = message;
		document.cookie = MagicPass.cookieName + window.escape(message) + ";domain=" + document.domain + ";"; 
	}
	else
	{
		MagicPass.error("To Server Certificate loaded Error.");
	}
};
/*--------------------------------------------------------------
	String object extension
--------------------------------------------------------------*/
/**
 * ÀÔ·Â¹ÞÀº StringÅ¸ÀÔ °´Ã¼°¡ null, ""(ºó¹®ÀÚ¿­), undefined ÀÏ °æ¿ì¸¦ È®ÀÎÇÕ´Ï´Ù.
 * Çü½ÄÀº new String().isNull("¹®ÀÚ¿­") ¶Ç´Â, "¹®ÀÚ¿­".isNull()·Î »ç¿ë°¡´ÉÇÕ´Ï´Ù.
 * 
 * @param
 * 		str : ºñ±³ÇÒ ¹®ÀÚ¿­
 * @return
 * 		true : null°ª ÀÏ¶§
 * 		false : null°ª ¾Æ´Ò¶§
 */
String.prototype.isNull = function(str)
{
	var string = str || this;

	try
	{
		return !(string != null && string != undefined && string != "" && string != "null" && string != "undefined");
	}
	catch(e)
	{
		return true;
	}
};
/**
 * ÀÔ·Â¹ÞÀº StringÅ¸ÀÔ °´Ã¼ÀÇ ¾Õ/µÚ °ø¹éÀ» Á¦°ÅÇÕ´Ï´Ù.
 * Çü½ÄÀº new String().trim("¹®ÀÚ¿­") ¶Ç´Â, "¹®ÀÚ¿­".trim()°ú °°ÀÌ »ç¿ë°¡´ÉÇÕ´Ï´Ù.
 * 
 * @param
 * 		str : ¹®ÀÚ¿­
 * @return
 * 		¾ÕµÚ °ø¹éÀÌ Á¦°ÅµÈ ¹®ÀÚ¿­
 */
String.prototype.trim = function(str)
{
	var string = str || this;

	try
	{
		return string.replace(/^\s+|\s+$/g, "");
	}
	catch(e)
	{
		return string;
	}
};

/*--------------------------------------------------------------
	Using for Applet 
--------------------------------------------------------------*/
function afterStart()
{
	MagicPass.log("[applet] afterStart");
	return true;
}

function refreshPage()
{
	MagicPass.log("[applet] refreshPage");
	window.location.reload();
	
	return true;
}

function beforeInit()
{
	MagicPass.log("[applet] beforeInit");
	return true;
}

function afterInit()
{
	MagicPass.log("[applet] afterInit");
	return true;
}

function beforeStart()
{
	MagicPass.log("[applet] beforeStart");
	return true;
}

function closeWindow()
{
	if (window.opener)
		window.opener.close();
	
	window.close();
}

/*--------------------------------------------------------
 * 	Auto Start
--------------------------------------------------------*/
MagicPass.ready();