/* $File: lwfe.js $
   $Date: 2011-03-28 $
   $Modify date: 2011-04-07 $
   $Author: PB $
   $Version: 2.0.0 $
 */



///////////////////////////////////////////////////////////
// Call to load the lw template in the parent, accordingly to the userinfo status
///////////////////////////////////////////////////////////

function lwfe_loading(realm, language) {
    lwfe_realm = realm || lwfe_realm || "b2c";
    lwfe_setCurrentLanguage(language);
    var listLwfe = $(".lwfe");

    if (listLwfe != null) {
        lwfe_userinfo();
    }
}

function lwfe_userinfo() {
	//lwfe_userinfo_success({"authenticated":"false", "error":"false"});
    //lwfe_userinfo_success({"userInfo":{"login":"b2b_invoice","firstname":"f","lastname":"l"},"authenticated":true,"errorMessage":"","error":false});
    $.ajax({
        url: lwfe_url_userInfo + "?language=" + lwfe_current_language,
        dataType: "jsonp",
        success: lwfe_userinfo_success
    });
}

function lwfe_userinfo_success(userinfoData, textStatus, jqXHR) {
    var listLwfe = $(".lwfe");

    if (listLwfe != null) {
        var isLoggedin = userinfoData.authenticated && !userinfoData.error;
        var isLoggedinCurrentRealm = userinfoData.realm == lwfe_realm;

        for (var i = 0; i < listLwfe.length; i++) {
            var lwfe = listLwfe[i];

            if (lwfe != null) {
                for (var j = 0; j < lwfe_list_template.length; j++) {
                    var className = "lwfe_" + lwfe_list_template[j];

                    if ($(lwfe).hasClass(className)) {
                        // this element should be fullfilled by a template
                        var templateName = lwfe_getTemplateName(isLoggedin, isLoggedinCurrentRealm, lwfe_list_template[j]);
                        $(lwfe).load(lwfe_resource_path + "/" + templateName, function(response, status, xhr) {
                            lwfe_fillTemplate(isLoggedin, isLoggedinCurrentRealm, userinfoData);
                        });
                    }
                }
            }
        }
    }
}

function lwfe_getTemplateName(isLoggedin, isLoggedinCurrentRealm, className) {
    var state = "loggedoff";

    if (isLoggedinCurrentRealm || (isLoggedin && className.endsWith("horizontal"))) {
        state = "loggedin";
    }

    var res = "template-" + state + "-" + className + ".html";
    return res;
}

function lwfe_fillTemplate(isLoggedin, isLoggedinCurrentRealm, userinfoData) {
    if (isLoggedin) {
        $("#lwfe_welcome_msg").html(lwfe_getRealmLocaleString("lwfe_welcome_msg"));
        $("#lwfe_link_logout").html(lwfe_getRealmLocaleString("lwfe_link_logout"));
        $("#lwfe_userinfo_firstname").html(userinfoData.userInfo.firstname + " ");
        $("#lwfe_userinfo_lastname").html(userinfoData.userInfo.lastname + " ");
    }

    if (isLoggedinCurrentRealm) {
        $("#lwfe_account_msg").html(lwfe_getRealmLocaleString("lwfe_account_msg"));
        $("#lwfe_welcome_text_msg").html(lwfe_getRealmLocaleString("lwfe_welcome_text_msg"));

        var lwfe_link_enter = $("#lwfe_link_enter");
        $(lwfe_link_enter).attr("name", lwfe_getRealmLocaleString("lwfe_link_enter"));
        $(lwfe_link_enter).attr("value", lwfe_getRealmLocaleString("lwfe_link_enter"));
    }
    else {
        $("#lwfe_form_title").html(lwfe_getRealmLocaleString("lwfe_form_title"));
        $("#lwfe_form_login_label").html(lwfe_getRealmLocaleString("lwfe_form_login_label"));
        $("#lwfe_form_password_label").html(lwfe_getRealmLocaleString("lwfe_form_password_label"));
        $("#lwfe_link_passwordlost").html(lwfe_getRealmLocaleString("lwfe_link_passwordlost"));

        var lwfe_link_login = $("#lwfe_link_login");
        $(lwfe_link_login).attr("name", lwfe_getRealmLocaleString("lwfe_link_login"));
        $(lwfe_link_login).attr("value", lwfe_getRealmLocaleString("lwfe_link_login"));

        lwfe_cleanMessage();
    }
}



///////////////////////////////////////////////////////////
// Call to authenticate login
///////////////////////////////////////////////////////////

function lwfe_authenticate() {
    lwfe_cleanMessage();
    var login_input = $("#lwfe_form_login_input");
    var password_input = $("#lwfe_form_password_input");
    var login_value = $.trim( $(login_input).val() );
    var password_value = $.trim( $(password_input).val() );

	if (lwfe_validateAuthenticateField(login_input, login_value, password_input, password_value)) {
        lwfe_displayInfoMessage(lwfe_getRealmLocaleString("lwfe_infomsg_authInProgress"));
        var defaultURL = lwfe_getRealmLocaleString("lwfe_url_targetedLogin");
        var actualURL = document.location.href;

        //Warning the character '-' seem to be used by siteminder, so he should be suppress to decode the URL  
        var reg = new RegExp('&TARGET=\-SM\-(.*?)(&|$)');
        matches = actualURL.match(reg);
		var targetURL = defaultURL;
        if ((matches != undefined) && (decodeURIComponent(matches[1]) != undefined)) {
			var targetURL = matches[1] != undefined ? decodeURIComponent(matches[1]).replace(/\-\-/g,'-') : defaultURL;
		} 

		var url = lwfe_url_authenticate + "?realm=" + lwfe_realm + "&login=" + login_value + "&password=" + password_value + "&targetURL=" + targetURL + "&language=" + lwfe_current_language;
        $.ajax({
            url: url,
            dataType: "jsonp",
            success: lwfe_authenticate_success
        });
	}

    return false;
}

function lwfe_authenticate_success(data, textStatus, jqXHR) {
	// update the HTML DOM based on whether or not message is valid
	if (data.error) {
        lwfe_displayErrorMessage(data.errorMessage);
	}
    else {
        lwfe_displayInfoMessage(lwfe_getRealmLocaleString("lwfe_infomsg_redirectInProgress"));
		lwfe_redirect(data.targetURL);
	}
}



function lwfe_redirect_home() {
	lwfe_redirect(lwfe_getRealmLocaleString("lwfe_home_address"));
}



function lwfe_passwordlost() {
    lwfe_cleanMessage();
    var login_input = $("#lwfe_form_login_input");
    var login_value = $.trim( $(login_input).val() );

	if (lwfe_validatePasswordlostField(login_input, login_value)) {
        lwfe_redirect(lwfe_getRealmLocaleString("lwfe_url_forgotPwd") + encodeURIComponent(lwfe_getRealmLocaleString("lwfe_parameter_forgotPwd") + "&login=" + login_value));
    }
}


///////////////////////////////////////////////////////////////
//Calling logout FrontEnd URL with the sessionInfo
///////////////////////////////////////////////////////////////
function lwfe_logout() {
    var url_logout;
    var url_targetedLogout = lwfe_getRealmLocaleString("lwfe_url_targetedLogout");

    if (lwfe_flag_thirdpartylogout) {
        lwfe_redirect(lwfe_getRealmLocaleString("lwfe_url_thirdpartylogout") + url_targetedLogout);
    }
    else {
        $.ajax({
            url: lwfe_url_logout + "?targetURL=" + url_targetedLogout + "&language=" + lwfe_current_language,
            dataType: "jsonp",
            success: lwfe_logout_success
        });
    }
}

function lwfe_logout_success(logoutData, textStatus, jqXHR) {
    lwfe_redirect(logoutData.targetURL);
}



///////////////////////////////////////////////////////////////
// Validate non empty fields
///////////////////////////////////////////////////////////////

function lwfe_validateAuthenticateField(login_input, login_value, password_input, password_value) {
	if (login_value.length < 1) {
        lwfe_displayErrorMessage(lwfe_getRealmLocaleString("lwfe_errmsg_emptyAuthenticateField"));
		$(login_input).focus();
		return false;
	}

	if (password_value.length < 1) {
        lwfe_displayErrorMessage(lwfe_getRealmLocaleString("lwfe_errmsg_emptyAuthenticateField"));
		$(password_input).focus();
		return false;
	}

	return true;
}

function lwfe_validatePasswordlostField(login_input, login_value) {
	if (login_value.length < 1) {
        lwfe_displayErrorMessage(lwfe_getRealmLocaleString("lwfe_errmsg_emptyPasswordlostField"));
        $(login_input).focus();
		return false;
	}

	return true;
}



/////////////////////////////////////
// redirection function
/////////////////////////////////////

function lwfe_redirect(targetURL) {
	window.location = targetURL;
}



/////////////////////////////////////
// Display an error message in the right div
/////////////////////////////////////

function lwfe_displayInfoMessage(message) {
    lwfe_displayMessage(message, "lwfe_form_msgbox_info", true);
}

function lwfe_displayErrorMessage(message) {
    lwfe_displayMessage(message, "lwfe_form_msgbox_error", true);
}

function lwfe_cleanMessage() {
    lwfe_displayMessage("", "lwfe_form_msgbox_off", false);
}

function lwfe_displayMessage(message, style, display) {
    var msgbox = $("#lwfe_form_msgbox");
    $(msgbox).removeClass().addClass("lwfe_form_msgbox").addClass(style).html(message);
}



/////////////////////////////////////
// Language / locale
/////////////////////////////////////

function lwfe_setCurrentLanguage(language) {
    language = language || lwfe_getCookie(lwfe_languageCookie_name);
    if (language != null && language.length > 0) {
        lwfe_current_language = language;
    }
    else {
        lwfe_current_language = lwfe_default_language;
    }
}

function lwfe_getLocaleString(stringID) {
    var stringName = stringID + "_" + lwfe_current_language;
    var stringValue = null;
    try {
    	stringValue = eval(stringName);
    } catch (e) {
		return "";
	}
    	
    if (stringValue == null) {
        return "";
    }
    return stringValue;
}

function lwfe_getRealmLocaleString(stringID) {
    var stringName = stringID + "_" + lwfe_current_language + "_" + lwfe_realm;
    var stringValue = null;
    
    try {
    	stringValue = eval(stringName);
	} catch (e) {
		return lwfe_getLocaleString(stringID);
	}
 
    if (stringValue == null) {
        return "";
    }
    return stringValue;
}

function lwfe_getCookie(cookieName) {
    var cookies = document.cookie.split(";");

    for (var i = 0 ; i < cookies.length ; i++) {
        var cookie = cookies[i];
        var name = cookie.substr(0, cookie.indexOf("="));
        var value = cookie.substr(cookie.indexOf("=") + 1);
        name = name.replace(/^\s+|\s+$/g, "");

        if (name == cookieName) {
            return unescape(value);
        }
    }

    return "";
}



//
//
//
String.prototype.endsWith = function(str)
{return (this.match(str+"$")==str)}

