var enable_redirect = false;
var login_remindUser = null;
var domains = new Array("aruba.it","technet.it","bo.technet.it","fi.technet.it","gr.technet.it","li.technet.it","lu.technet.it","pg.technet.it","pr.technet.it","si.technet.it");
//-----------------------------------------------------------------------------
function login_getCookie(name) {

	var _cookies = ' ' + document.cookie;

	if (_cookies.indexOf(' ' + name + '=') == -1) {
		return null;
	}

	var _start = _cookies.indexOf(' ' + name + '=') + (name.length + 2);
	var _finish = _cookies.substring(_start,_cookies.length);
	_finish = (_finish.indexOf(';') == -1) ? _cookies.length : _start + _finish.indexOf(';');

	return unescape(_cookies.substring(_start,_finish));
}

//-----------------------------------------------------------------------------
function login_setCookie(name,value,expiry){
	_datenow = new Date();
	_datenow.setTime(_datenow.getTime() + Math.round(86400000*expiry));
	_expiry = _datenow.toGMTString();
	_expiry = '; expires=' + _expiry;
	_path = '; path=/';
	document.cookie = name + '=' + escape(value) + _path + _expiry ;
}

//-----------------------------------------------------------------------------
function _login_getAntispamStatus(xfm)
{
	try {

		// ANTISPAM STATUS
  		xfm.rpc ({
 			serviceName: 'antispam_status',
 			serviceMethod: 'load',
 			sync: true,
 			load: function(response) {
				if (!response.status.err_code) {
					xfm.resources.antispamEnabled = response.antispamEnabled;
				}
			}
 		});
	}
	catch(e) {
		console.debug("cannot get the antispam status - reason : " + e);
		xfm.resources.antispamEnabled = 0;
	}
}

//-----------------------------------------------------------------------------
function login_successCallback(str, req) {

	var xfm = window.parent.xfmFrame.xfm;
	var response = xfm._evalJson(str);

	if (!response.status) {
		req.errorCallback("Unknown Error");
		return;
	}

	if (response.status.err_text) {
		req.errorCallback(response.status.err_text);
		return;
	}

	if (response.status.err_code) {
		req.errorCallback("Error : " + response.status.err_code);
		return;
	}

	if (response.status.err_code != 0) {
		req.errorCallback(response.status.err_text);
		return;
	}

	// success
	// load the mainframe

	if(login_remindUser){
		if(document.signUp.LOGIN.value){
			login_setCookie("XaM_Login", document.signUp.LOGIN.value, 365);
		}
	}

	if (response.sessionid) {
		xfm.resources = response.resources;
		xfm.sessionId = response.sessionid;

		// ANTISPAM status
		_login_getAntispamStatus(xfm);

		if(typeof document.signUp.SG_Lang != "undefined"){
			var langCombo = document.signUp.SG_Lang;
			login_setCookie("XaM_Language", langCombo.options[langCombo.selectedIndex].value, 365);
		}

		if(typeof document.signUp.Theme != "undefined"){

			var themeCombo = document.signUp.Theme;

			if(themeCombo.options){
				login_setCookie("XaM_Theme", themeCombo.options[themeCombo.selectedIndex].value, 365);
				with(themeCombo.options[themeCombo.selectedIndex]){
					var theme = value.split(".")[0];
					var flavour = value.split(".")[1];
				}
			}
			else
			{
				var value = document.signUp.Theme.value;
				var theme = value.split(".")[0];
				var flavour = value.split(".")[1];
			}

			xfm.layoutUrl = xfm.rootUrl + '/' + xfm.conf.layoutBase + '/' + theme + '/html';
			xfm.conf.theme = theme;

			if(flavour){
				xfm.conf.flavour = flavour;
			}
		}

		var location = xfm.filedesc.getFilePath("html", xfm.conf.mainFrameName);
		if (location.indexOf("?") < 0) {
			location += "?";
		}
		else {
			location += "&";
		}
		location += "lang=" + xfm.resources.language + "&flavour=" + xfm.conf.flavour + "&theme=" + xfm.conf.theme;

		top.window.name = str;
		window.parent.mainFrame.location.href = location;
	}

}

//-----------------------------------------------------------------------------
function login_redirectCallback(str, req) {

	var xfm = window.parent.xfmFrame.xfm;
	var response = xfm._evalJson(str);

	if (!response.status) {
		req.errorCallback("Unknown Error");
		return;
	}

	if (response.status.err_text) {
		req.errorCallback(response.status.err_text);
		return;
	}

	if (response.status.err_code) {
		req.errorCallback("Error : " + response.status.err_code);
		return;
	}

	if (response.status.err_code != 0) {
		req.errorCallback(response.status.err_text);
		return;
	}

	// success
	// redirect
	if (response.url) {
		top.window.location.href = response.url;
	}
}

//-----------------------------------------------------------------------------
function login_errorCallback(msg) {
	login_showPopup('<div class="error">'+msg+'</div>');
}

//-----------------------------------------------------------------------------
function login_authenticate(login, password, language) {

	var xfm = window.parent.xfmFrame.xfm;

	if(xfm){
		var loginReq = xfm.ajax();

		loginReq.callback = login_successCallback;
		loginReq.errorCallback = login_errorCallback;

		var loginArray = login.split ('@');

		if (enable_redirect && loginArray.length > 1 && domains.join().indexOf(loginArray[1]) == -1)
		{
			loginReq.callback = login_redirectCallback;
			var theme = document.signUp.Theme.value;
			loginReq.request(xfm.getRequest('ems', 'redirect', {login: login, passwd:password, lang:language, theme:theme}));
		}
		else
		{
			if(language){
				loginReq.request(xfm.getRequest('ems', 'login+lang', {login: login, passwd:password, lang:language}));
			}
			else{
				loginReq.request(xfm.getRequest('ems', 'login', {login: login, passwd:password, lang:language}));
			}
		}
	}
	else{
		recall = function(){
			login_authenticate(login, password, language);
		}
		setTimeout("recall()", 200);
	}
}

//-----------------------------------------------------------------------------
function getUrlParamter(param){
	var regex = new RegExp("[\\?&]"+param+"=([^&#]*)");
	var paramValue = regex.exec(top.window.location.href);
	return paramValue ? paramValue[1] : undefined;
}

//-----------------------------------------------------------------------------
function login_initPage(remindUser) {

	// define if User login must be reminded
	login_remindUser = remindUser ? remindUser : false;

	// direct login emulation
	if (getUrlParamter("LOGIN") && getUrlParamter("PASSWD")){
		login_authenticate(getUrlParamter("LOGIN"), getUrlParamter("PASSWD"), getUrlParamter("SG_Lang"));
	}
	else {

		// select language according to the browser default language or restore previously selected language
		var langCombo = document.signUp.SG_Lang;
		if(langCombo && langCombo.options){
			var lang = login_getCookie("XaM_Language") ? login_getCookie("XaM_Language") : !navigator.browserLanguage ? navigator.language.split("-")[0] : navigator.browserLanguage.split("-")[0];
			for (x=0; x<langCombo.options.length; x++){
				if (langCombo.options[x].value == lang){
					langCombo.options[x].selected = true;
				}
			}
		}

		// localize login interface
		login_localize(lang);

		// prefill previously typed User name
		var cookie_login = login_getCookie("XaM_Login");
		if (cookie_login && login_remindUser) {
			document.signUp.LOGIN.value = cookie_login;
			document.signUp.PASSWD.focus();
		}
		else {
			document.signUp.LOGIN.focus();
		}

		// restore previously selected Theme
		var cookie_theme = login_getCookie("XaM_Theme");
		var themeCombo = document.signUp.Theme;
		var theme_found = false;

		if (themeCombo && themeCombo.options && cookie_theme){
			for (x=0; x<themeCombo.options.length && !theme_found; x++){
				if(themeCombo.options[x].value == cookie_theme){
					themeCombo.options[x].selected = true;
					theme_found = true;
				}
			}
			if (theme_found) {
				login_setCSS(cookie_theme);
			} else {
				login_setCSS (themeCombo.options[0].value);
			}
		}
	}
}

var login_timer = null;
//-----------------------------------------------------------------------------
function login_signUp() {

	var login = document.signUp.LOGIN.value;
	var password =  document.signUp.PASSWD.value;
	var hasLanguage = document.signUp.SG_Lang ? true : false;
	var hasLanguageOptions = hasLanguage ? (document.signUp.SG_Lang.options ? true : false) : false;
	var language = hasLanguageOptions ? document.signUp.SG_Lang.options[document.signUp.SG_Lang.selectedIndex].value : (hasLanguage ? document.signUp.SG_Lang.value : "en");
	var hasTheme = document.signUp.Theme ? true : false;
	var hasThemeOptions = hasTheme ? (document.signUp.Theme.options ? true : false) : false;
	var theme = hasThemeOptions ? document.signUp.Theme.options[document.signUp.Theme.selectedIndex].value : (hasTheme ? document.signUp.Theme.value : null);

	var useHtmlTpl = theme == "basic-html" || document.signUp.USEHTMLTPL.value == 1 ? 1 : 0;

	if (login <= 0) {
		login_showPopup('<div class="error">'+fstring(localization[language]['missing_login'])+'</div>');
		return;
	}

	if (password <= 0) {
		login_showPopup('<div class="error">'+fstring(localization[language]['missing_password'])+'</div>');
		return;
	}

	login_hidePopup();

	login_showPopup('<div class="auth">'+fstring(localization[language]['requesting_data'])+'</div>');

	if (useHtmlTpl == 0)
	{

		if (login_timer){
			window.clearTimeout(login_timer);
			login_timer = null;
		}
		if ((!window.parent.xfmFrame.xfm)||(!window.parent.xfmFrame.xfm.loaded)){
			login_timer = window.setTimeout(login_signUp,250);
			return;
		}

		var xfm = window.parent.xfmFrame.xfm;
		var path = theme.split('.')[0];
		xfm.loadDescriptor(path + "/descriptor.json");

		login_authenticate(login, password, language);
	}
	else
	{

		if(login){
			if(login_remindUser){
				login_setCookie("XaM_Login", login, 365);
			}
		}
		if(theme){
			login_setCookie("XaM_Theme", theme, 365);
		}

		if(language){
			login_setCookie("XaM_Language", language, 365);
		}

		var loginArray = login.split ('@');
		if (enable_redirect && loginArray.length > 1 && domains.join().indexOf(loginArray[1]) == -1)
			document.signUp.action = 'http://webmaildomini.aruba.it/cgi-bin/webmail';
		else
			document.signUp.action = 'cgi-bin/webmail';

		document.signUp.target = "_top";
		document.signUp.submit ();
	}
}

//-----------------------------------------------------------------------------
function login_showFeedback() {
	document.getElementById('feedback_indicator').style.visibility = "visible";
}

//-----------------------------------------------------------------------------
function login_hideFeedback() {
	document.getElementById('feedback_indicator').style.visibility = "hidden";
}

//-----------------------------------------------------------------------------
function login_showPopup(message) {
	document.getElementById("signin_error").style.display = "block";
	document.getElementById("signin_error").innerHTML = message;
}

//-----------------------------------------------------------------------------
function login_hidePopup() {
	document.getElementById("signin_error").style.display = "none";
}

//-----------------------------------------------------------------------------
function login_defaultSubmit(e) {

	var code=0;
	if (!e)	var	e = window.event;

	if (e) {
		if (e.keyCode) {
			 code = e.keyCode;
		}
		else if(e.which) {
			code = e.which;
		}
	}

	if (code == '13') {
		login_signUp();
	}
	else {
		return;
	}
}

//-----------------------------------------------------------------------------
function login_setCSS(themePath){

	var theme = themePath.split('.')[1];

	switch(theme){
		case "aqua":
			document.body.className="aqua";
		break;
		case "grey":
			document.body.className="grey";
		break;
		case "sapphire":
			document.body.className="sapphire";
		break;
		case "basic":
		case "basic-html":
			document.body.className="simple";
		break;
		case "orange":
		default:
			document.body.className="orange";
		break;
	}
}

//-----------------------------------------------------------------------------
function setThemeCombo() {
	var themeCombo = document.getElementById('themeCombo');
	var xfm = top.xfmFrame.xfm;
	var defaultTheme = xfm.conf.layoutBase + "/" + xfm.conf.theme + "." + xfm.conf.flavour;

	if (themeCombo) {
		for(var x=0; x<xfm.conf.themeList.length; x++){
			themeCombo.options[themeCombo.options.length] = new Option(xfm.conf.themeList[x].name,xfm.conf.themeList[x].value,false, xfm.conf.themeList[x].value==defaultTheme?true:false);
		}
	}

	login_initPage(remindUser);
}
