/**
 * \file lib_login.js
 * \author Mihai OPREA <mihai.oprea@axigen.com>
 * \date 13-02-2008
 *
 * Copyright &copy; 2008 AXIGEN. All Rights Reserved.
 * \brief Login JS Resources
 *
 */

/**
 * Helper functions
 */

function $(name) {
    var form = document.forms[0];
    var elem = form[name];
    
    return elem?elem:document.getElementById(name);
}

String.prototype.trim = function() {
    return this.replace(/^[ \t]*/, "")
               .replace(/[ \t]$/, "");
}

/**
 * Cookie Functions
 */
   
function setCookie(name, value) {           
    // Expire in one year
    var dayCount = 365;

    var date = new Date();
        date.setTime(date.getTime() + (dayCount * 24 * 60 * 60 * 1000));

    var expireStr = "; expires=" + date.toGMTString();

    // Create cookie
    document.cookie = name + "=" +
        escape(value) +
        expireStr;
           
}

function getCookie(name) {
    var needle = name + "=";
    var aCookies = document.cookie.split(';');

    for(var i = 0; i < aCookies.length; i++) {
        var aCrumb = aCookies[i].split("=");

        if (name == aCrumb[0].trim()) {
            return unescape(aCrumb[1]);
        }
    }

    return null;
}

function removeCookie(name) {
    document.cookie = name + "=0; expires=Wed, 16 Apr 1980 21:50:51 GMT;";
}      

function cookiesAllowed() {
    
    /**
     * Check Cookies
     */

    setCookie("cookieTest", "cookiesEnabled");
    
    if (getCookie("cookieTest") != "cookiesEnabled") {
        return false;
    }
    
    removeCookie("cookieTest");
    return true;
    
}


/**
 * Secure / Plain url redirect
 * @param {String} url
 * @param {String} proto
 * @return {String}
 */

function urlRedirect(url, proto)
{
    if (!url) return;
    var host = url.replace(/:.*/, "");
    var port = url.replace(/[^:]*:/, "");

    
    var currentHost = document.location.href.replace(/https?:\/*/, "").
        replace(/\/*\?.*/, "").replace(/:[0-9]+.*/, "").replace(/\/+/, "");

    if (url.indexOf("%%*%%") != -1) {
        var redirUrl = proto + "://" + currentHost + ":" + port + "/";
    } else {
        var redirUrl = proto + "://" + url;
    }

    return redirUrl + '?m=' + (proto == 'https' ? 'secure' : 'plain');
}

/**
 * Setup the document and form
 */

function preloaderDone(axi_login_settings_cookie)
{
    /**
     * Check DOM
     */

    if (!document) { return false; }

    var body = document.body;
    var preloader_text = document.getElementById("preloader_text");
    var preloader_content = document.getElementById("preloader_content");

    if (!body || !preloader_text || !preloader_content) { return false; }
    if (!cookiesAllowed()) {
        $("preloader_text").style.display = "none";
        $("preloader_content").style.display = "none";

        $("visibleCookieContainer").style.display = "block";
    }

    /**
     * Remember Login
     */
    var username = $('username');
    var password = $('password');
    var domainName = $('domainname');
    var rememberLogin = $('rememberLogin');
    
    var cookieContents = getCookie("AXIWMRememberLogin");
    if (cookieContents && domainName) {
        var cookieUsernameParts = cookieContents.split('@');
        if (cookieUsernameParts[0]) {
            var cookieUsername = cookieUsernameParts[0];
        }
        
        if (cookieUsernameParts[1]) {
            var cookieDomain = cookieUsernameParts[1];
        }
    } else {
        var cookieUsername = cookieContents;
    }
    
    if (rememberLogin && cookieUsername) {
        rememberLogin.checked = true;
    }
    
    var focusField = username;
    if (cookieUsername) {
        username.value = cookieUsername;
        var focusField = password;
    }
    
    if (cookieDomain) {
        for (var i=0; i < domainName.options.length; i++) {
            if (cookieDomain == domainName.options[i].value) {
                domainName.selectedIndex = i;
                break;
            }
        }
    }

    /**
     * Update Secure Connection Link
     */

    var secureLink = document.getElementById("secureLinkId");
    var plainLink = document.getElementById("plainLinkId");

    if (secureLink) {
        secureLink.href = urlRedirect(preloaderDone.SecureUrl, 'https');
    }
    
    if (plainLink) {
        plainLink.href = urlRedirect(preloaderDone.SecureUrl, 'http');
    }

    /**
     * Ajax Login
     */
    if ($('ajax_login')) {
        $('ajax_login').onclick = function () {
            switchInterface(axi_login_settings_cookie, 'ajax');
        }
    }
    
    /**
     * Update preloader
     */

    body.removeChild(preloader_text);
    preloader_content.style.display = "block";

    var form = document.forms.loginForm;
    
    if (!form || !form.username) { return false; }
    
    focusField.focus();
}

/**
 * onSubmit handler that performs a rough validation on the login fields
 */

function formValidate()
{
    var form = document.forms.loginForm;
    
    if (!form || !form.username || !form.password) { return false; }

    var firstError = null;            
    if (form.username.value == "" ||
        form.username.value.replace(/[\r\n\t ]+/g, "") == "")
    {
        form.username.className = "input_error";
        firstError = form.username;
    } else {
        form.username.className = "";
        if (firstError == form.username) { firstError = null; }
    }
    
    if (form.password.value == "" ||
        form.password.value.replace(/[\r\n\t]+/g, "") == "")
    {
        form.password.className = "input_error";
        if (!firstError) { firstError = form.password; }
    } else {
        form.password.className = "";
        if (firstError == form.password) { firstError = null; }
    }

    if (firstError) {
        document.getElementById('error_msg').innerHTML = "Username or(and) password are empty!";

        firstError.focus();

        return false;
    }

    /**
     * Remember Login
     */

    var rememberLogin = $('rememberLogin');
    var username = $('username');
    var domainName = $('domainname');
    
    var rawUsernameValue = username.value;
    if (domainName && domainName.options[domainName.selectedIndex]) {
        rawUsernameValue += '@' + domainName.options[domainName.selectedIndex].value;
    }
    
    if (rememberLogin && rememberLogin.checked) {
        setCookie("AXIWMRememberLogin", rawUsernameValue);
    } else {
        removeCookie("AXIWMRememberLogin");
    }

    return true;
}

/**
 * Switch Interface Function
 */
function switchInterface (cookieName, type, hspinterface) {
    if (!cookiesAllowed()) return false;

    var settings_cookie = getCookie(cookieName);
    if (settings_cookie) {
        var settings_cookie_arr = settings_cookie.split('#');
        ajax_interface = settings_cookie_arr[0];
        secure_interface = settings_cookie_arr[1];
    } else {
        ajax_interface = hspinterface?'true':'false';
        secure_interface = 'false';
    }
    
    switch (type) {
        // AJAX / STANDARD Interface
        case 'standard':
            setCookie(cookieName, 'false#' + secure_interface);
            break;
        
        case 'ajax':
            setCookie(cookieName, 'true#' + secure_interface);
            break;
        
        // SECURE / UNSECURE Interface
        case 'secure':
            setCookie(cookieName, ajax_interface + "#true");
            break;
            
        case 'plain':
            setCookie(cookieName, ajax_interface + "#false");
            break;            
    }
}

// Clear webmailSession cookie
document.cookie = "webmailSession=0; expires=Fri, 31 Dec 1999 23:59:59 GMT;";

function saveLogin(username) {	
	if(username.trim() != "") {
		setCookie("username", username);
	}
}

function resetLogin() {
	removeCookie("username");
}

function fillLogin() {
	var username = getCookie("username");
	if(username && username != '0') {
		document.getElementById("username").value = username;		
		document.getElementById("rememberusr").checked = true;
	}			
}		

function manageLoginData() {	
	if(document.getElementById("rememberusr").checked == true) {
		var username = document.getElementById("username").value;		
		saveLogin(username);
	}
	else {
		resetLogin();
	}		
}	

