﻿var INFO_LUPDATE_ADDR = "RhlYbvVB9rSZTJhTCXZhv73EAM+EMySB6nsd/sNlwVYJi1xyFXRYII1U1dceICtX8BwQP1b8PFWlp+DDM9RSfQ==";
var INFO_IE_PLUGIN_ID = "ncllm.ncllmCtrl.2";
var INFO_IE_PLUGIN_CLASS_ID = "CLSID:CAD40194-0A97-4A52-9949-F319D40C761E";
var INFO_FF_PLUGIN_ID = "application/ncsoft-login-launcher-module2";
var INFO_LAUNCHER_ID = "ncLauncher";
var INFO_LAUNCHER_VERSION = "20110929";

var PLUGIN_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/ncplugin_20110916.exe";
var PLAYNC_LAUNCHER_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/nclauncher_3_20120118.exe";
var PLAYNC_LAUNCHER_FULL_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/nclauncher_FULL_20120118.exe";
var DAUM_LAUNCHER_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/daum_nclauncher_2_20120118.exe";
var DAUM_LAUNCHER_FULL_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/daum_nclauncher_FULL_20120118.exe";
var TOONI_LAUNCHER_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/tooni_nclauncher_2_20120118.exe";
var TOONI_LAUNCHER_FULL_SETUP_URL = "http://nccommon01.nowcdn.co.kr/ncLauncher/tooni_nclauncher_FULL_20120118.exe";

var USE_ADMIN_MODE = false;
var USE_CRASH_REPORT = false;

var PLAYNC_ID = 0;
var YAHOO_ID = 1;
var DAUM_ID = 5;
var TOONI_ID = 6;

var param_gameID = "";
var param_sessKey = "";
var param_companyID = "";
var param_user = "";

var isIE = (navigator.userAgent.indexOf('MSIE') != -1);
var isFF = (navigator.userAgent.indexOf('Firefox') != -1);
var isChrome = (navigator.userAgent.indexOf('Chrome') != -1);

var SUCCESS_RUN = 0;
var FAIL_RUN = 1;
var WRONG_STARTGAMEID = 2;
var WRONG_SESSKEY = 3;
var NOT_EXIST_ACTIVEX = 4;
var WRONG_VERSION = 5;
var NOT_SUPPORT_BROWSER = 6;
var NOT_INSTALLED_LAUNCHER = 7;
var UPDATED_LAUNCHER = 8;
var NOT_INSTALLED_GAME = 9;

function ErrorMessage(error)
{
	switch(error)
	{
		case 1:
		{
			alert("잘못된 매개변수 입니다.");
			break;
		}
		case 2:
		{
			alert("레지스트리를 읽을 수 없습니다.");
			break;
		}
		case 3:
		{
			alert("잘못된 런처 실행 파일 경로입니다.");
			break;
		}
		case 4:
		{
			alert("런처 실행 파일이 없습니다.");
			break;
		}
		case 5:
		{
			alert("런처 실행 파일에 접근할 수 없습니다.");
			break;
		}
		case 6:
		{
			alert("런처 실행 파일을 실행할 수 없습니다.");
			break;
		}
		case 7:
		{
			alert("런처 실행시 잘못된 매개변수를 넘겼습니다.");
			break;
		}
		case 8:
		{
			alert("NCLLM_ERROR_INVALID_VERSION");
			break;
		}
		case 9:
		{
			alert("NCLLM_ERROR_GET_PCINFO");
			break;
		}
		case 10:
		{
			alert("NCLLM_ERROR_GET_PCINFO_EXCEPTION");
			break;
		}
		case 11:
		{
			alert("NCLLM_ERROR_GET_PCINFO_LANCARD");
			break;
		}
		case 12:
		{
			alert("NCLLM_ERROR_RSA_ENCRYPTION");
			break;
		}
		case 13:
		{
			alert("NCLLM_ERROR_RSA_ENCRYPTION");
			break;
		}
		case 14:
		{
			alert("NCLLM_ERROR_MAKE_HEX_STRING");
			break;
		}
		case 15:
		{
			alert("NCLLM_ERROR_NP_INVALID_ARG_COUNT");
			break;
		}
		case 16:
		{
			alert("NCLLM_ERROR_NP_INVALID_ARG_TYPE");
			break;
		}
		default:
		{
			alert("플러그인 실행 오류 : " + error);
			break;
		}
	}
}

function Get_Cookie(strName)
{
	var strCookieName = strName + "=";
	var objCookie = document.cookie;

	if (objCookie.length > 0)
	{
		var nBegin = objCookie.indexOf(strCookieName);
		if (nBegin < 0)
		{
			return null;
		}

		nBegin += strCookieName.length;
		var nEnd = objCookie.indexOf(";", nBegin);
		if (nEnd == -1)
		{
			nEnd = objCookie.length;
		}
	}

	return unescape(objCookie.substring(nBegin, nEnd));
}

function IsPluginInstalled()
{
	if (isIE)
	{
		return IsPluginInstalledIE();
	}
	else if (isFF || isChrome)
	{
		navigator.plugins.refresh(false);
		return IsPluginInstalledFF();
	}
	else
	{
		return NOT_SUPPORT_BROWSER;
	}
}

function IsPluginInstalledIE()
{
	var result = FAIL_RUN;
	try
	{
		result = NOT_EXIST_ACTIVEX;
		
		var obj = new ActiveXObject(INFO_IE_PLUGIN_ID);
		if (obj == null)
		{
			return result;
		}
		else
		{
			return SUCCESS_RUN;
		}
	}
	catch(e)
	{
		return result;
	}
	
	return result;
}

function IsPluginInstalledFF()
{
	for (var i=0;i<navigator.mimeTypes.length;i++)
	{
		if (INFO_FF_PLUGIN_ID == navigator.mimeTypes[i].type)
			if (navigator.mimeTypes[i].enabledPlugin != null)
				return SUCCESS_RUN;
	}

	return NOT_EXIST_ACTIVEX;
}

function LoadPlugin()
{
	if (isIE)
	{
		return LoadPluginIE();
	}
	else if (isFF || isChrome)
	{
		return LoadPluginFF();
	}
	else
	{
		return NOT_SUPPORT_BROWSER;
	}
}

function LoadPluginIE()
{
	var launcherHTML = '<OBJECT ID="ncllmCtrl" WIDTH ="0" HEIGHT="0" CLASSID="' + INFO_IE_PLUGIN_CLASS_ID + '" TYPE="application/x-oleobject" style="visibility: hidden"> </OBJECT>';

	var hiddenLauncher = document.getElementById('_id_hidden_llm')
	if (hiddenLauncher) 
	{
		document.getElementById('_id_hidden_llm').innerHTML = '';
		hiddenLauncher.innerHTML = launcherHTML;
	}
	else
	{
		return FAIL_RUN;
	}

	return SUCCESS_RUN;
}

function LoadPluginFF()
{
	var launcherHTML = '<EMBED ID="ncllmCtrl" WIDTH="0" HEIGHT="0" TYPE="' + INFO_FF_PLUGIN_ID + '" style="visibility: hidden"> </EMBED>';
	
	var hiddenLauncher = document.getElementById('_id_hidden_llm');
	if (hiddenLauncher)
	{
		hiddenLauncher.innerHTML = '';
		hiddenLauncher.innerHTML = launcherHTML;
	}
	else
	{
		return FAIL_RUN;
	}
	
	return SUCCESS_RUN;
}

function GetUniqueKey()
{
	try
	{
		var ctl = document.getElementById("ncllmCtrl");
		if(ctl == null)
		{
			return NOT_EXIST_ACTIVEX;
		}

		var result = ctl.GetUniqueKey();
		if (result == null || result == "undefined")
		{
			return FAIL_RUN;
		}
		else
		{
			return result;
		}
	}
	catch(e)
	{
		return FAIL_RUN;
	}

	return FAIL_RUN;
}

function GetMacAddr()
{
	try
	{
		var ctl = document.getElementById("ncllmCtrl");
		if(ctl == null)
			return NOT_EXIST_ACTIVEX;

		var result = ctl.GetMacAddr();
		if (result == null || result == "undefined")
		{
			return FAIL_RUN;
		}
		else
		{
			return result;
		}
	}
	catch(e)
	{
		return FAIL_RUN;
	}

	return FAIL_RUN;
}

function IsLauncherInstalled()
{
	try
	{
		var ctl = document.getElementById("ncllmCtrl");
		if(ctl == null)
		{
			return NOT_EXIST_ACTIVEX;
		}

		var version = ctl.IsLauncherInstalled();
		if (version == null || version == "undefined" || version.length < 1)
		{
			return NOT_INSTALLED_LAUNCHER;
		}
		else
		{
			if (version == INFO_LAUNCHER_VERSION)
			{
				return SUCCESS_RUN;
			}
			else
			{
				return UPDATED_LAUNCHER;
			}
		}
	}
	catch(e)
	{
		return FAIL_RUN;
	}

	return FAIL_RUN;
}

function IsGameInstalled()
{   
	try
	{
		var ctl = document.getElementById("ncllmCtrl");
		if(ctl == null)
		{
			return NOT_EXIST_ACTIVEX;
		}

		var result = ctl.IsGameInstalled(param_gameID);
		if (result == null || result == "undefined" || result.length < 1)
		{
			return NOT_INSTALLED_GAME;
		}
		else
		{
			return SUCCESS_RUN;
		}
	}
	catch(e)
	{
		return FAIL_RUN;
	}

	return FAIL_RUN;
}

function StartLauncher()
{
	try
	{
		var ctl = document.getElementById("ncllmCtrl");
		if(ctl == null)
			return NOT_EXIST_ACTIVEX;
		
		var param = param_user;
		param += " /LauncherID:\"" + INFO_LAUNCHER_ID + "\"";
		param += " /GameID:\"" + param_gameID + "\""; 		
		param += " /SessKey:\"" + param_sessKey + "\"";
		param += " /CompanyID:\"" + param_companyID + "\"";
		param += " /LUpdateAddr:\"" + INFO_LUPDATE_ADDR + "\"";

		if (true == USE_ADMIN_MODE)
		{
		    param += " /AdminMode:\"1\"";
		}
		if (true == USE_CRASH_REPORT)
		{
			param += " /ReportCrashInfo:\"1\"";
		}
		
   		ctl.StartLauncher(param);
   		var error = ctl.GetError();
   		if (error != 0)
   		{
   			return FAIL_RUN;
   		}
   		else
   		{
   			return SUCCESS_RUN;
   		}
	}
	catch(e)
	{
		return FAIL_RUN;
	}
	
	return FAIL_RUN;
}

function CheckParameter(startGameID, sessKey)
{
	if (startGameID == null || startGameID.length < 4)
	{
		return WRONG_STARTGAMEID;
	}
	if (sessKey == null || sessKey.length < 16)
	{
		return WRONG_SESSKEY;
	}

	return SUCCESS_RUN;
}

function GetError()
{
	try
	{
		var ctl = document.getElementById("ncllmCtrl");
		if(ctl == null)
		{
			return null;
		}

		var result = ctl.GetError();
		if (result == null || result == "undefined")
		{
			return null;
		}
		else
		{
			return result;
		}
	}
	catch(e)
	{
		return null;
	}

	return null;
}

