/*************************************************
 * MagicPassJs Connect
 * 매직패스 연계
 * 
 * @author Naruware 한영수/박종훈
 * @since 22 Mar 2010
 *************************************************/
var Connect = function(returnUrl)
{
	this.returnUrl = returnUrl;
	this.isLoginSessionAlive = false;

	//Constructor
	this.Connect();
};
Connect.prototype =
{
	Connect: function()
	{
		MagicPass.getServerCertificate();
		MagicPass.ready();
	},
	response: function(xmlData)
	{
		var actionName = MagicPass.xmlParse(xmlData, "actionName");
		var success = (MagicPass.xmlParse(xmlData, "success").toLowerCase() == "true") ? true : false;
		var code = MagicPass.xmlParse(xmlData, "code");
		var message = MagicPass.xmlParse(xmlData, "message");

		if(success)
		{
			switch (actionName)
			{
				case "GET_SERVER_CERTIFICATION":
					MagicPass.serverCertificate = message;
					break;
				case "INIT_KEY":
					this.changeKey(message);
					break;
				case "CONNECT":
					MagicPass.request("SITE_LOGIN", this.response, this, "", "/magicsso/siteLogin.jsp");
					break;
				case "LOGIN_SESSION_CHECK":
					this.isLoginSessionAlive = true;

					if(new String(window.location).indexOf("/magicsso/connect") > -1)
					{
						try
						{
							if(window.opener)
							{
								window.opener.location.reload();
								window.close();
							}
							else
							{
								throw "window.opener is null.";
							}
						}
						catch(e)
						{
							alert("[새로고침]하시면 로그인 처리가 완료 됩니다.");
							if(window.opener) window.close();
						}
					}
					break;
				case "SITE_LOGIN":
					this.complete();
					break;
			}
		}
		else
		{
			switch(actionName)
			{
				case "SITE_LOGIN":
					alert("회원님의 통합 아이디로 이 사이트 이용은 할 수 없습니다.");

					if(window.opener)
					{
						window.close();
					}
					break;
				case "LOGIN_SESSION_CHECK":
					break;
				default :
					MagicPass.error(message || code);
					break;
			}
		}
	},
	start: function()
	{
		if(MagicPass.pluginLoading)
		{
		   	MagicPass.request("LOGIN_SESSION_CHECK", this.response, this);

		   	if(MagicPass.isLogin())
			{
			   	if(!this.isLoginSessionAlive)
				{
					var code = MagicPass.getEnvKey(true);

					if (code == 0)
					{
						var result = new String(MagicPass.getResult());
						if(!result.isNull())
						{
							MagicPass.request("INIT_KEY", this.response, this, {"initialSessionKey" : result});
							return;
						}
					}

					MagicPass.error(code);
				}
			}
			//else
			//{
			//	if(this.isLoginSessionAlive)
			//	{
			//		MagicPass.siteLogout();
			//	}
			//}
		}
	},
	changeKey: function(initialSessionKey)
	{
		var code = MagicPass.changeKey(initialSessionKey, true);
		if(code == 0)
		{
			if((code = MagicPass.getToken()) == 0)
			{
				var result = new String(MagicPass.getResult());
				if(!result.isNull())
				{
					MagicPass.request("CONNECT", this.response, this, {"ssoEncryptedData": result});
					return;
				}
			}
		}

		MagicPass.error(code);
	},
	complete: function()
	{
		var url = new String(this.returnUrl);
		if(!url.isNull())
		{
			url = this.returnUrl;
		}
		else
		{
			url = MagicPass.baseUrl;
		}

		window.location.replace(url);
	}
};

/*--------------------------------------------------------
 * 	Auto Start
--------------------------------------------------------*/
if(MagicPass.option.isAutoLogin)
{
	MagicPass.job("매직패스 로그인 연계", function(){
		new Connect().start();
	});
}