// variables - begin
var appRootURL = "/mail";	// root url for app
var startTime = new Date();	// store current time
// variables - end


// functions - begin
// mail login utilities - begin
function getFirstLevelDomain() {
	var hostname = location.hostname;

	var firstLevel = "";
	var dotIndex = hostname.indexOf(".");
	if (dotIndex > 0) {
		firstLevel = hostname.substr(0, dotIndex).toLowerCase();
	}

	return firstLevel;
}

function isValidUsername(username) {
	var TXT = nimAM.login.TXT;

	if (username === "") {
		setErrorMsg(TXT.usernameEmpty);
		return false;
	} else {
		// strip-out all whitespace characters in username
		username = username.replace(/\s/g, "");

		var emailRegex = /^([a-zA-Z0-9_'+*$%\^&!\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9:]{2,4})+$/;
		if (! emailRegex.test(username)) {
			setErrorMsg(TXT.usernameInvalid);
			return false;
		}
	}

	return true;
}

function setErrorMsg(message) {
	var errorMsgElement = document.getElementById("errorMsg");
	if (errorMsgElement) {
		// if message is empty but errorMsgParam is not empty, set message
		var errorMsgParam = getParameter("msg");
		if ( (! message) && (errorMsgParam) ) {
			message = decodeURIComponent(errorMsgParam).replace(/\+/g, " ");
		}

		// if message is still empty, do browser cookie check
		if (message === "") {
			if (isCookiesEnabled() !== true) {
				message = nimAM.login.TXT.browserCookiesDisabled;
			}
		}

		if (message === "") {
			message = "&nbsp;";
		}

		errorMsgElement.innerHTML = message;
	}
}
// mail login utilities - end

// login - begin
// login - before init - begin
function checkLogout() {
	setCookie("wedge", "", -1);	// clean-up existing wedge cookie
	setCookie("logoutRedirect", "", -1);	// clean-up existing logoutRedirect cookie
	setCookie("errorRedirect", "", -1);	// clean-up existing errorRedirect cookie

	try {
		// check if url matches appRootURL
		if (parent.location.pathname === appRootURL) {
			// check if element 'framesetsAd' exists, it means back at the login page after logout
			var framesetElement = parent.document.getElementById("framesetAd");
			if (framesetElement) {
				framesetElement.rows = "0,*,0";	// hide framesetAd. framesetAd unloaded later with redirect
				logout = "true";	// set logout state flag to true
			}
		}
		// logout state is true
		if (logout === "true") {
			// redirect to brand logout url
			// check if logout url was not already specified by back-end
			if (! logoutURL) {
				// set logoutURL to appRootURL with url current url parameters
				logoutURL = appRootURL + location.search;
			}
			// redirect to logout url
			parent.window.location = logoutURL;	// unload framesetAd
		}
	} catch (err) {
	}
}
// login - before init - end

// login - init - begin
function initLang() {
	try {
		var TXT = nimAM.login.TXT;

		try {
			parent.document.title = nimAM.application.TXT.windowTitle;
		} catch (err) {
		}

		setMessage(SET_MESSAGE_INNERHTML, "loginStatusHeading", nimAM.addEvent.TXT.questInviteStatusLabel);

		var systemStatusEmpty = true;
		var systemStatusElement = document.getElementById("systemStatus");
		if (systemStatusElement) {
			if ( (TXT.systemStatus === "T") && (trimString(systemStatusElement.innerHTML) !== "") ) {
				systemStatusEmpty = false;
				systemStatusElement.style.display = "";
			}
		}

		var brandStatusEmpty = true;
		var brandStatusElement = document.getElementById("brandStatus");
		if (brandStatusElement) {
			if ( (TXT.brandStatus === "T") && (trimString(TXT.brandStatusMessage) !== "") ) {
				brandStatusElement.innerHTML = TXT.brandStatusMessage;
				brandStatusEmpty = false;
				brandStatusElement.style.display = "";
			}
		}

		if ( (systemStatusEmpty === false) || (brandStatusEmpty === false) ) {
			document.getElementById("loginStatus").style.display = "";
		}
		
		// temporary: preview - begin
		if (TXT.showPreview === "T") {
			var previewTR2 = document.getElementById("previewTR2");
			if (previewTR2) {
				setMessage(SET_MESSAGE_INNERHTML, "previewNoLabel", TXT.previewNoLabel);
				setMessage(SET_MESSAGE_INNERHTML, "previewYesLabel", TXT.previewYesLabel);
				setMessage(SET_MESSAGE_INNERHTML, "sendFeedbackLink", TXT.sendFeedbackLink);

				// pre-select preview choice based on 'preview' cookie
				var previewCookie = getCookie('preview');
				var selectedPreviewElementId = (previewCookie === '1') ? 'previewYes' : 'previewNo';
				var selectedPreviewElement = document.getElementById(selectedPreviewElementId);
				if (selectedPreviewElement) {
					selectedPreviewElement.checked = true;
				}

				// show preview options
				var previewTR1 = document.getElementById("previewTR1");
				if (previewTR1) {
					setMessage(SET_MESSAGE_INNERHTML, "previewHint", TXT.previewHint);

					previewTR1.style.display = "";
				}
				previewTR2.style.display = "";
			}
		}
		// temporary: preview - end

		setMessage(SET_MESSAGE_INNERHTML, "labelUser", TXT.username);
		setMessage(SET_MESSAGE_INNERHTML, "userHint", TXT.usernameHint);

		setMessage(SET_MESSAGE_INNERHTML, "labelPass", TXT.password);
		setMessage(SET_MESSAGE_INNERHTML, "passHint", TXT.passwordHint);

		setMessage(SET_MESSAGE_INNERHTML, "webmailTypeHTMLLabel", TXT.webmailTypeHTML);

		setMessage(SET_MESSAGE_INNERHTML, "webmailTypeAJAXLabel", TXT.webmailTypeAJAX);

		var loginButtonLabel = TXT.loginBtn;
		var firstLevel = getFirstLevelDomain();
		switch (firstLevel) {
			case "spam":
			case "portal":
			case "spamportal":
				loginButtonLabel = TXT.loginFilterOnlyBtn;
				break;
		}
		setMessage(SET_MESSAGE_VALUE, "submit", loginButtonLabel);

		var uidParam = getParameter("uid");
		if (uidParam) {
			setMessage(SET_MESSAGE_VALUE, "user", uidParam);
		}
	} catch (err) {
		if (window.location.search.indexOf("firstPass=0") !== -1) {
			return;
		}

		// If the dictionary of the language selected doesn't exist it takes the default language value
		window.location = appRootURL + "?lang=en&firstPass=0";
	}
}

function initLanguage() {
	var selectElement = document.getElementById("lang");
	if (selectElement) {
		var index = 1;	// set to english which is the second item
		for (var i=0; i<selectElement.options.length; i++) {
			if (preferenceLanguageCode === selectElement.options[i].value) {
				index = i;
				break;
			}
		}
		selectElement.selectedIndex = index;
	}
}

function initUIType() {
	var wtypeTraditional = true;

	var ajax = document.getElementById("wtypeajax");
	if (ajax) {
		var wtypeParam = getParameter("wtype");
		if ( (wtypeParam === "a") || (ajax.value == preferenceUIType) ) {
			wtypeTraditional = false;
		}

		ajax.checked = ! wtypeTraditional;
	}

	var traditional = document.getElementById("wtypetrad");
	if (traditional) {
		traditional.checked = wtypeTraditional;
	}
}
// login - init - end

// login - submit - begin
function formSubmitHandler(form) {
	// language
	var selectedLanguageCode = preferenceLanguageCode;
	try {
		selectedLanguageCode = document.getElementById("lang").value;
	} catch (err) {
	}
	setCookie("language", selectedLanguageCode, 365);

	// wtype
	var selectedUIType = preferenceUIType;
	try {
		var wtypeTraditional = document.getElementById("wtypetrad");
		if (wtypeTraditional.checked === true) {
			selectedUIType = wtypeTraditional.value;
		}

		var wtypeAJAX = document.getElementById("wtypeajax");
		if (wtypeAJAX.checked === true) {
			selectedUIType = wtypeAJAX.value;
		}
	} catch (err) {
	}
	setCookie("wtype", selectedUIType, 365);

	// user
	var userElement = document.getElementById("user");
	if (userElement) {
		userElement.value = trimString(userElement.value).toLowerCase();  // trim white-space
		if (isValidUsername(userElement.value) === false) {
			return false;
		}
	}

	// password
	var passElement = document.getElementById("pass");
	if (passElement) {
		if (passElement.value === "") {
			setErrorMsg(nimAM.login.TXT.usernamePasswordInvalid);
			return false;
		}
	}

	// diffTime
	var diffTimeElement = document.getElementById("diffTime");
	if (diffTimeElement) {
		var timeNow = new Date();
		var diffTime = timeNow.getTime() - startTime.getTime();
		diffTimeElement.value = diffTime;
	}

	// temporary: preview - begin
	var selectedPreview = 0;
	try {
		if (nimAM.login.TXT.showPreview === "T") {
			var previewYes = document.getElementById("previewYes");
			if ( (previewYes) && (previewYes.checked === true) ) {
				selectedPreview = 1;
			}
		}
	} catch (err) {
	}
	setCookie("preview", selectedPreview, 365);
	// temporary: preview - end

	return true;
}
// login - submit - end

// login - change event handler - begin
function langChangeHandler(element) {
	var languageCode = element.value;
	if (! languageCode) {
		languageCode = "en";
	}
	setCookie("language", languageCode, 365);

	var append = "";

	var user = document.getElementById("user").value;
	if (user) {
		append += "&uid=" + user;
	}

	var isAJAX = false;
	var wtypeajax = document.getElementById("wtypeajax");
	if (wtypeajax) {
		isAJAX = (wtypeajax.checked === true) ? true : false;
	}
	append += "&wtype=" + (isAJAX === true ? "a" : "t");

	window.location = appRootURL + "?lang=" + languageCode + append;
}
function uidChangeHandler(element) {
	var username = trimString(element.value);  // trim white-space

	// autocomplete hostname (if not generic hostname)
	if ( (username !== "") && (username.indexOf("@") === -1) ) {
		var hostname = location.hostname;
		var isGenericHostname = false;

		// strip-off last level
		var hostnameIndex = hostname.indexOf(".");
		if (hostnameIndex > -1) {
			hostname = hostname.substring(hostnameIndex + 1);
		}
		
		var rootDomainIndex = hostname.indexOf(".");
		if (rootDomainIndex > -1) {
			var rootDomain = hostname.substring(rootDomainIndex + 1);
			if (rootDomain === 'hostedemail.com') {
				isGenericHostname = true;
			}
		}
		
		if (! isGenericHostname) {
			// "@" was not found. appending "@" and hostname.
			username += "@" + hostname;
		}
	}

	element.value = username;
}
// login - change event handler - begin

// login - show help file - begin
function showHelp() {
	window.open('/webmail/static/help/' + preferenceLanguageCode + '/help.html', 'loginHelp', 'width=550,height=400,scrollbars=yes,resizable=yes');
}
// login - show help file - end

// temporary: preview - begin
function showFeedbackForm() {
	var selectedLanguageCode = preferenceLanguageCode;
	var debug = 0;
	try {
		selectedLanguageCode = document.getElementById("lang").value;
		debug = document.getElementById("debug").value;
	} catch (err) {
	}

	window.open('/feedback?lang=' + selectedLanguageCode + '&debug=' + debug, 'feedbackForm', 'width=750,height=550,scrollbars=yes,resizable=yes');
}
// temporary: preview - end

// login - end
// functions - end

