// prepared to use Global object(LOGIN)
var LOGIN = {};

// var requirePasswordChange;
LOGIN.userinfo_sid;
LOGIN.userInfo_userName;
LOGIN.optionList = [];

LOGIN.force_pw_change_on_login;
LOGIN.force_pw_change_periodically;
LOGIN.login_error_flag = false;
LOGIN.login_errorMessage = "";

LOGIN.timeWaitSplashScreen = 2000;// wait splash screen 2 second

// Load login Info
LOGIN.loadLoginInfo = function() {
	$('#chkRemember').attr('checked', 'checked');
	if (ClientData.userInfo_accountPath() != null) {
		$('#txtAccPath').val(ClientData.userInfo_accountPath());
	}

	if (ClientData.userInfo_loginId() != null) {
		$('#txtAccId').val(ClientData.userInfo_loginId());
	}
};

// Initial Screen
LOGIN.initialScreen = function() {
	if (ClientData.userInfo_rememberLogin()) {
		LOGIN.loadLoginInfo();
	} else {
		$('#txtAccPath').val("");
		$('#txtAccId').val("");
	}

};

// check Save Login Info
LOGIN.saveLoginInfo = function() {

	var lang = I18N.getCurrentLanguage();
	// load language
	I18N.changeLanguage(lang);

	var accountPath, loginId, password;
	var chkRemember = $('#chkRemember').attr('checked');
	accountPath = $('#txtAccPath').val();
	loginId = $('#txtAccId').val();
	password = $('#txtPassword').val();

	// save user data to local storage
	var date = new Date();
	ClientData.userInfo_accountPath(accountPath);
	ClientData.userInfo_loginId(loginId);
	ClientData.userInfo_accountPath_session(accountPath);
	ClientData.userInfo_loginId_session(loginId);
	ClientData.userInfo_userName(LOGIN.userInfo_userName);
	if (chkRemember == 'checked') {
		ClientData.userInfo_rememberLogin(true);
	} else {
		ClientData.userInfo_rememberLogin(false);
	}

	ClientData.userInfo_lastLoginTime(date.jpDateTimeString());
	ClientData.userInfo_sid_local(LOGIN.userinfo_sid);
	// save sid for backup
	ClientData.userInfo_sid_local_bak(LOGIN.userinfo_sid);

	LOGIN.saveServiceUserOption();
	// reset to paging function
	ClientData.JumpQueue([]);
	ClientData.IsJumpBack(false);

};

// Check validation
LOGIN.checkValidation = function() {

	var accountPath = $('#txtAccPath').val();
	var loginId = $('#txtAccId').val();
	var password = $('#txtPassword').val();
	var msgError = $('#main-error-message');
	if (!ValidationUtil.CheckRequiredForText(accountPath)) {
		LOGIN.login_errorMessage = "";
		msgError.html(I18N.i18nText('msgLoginEmpty'));
		msgError.attr('lang', 'msgLoginEmpty');
		msgError.show();
		return false;
	} else if (!ValidationUtil.CheckRequiredForText(loginId)) {
		LOGIN.login_errorMessage = "";
		msgError.html(I18N.i18nText('msgLoginEmpty'));
		msgError.attr('lang', 'msgLoginEmpty');
		msgError.show();
		return false;
	} else if (!ValidationUtil.CheckRequiredForText(password)) {
		LOGIN.login_errorMessage = "";
		msgError.html(I18N.i18nText('msgLoginEmpty'));
		msgError.attr('lang', 'msgLoginEmpty');
		msgError.show();
		return false;
	} else {
		return true;
	}
};

// Check Dialog validation
LOGIN.checkDialogValidation = function() {
	var currentPass = $('#txtCurrentPass').val();
	var newPass = $('#txtNewPass').val();
	var confirmPass = $('#txtConfirmNew').val();
	var msgError = $('#dialog-error-message');

	if (!ValidationUtil.CheckRequiredForText(currentPass)) {
		LOGIN.login_errorMessage = "";
		msgError.html(I18N.i18nText('msgPwdEmpty'));
		msgError.attr('lang', 'msgPwdEmpty');
		msgError.show();
		return false;
	} else if (!ValidationUtil.CheckRequiredForText(newPass)) {
		LOGIN.login_errorMessage = "";
		msgError.html(I18N.i18nText('msgPwdEmpty'));
		msgError.attr('lang', 'msgPwdEmpty');
		msgError.show();
		return false;
	} else {
		if (newPass != confirmPass) {
			LOGIN.login_errorMessage = "";
			msgError.html(I18N.i18nText('msgPwdNotMatch'));
			msgError.attr('lang', 'msgPwdNotMatch');
			msgError.show();
			return false;
		} else if (!ValidationUtil.CheckMinLengthForByte(newPass, 6)) {
			LOGIN.login_errorMessage = "";
			msgError.html(I18N.i18nText('msgInvaildLength'));
			msgError.attr('lang', 'msgInvaildLength');
			msgError.show();
			return false;
		} else if (!ValidationUtil.CheckMaxLengthForByte(newPass, 16)) {
			LOGIN.login_errorMessage = "";
			msgError.html(I18N.i18nText('msgInvaildLength'));
			msgError.attr('lang', 'msgInvaildLength');
			msgError.show();
			return false;
		} else if (ValidationUtil.HasSeqChar(newPass, 3)) {
			LOGIN.login_errorMessage = "";
			msgError.html(I18N.i18nText('msgHasSeqChar'));
			msgError.attr('lang', 'msgHasSeqChar');
			msgError.show();
			return false;
		} else if (ValidationUtil.ContainSameSeqChar(newPass, currentPass, 4)) {
			LOGIN.login_errorMessage = "";
			msgError.html(I18N.i18nText('msgContainSameSeqChar'));
			msgError.attr('lang', 'msgContainSameSeqChar');
			msgError.show();
			return false;
		} else {
			return true;
		}
	}
};

// Login Process
LOGIN.processLogin = function() {
	var accountPath = "";
	var loginId = "";
	var password = "";

	loginId = $('#txtAccId').val();

	password = $('#txtPassword').val();

	accountPath = $('#txtAccPath').val();
	var requireChangePassword = 0;
	var skipPwdDate;

	var params = {
		previousSid : '',
		loginId : loginId,
		password : password,
		urlpath : accountPath
	};

	// Set sid for login, this will be checked authoring 2 sessions
	if (ClientData.userInfo_sid_local()) {
		params.previousSid = ClientData.userInfo_sid_local();
	}

	// Get url to login
	url = CONSTANT.URL.CMS.BASE + accountPath + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.LOGIN;

	COMMON.cmsAjax(url, params, true, function(data) {
		LOGIN.userinfo_sid = data.sid;
		LOGIN.userInfo_userName = data.userName;
		LOGIN.optionList = data.serviceOptionList;

		LOGIN.getServiceOptionList();

		if (data.result == 'success') {
			// Save retrieved info
			LOGIN.saveLoginInfo();
			// set number new push message to 0
			ClientData.pushInfo_newMsgNumber(0);

			$('#main-error-message').css('display', 'none');

			console.log("data.requirePasswordChange:" + data.requirePasswordChange);
			COMMON.closeLoading();

			if (data.requirePasswordChange == 0) {
				ClientData.userInfo_sid(ClientData.userInfo_sid_local());

				// move to home.html page
				COMMON.avwScreenMove("index.html");

			} else if (data.requirePasswordChange == 1) {

				if (LOGIN.force_pw_change_on_login == 2) { // force to change
															// password
					LOGIN.OpenChangePasswordDialog();
					$(".ui-dialog-titlebar").hide();
					$('#btnSkip').hide();
					$("#txtPwdRemind").css('visibility', 'hidden');
				} else if (LOGIN.force_pw_change_on_login == 1) { // recommend
																	// to change
																	// password

					// Check 30 days
					skipPwdDate = ClientData.userInfo_pwdSkipDt();

					if (skipPwdDate == null || skipPwdDate == 'undefined') {
						LOGIN.OpenChangePasswordDialog();
						$('#btnSkip').show();
						$(".ui-dialog-titlebar").hide();
					} else {
						var date = new Date();
						var skpPwdDt = new Date(skipPwdDate);
						var numDay = date.subtractByDays(skpPwdDt);
						if (numDay <= 30) {

							ClientData.userInfo_sid(ClientData.userInfo_sid_local());
							// move to home.html page
							COMMON.avwScreenMove("index.html");
						} else if (numDay > 30) {
							LOGIN.OpenChangePasswordDialog();
							$('#btnSkip').show();
							$(".ui-dialog-titlebar").hide();
						}
					}
				} else { // no need to change password
					ClientData.userInfo_sid(ClientData.userInfo_sid_local());

					// move to home.html page
					COMMON.avwScreenMove("index.html");
				}
			} else if (data.requirePasswordChange == 2) {

				if (LOGIN.force_pw_change_periodically == 1) { // recommend to
																// change
																// password
					$('#btnSkip').show();
					skipPwdDate = ClientData.userInfo_pwdSkipDt();

					if (skipPwdDate == null || skipPwdDate == 'undefined') {
						LOGIN.OpenChangePasswordDialog();
						$(".ui-dialog-titlebar").hide();
					} else {

						var date = new Date();
						var skpPwdDt = new Date(skipPwdDate);
						var numDay = date.subtractByDays(skpPwdDt);

						if (numDay <= 30) {
							ClientData.userInfo_sid(ClientData.userInfo_sid_local());

							// move to home.html page
							COMMON.avwScreenMove("index.html");

						} else if (numDay > 30) {
							LOGIN.OpenChangePasswordDialog();
							$(".ui-dialog-titlebar").hide();
						}
					}
				} else if (LOGIN.force_pw_change_periodically == 2) { // Force
																		// to
																		// change
																		// password
					LOGIN.OpenChangePasswordDialog();
					$('#btnSkip').hide();
					$(".ui-dialog-titlebar").hide();
					$("#txtPwdRemind").css('visibility', 'hidden');
				} else { // No need to change password
					ClientData.userInfo_sid(ClientData.userInfo_sid_local());
					// move to home.html page
					COMMON.avwScreenMove("index.html");
				}
			}
		} else {
			COMMON.closeLoading();
			LOGIN.login_errorMessage = data.errorMessage;
			$('#main-error-message').html(COMMON.format(I18N.i18nText('msgLoginErrWrong'), data.errorMessage).toString());
			$('#main-error-message').show();

		}

	}, function(result) {
		LOGIN.login_error_flag = true;
		COMMON.closeLoading();
		if (result.errorMessage) {
			LOGIN.login_errorMessage = result.errorMessage;
			$('#main-error-message').html(COMMON.format(I18N.i18nText('msgLoginErrWrong'), result.errorMessage).toString());
		} else {
			$('#main-error-message').html(COMMON.format(I18N.i18nText('msgLoginErrWrong'), 'E001'));
		}
		$('#main-error-message').show();
	});
};

// Change Password Process
LOGIN.changePasswordProcess = function() {
	var sid = ClientData.userInfo_sid_local();
	var loginId = $('#txtAccId').val();
	var password = $('#txtCurrentPass').val();
	var confirmPass = $('#txtConfirmNew').val();

	var params = {
		sid : sid,
		loginId : loginId,
		password : password,
		newPassword : confirmPass,
		appId : 4
	};

	if (I18N.getCurrentLanguage()) {
		params.language = I18N.getCurrentLanguage();
	}

	const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.PASSWORD_CHANGE;

	COMMON.cmsAjax(url, params, false, function(result) {
		if (result.httpStatus == '200') {
			LOGIN.CloseChangePasswordDialog();
			$('#dialog-error-message').css('display', 'none');
			ClientData.userInfo_sid(ClientData.userInfo_sid_local());
			
			if (ClientData.serviceOpt_abook_check() == 'Y') {
				// move to home.html page
				COMMON.avwScreenMove("index.html");
			} else {
				$('#dialog-error-message').html(I18N.i18nText('msgPwdChangeNG'));
				$('#dialog-error-message').show();

			}
		} else if (result.httpStatus == '401') {
			COMMON.goUrlWithCurrentParams(CONSTANT.PAGE_NAME.LOGIN);	
		} else if (result.httpStatus == '403') {
			$('#dialog-error-message').html(data.message);
			$('#dialog-error-message').show();
		}
	}, function(result) {
		COMMON.closeLoading();
		if (result.errorMessage) {
			$('#dialog-error-message').html(result.errorMessage);
		} else {
			$('#dialog-error-message').html(I18N.i18nText('msgPwdChangeNG'));
		}
		$('#dialog-error-message').show();

	});
};

// Change Language English
LOGIN.changeLanguage = function(lang) {
	I18N.changeLanguage(lang);
	document.title = I18N.i18nText('dspLogin') + ' | ' + I18N.i18nText('sysAppTitle');
	if (LOGIN.login_errorMessage != "") {
		$('#main-error-message').html(COMMON.format(I18N.i18nText('msgLoginErrWrong'), LOGIN.login_errorMessage).toString());
	}
};

// Login click function
LOGIN.loginFunction = function() {
	COMMON.showLoading();
	if (LOGIN.checkValidation()) {
		LOGIN.processLogin();
	} else {
		COMMON.closeLoading();
	}
};

// Change Password function
LOGIN.changePassFunction = function() {
	if (LOGIN.checkDialogValidation()) {
		LOGIN.changePasswordProcess();
	}
};

// Skip Password function
LOGIN.skipPassFunction = function() {
	var date = new Date();

	ClientData.userInfo_pwdSkipDt(date);
	ClientData.userInfo_sid(ClientData.userInfo_sid_local());

	if (ClientData.serviceOpt_abook_check() == 'Y') {
		// move to home.html page
		COMMON.avwScreenMove("index.html");
	} else {
		$('#main-error-message').html(COMMON.format(I18N.i18nText('msgLoginErrWrong'), 'E001'));
		$('#main-error-message').show();
	}

};

// Open Change Password Dialog
LOGIN.OpenChangePasswordDialog = function() {
	$("#password-reset-modal").show();
	COMMON.showLoading();
	console.log("password open");
};

// Close Chnage Password Dialog
LOGIN.CloseChangePasswordDialog = function() {
	$("#main-password-change").hide();
	COMMON.closeLoading();
};

// Save Service Option
LOGIN.saveServiceUserOption = function() {

	$.each(LOGIN.optionList, function(i, option) {

		if (option.serviceOptionId == 22) {
			ClientData.serviceOpt_force_pw_change_periodically(option.value);
		} else if (option.serviceOptionId == 21) {
			ClientData.serviceOpt_force_pw_change_on_login(option.value);
		} else if (option.serviceOptionId == 49) {
			ClientData.serviceOpt_usable_push_message(option.value);
		} else if (option.serviceOptionId == 161) {
			ClientData.serviceOpt_abook_check(option.value);
		} else if (option.serviceOptionId == 183) {
			ClientData.serviceOpt_chat_function(option.value);
		}
	});
};

// Get Service Option
LOGIN.getServiceOptionList = function() {

	$.each(LOGIN.optionList, function(i, option) {

		if (option.serviceOptionId == 22) {
			LOGIN.force_pw_change_periodically = option.value;
		} else if (option.serviceOptionId == 21) {
			LOGIN.force_pw_change_on_login = option.value;
		}

	});
};

LOGIN.loginWhenClickEnter = function(e) {
	var code = (e.keyCode ? e.keyCode : e.which);
	if (code == 13) { // Enter keycode
		$('#btnLogin').click();
	}
};

// init login for normal user
LOGIN.initLoginNormalUser = function() {

	document.title = I18N.i18nText('dspLogin') + ' | ' + I18N.i18nText('sysAppTitle');

	// Initial Screen
	LOGIN.initialScreen();
	// Change language 
	let selector = document.getElementById("languageSelect");
	var lang = I18N.getCurrentLanguage();
	if (lang) {
		selector.value = lang;
	}
	selector.addEventListener("change", function() {
		LOGIN.changeLanguage(this.value);
	})

	// Button login click event
	$('#btnLogin').click(LOGIN.loginFunction);
	// Button Change click event
	$('#btnChange').click(LOGIN.changePassFunction);
	// Button Skip click event
	$('#btnSkip').click(LOGIN.skipPassFunction);

	$('#txtPassword').keydown(LOGIN.loginWhenClickEnter);
};


/* display alert screen */
LOGIN.showAlertScreen = function(errMes, scrMove) {

	// アラートメッセージの表示
	if (errMes == undefined || errMes == "") {
		errMes = "message."; // I18N.i18nText('msgPageImgErr');
	}

	COMMON.lockLayout();
	/* show error messages */
	$().toastmessage({
		position : 'middle-center'
	});
	$().toastmessage('showToast', {
		type : 'error',
		sticky : true,
		text : errMes,
		close : function() {
		}
	});
	$('.toast-type-error').css('height', '100px');
	$('.toast-type-error > p').css('padding-top', '35px');
	$('.toast-item-close').live('click', function() {
		COMMON.unlockLayout();
		if (scrMove) {
			COMMON.avwScreenMove(scrMove);
		}
	});
};

// $(document).ready(function (e) {
LOGIN.ready = function() {

	// Session Storage clear
	SessionStorageUtils.clear();
	COMMON.userSessionObj = null;
	// create new session
	COMMON.createUserSession();
	I18N.initi18n();

	var sysSettings = COMMON.sysSetting(); // get info in conf.json

	// check an getits setting
	if (sysSettings.apiUrl == "") {

		// acquire parameters
		var siteUrl = COMMON.getUrlParam('siteUrl', '');
		var urlPath = COMMON.getUrlParam('urlPath', '');
		var storeUrl = COMMON.getUrlParam('storeUrl', '');
		if (siteUrl != "" && urlPath != "") {

			// ClientData.siteUrl(siteUrl);
			// set api connection
			ClientData.conf_apiUrl(siteUrl + "{0}/abvapi");
			ClientData.conf_apiLoginUrl(siteUrl + "nuabvapi");
			ClientData.conf_checkApiLoginUrl(siteUrl + "checkapi/web");
			ClientData.conf_apiResourceDlUrl(siteUrl + "{0}/dl");
			// set account setting value
			ClientData.userInfo_accountPath(urlPath);
			ClientData.userInfo_accountPath_session(urlPath);
			ClientData.userInfo_loginId("");
			ClientData.userInfo_loginId_session("");

		}

	} else {
		// conf parameter set
		ClientData.conf_apiUrl(sysSettings.apiUrl);
		ClientData.conf_checkApiLoginUrl(sysSettings.checkApiLoginUrl);
		ClientData.conf_apiLoginUrl(sysSettings.apiLoginUrl);
		ClientData.conf_apiResourceDlUrl(sysSettings.apiResourceDlUrl);
	}

	// Set when you receive the account path with the argument

	$('#normalUser').show();
	$('#formlogin').hide();
	$('#logologin').animate({
		"margin-top" : 0
	}, LOGIN.timeWaitSplashScreen, function() {
		$('#formlogin').show();
		$('#menu-language').animate({
			opacity : 1
		}, LOGIN.timeWaitSplashScreen);
		$('#formlogin').animate({
			opacity : 1
		}, LOGIN.timeWaitSplashScreen);
		$('.cnt_footer').animate({
			opacity : 1
		}, LOGIN.timeWaitSplashScreen);
	});
	LOGIN.initLoginNormalUser();
};

