
/***********************************************************
	함수명		: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 HOST_URL = self.location.host;
var string_value=/tooniland./;
if (string_value.test(HOST_URL))
	var host_ = 'tooniLand';
else {
	var host_ = 'goorm';
}



var err_code='';//로그 에러코드용 
if( host_ == 'tooniLand' ){ 
	var ACTIVEX_PATH = 'http://goormdev.download.xcdnplus.co.kr/activex/GRLauncherActiveX.cab#version=1,16,0,1';
}else{
	var ACTIVEX_PATH = 'http://goormdev.download.xcdnplus.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 portalUrl = '/common/gameStartBtnCheck.gm';
//var portalUrl = 'http://krf.goorm.com/common/gameStartBtnCheck.gm';

var gameStartClick = false;
var gameStartObject = false;
var getGameStarter = {
	__getStartReq : function() {
		gameStartClick = true;
		var url = '/game/gamestart.gm';
		/**** 개발환경과 운영에서의 다른 런쳐를 실행하기 위한 조건 추가 **/
		var currentLocation = location + '';
		if( currentLocation.indexOf('http://dev.') == 0 || currentLocation.indexOf('dev.') == 0 ){
			url = '/game/gamestart_DEV.gm';
		}
		else if( host_ == 'tooniLand' ){
			url = '/game/tooniGamestart.gm';
		}		

		var param = 'mode=ajax';
		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.gm?mode=frame';
		/**** 개발환경과 운영에서의 다른 런쳐를 실행하기 위한 조건 추가 **/
		if( currentLocation.indexOf('http://dev.') == 0 || currentLocation.indexOf('dev.') == 0 ){
			commonFrame.location='/game/gamestart_DEV.gm?mode=frame';
		}else if( host_ == 'tooniLand' ){
			commonFrame.location = '/game/tooniGamestart.gm?mode=frame';
		}
		else{
			commonFrame.location='/game/gamestart.gm?mode=frame';
		}
	},

	__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) {

			//로그인전 게임 스타트 클릭 시			
			var REQ_s = newXMLHttpRequest();//req 객체반환
			//요청처리		
			REQ_s.open("POST", portalUrl, true);
			//alert(REQ_s);
			REQ_s.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			var param2 = 'id=&game_id=0011&login_chk=0&err_code=' + error_code + '&l_ver=0';
			//alert(param2);
			REQ_s.send(param2);
			///////////////////////////		

			getGameStarter.__getErrorMsg(error_code,error_msg);
			return;
		}
		else if (error_code == '2') {
			if( host_ == 'tooniLand' ){ 

				if (!getCookie("cAI") && !getCookie("PortalID"))
				{
					alert('로그인을 하신 후 이용하실 수 있습니다.');
				} else if (getCookie("cAI") && getCookie("cAI") && !getCookie("PortalNickName"))
				{
					alert('닉네임 설정 후 게임 이용이 가능합니다.');
				}
				return;
			} else {
				alert('로그인을 하신 후 이용하실 수 있습니다.');
			}


			//로그인전 게임 스타트 클릭 시			
			var REQ_s = newXMLHttpRequest();//req 객체반환
			//요청처리		
			REQ_s.open("POST", portalUrl, true);
			//alert(REQ_s);
			REQ_s.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			var param2 = 'game_id=0011&login_chk=0&err_code=' + error_code + '&l_ver=0';
			//alert(param2);
			REQ_s.send(param2);
			///////////////////////////		

			location.href = LOGIN_LOCATION;
			return;
		}else if (error_code == '4') {
			alert('구름 MOTP 인증 후 게임을 시작 할 수 있습니다.');
			location.href = "https://security.goorm.com/motp/cert.grm?host=krfighter.goorm.com";
			  
		}
		else if (error_code > 0 && error_code != '4') {
			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 REQ_s = newXMLHttpRequest();//req 객체반환
				//요청처리		
				REQ_s.open("POST", portalUrl, true);
				//alert(REQ_s);
				REQ_s.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				var param2 = 'id=' + code['CustId'] + '&game_id=' + code['GameCode'] + '&login_chk=1&err_code=3&l_ver='+launcherVer;
				//alert(param2);
				REQ_s.send(param2);	

				getGameStarter.__getErrorMsg('C01');
				return;

			}		
			
			try
			{
					
				var xObj = new ActiveXObject("GRLauncherActiveX.GRLauncher.1");
				if(xObj) {
					err_code =1;
					//alert(err_code);
				}
				else {
					err_code = 4;
					//alert(err_code);
				}
				
			}
			catch(ex)
			{
				err_code = 4;
				//alert(err_code);
			}
		
			
			// start game
			var StartGame = GRLauncherAX.StartGame;
			if (Object.inspect(GRLauncherAX)) {
				gameStartObject = true;
			}
			gameStartClick = false;

			//로그인 후 게임 스타트 클릭수 
			var REQ_s = newXMLHttpRequest();//req 객체반환
			//요청처리		
			REQ_s.open("POST", portalUrl, true);
			//alert(REQ_s);
			REQ_s.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			var param2 = 'id=' + code['CustId'] + '&game_id=' + code['GameCode'] + '&login_chk=1&err_code=' + err_code + '&l_ver='+launcherVer;
			//alert(param2);
			REQ_s.send(param2);	


		}
		catch (e) {
			//로그인 후 게임 스타트 클릭수 			
			var REQ_s = newXMLHttpRequest();//req 객체반환
			//요청처리		
			REQ_s.open("POST", portalUrl, true);
			alert(REQ_s);
			REQ_s.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			var param2 = 'id=' + code['CustId'] + '&game_id=' + code['GameCode'] + '&login_chk=1&err_code=5&l_ver=0';
			alert(param2);
			REQ_s.send(param2);
			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() {
	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)
	};
}
