﻿var oUsername;
var oPassword;
var oButtonLogin;
var showAcc;
var showBalance;
var webAddress = document.location.toString();
var protocol = 'http';

function createElementsObj() {
    oUsername = document.forms['loginForm'].username;
    oPassword = document.forms['loginForm'].password;
    oButtonLogin = document.getElementById('bttnLogin');
    try {
        webAddress = webAddress.substring(webAddress.indexOf(':'), webAddress.length);
        webAddress = protocol + webAddress;
    }
    catch (e) {
        alert(e);
    }
}

function login() {
    if (oUsername.value == "" || oPassword.value == "") {
        alert("Por favor ingrese su contraseña");
        return;
    }
    if (!valuesPreMOD11Check(oUsername.value, true)) {
        alert("RUT no es válido!");
        return;
    }

    var username = oUsername.value.toString();
    var kCheck = username.charAt(username.length - 1);
    var tempUsername = username.substring(0, username.length - 1);
    username = tempUsername.replace((new RegExp("[^0-9]", "gi")), "") + kCheck;
    var oSrc = webAddress + 'CallBroker.ashx?payload={"serviceName":"UserService","methodName":"Login","arguments":{"username":"' + username + '","password":"' + oPassword.value + '","IDMDLanguage":"ES"}}&callback=DelegateIn';
    addScript(oSrc);
    oUsername.disabled = true;
    oPassword.disabled = true;
    oButtonLogin.disabled = true;
}

function logof() {
    var oButton = document.getElementById("bttnLogof");
    oButton.disabled = true;
    var oSrc = 'CallBroker.ashx?payload={"serviceName":"UserService","methodName":"Logout","arguments":{"IDMDLanguage":"ES"}}&callback=DelegateOut';
    addScript(oSrc);
}

function checkLogin() {
    changeDisplayState("checkArea", "block");
    changeDisplayState("loginArea", "none");
    var oSrc ='CallBroker.ashx?payload={"serviceName":"UserService","methodName":"GetPersonalDetailsIfLoggedIn","arguments":{"IDMDLanguage":"ES"}}&callback=DelegateCheck';
    addScript(oSrc);
}

function getPersonalPreferences() {
    var oSrc = webAddress + "CallBroker.ashx?payload={'serviceName':'AccountService','methodName':'GetPreferences','arguments':{'IDMDLanguage':'ES'}}&callback=DelegatePreferences";
    addScript(oSrc);
}
function getPersonalDetais() {
    var oSrc = webAddress + "CallBroker.ashx?payload={'serviceName':'AccountService','methodName':'GetAccountsDetails','arguments':{'IDMDLanguage':'ES'}}&callback=DelegateDetails";
    addScript(oSrc);
}

function DelegateCheck(object) {
    eval("var response = " + object);
    try {
        var content = "<div>Balance: <div id='addDetais'></div><input type='button' id='bttnLogof' value='Salir' onClick='logof();'></div>";
        changeElementContent("userArea", content);
        changeElementContent("accountUserName", response.result.FirstName + " " + response.result.LastName);
        changeDisplayState("checkArea", "none");
        changeDisplayState("loginArea", "none");
        changeDisplayState("registerArea", "none");
        changeDisplayState("accountArea", "block");
        changeDisplayState("userArea", "block");
        getPersonalPreferences();
    }
    catch (err) {
        changeDisplayState("checkArea", "none");
        changeDisplayState("accountArea", "none");
        changeDisplayState("loginArea", "block");
        changeDisplayState("registerArea", "block");
    }
    clearScript();
}

function DelegateIn(object) {
    oUsername.value = "";
    oPassword.value = "";
    oUsername.disabled = false;
    oPassword.disabled = false;
    oButtonLogin.disabled = false;
    eval("var response = " + object);
    try {
        var content = "<div>Balance: <div id='addDetais'></div><input type='button' id='bttnLogof' value='Salir' onClick='logof();'></div>";
        changeElementContent("userArea", content);
        changeElementContent("accountUserName", response.result.FirstName + " " + response.result.LastName);
        changeDisplayState("loginArea", "none");
        changeDisplayState("registerArea", "none");
        changeDisplayState("accountArea", "block");
        changeDisplayState("userArea", "block");
        getPersonalPreferences();
    }
    catch (err) {
        changeDisplayState("registerArea", "block");
        if (response.message == "ResetPasswordRequired") {
            location.href = "employer.aspx?area=accounting&action=check-details";
        } else {
            if (response.message.indexOf("The server was unable") > -1) {
                alert("Error de acceso.");
            } else {
                alert(response.message);
            }
        }
    }

    clearScript();
}

function DelegateOut(object) {
    changeDisplayState("userArea", "none");
    changeDisplayState("accountArea", "none");
    changeElementContent("userArea", "");
    changeElementContent("accountUserName", "");
    changeElementContent("accountNumber", "");
    changeDisplayState("loginArea", "block");
    changeDisplayState("registerArea", "block");
    clearScript();
}

function DelegatePreferences(object) {
    eval("var response = " + object);
    try {
        var oElement = document.getElementById("addDetais");
        showAcc = response.result.IsCallCentreAccountNumberConstantlyDisplayed;
        showBalance = response.result.IsAccountBalanceConstantlyDisplayed;
        if (showAcc == true || showBalance == true) {
            getPersonalDetais();
        }
    }
    catch (err) {

    }
    clearScript();
}

function DelegateDetails(object) {
    eval("var response = " + object);
    var chosen = 0;
    for (var i = 0; i < response.result.length; i++) {
        if (response.result[i].IDMMAccountClass.toLowerCase() == "credit") {
            chosen = i;
        }
    }

    try {
        var details = "";
        if (showAcc == true) {
            changeElementContent("accountNumber", response.result[chosen].AccountNumber);
        }
        if (showBalance == true) details = formatNumberChileWay(response.result[chosen].TradingBalance);
        changeElementContent("addDetais", "$" + details);
    }
    catch (err) {

    }
    clearScript();
}

function addScript(src) {
    var oBody = document.getElementsByTagName("body");
    var oScript = document.createElement("script")
    oScript.setAttribute("type", "text/javascript");
    oScript.setAttribute("id", "ondemandjs");
    oScript.setAttribute("src", src);
    oBody[0].appendChild(oScript);
}

function clearScript() {
    var oScript = document.getElementById("ondemandjs");
    var oBody = document.getElementsByTagName("body");
    oBody[0].removeChild(oScript);
}

function formatNumberChileWay(num) {
    if (!num)
        return 0;

    var numberStr = num.toString();
    var finalStr = '';
    var iter = 0;
    for (var i = numberStr.length - 1; i >= 0; i--) {
        if ((iter != 0) && (0 == iter % 3))
            finalStr = '.' + finalStr;
        iter++;
        finalStr = numberStr.substr(i, 1) + finalStr;
    }
    return finalStr;
}

function changeDisplayState(elementID, state) {
    var element = document.getElementById(elementID.toString());
    if (element) {
        element.style.display = state.toString();
    }
}

function changeElementContent(elementID, content) {
    var element = document.getElementById(elementID.toString());
    if (element) {
        element.innerHTML = content.toString();
    }
}


function valuesPreMOD11Check(inStr, acceptMod10) {
    var RUT = inStr;
    //	last char can be K or numeric digit. if not, this is invalid RUT
    var Kcheck = RUT.charAt(RUT.length - 1);
    var MyReg = /^\d*$/;
    if (!(Kcheck.toUpperCase() == 'K' || MyReg.test(Kcheck.toString()))) return false;
    //	check remaining part
    RUT = RUT.substring(0, RUT.length - 1);
    //	remove all non-alphanumerics (since they can be valid separators)
    //	remove all digits
    //	if remaining length is not 0, then RUT is invalid
    var s1 = RUT.replace((new RegExp("[^0-9A-Za-z]", "g")), "");
    var s2 = s1.replace((new RegExp("[0-9]", "gi")), "");
    if (RUT.replace((new RegExp("[^0-9A-Za-z]", "g")), "").replace((new RegExp("[0-9]", "gi")), "").length != 0) return false;

    //	finally prepare the string that's gonna be send for MOD11 validation
    RUT = RUT.replace((new RegExp("[^0-9]", "gi")), "") + Kcheck.toString();
    //	final RUT must be between 6 and 9 chars long
    if (RUT.length < 6 || RUT.length > 9) return false;

    return checkMOD11(RUT, acceptMod10);
}

function checkMOD11(inStr, acceptMod10) {
    var validNum = "0123456789";
    var i;
    var resStr = "";
    var inStrLen = inStr.length;
    if (inStrLen >= 6) resStr = inStr.substring(0, inStrLen - 1);
    else resStr = inStr.charAt(0);
    var dv = inStr.charAt(inStrLen - 1);
    if (resStr == "" || dv == "") return false;
    var drv = "0";
    var sum = 0;
    var mul = 2;
    for (i = resStr.length - 1; i >= 0; i--) {
        if (validNum.indexOf(resStr.charAt(i)) < 0) return false;
        var tmp = resStr.charAt(i);
        sum = sum + tmp * mul;
        if (mul == 7)
            mul = 2;
        else
            mul++;
    }

    // calculate mod 11
    var dvi;
    var res = sum % 11;
    if (res == 1) {
        if (acceptMod10)
            drv = "k";
        else
            return false;
    }
    else if (res == 0)
        drv = "0";
    else {
        dvi = 11 - res;
        drv = dvi.toString();
    }

    if (drv != dv.toLowerCase())
        return false;

    return true;
}


function CorrectRUT(objectid) {
    var oInputValue = document.getElementById(objectid).value;
    oInputValue = oInputValue.replace(/^\s+|\s+$/g, "");
    if (oInputValue.length == 0) return;
    while (oInputValue.substr(0, 1) == "0" && oInputValue.length > 0) {
        oInputValue = oInputValue.substr(1, oInputValue.length); // leading zeros are removed
    }
    document.getElementById(objectid).value = oInputValue;
}