/***********************************************************
	함수명		:newXMLHttpRequest()
	처리내용		:요청객체를 생성후 반환
***********************************************************/
// function from http://www-128.ibm.com/developerworks/kr/library/j-ajax1/index.html
function newXMLHttpRequest() {
	var xmlreq = false;
	if (window.XMLHttpRequest) {
		// Create XMLHttpRequest object in non-Microsoft browsers
		xmlreq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		// Create XMLHttpRequest via MS ActiveX
		try {
			// Try to create XMLHttpRequest in later versions
			// of Internet Explorer
			xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) {
			// Failed to create required ActiveXObject
			try {
				// Try version supported by older versions
				// of Internet Explorer
				xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				// Unable to create an XMLHttpRequest with ActiveX
			}
		}
	}
	return xmlreq;
}


var err_code='';
var ACTIVEX_PATH = 'http://goormdev-goorm.nefficient.co.kr/activex/GRLauncherActiveX.cab#version=1,16,0,1';
var LOGIN_LOCATION = 'http://cert.goorm.com/member/loginInput.gm?backUrl='+encodeURIComponent(document.URL);

var gameStartClick = false;
var gameStartObject = false;
var getGameStarter = {
	__getStartReq : function() {
		gameStartClick = true;
		var url = '/game/gamestart.grm';
		var param = 'mode=ajax&rand='+Math.round(Math.random()*1000000);
		var sendAjax = new Ajax.Request(
								url,
								{method: 'get'
								, parameters: param
								, onSuccess: getGameStarter.__call_res
								, onFailure: getGameStarter.__failure
								}
		);
	},

	__getStartReqFrame : function() {
		gameStartClick = true;
		commonFrame.location='/game/gamestart.grm?mode=frame&rand='+Math.round(Math.random()*1000000);
	},

	__call_res : function(oj) {
		var __rs_data_decode = decodeURIComponent(oj.responseText);
		var __rs_data  = eval("(" + __rs_data_decode + ")");
		var intLength  = __rs_data.length;
		var error_code = __rs_data.error_code;
		var error_msg  = __rs_data.error_msg;
		if (Object.inspect(error_msg) == 'undefined') {
			error_msg = '';
		}
		
		if (error_code < 0) {
			getGameStarter.__getErrorMsg(error_code,error_msg);
			
			var gameStart = {'game_id':'0032', 'login_chk':'0', 'err_code':error_code, 'uiLauncherVersion':'0'};
			dwr.insertGameStartLog(gameStart);
			
			return;
		}
		else if (error_code == '2') {
			alert('로그인을 하신 후 이용하실 수 있습니다.');
			
			var gameStart = {'game_id':'0032', 'login_chk':'0', 'err_code':error_code, 'uiLauncherVersion':'0'};
			dwr.insertGameStartLog(gameStart);
			
			location.href = LOGIN_LOCATION;
			return;
		}
		else if (error_code == '4') {
			alert('구름 MOTP 인증 후 게임을 시작 할 수 있습니다.');
			
			var gameStart = {'game_id':'0032', 'login_chk':'0', 'err_code':error_code, 'uiLauncherVersion':'0'};
			dwr.insertGameStartLog(gameStart);
			
			window.open('https://security.goorm.com/motp/cert.grm?host='+location.hostname);
			
			return;
		}
		else if (error_code > 0) {
			
			var code = new Array();
			code['GameCode'] = __rs_data.GameCode;
			code['GameKey'] = __rs_data.GameKey;
			code['TicketKey'] = __rs_data.TicketKey;
			code['GameVersion'] = __rs_data.GameVersion;
			code['MainLauncher'] = __rs_data.MainLauncher;
			code['SubLauncher'] = __rs_data.SubLauncher;
			code['MainGame'] = __rs_data.MainGame;
			code['LauncherVersion'] = __rs_data.LauncherVersion;
			code['CustId'] = __rs_data.CustId;
			code['NickName'] = __rs_data.NickName;
			code['BirthDay'] = __rs_data.BirthDay;
			code['Sex'] = __rs_data.Sex;
			code['PatchRoot'] = __rs_data.PatchRoot;
			getGameStarter.__get_game_start(code);
		}
	},

	__get_game_start : function (code) {
		
		if (window.ActiveXObject) {
			var obj = new Object();
			obj.classid = 'CLSID:6D1BBF7E-C3C7-402A-9704-6BB39AFE55F6';
			obj.id = 'GRLauncherAX';
			obj.name = 'GRLauncherAX';
			obj.width = 0;
			obj.height = 0;
			obj.codebase = ACTIVEX_PATH;
			var param = '';
			obj.param = param;
			goormActiveX(obj,'commonDiv','div');
		}
		try {
			
			GRLauncherAX.GameCode = code['GameCode'];
			GRLauncherAX.GameKey = code['GameKey'];
			GRLauncherAX.TicketKey = code['TicketKey'];
			GRLauncherAX.GameVersion = code['GameVersion'];
			GRLauncherAX.MainLauncher = code['MainLauncher'];
			GRLauncherAX.SubLauncher = code['SubLauncher'];
			GRLauncherAX.MainGame = code['MainGame'];
			GRLauncherAX.LauncherVersion = code['LauncherVersion'];
			GRLauncherAX.CustId = code['CustId'];
			GRLauncherAX.NickName = code['NickName'];
			GRLauncherAX.BirthDay = code['BirthDay'];
			GRLauncherAX.Sex = code['Sex'];
			GRLauncherAX.PatchRoot = code['PatchRoot'];

			var launcherVer = GRLauncherAX.CheckGameLauncherVersion;

			getPeriodTimer.stopTimer();

			// 기존 게임런처및 게임 클라이언트 검사
			if (GRLauncherAX.MainLauncherState || GRLauncherAX.SubLauncherState || GRLauncherAX.MainGameState) {

				var gameStart = {'game_id':code['GameCode'], 'login_chk':'1', 'err_code':'3', 'uiLauncherVersion':launcherVer};

				getGameStarter.__getErrorMsg('C01');
				return;
			}
			
			try
			{
				var xObj = new ActiveXObject("GRLauncherActiveX.GRLauncher.1");
				if(xObj) {
					err_code =1;
				}
				else {
					err_code = 4;
				}
			}
			catch(ex)
			{
				err_code = 4;
			}	

			// start game
			var StartGame = GRLauncherAX.StartGame;
			if (Object.inspect(GRLauncherAX)) {
				gameStartObject = true;
			}
			gameStartClick = false;

			var gameStart = {'game_id':code['GameCode'], 'login_chk':'1', 'err_code':err_code, 'uiLauncherVersion':launcherVer};
			dwr.insertGameStartLog(gameStart);

		}
		catch (e) {
			
			var gameStart = {'game_id':code['GameCode'], 'login_chk':'1', 'err_code':'5', 'uiLauncherVersion':'0'};
			dwr.insertGameStartLog(gameStart);
			
			alert('try catch exception ' + e.description);
		}
	},

	__getErrorMsg : function(code,error_msg) {
		var msg = "";
		switch (code) {
			/**
			 * activex client error msg
			 */
			case "C01":
				msg ="이미 게임 실행 중입니다.\n\n다시 확인해 주시기 바랍니다.";
			break;
			case "C02":
				msg ="죄송합니다.\n\n시스템 점검 중 이오니 잠시 후 다시 시도해 주십시오.";
			break;
			default : /** 체크 안함 **/
				msg ="알수 없는에러\n\n관리자에게 문의 바랍니다.(코드 = #)" + code;
			break;
		}

		if (Object.inspect(error_msg) == 'undefined') {
			error_msg = '';
		}

		if (error_msg != "") {
			msg = error_msg;
		}
		alert(msg);
		gameStartClick = false;
	},

	__failure : function() {
		getGameStarter.__getStartReqFrame();
	}
}

// Game Start 할때 처리 스트립트
function gamestart() {
	//alert("게임 참여는 2월 4일(목) 부터 가능합니다.\n조금만 더 기다려 주세요.");
	//return;
	
	if (!gameStartObject && getPeriodTimer.totalTime > 3) {
		getPeriodTimer.stopTimer();
		gameStartClick = false;
	}
	if (gameStartObject) {
		gameStartClick = false;
	}

	if (gameStartClick) {
		getPeriodTimer.stopTimer();
		gameStartClick = false;
	}
	else {
		getGameStarter.__getStartReq();
		getPeriodTimer.startTimer();
	}
}

function getISIECheck() {
	if ($Agent().IE == false) {
		alert("익스플로러 에서 실행해 주시기 바랍니다.");
		return false;
	} 
	else {
		if ($Agent().IE_VER < 6) {
			alert("현재 회원님의 익스플로러 버전은 : MicroSoft InternetExplorer " + $Agent().IE_VER + " 입니다.\n\n익스플러로 6 이상으로 업데이트후 사용해 주시기 바랍니다.");
			return false;
		}
		else {
			return true;
		}
	}
}

var getPeriodTimer = {
	endButton : false,
	totalTime : 0,
	startTimer: function() {
		getPeriodTimer.count = 0;
		if (!getPeriodTimer.endButton) {
			getPeriodTimer.countTimer = new PeriodicalExecuter(getPeriodTimer.runPeriodTimer, 1);
		}
		getPeriodTimer.endButton = true;
	},

	runPeriodTimer: function() {
		getPeriodTimer.count++;
		getPeriodTimer.totalTime = getPeriodTimer.count;
	},

	stopTimer: function() {
		if (getPeriodTimer.countTimer)
			getPeriodTimer.countTimer.stop();
		getPeriodTimer.endButton = false;
		getPeriodTimer.totalTime = 0;
	}
}

function $Agent() {
	var isOpera = !!(window.opera);
	var nu = navigator.userAgent;
	var isIE = !isOpera && /MSIE/.test(nu), ie5=false, ie55=false, ie6=false, ie7=false, macIE=false;
	var ver = 0;

	if (isIE) {
		/MSIE ([0-9\.]+)/.exec(nu);
		ver = parseFloat(RegExp.$1);
		switch (ver) {
			case 5   : ie5 =true; break;
			case 5.5 : ie55=true; break;
			case 6   : ie6=true; break;
			case 7   : ie7=true; break;
			default  :
		}
	}

	return {
		IE     : isIE,
		IE5    : isIE && ie5,
		IE55   : isIE && ie55,
		IE6    : isIE && ie6,
		IE7    : isIE && ie7,
		IE_VER : ver,
		macIE  : isIE && macIE,
		Gecko  : /Gecko/.test(nu),
		Opera  : isOpera,
		Safari : /WebKit/.test(nu),
		KHTML  : /KHTML/.test(nu)
	};
}

/**
*	activex write
* 	obj
*	div : div name
*	kind : div (div name 에 write 한다.) default : ''
*/
function goormActiveX(obj,div,kind) {
	var objStr = "<object classid='" + obj.classid + "' codebase='" + obj.codebase +"' width='"+obj.width+"' height='"+obj.height+"' id='"+ obj.id +"'>\n";
	for (var i in obj.param){
		if( obj.param[i] != null && typeof(obj.param[i]) != "undefined" && typeof(obj.param[i]) != "function" && obj.param[i] != "______array" ) {
			objStr += '<param name="'+obj.param[i][0]+'" value="'+obj.param[i][1]+'"/>\n';
		}
	}
	objStr += "	</object>";
	
	if (kind == "div")
		document.getElementById(div).innerHTML = objStr;
	else
		document.write(objStr);
}
