var mainte_crystal = 0;

function openMainTop( isEnable, gameId ) {
	if ( !isEnable ) {
		return;
	}

	getGameMainPageUrl( gameId );
}

function getGameMainPageUrl( gameId ) {
	ContentLink.getGameMainPageUrl( getGameMainPageUrlCallBack, gameId );
}

function getGameMainPageUrlCallBack( url ) {
	if ( url != null) {
		var fr = window.top.main;
		if ( fr != null ) {
			fr.location.href = url;
		} else {
			window.self.location.href = url;
		}
	}
}

function startGame( isEnable, accountId, gameId, registPageUrl, checkFunc ) {
	if ( !isEnable ) {
		return;
	}

	var isRegistFlg = isRegist( accountId, gameId );

	if ( isRegistFlg ) {
		bootGame( accountId, gameId, checkFunc );
	} else {
		window.open( registPageUrl, '_self' );
	}
}

var isReadFlg = false;
function isReadTOS( accountId, gameId ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isReadFlg = false;
	ContentLink.isReadTOS(isReadCallBack, accountId, gameId);
	return isReadFlg;
}

function isReadCallBack( bool ) {
	isReadFlg = bool;
}

function confirmRegistAccept( gameUserId, gamePassword, mailAddress ) {

	if(gameUserId == null || gameUserId.isEmpty()){
		//パスワードが入力されているか？
	 	if(gamePassword != null && gamePassword.isNotEmpty()){
	 	//パスワードしか入力されてない場合エラー
	 		alert('IDとパスワード共に正確にご入力ください。');
	 		return false;
	 	}else{
	 	//IDとパスが共に入力されていない場合は新規ユーザーとして登録
	 		return confirm( '規約に同意して新しいユーザとして登録します。\n' + 
						'よろしいですか？' );
	 	}
	 }else{
	 	//パスワードが空になっていないか？
	 	if(gamePassword == null || !gamePassword.isNotEmpty()){
	 	//IDしか入力されていない場合エラー
	 		alert('IDとパスワード共に正確にご入力ください。');
	 		return false;
	 	}else{
	 	//IDとパスが半角英数のみで構成されていることを確認
	 		if(gameUserId.match(/[^a-zA-Z0-9]+/) || gamePassword.match(/[^a-zA-Z0-9]+/)) {
				alert('IDとパスワードは半角英数字のみ入力可能です。');
				return false;
			}
	 	//IDとパスが入力されている場合は既存IDとして登録
	 		return confirm( '規約に同意して入力されたID、パスワードのユーザでプレイします。\n' +
						'よろしいですか？' );
	 	}
	 }
}

function confirmRegistReject( gameUserId, gamePassword, mailAddress ) {
	return confirm( '規約に同意していただけない場合、ユーザ登録はおこなわれません。\n' +
					'よろしいですか？' );
}

function accept( isEnable, accountId, gameId, checkFunc, gameUserId, gamePassword, mailAddress ) {
	if ( !isEnable ) {
		return;
	}
	
	var isExistUser = false;

	if ( gameUserId != null && gameUserId.isNotEmpty() &&
		gamePassword != null && gamePassword.isNotEmpty() ) {
		isExistUser = true;
	}

	var result = false;
	if ( isExistUser ) {
		var userId = gameUserId;
		var password = gamePassword;
		result = registUser( accountId, gameId, userId, password );
	} else {
		result = registNewUser( accountId, gameId );
	}

	if ( result ) {
		bootGame( accountId, gameId, checkFunc );
		openMainTop( true, gameId );
	}
}

function reject( isEnable, accountId, gameId, gameUserId, gamePassword, mailAddress ) {
	if ( !isEnable ) {
		return;
	}

	openMainTop( true, gameId );
}

var isRegistResult = false;
function isRegist( accountId, gameId ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isRegistResult = false;
	ContentLink.isRegist(isRegistCallBack, accountId, gameId);
	return isRegistResult;
}

function isRegistCallBack( bool ) {
	isRegistResult = bool;
}

function registNewUser( accountId, gameId ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isResistedFlg = false;
	ContentLink.registNewUser(registUserCallBack, accountId, gameId );
	return isResistedFlg;
}

function registNewUserPangYa(gender,nickname,birthday) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isResistedFlg = false;
	ContentLink.registNewUserPangYa(registUserPangYaCallBack,gender,nickname,birthday);
	return isResistedFlg;
}

function registUser( accountId, gameId, gameUserId, gamePassword, mailAddress ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isResistedFlg = false;
	ContentLink.registUser(registUserCallBack, accountId, gameId, gameUserId, gamePassword, mailAddress );
	return isResistedFlg;
}

var isResistedFlg = false;
function registUserCallBack(bean) {

	if (bean.result == '000' || bean.result == '001' ) {
		alert( '登録が完了しました。' );
		isResistedFlg = true;
	} else if ( bean.result == '002' ) {
		alert( '既に登録されています。' );
		isResistedFlg = true;
	} else if ( bean.result == '900' ) {
		alert( 'ユーザ登録に失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	} else if ( bean.result == '901' ) {
		alert( '同じメールアドレスで既にユーザ登録がおこなわれています。\n' +
			'登録にお心当たりがない場合は、問い合わせフォームからお問い合わせください。' );
	} else if ( bean.result == '902' ) {
		alert( 'ユーザ登録に失敗しました。\n' +
			'ご入力いただいたゲームのID、パスワードをご確認の上、再度お試しください。' );
	} else if ( bean.result == '930' ) {
		alert( 'このゲームはNow保守中のためユーザ登録がおこなえません。\n' +
			'時間をおいて再度お試しください。' );
	} else {
		alert( 'ユーザ登録に失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	}
}

function registUserPangYaCallBack(bean) {
	if (bean.result == '000' || bean.result == '001' ) {
		alert( '登録が完了しました。' );
		isResistedFlg = true;
	} else if ( bean.result == '002' ) {
		alert( '既に登録されています。' );
		isResistedFlg = true;
	} else if ( bean.result == '900' ) {
		alert( 'ユーザ登録に失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	} else if ( bean.result == '901' ) {
		alert( '同じメールアドレスで既にユーザ登録がおこなわれています。\n' +
			'登録にお心当たりがない場合は、問い合わせフォームからお問い合わせください。' );
	} else if ( bean.result == '902' ) {
		alert( 'ユーザ登録に失敗しました。\n' +
			'ご入力いただいたゲームのID、パスワードをご確認の上、再度お試しください。' );
	} else if ( bean.result == '930' ) {
		alert( 'このゲームはNow保守中のためユーザ登録がおこなえません。\n' +
			'時間をおいて再度お試しください。' );
	} else if ( bean.result == '803' ) {
		alert( 'このニックネームは既に存在するため、ご利用いただけません');
	} else if ( bean.result == '804' ) {
		alert( 'このニックネームはご利用いただけません');
	} else {
		alert( 'ユーザ登録に失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	}
}

function bootGame(accountId, gameId, preFunc) {
	var checkFlg = true;
	if ( preFunc ) {
		checkFlg = preFunc.call();
	}
	if ( checkFlg ) {
		if( gameId == '1501' || gameId == '1502') {
			window.open('/tinierme/startSolid.do?gameId=' + gameId, 'GameStart', 'width=200,height=120,menubar=no');
		} else {
			DWREngine.setTimeout(3000);
			DWREngine.setAsync(false);
			ContentLink.bootGame(bootGameCallBack, accountId, gameId);
		}
	}
}

function bootGameCallBack(bean) {
	if ( bean.result == '000' ) {
		bootUrl = bean.bootUrl;
		bootWindowName = bean.bootWindowName;
		bootOption = bean.bootOption;
		if (bootWindowName == null) {
			bootWindowName = undefined;
		}
		if (bootOption == null) {
			bootOption = undefined;
		}
		window.open(bootUrl, bootWindowName, bootOption);
	} else if ( bean.result == '903' || bean.result == '940' ) {
		alert( 'ゲームへのログインに失敗しました。\n' +
			'問い合わせフォームからお問い合わせください。' );
	} else if ( bean.result == '930' ) {
		alert( 'このゲームはNow保守中のためプレイできません。\n' +
			'時間をおいて再度お試しください。' );
	} else if (bean.result == '941') {
		alert( 'ゲームからユーザ情報が削除されました。\n' +
			'このゲームをプレイしたい場合は再度ユーザ登録をおこなってください。' );
	} else {
		alert( 'ゲームのスタートに失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	}
}

function bootBarvi(accountId, gameId) {
	var isRegistFlg = isRegist( accountId, gameId );
	if ( isRegistFlg == false ) {
		document.location.href='http://www.tinierme.com/tinierme/html/game/mo_mmo/bar/welcome.html';
	} else {
		DWREngine.setTimeout(3000);
		DWREngine.setAsync(false);
		ContentLink.bootGame(bootBarviCallBack, accountId, gameId);
	}
	return isRegistFlg;
}

function bootBarviCallBack(bean) {
	if ( bean.result == '000' ) {
		bootUrl = bean.bootUrl;
		bootWindowName = bean.bootWindowName;
		bootOption = bean.bootOption;
		gameId = bean.gameId;
		if (bootWindowName == null) {
			bootWindowName = undefined;
		}
		if (bootOption == null) {
			bootOption = undefined;
		}
		window.open(bootUrl, '_blank', bootOption);
	} else if ( bean.result == '903' || bean.result == '940' ) {
		alert( 'ゲームへのログインに失敗しました。\n' +
			'問い合わせフォームからお問い合わせください。' );
	} else if ( bean.result == '930' ) {
		alert( 'このゲームはNow保守中のためプレイできません。\n' +
			'時間をおいて再度お試しください。' );
	} else if (bean.result == '941') {
		alert( 'ゲームからユーザ情報が削除されました。\n' +
			'このゲームをプレイしたい場合は再度ユーザ登録をおこなってください。' );
	} else {
		alert( 'ゲームのスタートに失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	}
}


function buyProduct(accountId, gameId, productId) {
	ContentLink.buyProduct(buyProductCallBack, accountId, gameId, productId);
}

function buyProductCallBack(bean) {
	if ( bean.result == '930' ) {
		alert( 'このゲームはNow保守中のため購入できません。\n' +
			'時間をおいて再度お試しください。' );
	} else if (bean.result == '941') {
		alert( 'ゲームからユーザ情報が削除されました。\n' +
			'このゲームをプレイしたい場合は再度ユーザ登録をおこなってください。' );
	} else if (bean.result == '801') {
		alert( '厩舎が作成されていないため、購入できません。');
	} else if (bean.result != '000') {
		alert( '商品の購入に失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	}
}

function productRef(accountId, gameId, productId) {
	ContentLink.productRef(productRefCallBack, accountId, gameId, productId);
}

function productRefCallBack(bean) {
	if (bean.result == '000') {
		alert('所有Quantity:' + bean.amount);
	} else if (bean.result == '930') {
		alert( 'このゲームはNow保守中です。\n' +
			'時間をおいて再度お試しください。' );
	} else if (bean.result == '941') {
		alert( 'ゲームからユーザ情報が削除されました。\n' +
			'このゲームをプレイしたい場合は再度ユーザ登録をおこなってください。');
	} else {
		alert('エラーが返却されました。エラーコード:' + bean.result);
	}
}

function connectRef(gameId) {
	ContentLink.connectRef(connectRefCallBack, gameId);
}

function connectRefCallBack(bean) {
	if (bean.result == '000') {
		alert('正常にI/Fが完了しました。');
		alert('同時接続者数:' + bean.connectNum);
		alert('最大同時接続者数:' + bean.maxConnectNum);
	} else {
		alert('エラーが返却されました。エラーコード:' + bean.result);
	}
}

function nickNameCheckPangYa(nickname)
{
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	ContentLink.nicknameCheckPangYa(nicknameCheckPangYaCallBack,nickname);
}

function startGamePangYa( isEnable, accountId, gameId, registPageUrl, checkFunc ) {
	if ( !isEnable ) {
		return;
	}

	var isRegistFlg = isRegist( accountId, gameId );

	if ( isRegistFlg ) {
		window.open( '/tinierme/startGamePangya.do?gameId='+gameId, 'PangYa','resizable=yes,width=380,height=200' );
	} else {
		window.open( registPageUrl, '_self' );
	}
}

function nicknameCheckPangYaCallBack(bean) {
	if (bean.result == '000') {
		alert( 'このニックネームはご利用可能です' );
	} else if (bean.result == '803') {
		alert( 'このニックネームは既に存在するため、ご利用いただけません' );
	} else if (bean.result == '804') {
		alert( 'このニックネームはご利用いただけません' );
	} else {
		alert( 'ニックネームの重複チェックに失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	}
}

// ハルカ系ゲーム登録
function registNewUserLievo( accountId, gameId ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isResistedFlg = false;
	ContentLinkLievo.registNewUser(registUserCallBack, accountId, gameId );
	return isResistedFlg;
}

// ハルカ系ゲーム起動
function startGameLievo( isEnable, accountId, gameId, worldNo, registPageUrl, checkFunc ) {
	if ( !isEnable ) {
		return;
	}

	var isRegistFlg = isRegist( accountId, gameId );

	if ( isRegistFlg ) {
		bootGameLievo( gameId, worldNo );
	} else {
		window.open( registPageUrl, '_self' );
	}
}

function bootGameLievo( gameId, worldNo ) {

	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);
	ContentLinkLievo.bootGame(bootGameLievoCallBack,gameId,worldNo);
}


function bootGameLievoCallBack(bean) {

	if ( bean.result == '906' ) {
		alert( 'ログインされておりません。\n' +
			'ログインし、再度実行してください。' );
	} else if ( bean.result == '903' || bean.result == '912' || bean.result == '920' ) {
		alert( 'ゲームのスタートに失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	} else {
		var w = window.open('','GameStart','width=480, height=266, menubar=no, toolbar=no, scrollbars=no');
		var d = w.document;
		d.open();
		d.clear();
		d.writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">');
		d.writeln('<html>');
		d.writeln('<head>');
		d.writeln('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
		d.writeln('<meta http-equiv="Content-Script-Type" content="text/javascript">');
		d.writeln('<title>ハルカ起動</title>');
		d.writeln('<script language="JavaScript"><!-- ');
		d.writeln(' function closeWindow() { self.close(); } ');
		d.writeln(' // --></script>');
		d.writeln('</head><body style="margin: 0; padding: 0;" onLoad="setTimeout(closeWindow,10000);" >');
		d.writeln('<iframe src="'+bean.result+'" width="100%" height="200" STYLE="padding:0px;" FRAMEBORDER="0" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="NO"></iframe>');
		d.writeln('</body></html>');
		d.close();
	}

}

// ハルカ系キャラ削除時エラー対応用URL取得処理
function halkaCharaDelErrorUrl( accountId, gameId) {

	var isRegistFlg = isRegist( accountId, gameId );

	if ( isRegistFlg ) {
		DWREngine.setTimeout(3000);
		DWREngine.setAsync(false);
		ContentLinkLievo.getCharacterDeleteErrorURLParam(halkaCharaDelErrorUrlCallBack, gameId);
	} else {
		alert('対応のゲームをプレイされていません。 \n' +
			'ご登録後、再度ご確認ください。');
	}

}

function halkaCharaDelErrorUrlCallBack(bean) {

	var URL = "https://www.lievo.jp/halka/portal/gc/request_pass.asp";

	if ( bean.result == '906' ) {
		alert( 'ログインされておりません。\n' +
			'ログインし、再度実行してください。' );
	} else if ( bean.result == '903' || bean.result == '912' || bean.result == '920' ) {
		alert( 'URL取得に失敗しました。\n' +
			'時間をおいても復旧しない場合は問い合わせフォームからお問い合わせください。' );
	} else {

		URL = URL + "?" + bean.result;

		var w = window.open('','CharaDelError','width=350, height=550, menubar=no, toolbar=no, scrollbars=no');
		var d = w.document;
		d.open();
		d.clear();
		d.writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">');
		d.writeln('<html>');
		d.writeln('<head>');
		d.writeln('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
		d.writeln('<meta http-equiv="Content-Script-Type" content="text/javascript">');
		d.writeln('<title>ハルカサポート</title>');
		d.writeln('</head><body style="margin: 0; padding: 0;" >');
		d.writeln('<iframe src="'+URL+'" width="100%" height="500" STYLE="padding:0px;" FRAMEBORDER="0" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="NO"></iframe>');
		d.writeln('<hr>');
		d.writeln('<div align="center">');
		d.writeln('<input type="button" value="このウィンドウをClose" onclick="javascript:window.close()">');
		d.writeln('</div>');
		d.writeln('</body></html>');
		d.close();
	}

}

// Mgame様ゲーム登録
function registNewUserMgame( accountId, gameId ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isResistedFlg = false;
	ContentLinkMgame.registNewUser(registUserCallBack, accountId, gameId );
	return isResistedFlg;
}

// Mgame様ゲーム起動
function startGameMgame( isEnable, accountId, gameId, registPageUrl, checkFunc ) {
	if ( !isEnable ) {
		return;
	}

	var isRegistFlg = isRegist( accountId, gameId );

	if ( isRegistFlg ) {
		window.open( '/tinierme/startGameMgame.do?gameId='+gameId, 'PangYa','resizable=yes,width=380,height=200' );
	} else {
		window.open( registPageUrl, '_self' );
	}
}

// GamePot様ゲーム登録
function registNewUserGamePot( accountId, gameId, nickname ) {
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	isResistedFlg = false;
	ContentLinkGamePot.registNewUser(registUserPangYaCallBack, accountId, gameId, nickname );
	return isResistedFlg;
}

// GamePot様ニックネームチェック
function nickNameCheck( gameId , nickname )
{
	DWREngine.setTimeout(3000);
	DWREngine.setAsync(false);

	ContentLink.nicknameCheck(nicknameCheckPangYaCallBack, gameId, nickname);
}
