﻿ /**
 * アカウント管理およびトップページにて使用するjs
 * @author Gportal
 * @date    $Date: $
 * @version $Revision: $
 *
 */

// チェックフラグ
var regchkflg = 0;

// ログイン処理フラグ
var loginFlg = false;

// ログイン失敗回数
var loginFailCount = 0;

/** ログイン処理 */

 /**
 * （トップページ）
 * ログイン処理時のアカウント存在チェックを行う。<br>
 * message.js関数使用
 * @param inputvalue 親ウィンドウに返す値
 *
 */
function objrequire(obj) {

	if(loginFlg) {
		return false;
	} else {
		loginFlg = true;
	}

	var accountid = obj.accountID.value;
	var password  = obj.password.value;
	//var resultnum = 0;

	// cookie有効性チェックを実施する
	if(!checkCookie()){
		loginFlg = false;
		return false;
	}

    //require
    if(!objnullchk(accountid)){
      account = new Array('ID');
      alert(getMessage('errors.required', account));
      loginFlg = false;
      return false;
    }

    /*
    「Your ID must be alphanumeric and be within 4 and 12 letters.」でお願いいたします
     ID同様、「パスワードは"半角英数字で"4文字以上16文字以下でご入力ください」でお願いいたします
    */
    resultnum = betweenchk(accountid, 4, 12);
    if((!resultnum == 0) || (!accountid.match(/^[0-9|A-Z|a-z]+$/))){
    	account = new Array('ID','4','12');
    	alert(getMessage('errors.min.to.maxlength', account));
    	loginFlg = false;
        return false;
    }

    resultnum = passwordchk( password );

    // 未入力エラー
    if (resultnum == -1) {
		alert(getMessage('errors.required', new Array('password')));
		loginFlg = false;
		return false;
    }

	DWREngine.setTimeout(1000);		// DWR実行タイムアウト
	DWREngine.setAsync(false);		// 同期的に実行(false で同期)

    // アカウントチェック
    LoginChk.existAccount(callbackExistAccount, accountid, password);

	/**
	 * LoginChk.existAccount(Object, String, String);を実行した結果、存在するアカウントの場合、
	 * パスワードが8文字以上16文字未満でかつ、3種類の文字を使用している場合ログイン処理を、
	 * 使用していない場合は、パスワード再設定画面に遷移させる。
	 *
	 * @param (ログイン可能なアカウント:true / ログイン不可なアカウント:false)
	 */
    function callbackExistAccount(data) {
    	if (document.getElementById("secureImageArea").style.display == "") {
    		if (obj.captcharStr.value == "") {
    			alert(getMessage('errors.invalid.verified', null));
    			obj.captcharStr.value = "";
    			obj.captcharStr.focus();
    			loginFlg = false;
        		return;
    		}

    		if (!validateSecureImage(obj.captcharStr.value)) {
    			showSecureImage(accountid);
        		alert(getMessage('errors.invalid.verified', null));
    			obj.captcharStr.value = "";
    			obj.captcharStr.focus();
    			loginFlg = false;
        		return;
        	}
    	}

    	if (!data) {
    		loginFailCount++;

    		if (loginFailCount >= 5) {
    			document.getElementById("secureImageArea").style.display = "";
    			obj.visibleCaptchar.value = true;
    			obj.captcharStr.value = "";
    			showSecureImage(accountid);
    			showLoginButton();
        	}
    		loginfail();
    		return;
    	}

		if (isPasswordResetting(accountid, password)) {
			document.login.method = "POST";
			document.login.action = "/tinierme/passwordResetting.do";
			document.login.submit();
			return;
		}

		chkIdResult(data);
    }
}

function showSecureImage(userId) {
	var imageName = "";

	DWREngine.setTimeout(1000);
	DWREngine.setAsync(false);

	SecureImageDwr.getSecureImageName(callback, userId);

	function callback(data) {
		imageName = data;
	}

	if (imageName == null || imageName == "") {
		return;
	}

	createSecureImage(imageName);
}

function validateSecureImage(number) {
	var result = false;

	DWREngine.setTimeout(1000);
	DWREngine.setAsync(false);


	SecureImageDwr.validateCaptcha(callback, number);

	function callback(data) {
		result = data;
	}

	return result;
}

/**
 * パスワードの構成から、パスワードの再設定が必要か判定します。
 * <p>
 * 以下の条件が1つ以上一致する場合、再設定必要と判定されます。
 * <ul>
 * <li>ユーザIDとパスワードが同じフレーズ
 * <li>パスワードの文字の組合せが3種類未満
 * <li>パスワードが8文字未満
 * </ul>
 *
 * @param password パスワード
 * @return (再設定が必要:true / 再設定不要:false)
 */
function isPasswordResetting(userId, password) {
	if (password.length < 8)
		return true;
	if (password == userId)
		return true;

    var numeric = false;
    var lowerCaseAlphabet = false;
    var symbol = false;
    var type = 0;

	for (var i = 0; i < password.length; i++) {
    	var word = password.substring(i, i+1);

    	if (word.match("^[0-9]+$")) numeric = true;
    	if (word.match("^[a-z]+$")) lowerCaseAlphabet = true;
    	if (word.match("^[\\!\"'#$%&()*+,./:;<>=?@\\[\\]\\\\^_`{}|~]+$")) symbol = true;
    }

	if (numeric) type++;
	if (lowerCaseAlphabet) type++;
	if (symbol) type++;

    return type < 3;
}

/**
 * FbLogin.do(fb_register.html)のログインボタンの配置を変更します。
 */
function showLoginButton() {
	var btn1 = document.getElementById("loginBtn1");
	var btn2 = document.getElementById("loginBtn2");

	if (btn1 == undefined || btn2 == undefined) {
		return;
	}

	btn1.style.display = "none";
	btn2.style.display = "";
}

 /**
 * （トップページ）
 * ログイン処理時のアカウント(Biglobeユーザ)存在チェックを行う。<br>
 * message.js関数使用
 * @param inputvalue 親ウィンドウに返す値
 *
 */
function objrequireBiglobe(obj){

	if(loginFlg) {
		return false;
	} else {
		loginFlg = true;
	}

	var accountid = obj.accountID.value;
	var password  = obj.password.value;
	//var resultnum = 0;

	// cookie有効性チェックを実施する
	if(!checkCookie()){
		loginFlg = false;
		return false;
	}

    //require
    if(!objnullchk(accountid)){
      account = new Array('ID');
      alert(getMessage('errors.required', account));
      loginFlg = false;
      return false;
    }

    /*
    「IDは"半角英数字で"4文字以上12文字以下でご入力ください」でお願いいたします
     ID同様、「パスワードは"半角英数字で"6文字以上16文字以下でご入力ください」でお願いいたします
    */
    //mintomax
    resultnum = betweenchk(accountid, 4, 12);
    if((!resultnum == 0) || (!accountid.match(/^[0-9|A-Z|a-z]+$/))){
    	account = new Array('ID','4','12');
    	alert(getMessage('errors.min.to.maxlength', account));
    	loginFlg = false;
        return false;
    }
    resultnum = passwordchk( password );
    if ( resultnum == -1 ) {
      pass = new Array('password');
      alert(getMessage('errors.required', pass));
      loginFlg = false;
      return false;
    }
	if ( resultnum == -2 || resultnum == -3 )
	{
		alert( getMessage( 'errors.min.to.maxlength', new Array( 'password', 4, 16 ) ) );
		loginFlg = false;
		return false;
	}
	if ( resultnum == -4 )
	{
		alert( getMessage( 'errors.invalid', new Array( 'password' ) ) );
		loginFlg = false;
		return false;
	}

	DWREngine.setTimeout(1000);		// DWR実行タイムアウト
	DWREngine.setAsync(false);		// 同期的に実行(false で同期)

    // アカウントチェックをする
    LoginChk.existBiglobeAccount(callbackExistAccount, obj.accountID.value, obj.password.value);

    function callbackExistAccount(data) {
		if(data == false){
		    // CroXino連携前アカウントチェックをする
		    AccountType.isCroXinoAccountById(callbackIsCroXinoAccountById, obj.accountID.value, obj.password.value);
		}else{
		    chkIdResult(data);
		}

		function callbackIsCroXinoAccountById(cxUsr){
			if(cxUsr == false){
				loginfail();
			}else{
				setCookieIdSave();
				document.login.method="POST";
				document.login.action="/tinierme/login.do";
				document.login.submit();
			}
		}
    }
}

 /**
 * （トップページ）
 * ログイン処理時のアカウント(Gooユーザ)存在チェックを行う。<br>
 * message.js関数使用
 * @param inputvalue 親ウィンドウに返す値
 *
 */
function objrequireGoo(obj){

	if(loginFlg) {
		return false;
	} else {
		loginFlg = true;
	}

	var accountid = obj.accountID.value;
	var password  = obj.password.value;
	//var resultnum = 0;

	// cookie有効性チェックを実施する gooの場合はcookie不要
	//if(!checkCookie()){
	//	loginFlg = false;
	//	return false;
	//}

    //require
    if(!objnullchk(accountid)){
      account = new Array('ID');
      alert(getMessage('errors.required', account));
      loginFlg = false;
      return false;
    }

    /*
    「IDは"半角英数字で"4文字以上12文字以下でご入力ください」でお願いいたします
     ID同様、「パスワードは"半角英数字で"4文字以上16文字以下でご入力ください」でお願いいたします
    */
    //mintomax
    resultnum = betweenchk(accountid, 4, 12);
    if((!resultnum == 0) || (!accountid.match(/^[0-9|A-Z|a-z]+$/))){
    	account = new Array('ID','4','12');
    	alert(getMessage('errors.min.to.maxlength', account));
    	loginFlg = false;
        return false;
    }
    resultnum = passwordchk( password );
    if ( resultnum == -1 ) {
      pass = new Array('password');
      alert(getMessage('errors.required', pass));
      loginFlg = false;
      return false;
    }
	if ( resultnum == -2 || resultnum == -3 )
	{
		alert( getMessage( 'errors.min.to.maxlength', new Array( 'password', 4, 16 ) ) );
		loginFlg = false;
		return false;
	}
	if ( resultnum == -4 )
	{
		alert( getMessage( 'errors.invalid', new Array( 'password' ) ) );
		loginFlg = false;
		return false;
	}

	DWREngine.setTimeout(1000);		// DWR実行タイムアウト
	DWREngine.setAsync(false);		// 同期的に実行(false で同期)

    // アカウントチェックをする
    LoginChk.existGooAccount(callbackExistAccount, obj.accountID.value, obj.password.value);

    function callbackExistAccount(data) {
		if(data == false){
		    // CroXino連携前アカウントチェックをする
		    AccountType.isCroXinoAccountById(callbackIsCroXinoAccountById, obj.accountID.value, obj.password.value);
		}else{
		    chkIdResult(data);
		}

		function callbackIsCroXinoAccountById(cxUsr){
			if(cxUsr == false){
				loginfail();
			}else{
				setCookieIdSave();
				document.login.method="POST";
				document.login.action="/tinierme/login.do";
				document.login.submit();
			}
		}
    }
}

 /**
 * （トップページ）
 * ログイン処理時のアカウント(Ocnユーザ)存在チェックを行う。<br>
 * message.js関数使用
 * @param inputvalue 親ウィンドウに返す値
 *
 */
function objrequireOcn(obj){

	if(loginFlg) {
		return false;
	} else {
		loginFlg = true;
	}

	var accountid = obj.accountID.value;
	var password  = obj.password.value;
	//var resultnum = 0;

	// cookie有効性チェックを実施する gooの場合はcookie不要
	//if(!checkCookie()){
	//	loginFlg = false;
	//	return false;
	//}

    //require
    if(!objnullchk(accountid)){
      account = new Array('ID');
      alert(getMessage('errors.required', account));
      loginFlg = false;
      return false;
    }

    /*
    「IDは"半角英数字で"4文字以上12文字以下でご入力ください」でお願いいたします
     ID同様、「パスワードは"半角英数字で"4文字以上16文字以下でご入力ください」でお願いいたします
    */
    //mintomax
    resultnum = betweenchk(accountid, 4, 12);
    if((!resultnum == 0) || (!accountid.match(/^[0-9|A-Z|a-z]+$/))){
    	account = new Array('ID','4','12');
    	alert(getMessage('errors.min.to.maxlength', account));
    	loginFlg = false;
        return false;
    }
    resultnum = passwordchk( password );
    if ( resultnum == -1 ) {
      pass = new Array('password');
      alert(getMessage('errors.required', pass));
      loginFlg = false;
      return false;
    }
	if ( resultnum == -2 || resultnum == -3 )
	{
		alert( getMessage( 'errors.min.to.maxlength', new Array( 'password', 4, 16 ) ) );
		loginFlg = false;
		return false;
	}
	if ( resultnum == -4 )
	{
		alert( getMessage( 'errors.invalid', new Array( 'password' ) ) );
		loginFlg = false;
		return false;
	}

	DWREngine.setTimeout(1000);		// DWR実行タイムアウト
	DWREngine.setAsync(false);		// 同期的に実行(false で同期)

    // アカウントチェックをする
    LoginChk.existOcnAccount(callbackExistAccount, obj.accountID.value, obj.password.value);

    function callbackExistAccount(data) {
		if(data == false){
		    // CroXino連携前アカウントチェックをする
		    AccountType.isCroXinoAccountById(callbackIsCroXinoAccountById, obj.accountID.value, obj.password.value);
		}else{
		    chkIdResult(data);
		}

		function callbackIsCroXinoAccountById(cxUsr){
			if(cxUsr == false){
				loginfail();
			}else{
				setCookieIdSave();
				document.login.method="POST";
				document.login.action="/tinierme/login.do";
				document.login.submit();
			}
		}
    }
}

 /**
 * （トップページ）
 * ログイン処理時に使用する<br>
 * アカウントチェックのコールバック関数
 * @param data アカウントチェック関数からの戻り値
 *
 */
function chkIdResult(data) {
//明示的に変更
var login = document.getElementById('login');
  if(data == false){
    loginfail();
  }else{

	document.login.timezoneOffset.value = (new Date().getTimezoneOffset());

	setCookieIdSave();
    login.method="POST";
    login.action="https://www.tinierme.com/tinierme/login.do";
//    login.action="http://www.tinierme.com/tinierme/login.do";
    login.submit();
  }
}

 /**
 * （トップページ）
 * ログイン処理時に使用する<br>
 * 入力がされていないかどうかをチェックする
 * @param data 入力されたデータ
 *
 */
function objnullchk(data){
  var result = true;
  if(data == null){
    result = false;
  }
  if(data == ""){
    result = false;
  }
  return result;
}

 /**
 * （トップページ）
 * ログイン処理時に使用する<br>
 * ログインが出来ない場合のエラーMessage処理
 *
 */
function loginfail(){
  alert('Login failed. You have entered the wrong ID or password.');
  loginFlg = false;
  return false;
}
/*****************/

 /**
 * （アカウント管理）
 * Modalダイアログの時ウィンドウをClose
 * @param inputvalue 親ウィンドウに返す値
 *
 */
    function winclose(inputvalue){
        returnValue = inputvalue;
        self.window.close();
    }

 /**
 * （アカウント管理）
 * アカウントないし、ニックネームの
 * 重複チェック用Modalダイアログをオープンする
 * @param chkflg 0: アカウントチェック 1: ニックネームチェック
 *
 */
function registaccount(obj, chkflg){
    var result = "";

    name = 'parent';
    if(chkflg == 0){
        // アカウントチェック
        result = newWindowModal('/tinierme/acchk.do?id='+obj.value,name,330,310,'toolbar=no,location=no,status=no,menubar=no,scrollbars=no');
    }else{
        // ニックネームチェック
        result = newWindowModal('/tinierme/nickchk.do?id='+obj.value,name,330,310,'toolbar=no,location=no,status=no,menubar=no,scrollbars=no');
    }

    if(result != undefined){
        // 結果を入力欄に出力
        obj.value = result;
    }
}

 /**
 * （アカウント管理）
 * アカウントないし、ニックネームの
 * 重複チェックを行う
 * @param obj フォームオブジェクト名(<form name="フォーム名">)
 * @param chkflg チェック方法 0: アカウントチェック 1:ニックネーム
 *
 */
function accountChk(objvalue, chkflg)
{
    if(doublePushChk(document.chkform.SUBSW.value) == '1'){
        alert('This action is Canceled. Please Try again.');
        return false;
    }
    document.chkform.SUBSW.value = '1';

    if(chkflg == 0){
        // 数値以外が入力されていないか
        if(!(objvalue.match(/^[0-9|A-Z|a-z]+$/))){
			alert("Your ID must be within 4 and 12 numbers or letters.");
		}else if( (objvalue.length < 4) | (objvalue.length > 12) ){
			alert("Your ID must be within 4 and 12 numbers or letters.");
        }else{
            // idが存在するか
            //LoginChk.idChk(CallBackAccount,objvalue, chkflg);
            LoginChk.existId(CallBackAccount,objvalue, chkflg);
        }
    }else{
	    var dmy,i,count=0;

	    count = StrLen(objvalue);
		if( (count < 4) | (count > 16) ){
			alert("Your Nickname must be within 4 and 16 characters.");
		}else if(objvalue == "ゲスト" || objvalue == "Account Closed"){
			alert("Your Nickname contains characters that cannot be used.");
        }else{
	        // ニックネームが存在するか
	        LoginChk.existId(CallBackNickname,objvalue, chkflg);
        }
    }
    document.chkform.SUBSW.value = '0';
}

// 文字列長を返す関数（文字コードの「~」(0x007E)より後の文字を全て2バイトとみなす）
// UTF-8でもShift-JISでも対応
function StrLen(str)
{
    var ct;
    var size = 0;

    for(ct = 0; ct < str.length; ct++) {
        var c = str.charCodeAt(ct);
        if(c >= 128){
            size++;
        }
        size++;
    }
    return size;
}


 /**
 * （アカウント管理）
 * submitボタン等の2重押し防止チェック
 * hidden用フラグの戻り値により判定結果を返す
 * @param obj hidden用フラグ
 * @return 判定後の戻り値 1:実行中 0:停止中
 */
function doublePushChk(obj){
    if(obj == 1){
        return 1;
    }else{
        return 0;
    }
}

 /**
 * （アカウント管理）
 * 重複チェック後のアカウント用コールバック関数
 * 戻った結果により表示する内容を書き換える
 * @param obj フォームオブジェクト名(<form name="フォーム名">)
 * @param data コールバック後の結果
 *
 */
    function CallBackAccount(data){
        if(data == 0){
            // 正常
            document.getElementById("checking").style.display = "none";
            document.getElementById("displayid").innerHTML = chkform.id.value;
            document.getElementById("ok").style.display = "block";
        }else{
            // 異常
            document.getElementById("checking").style.display = "block";
            document.getElementById("default").style.display = "none";
            document.getElementById("warning").style.display = "block";
            document.getElementById("ok").style.display = "none";
        }
    }

 /**
 * （アカウント管理）
 * 重複チェック後のアカウント用コールバック関数
 * 戻った結果により表示する内容を書き換える
 * @param data コールバック後の結果
 *
 */
function CallBackNickname(data){
  	if(data == 0){
   		BadWords.isBad(callback_isBad, chkform.id.value);
   	}else{
        // 異常
   		document.getElementById('error_msg').innerHTML = 'The Nickname you\'ve entered is either already in use or contains invalid characters.';
        document.getElementById("checking").style.display = "block";
        document.getElementById("default").style.display = "none";
        document.getElementById("warning").style.display = "block";
        document.getElementById("ok").style.display = "none";
    }
}
function callback_isBad(data){
  	if(data=='notbad'){
    	// 正常
        document.getElementById("checking").style.display = "none";
        document.getElementById("displayid").innerHTML = chkform.id.value;
        document.getElementById("ok").style.display = "block";
    }else{
        // 異常
    	document.getElementById('error_msg').innerHTML = 'The Nickname contains forbidden words.';
        document.getElementById("checking").style.display = "block";
        document.getElementById("default").style.display = "none";
        document.getElementById("warning").style.display = "block";
        document.getElementById("ok").style.display = "none";
    }
}
/**
 * （アカウント管理）
 * 各入力チェックを行い正常であれば、submit()を実行する
 * @param obj フォームオブジェクト
 *
 */
function submitChk(obj){
	DWREngine.setTimeout(1000);		// DWR実行タイムアウト
	DWREngine.setAsync(false);		// 同期的に実行(false で同期)

	if(doublePushChk(obj.SUBSW.value) == '1'){
		//alert('実行中です');
		alert('Processing');
		obj.SUBSW.value = '0';
		return false;
	}
	obj.SUBSW.value = '1';

	// エラーカウント初期化
	errcnt = 0;

	// IDチェック
	obj.user_id.value = obj.user_id.value.toLowerCase();
	if(!objnullchk(obj.user_id.value)){
		//alert('入力されていない項目があります');
		alert('Please fill in all required fields.');
		obj.SUBSW.value = '0';
        return false;

    }else if(betweenchk(obj.user_id.value, 4, 12) != 0 || (!obj.user_id.value.match(/^[0-9|A-Z|a-z]+$/))){
    	account = new Array('ID','4','12');
    	alert(getMessage('errors.min.to.maxlength', account));
        obj.SUBSW.value = '0';
        return false;
    }

    // ニックネームチェック
	retnic = nicknamechk(obj.nickname.value);
	if(retnic < 0){
		// 未入力
		if(retnic == -1){
			errmsg = '入力されていない項目があります';
		// 入力文字数不足
		}else if(retnic == -2){
	    	nickname = new Array('ニックネーム','4','16');
	    	errmsg = getMessage('errors.minlength', nickname);
		// 入力文字数超過
		}else if(retnic == -3){
	    	//errmsg = 'ニックネームは入力可能文字数を超過しています';
			errmsg = 'Your Nickname contains more characters than the maximum allowed.';
		// 使用禁止文字(カンマ)
		}else if(retnic == -4){
			//errmsg = '「，(カンマ)」は使用できません';
			errmsg = 'Comma\'s (\') cannot be used.';
		// 禁止ワード
		}else if(retnic == -5){
			//errmsg = 'ニックネームに使用禁止文字列が含まれています';
			errmsg = 'Your Nickname contains forbidden words.';
		// 前後スペース検知
		}else if(retnic == -6){
			//errmsg = 'ニックネームの前後にはスペースは使用できません';
			errmsg = 'Spaces cannot be used before or after your Nickname.';
		// その他禁止文字
		}else if(retnic == -7){
			//errmsg = 'ニックネームに使用禁止文字列が含まれています';
			errmsg = 'Your Nickname contains forbidden words.';
		}
		alert(errmsg);
        obj.SUBSW.value = '0';
        return false;
	}

	// パスワードチェック
	obj.password.value = obj.password.value.toLowerCase();
	retpw = passwordchk(obj.password.value);
	if(retpw < 0){
		// 未入力
		if(retpw == -1){
	    	//errmsg = '希望するパスワードを入力してください';
			errmsg = 'Please enter a password of your choice.';
		// 入力文字数不足
		}else if(retpw == -2){
	    	password = new Array('password','6','16');
	    	errmsg = getMessage('errors.minlength', password);
		// 入力文字数超過
		}else if(retpw == -3){
	    	//errmsg = 'パスワードは入力可能文字数を超過しています';
			errmsg = 'Your password contains more characters than the maximum allowed.';
		// 使用禁止文字
		}else if(retpw == -4){
	    	//errmsg = 'パスワードでは' + obj.password.value + 'は使用禁止文字です';
			errmsg = 'The use of the word ' + obj.password.value + ' is forbidden.';
		}
		alert(errmsg);
        obj.SUBSW.value = '0';
        return false;
	}

	// 確認用パスワードチェック
	obj.password_confilm.value = obj.password_confilm.value.toLowerCase();
	// パスワードの入力内容が双方とも同じか
	if(retpw == 0){
		if (obj.password.value != obj.password_confilm.value){
			//alert('違うパスワードが入力されています');
			alert('A different password has been entered in the Confirm Password field.');
			obj.SUBSW.value = '0';
			return false;
		}
	}

    var sexualRadiochk = 0;
    // 性別がチェックされているか
     if (obj.sex.length) {
        for (i = 0; i < obj.sex.length; i++) {
            if (obj.sex[i].checked) {
                sexualRadiochk = 1;
            }
        }
    } else {
        if (obj.sex.checked) {
            sexualRadiochk = 1;
        }
    }

    // 性別がチェックされているか
    if(sexualRadiochk == 0){
        //alert('性別が選択されてません');
		alert('You have not selected a Gender.');
        obj.SUBSW.value = '0';
        return false;
    }

    // idの重複が存在するか
    LoginChk.existId(CallBackReg,obj.user_id.value, 0);
    if (regchkflg == 1) {
        //alert('すでにidが登録されています');
		alert('That ID has already been selected.');
        regchkflg = 0;
        obj.SUBSW.value = '0';
        return false;
    }
    // ニックネームの重複が存在するか
    LoginChk.existId(CallBackRegNick,obj.nickname.value, 1);
    if (regchkflg == 3 || obj.nickname.value == "ゲスト"|| obj.nickname.value == "Account Closed") {
		alert('That Nickname has already been selected.');
        regchkflg = 0;
        obj.SUBSW.value = '0';
        return false;
    }

	// メールアドレスチェック
	retmail = mailaddchk(obj.mail_address.value);
	if(retmail < 0){
		// 未入力
		if(retmail == -1){
	        //errmsg = 'ご利用のメールアドレスを入力してください';
			errmsg = 'Please register your E-mail address.';
		// 文字数超過
		}else if(retmail == -2){
			//errmsg = 'メールアドレスは入力可能文字数を超過しています';
	    	errmsg = 'Your E-mail address contains more characters than the maximum allowed.';
		// 禁止文字列
		}else if(retmail == -3){
			//errmsg = '「，(カンマ)」は使用できません';
			errmsg = 'Comma\'s (\') cannot be used.';
		// 不正メールアドレス
		}else if(retmail == -4){
	    	//errmsg = 'メールアドレスが不正です(「@」以降も記載してください)';
			errmsg = 'Invalid E-mail address. \nAn E-mail address must contain an \"@\"';
		// 携帯メールアドレス
		}else if(retmail == -5){
	    	//errmsg = 'ケータイのメールアドレスは使用できません';
			errmsg = 'A mobile phone E-mail address cannot be used.';
		// 前後スペース検知
		}else if(retmail == -6){
			//errmsg = 'メールアドレスの前後にはスペースは使用できません';
			errmsg = 'Spaces cannot be used before or after your E-mail address.';
		// その他使用禁止文字
		}else if(retmail == -7){
			//errmsg = 'メールアドレスに使用禁止文字が含まれています';
			errmsg = 'Your E-mail address contains forbidden words.';
		}
		alert(errmsg);
        obj.SUBSW.value = '0';
        return false;
	}

    // 確認用メールアドレスが規定文字列長か
	retmailconf = mailaddchk(obj.mail_address_confilm.value);
	if(retmailconf < 0){
		// 未入力
		if(retmailconf == -1){
	        //errmsg = 'ご利用のメールアドレスをご入力ください';
			errmsg = 'Please register your E-mail address.';
		// 文字数超過
		}else if(retmailconf == -2){
	    	//errmsg = 'メールアドレスは入力可能文字数を超過しています';
			errmsg = 'Your E-mail address contains more characters than the maximum allowed.';
		// 禁止文字列
		}else if(retmailconf == -3){
			//errmsg = '「，(カンマ)」は使用できません';
			errmsg = 'Comma\'s (\') cannot be used.';
		// 不正メールアドレス
		}else if(retmailconf == -4){
			//errmsg = 'メールアドレスが不正です(「@」以降も記載してください)';
	    	errmsg = 'Invalid E-mail address. \nAn E-mail address must contain an \"@\".';
		// 携帯メールアドレス
		}else if(retmailconf == -5){
	    	//errmsg = 'ケータイのメールアドレスは使用できません';
			errmsg = 'A mobile phone E-mail address cannot be used.';
		// 前後スペース検知
		}else if(retmailconf == -6){
			//errmsg = 'メールアドレスの前後にはスペースは使用できません';
			errmsg = 'Spaces cannot be used before or after your E-mail address.';
		// その他使用禁止文字
		}else if(retmailconf == -7){
			//errmsg = 'メールアドレスに使用禁止文字が含まれています';
			errmsg = 'Your E-mail address contains forbidden words.';
		}
		alert(errmsg);
        obj.SUBSW.value = '0';
        return false;
	}

 /*
    if(betweenchk(obj.mail_address.value, -1, 128) != 0){
        alert('メールアドレス文字列長エラー');
        obj.SUBSW.value = '0';
        return false;
    }
    // メールアドレスが規定文字列長か
    if(betweenchk(obj.mail_address_confilm.value, -1, 128) != 0){
        alert('メールアドレス文字列長エラー');
        obj.SUBSW.value = '0';
        return false;
    }
*/

    // メールアドレスの入力内容が双方とも同じか
	// メールアドレスおよび確認用メールアドレスが正常時に判定
    if (retmail == 0 && retmailconf == 0) {
	    if (obj.mail_address.value != obj.mail_address_confilm.value){
	        //alert('違うメールアドレスが入力されています');
			alert('A different E-mail address has been entered.');
	        obj.SUBSW.value = '0';
	        return false;
	    }
	}
    // 重複するメールアドレスが存在するか
    LoginChk.existId(CallBackRegMail,obj.mail_address.value, 2);
    if (regchkflg == 2) {
        //alert('すでに登録されているメールアドレスです');
		alert('This E-mail address has already been registered.');
        regchkflg = 0;
        obj.SUBSW.value = '0';
        return false;
    }

    var agreeRadiochk = 0;
    // Terms of Useがチェックされているか
     if (obj.agree_flg.length) {
        for (i = 0; i < obj.agree_flg.length; i++) {
            if (obj.agree_flg[i].checked) {
                agreeRadiochk = 1;
                if(i == 1){
			        //alert('同意が必要です');
					alert('Your agreement is necessary to proceed.');
			        obj.SUBSW.value = '0';
			        return false;
                }
            }
        }
    } else {
        if (obj.agree_flg.checked) {
            agreeRadiochk = 1;
        }
    }

    // Terms of Useがチェックされているか
    if(agreeRadiochk == 0){
        //alert('Terms of Useのチェックがありません');
		alert('The Terms of Use has not been checked.');
        obj.SUBSW.value = '0';
        return false;
    }

    obj.SUBSW.value = '0';

    // フォーム送信する
    if(regchkflg == 0){
    	// エラーがなければ送信
    	obj.submit();
    }
}

 /**
 * （アカウント管理）
 * 重複チェック後のアカウント用コールバック関数
 * 戻った結果を判定し、その結果をグローバル変数に持たせる
 * 0正常 1失敗
 * @param data コールバック後の結果
 *
 */

function CallBackReg(data){
    if(data == true){
        regchkflg = 1;
    }else{
        regchkflg = 0;
    }
}

 /**
 * （アカウント管理）
 * メールアドレス重複チェック後のアカウント用コールバック関数
 * 戻った結果を判定し、その結果をグローバル変数に持たせる
 * 0正常 1失敗
 * @param data コールバック後の結果
 *
 */

function CallBackRegMail(data){
    if(data == true){
        regchkflg = 2;
    }else{
        regchkflg = 0;
    }
}

 /**
 * （アカウント管理）
 * ニックネーム重複チェック後のアカウント用コールバック関数
 * 戻った結果を判定し、その結果をグローバル変数に持たせる
 * @param data コールバック後の結果
 *
 */

function CallBackRegNick(data){
    if(data == true){
        regchkflg = 3;
    }else{
        regchkflg = 0;
    }
}

 /**
 * （アカウント管理）
 * 指定したURLへ、submit()を実行する
 * @param URL 遷移先
 * @param obj フォームオブジェクト
 */
function submitJump(URL, obj){
    // 指定したURLへアクション先を設定
    obj.action = URL;
    obj.submit();
}

function validateSubmitForget( userId ) {
    if( userId.isEmpty() ){
        alert( getMessage( 'errors.required', new Array( 'TinierMe ID' ) ) );
        return false;
    }

    if ( betweenchk( userId, 4, 12 ) != 0 || !userId.match(/^[0-9|a-z]+$/) ) {
		alert( getMessage( 'errors.min.to.maxlength', new Array( 'TinierMe ID', 4, 12 ) ) );
		return false;
	}

	return true;
}

/**
 * E-mail入力チェック
 */
function validateSubmitForgetID( mailAddress ) {
	if( mailAddress.isEmpty() ){
		alert( getMessage( 'errors.required', new Array( 'Email Address' ) ) );
		return false;
	}

	if(!mailAddress.match(/^\S+@\S+\.\S+$/)) {
		//alert( "メールアドレスが不正です。" );
		alert( "This E-mail address cannot be used." );
		return false;
	}

	return true;
}

function submitForget( isEnable, url, param, btnflg) {
	if ( !isEnable ) {
		return;
	}

	var form = document.createElement('form');
	form.method = 'POST';
	form.action = url;

	input = document.createElement('input');


	if(btnflg == 0) {
		input.name = 'mailAddress';
		input.type = 'hidden';
		input.value = param;
	}

	if(btnflg == 1) {
		input.name = 'userId';
		input.type = 'hidden';
		input.value = param;
	}

	form.appendChild(input);

	document.getElementsByTagName('body')[0].appendChild(form);
    form.submit();
}


function submitForgetID( isEnable, url, mail, form) {
	if ( !isEnable ) {
		return;
	}

//	var form = document.createElement('form');
	form.method = 'POST';
	form.action = url;

	input = document.createElement('input');
	input.name = 'mailAddress';
	input.type = 'hidden';
	input.value = mailAddress;
	form.appendChild(input);

	document.appendChild(form);
    form.submit();
}


/**
 * ログイン用パスワードチェック
 * @author aida
 * @param inString 入力文字
 */
function passwordchk(inString) {
	if (!objnullchk(inString)) {
    	// 未入力
		return -1;
	}

	resultnum = betweenchk(inString, 4, 16);

	if (resultnum == -1) {
		// 入力文字数不足
		return -2;
	}
	if (resultnum == -2) {
		// 入力文字数超過
		return -3;
	}
    if (!inString.match(/^[-0-9a-z\!\"\'\#\$\%\&\(\)\*\+\,\.\/\:\;\<\>\=\?\@\[\]\\\^\_\`\{\}\|\~]+$/)) {
		// 入力禁止文字
		return -4;
	}

	return 0;
}

/**
 * 新規会員登録用ニックネームチェック
 * @author aida
 * @param inString 入力文字
 */
function nicknamechk(inString){

	if(!objnullchk(inString)){
		// 未入力
		return -1;
	}

	// 入力文字数チェック
	resultnum = betweenchk(inString, 4, 16);
	if(resultnum == -1){
		// 文字数不足
		return -2;
	}else if(resultnum == -2){
		// 文字数超過
		return -3;
	}

/*
	// 入力禁止文字チェック1
	if(inString == "ゲスト"){
		return -4;
    }
*/

	// 入力禁止文字チェック2(カンマ検知)
	ngString=",";
	for (i=0;i<inString.length;i++){
		if(ngString.indexOf(inString.charAt(i),0)>=0){
			return -4;
		}
	}

	// 入力禁止文字チェック3(禁止文字列検知)
	NG.checkBadLanguage(CallBackReg, inString);
	if(regchkflg == 0){
	}else{
		return -5;
	}

	// 入力禁止文字チェック5(前後のスペースを検知)
	if((inString.match(/^ /)) || (inString.match(/ $/))
	|| (inString.match(/^　/)) || (inString.match(/　$/))){
		return -6;
	}

	// 入力禁止文字チェック4(その他使用禁止文字検知)
	ngString="':;\"";
	for (i=0;i<inString.length;i++){
		if(ngString.indexOf(inString.charAt(i),0)>=0){
			return -7;
		}
	}
	return 0;
}

/**
 * 新規会員登録用メールアドレスチェック
 * @author aida
 * @param inString 入力文字
 */
function mailaddchk(inString){

	// 未入力
	if(!objnullchk(inString)){
		return -1;
	}

	// 入力文字超過
	resultnum = betweenchk(inString, -1, 128);
	if(resultnum == -2){
		return -2;
    }

	// カンマチェック
	ngString = ",";
	for (i=0;i<inString.length;i++){
		if(ngString.indexOf(inString.charAt(i),0)==0){
			return -3;
		}
	}

	// メールアドレスチェック
	var cnt = 0;
	ngString = "@";
	for (i=0;i<inString.length;i++){
		if(ngString.indexOf(inString.charAt(i),0)==0){
			cnt = cnt + 1;
		}
	}
	// 検知結果
	if(cnt == 0){
		return -4;
	}

    // 携帯メールアドレスチェック
    // ・EZWeb
	add_ezweb = inString.match(/.@.*ezweb.ne.jp.*/);
	// ・ドコモ
	add_docomo = inString.match(/.@.*docomo.ne.jp.*/);
	// ・ボーダフォン
	add_voda = inString.match(/.@.*vodafone.ne.jp.*/);
	// ・ソフトバンク
	add_softbank = inString.match(/.@.*softbank.ne.jp.*/);
	// ・PHS
	add_phs = inString.match(/.@.*pdx.ne.jp.*/);

	if(add_ezweb || add_docomo || add_voda || add_phs || add_softbank){
		return -5;
    }

	// 入力禁止文字チェック1(前後のスペースを検知)
	if((inString.match(/^ /)) || (inString.match(/ $/))
	|| (inString.match(/^　/)) || (inString.match(/　$/))){
		return -6;
	}

	// 入力禁止文字チェック2
	if((inString.match( /[^a-zA-Z0-9@\.\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~]+/))){
		return -7;
	}

	return 0;
}


function getCookieIdSave(){
	var tmp = document.cookie + ";";
	tempindex = tmp.indexOf("atgamesIdSave", 0);
	if(tempindex != -1){
		tmp = tmp.substring(tempindex, tmp.length);
		start = tmp.indexOf("=", 0) + 1;
		end = tmp.indexOf(";", start);
		return(unescape(tmp.substring(start, end)));
	}
	return null;
}

function setCookieIdSave(){

	var idSaveFlg = null;
	if(document.getElementById("idSaveCheck") != null){
		idSaveFlg = document.getElementById("idSaveCheck").checked;
	}

	if(idSaveFlg){
		var value = document.getElementById('accountID').value;
		var tmp = "atgamesIdSave" + "=" + escape(value) + ";";
		tempIdSaveDate = new Date();
		tempIdSaveDate.setTime(tempIdSaveDate.getTime() + 1000 * 60 * 60 * 24 * 30);
		document.cookie = tmp + " expires=" + tempIdSaveDate.toGMTString() + "domain=www.tinierme.com;";
	} else {
		clearCookieCommon("atgamesIdSave");
	}

}