var SET_MESSAGE_INNERHTML = 0;
var SET_MESSAGE_VALUE = 1;

var appRootURL = "/mail";
var startTime = new Date();

function isLogout() {
	try {
		if (parent.location.pathname !== appRootURL) {
			return;
		}
	} catch (err) {
		return;
	}

	var framesetElement = parent.document.getElementById("framesetAd");
	if (framesetElement) {
		framesetElement.rows = "0,*,0";
		logout = "true";
	}
}

function logoutRedirect() {
	if (logout === "true") {
		setCookie("wedge", "", -1);

		var logoutTargetURL = nimAM.application.TXT.logoutTargetURL;
		if (! logoutTargetURL) {
			logoutTargetURL = appRootURL + location.search;
		}
		try {
			parent.window.location = logoutTargetURL;
		} catch (err) {
		}
	}
}

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 cookie check
		if (message === "") {
			if (isCookiesEnabled() !== true) {
				message = nimAM.login.TXT.browserCookiesDisabled;
			}
		}

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

		errorMsgElement.innerHTML = message;
	}
}

function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) +
		";path=/" +
		( (expiredays) ? ";expires=" + exdate.toGMTString() : "");
}
function getCookie(name) {
	var cookies = document.cookie.split("; ");
	for (var i=0; i<cookies.length; i++) {
		var cookie = cookies[i].split("=");
		if (cookie[0] === name) {
			return unescape(cookie[1]);
		}
	}

	return null;
}
function isCookiesEnabled() {
	var cookiesEnabled = navigator.cookieEnabled;

	if (cookiesEnabled === true) {
		if (document.all) {
			var cookieName = 'testCookieEnabled';
			var timestampString = new Date().toUTCString();

			setCookie(cookieName, timestampString);
			var result = getCookie(cookieName);
			if (result !== timestampString) {
				cookiesEnabled = false;
			}
		}
	}

   return cookiesEnabled;
}


function getParameter(name) {
	var start = location.search.indexOf(name + "=");
	var len = start + name.length + 1;
	if ((!start) && (name != location.search.substring(0, name.length))) {
		return null;
	}
	if (start == -1) {
		return null;
	}
	var end = location.search.indexOf('&', len);
	if (end == -1) {
		end = location.search.length;
	}
	return unescape(location.search.substring(len, end));
}

function setMessage(elementType, elementId, message) {
	var element = document.getElementById(elementId);
	if (element) {
		switch (elementType) {
			case SET_MESSAGE_INNERHTML:
				element.innerHTML = message;
				break;
			case SET_MESSAGE_VALUE:
				element.value = message;
				break;
		}
	}
}

function initLang() {
	try {
		var TXT = nimAM.login.TXT;

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

		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) {
			brandStatusElement.innerHTML = TXT.brandStatusMessage;

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

		if ( (systemStatusEmpty === false) || (brandStatusEmpty === false) ) {
			document.getElementById("loginStatus").style.display = "";
		}

		setMessage(SET_MESSAGE_INNERHTML, "elementId", TXT.message);

		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 getFirstLevelDomain() {
	var hostname = location.hostname;

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

	return firstLevel;
}

function initLanguage() {
	var index = 1;
	var selectElement = document.getElementById("lang");
	if (selectElement) {
		for (var i=0; i<selectElement.options.length; i++) {
			if (preferenceLanguageCode === selectElement.options[i].value) {
				index = i;
				break;
			}
		}
		selectElement.selectedIndex = index;
	}
}

function initUIType() {
	var wtypeParam = getParameter("wtype");
	var ajax = document.getElementById("wtypeajax");

	var wtypeTraditional = true;
	if (ajax) {
		if ( (wtypeParam === "a") || (ajax.value == preferenceUIType) ) {
			wtypeTraditional = false;
		}

		ajax.checked = ! wtypeTraditional;
	}

	var traditional = document.getElementById("wtypetrad");
	if (traditional) {
		traditional.checked = wtypeTraditional;
	}
}

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;
	}

	return true;
}

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

	if ( (username !== "") && (username.indexOf("@") === -1) ) {
		var hostname = location.hostname;

		// strip-off last level
		hostname = hostname.substring(hostname.indexOf(".") + 1);

		// "@" was not found. appending "@" and hostname.
		username += "@" + hostname;
	}

	element.value = username;
}
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 trimString(string) {
	var trimmed = string.replace(/^\s+/, '').replace(/\s+$/, '');
	return trimmed;
}

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

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');
}