﻿/// <reference path="../Util.js" />
/// <reference path="../../jquery-1.4.2.min.js" />
/// <reference path="../jquery.tooltip.js" />
/// <reference path="../lib/jquery.json-2.2.min.js" />
/// <reference path="../Enums.js" />

var __cookieName = "UserAuthenticated";
var __cookieNameAffiliated = "AffiliatedId";

var __AuthenticationSuccessDelegates = new Array();

var __RegistrationSuccessDelegates = new Array();

var __checkBalance = false;

var isEdit = false;


// Representa o controle 
function RegisterUserView(controlID) {
    thisControlView = this;

    $(document).ready(
        function () {
            $('.bto-ok').click(function () {
                if (CheckAuthentication(controlID))
                    return CheckCredentials($('#_Username'), $('#_Password'));
                else
                    return false;
            });

            $('#_ConfirmacaoEmail').keypress(function (e) {

                if (e.ctrlKey)
                    e.preventDefault();
            });

            $("#_Username").keypress(function (e) {
                if (e.which == 13) {
                    if (CheckAuthentication(controlID))
                        return CheckCredentials($('#_Username'), $('#_Password'));
                    else
                        return false;
                }
            });

            $("#_Password").keypress(function (e) {
                if (e.which == 13) {
                    if (CheckAuthentication(controlID))
                        return CheckCredentials($('#_Username'), $('#_Password'));
                    else
                        return false;
                }
            });

            $('.bto-continuar').click(function () {
                if (CheckRegistration(SalesChannelId))
                    return SaveUser(controlID, SalesChannelId);
                else
                    return false;
            })

            $('#imgCancelUser').click(function () {
                ClearFields();
            })

            $('#_DDDCelular').keyup(function () {
                if (this.value.length == 2)
                    $('#_NumeroCelular').focus();
            })

            $('#_NumeroCelular').keyup(function () {
                if (this.value.length == 8)
                    $('#_DDDResidencial').focus();
            })

            $('#_DDDResidencial').keyup(function () {
                if (this.value.length == 2)
                    $('#_NumeroResidencial').focus();
            })

            $('#_NumeroResidencial').keyup(function () {
                if (this.value.length == 8)
                    $('#_DDDComercial').focus();
            })

            $('#_DDDComercial').keyup(function () {
                if (this.value.length == 2)
                    $('#_NumeroComercial').focus();
            })

        }
    );
}

function ClearLoginFields() {
    try {
        $('#_Username').val('');
        $('#_Password').val('');
    } catch (e) {
    }
}

function ClearFields() {
    $('.cadastro > div > div > input[type="text"]').each(function (idx, domEle) {
        $(domEle).val('');
    });

    $('.cadastro > div > div > input[type="password"]').each(function (idx, domEle) {
        $(domEle).val('');
    });

    $('.cadastro > div > div > input[type="checkbox"]').each(function (idx, domEle) {
        $(domEle).attr('checked', '');
    });
}

function ShowWelcomeFrame(User, Points) {
    try {
        $('#pnlLogin').hide();
        $('#pnlAutenticado').show();
        $('#WelcomeName').html(User);
        $('#UserPoints').html('<nobr>' + (Points == undefined ? '0' : Points) + '</nobr>');
        __checkBalance = true;

        RecursiveCheckBalance();
    }
    catch (e) {
        if (e != null && e != 'undefined' && e.Message != 'undefined') {
            alert("Erro: 1139\nDescrição do erro:" + e.Message);
        }
    }
}

function HideWelcomeFrame() {
    $('#pnlLogin').show();
    $('#WelcomeName').html('');
    $('#pnlAutenticado').hide();
    __checkBalance = false;
}

function CheckAuthentication() {
    var login = $('#_Username')[0];
    var password = $('#_Password')[0];

    if (trim(login.value).length == 0) {
        alert("Preencha o campo 'E-Mail'");
        login.focus();
        return false;
    }

    if (!isEmail(login.value)) {
        alert('Endereço de e-mail inválido!');
        login.focus();
        return false;
    }

    if (!Cookies.checkCookie(__cookieNameAffiliated)) {
        if (trim(password.value).length == 0) {
            alert("Digite a sua senha");
            password.focus();
            return false;
        }
    }

    return true;
}

function CheckRegistration(SalesChannelId) {
    var Email = $('#_Email');
    var EmailConfirmacao = $('#_ConfirmacaoEmail');
    var hdnConfEmail = $("#hdnConfEmail");
    var Senha = $('#_Senha');
    var RSenha = $('#_RSenha');
    var Nome = $('#_Nome');
    var Sobrenome = $('#_Sobrenome');
    var CPF = $('#_CPF');
    var NumeroCartao = $('#_Num_Cartao');
    var DDDCelular = $('#_DDDCelular');
    var TelCelular = $('#_NumeroCelular');
    var DDDResidencial = $('#_DDDResidencial');
    var TelResidencial = $('#_NumeroResidencial');
    var DDDComercial = $('#_DDDComercial');
    var TelComercial = $('#_NumeroComercial');

    if (trim(Email.val()).length == 0) {
        alert("Preencha o campo 'E-Mail'");
        Email.focus();
        return false;
    }

    if (!isEmail(Email.val())) {
        alert('Endereço de e-mail inválido!');
        Email.focus();
        return false;
    }

    if ((SalesChannelId == 6) &&
        (hdnConfEmail.val() != Email.val())) {

        if (trim(EmailConfirmacao.val()).length == 0) {
            alert('Confirme seu E-mail');
            EmailConfirmacao.focus();
            return false;
        }

        if (trim(Email.val()) != trim(EmailConfirmacao.val())) {
            alert('E-mail diferentes! Confirme');
            EmailConfirmacao.focus();
            return false;
        }
    }

    if (!Cookies.checkCookie(__cookieNameAffiliated)) {

        if (trim(Senha.val()).length == 0) {
            alert("Preencha o campo 'Senha'");
            Senha.focus();
            return false;
        }

        if (trim(Senha.val()).length < 6) {
            alert("Digite ao menos 6 caracteres no campo 'Senha'");
            Senha.focus();
            return false;
        }

        if (trim(RSenha.val()).length == 0) {
            alert("Confirme sua senha.");
            RSenha.focus();
            return false;
        }

        if (trim(RSenha.val()) != trim(Senha.val())) {
            alert("Senhas diferentes! Confirme.");
            RSenha.focus();
            return false;
        }
    }

    if (trim(Nome.val()).length == 0) {
        alert("Digite seu nome");
        Nome.focus();
        return false;
    }

    if (trim(Sobrenome.val()).length == 0) {
        alert("Preencha o campo 'Sobrenome'");
        Sobrenome.focus();
        return false;
    }

    if (SalesChannelId == 6) {
        var num = CPF.val().replace(/[^0-9]/g, '');

        if (trim(num).length == 0) {
            alert("Preencha o campo 'CPF'");
            CPF.focus();
            return false;
        }

        if (!validCPF_CNPJ(num)) {
            if (num.length > 11)
                alert("CNPJ inválido");
            else
                alert("CPF inválido");
            CPF.focus();
            return false;
        }
    }
    else if (SalesChannelId == 7) {

        if (!NumeroCartao[0].disabled) {

            if (trim(NumeroCartao.val()).length != 15) {
                alert("O campo numero do cartão deve ter 15 caracteres");
                NumeroCartao.focus();
                return false;
            }
        }
    }

    if ((trim(DDDCelular.val()).length == 0) && (trim(TelCelular.val()).length == 0) && (trim(DDDResidencial.val()).length == 0) && (trim(TelResidencial.val()).length == 0)) {
        alert("É obrigatório o preenchimento de ao menos um telefone (residencial ou celular).");
        DDDCelular.focus();
        return false;
    }

    if ((trim(DDDCelular.val()).length > 0) || (trim(TelCelular.val()).length > 0)) {

        if (trim(DDDCelular.val()).length != 2) {
            alert('DDD do celular inválido!');
            DDDCelular.focus();
            return false;
        }

        if (!ValidatePhoneNumber(TelCelular.val(), PhoneType.Celular)) {
            alert('Número de celular inválido!');
            TelCelular.focus();
            return false;
        }
    }

    if ((trim(DDDResidencial.val()).length > 0) || (trim(TelResidencial.val()).length > 0)) {

        if (trim(DDDResidencial.val()).length != 2) {
            alert('DDD do telefone inválido!');
            DDDResidencial.focus();
            return false;
        }

        if (!ValidatePhoneNumber(TelResidencial.val(), PhoneType.Residencial)) {
            alert('Número de telefone inválido!');
            TelResidencial.focus();
            return false;
        }
    }

    if (trim(TelComercial.val()).length != 0) {
        if (!ValidatePhoneNumber(TelComercial.val(), PhoneType.Comercial)) {
            alert('Número de telefone comercial inválido!');
            TelComercial.focus();
            return false;
        }
    }

    return true;
}

function CheckCredentials(Username, Password) {
    var TimeOutServiceParameter = 18000000;
    var cookAffiliated = (Cookies.getCookie(__cookieNameAffiliated) ? Cookies.getCookie(__cookieNameAffiliated) : null);

    var oLogin = {
        "Email": Username[0].value,
        "Password": Password[0].value,
        "PointOfSale": CurrentPointOfSale,
        "AffiliatedId": cookAffiliated
    };

    var req = { "UserAuthentication": oLogin };

    var clientWS = new ServiceProxy(PathWebService);
    DisplayLoader("call");
    clientWS.invoke("AuthenticateUser", { "req": oLogin }, onAuthenticateSuccess, onAuthenticateError, undefined, TimeOutServiceParameter);
}

function DisplayLoader(event) {
    if (event == "call") {
        $('.bto-ok').hide();
        $('#register-loader').show();
    }
    if(event == "error")
    {
        $('#_Password').removeAttr('disabled');
        $('#_Username').removeAttr('disabled');
        $('.bto-ok').show();
        $('#register-loader').hide();
    }
    if (event == "Success") {
        $('#_Password').removeAttr('disabled');
        $('#_Username').removeAttr('disabled');
        $('.bto-ok').show();
        $('#register-loader').hide();
    }

}
function GetBalanceUser(currUser)
{
    var TimeOutServiceParameter = 18000000;
    var oPartner = {
        "Id": currUser.Id,
        "SalesChannelId": currUser.SalesChannelId,
        "B2BUser": { "Identifier": currUser.B2BUser.Identifier },
        "SalesChannel": currUser.SalesChannel
    };

    var req = { "UserAuthenticationB2BPartnerPoint": oPartner };

    var clientWS = new ServiceProxy(PathWebService);
    clientWS.invoke("GetUserBalance", { "req": oPartner }, onGetBalanceSuccess, onGetBalanceError, undefined, TimeOutServiceParameter);
}

function RecursiveCheckBalance() {
    if (__checkBalance) {
        try {
            var obj = Cookies.getCookieObject(__cookieName);
            GetBalanceUser(obj);
        }
        catch (e) {
            ClearLoginFields();
            HideWelcomeFrame();
            __checkBalance = false;
            alert('Ocorreu erro ao consultar o saldo de pontos.\nFavor entrar em contato com a central de atendimento.');
        }
        //setTimeout("RecursiveCheckBalance()", 10000);
    }
}

function onGetBalanceSuccess(response) {
    if (response.Success == true) {
        try {
            var strNumber = response.Total;

            strNumber = number_format(strNumber, 0, ' ', '.');
            $('#UserPoints').html('<nobr>' + strNumber + '</nobr>');
        }
        catch (e) {
            alert("Erro: 1140\nDescrição do erro:" + e.Message);
        }
    }
    else {

        ShowErrorMessage(response.FriendlyErrorMessage);
    }
}

function onGetBalanceError(response) {
    //alert("Erro: 1142\nDescrição do erro:" + response.FriendlyErrorMessage);
    alert('Ocorreu um erro ao consultar o saldo do usuário!');
}

function LogoutUser() {
    var TimeOutServiceParameter = 18000000;

    try {
        // LIMPANDO O HIDDEN QUE GUARDA O IDENTIFIER
        $('#_Emar').val('');
        var cook = Cookies.getCookieObject(__cookieName);
    }
    catch (e) {
        ClearLoginFields();
        HideWelcomeFrame();
        __checkBalance = false;
    }

    var clientWS = new ServiceProxy(PathWebService);
    clientWS.invoke("LogoutUser", null, onLogoutSuccess, onLogoutError, undefined, TimeOutServiceParameter);
}

function onLogoutSuccess(response) {
    ClearLoginFields();
    HideWelcomeFrame();
    __checkBalance = false;
}

function onLogoutError(response) {
    alert("Erro ao efetuar o logout");
}


function SaveUser(cID, SalesChannelId) {
    var userObj = null;

    try {
        userObj = Cookies.getCookieObject(__cookieName); //$.parseJSON(Base64.decode(Cookies.getCookie("Autenticado")));
    }
    catch (e)
    { }

    var id = (userObj != null) ? userObj.Id : 0;

    var Email = $('#_Email').val();
    var Senha = $('#_Senha').val();
    var Nome = $('#_Nome').val();
    var Sobrenome = $('#_Sobrenome').val();
    var Identifier = '';
    var DDDCelular = $('#_DDDCelular').val();
    var TelCelular = $('#_NumeroCelular').val();
    var DDDResidencial = $('#_DDDResidencial').val();
    var TelResidencial = $('#_NumeroResidencial').val();
    var DDDComercial = $('#_DDDComercial').val();
    var TelComercial = $('#_NumeroComercial').val();
    var ReceberEmail = $('#_chkReceberEmails').attr("checked");
    var ReceberSMS = $('#_chkReceberSMS').attr("checked");

    // SE FOR BRADESCO, O IDENTIFIER SERÁ O CPF
    if (SalesChannelId == 6) {
        Identifier = $('#_CPF').val();
        Identifier = Identifier.replace(/[^0-9]/g, '');
    }
    // SE FOR AMEX, O IDENTIFIER SERÁ O EMAR. CASO O EMAR ESTEJA NULO (PRIMEIRO CADASTRO), O IDENTIFIER SERÁ O NUMERO DO CARTÃO
    else if (SalesChannelId == 7) {
        Identifier = $('#_Emar').val();

        if ((Identifier == null) || (Identifier == '')) {
            Identifier = $('#_Num_Cartao').val();
        }
    }

    var TimeOutServiceParameter = 18000000;

    var oUser = {
        "Id": id,
        "Email": Email,
        "Name": (Nome + " " + Sobrenome),
        "Password": Senha,
        "SalesChannelId": SalesChannelId,
        "AcceptReceiveEmail": ReceberEmail,
        "IsEncrypted": true,
        "B2BUser": {
            "Identifier": Identifier,
            "ContactInformations": this.GetRequestContactInformations(),
            "AcceptReceiveSMS": ReceberSMS
        }

    };

    var affId = (Cookies.checkCookie(__cookieNameAffiliated) ? Cookies.getCookie(__cookieNameAffiliated) : null);

    var req = { "CurrentUser": oUser,
        'AffiliatedId': affId
    };

    var clientWS = new ServiceProxy(PathWebService);
    clientWS.invoke("ProcessUser", { "req": req }, onSaveSuccess, onSaveError, undefined, TimeOutServiceParameter);
}

this.GetRequestContactInformations = function () {
    var oRequest = [];
    var DDDCelular = $('#_DDDCelular').val();
    var TelCelular = $('#_NumeroCelular').val();
    var DDDResidencial = $('#_DDDResidencial').val();
    var TelResidencial = $('#_NumeroResidencial').val();
    var DDDComercial = $('#_DDDComercial').val();
    var TelComercial = $('#_NumeroComercial').val();

    if (TelComercial != '')
        oRequest.push({ "PhoneType": PhoneType.Comercial, "PreFix": DDDComercial, "PhoneNumber": TelComercial });

    if (TelResidencial != '')
        oRequest.push({ "PhoneType": PhoneType.Residencial, "PreFix": DDDResidencial, "PhoneNumber": TelResidencial });

    if (TelCelular != '')
        oRequest.push({ "PhoneType": PhoneType.Celular, "PreFix": DDDCelular, "PhoneNumber": TelCelular });

    return oRequest;
}

function onSaveSuccess(response) {
    if (response.Success == true) {
        try {
            ClearFields();
            CloseHintBoxy('modalCadastro');

            ShowWelcomeFrame(response.CurrentUser.Name, 0);

            __checkBalance = true;
            RecursiveCheckBalance();

            if (__RegistrationSuccessDelegates != null && __RegistrationSuccessDelegates != 'undefined' && __RegistrationSuccessDelegates.length > 0) {
                for (var _d in __RegistrationSuccessDelegates) {
                    eval(__RegistrationSuccessDelegates[_d]);
                }
            }
        }
        catch (e) { }
        var msg = isEdit ? "Editado com sucesso!" : "Cadastro efetuado com sucesso!";
        ShowSuccessMessage(msg, "ALERTA");
        isEdit = false;
    }
    else {

        if (SalesChannelId == 6) {
            msgErro = (response.FriendlyErrorMessage != '' ? response.FriendlyErrorMessage :
            "Por favor, entre em contato com a Central de Atendimento e verifque o motivo de sua impossibilidade de realizar o cadastro no portal.");
        }
        else if (SalesChannelId == 7) {
            msgErro = (response.FriendlyErrorMessage != '' ? response.FriendlyErrorMessage :
            "Por favor, entre em contato com a Central de Atendimento e verifique o motivo de \n sua impossibilidade de realizar o cadastro no Programa de Recompensas Membership Rewards.");
        }

        alert(msgErro);
    }
}

function onSaveError(response) {
    if (SalesChannelId == 6) {
        alert("Por favor, entre em contato com a Central de Atendimento e verifque o motivo de sua impossibilidade de realizar o cadastro no portal.");
    }
    else if (SalesChannelId == 7) {
        alert("Por favor, entre em contato com a Central de Atendimento e verifique o motivo de \n sua impossibilidade de realizar o cadastro no Programa de Recompensas Membership Rewards.");
    }
}

function onAuthenticateSuccess(response) {
    if (response.Success == true)
    {
        try {
            DisplayLoader("Success");
            ClearFields();

            CloseHintBoxy('modalCadastro');
            ShowWelcomeFrame(response.CurrentUser.Name, response.CurrentUser.B2BUser.Balance);

            //RecursiveCheckBalance();
            //GetBalanceUser(response.CurrentUser);

            if (__AuthenticationSuccessDelegates != null && __AuthenticationSuccessDelegates != 'undefined' && __AuthenticationSuccessDelegates.length > 0) {
                for (var _d in __AuthenticationSuccessDelegates) {
                    eval(__AuthenticationSuccessDelegates[_d]);
                }
            }
        }
        catch (e) {
            alert("Erro: 1141\nDescrição do erro:" + e.Message);
        }
    }
    else {
        DisplayLoader("error");
        ShowErrorMessage(response.FriendlyErrorMessage, 'alerta');
    }
}

function onAuthenticateError(response) {
    ShowErrorMessage("Ocorreu um erro na autenticação do usuário.");
}

this.ShowErrorMessage = function (strMSG, Tipo) {
    $('#B2BUserControlErrorMessage').html("<b>" + strMSG + "</b>");
    $('#B2BUserControlErros').fadeIn(200);
    setTimeout(function () { $('#B2BUserControlErros').fadeOut(200); }, 1500);
}

this.ShowSuccessMessage = function (strMSG, Tipo) {
    $('#B2BUserControlSuccessMessage').html("<b>" + strMSG + "</b>");
    $('#B2BUserControlSuccess').fadeIn(200);
    setTimeout(function () { $('#B2BUserControlSuccess').fadeOut(200); }, 1500);
}

this.ShowErrorMessages = function (strMSG, Tipo) {
    $("#erro").hide();
    $("#alerta").hide();

    if (Tipo == undefined)
        Tipo = "erro";

    if (strMSG == null || strMSG == undefined || strMSG == null)
        strMSG = "Problemas de processamento";

    Tipo = Tipo.toLowerCase()

    if (Tipo != "erro" && Tipo != "alerta")
        Tipo = "erro";

    if (Tipo == "erro") {
        strMSG = "<p><strong>ERRO:</strong><br />" + strMSG;
    }
    else if (Tipo == "alerta") {
        strMSG = "<p><strong>ALERTA:</strong><br />" + strMSG;
    }
    strMSG = strMSG + "</p>";

    $("#" + Tipo.toLowerCase()).html(strMSG);
    $("#" + Tipo.toLowerCase()).show();
    window.scrollTo(0, 0);
}

function EditUser() {
    isEdit = true;
    //CreateHintBoxy($('#modalCadastro'));
    ShowRegisterUser();

    var userObj = Cookies.getCookieObject(__cookieName);

    var nome = userObj.Name.split(' ');
    var primeironome = '', ultimonome = '';

    if (nome.length == 1) {
        primeironome = nome[0];
    }
    else {
        for (var _i = 0; _i < nome.length - 1; _i++) {
            primeironome += ((primeironome.length > 0 ? ' ' : '') + nome[_i]);
        }

        ultimonome = nome[nome.length - 1];
    }

    $('#_Email').val(userObj.Email);
    //$('#_Senha').val(user);
    $('#hdnConfEmail').val(userObj.Email);
    $('#_Nome').val(primeironome);
    $('#_Sobrenome').val(ultimonome);
    $('#_CPF').val(userObj.B2BUser.Identifier);
    $('#_Emar').val(userObj.B2BUser.Identifier);

    if (userObj.B2BUser.ContactInformations != null) {

        for (var idx in userObj.B2BUser.ContactInformations) {
            var ci = userObj.B2BUser.ContactInformations[idx];

            switch (ci.PhoneType) {
                case PhoneType.Celular:
                    $('#_DDDCelular').val(ci.PreFix);
                    $('#_NumeroCelular').val(ci.PhoneNumber);
                    break;

                case PhoneType.Comercial:
                    $('#_DDDComercial').val(ci.PreFix);
                    $('#_NumeroComercial').val(ci.PhoneNumber);
                    break;

                case PhoneType.Residencial:
                    $('#_DDDResidencial').val(ci.PreFix);
                    $('#_NumeroResidencial').val(ci.PhoneNumber);
                    break;
            }
        }
    }

    $('#_chkReceberEmails').attr("checked", userObj.AcceptReceiveEmail);
    $('#_chkReceberSMS').attr("checked", userObj.B2BUser.AcceptReceiveSMS);

    if (SalesChannelId == 7)
        $('#_Email').attr('disabled', true);

    $('#_CPF').attr("disabled", true);
    $('#_Num_Cartao').attr("disabled", true);
}

function ShowRegisterUser() {
    CreateHintBoxy($('#modalCadastro'));
    $('#_Email').val($('#_Username').val());

    if (Cookies.checkCookie(__cookieNameAffiliated)) {
        $('#_Senha').attr(
                        {
                            'readonly': 'readonly',
                            'disabled': 'disabled'
                        }
                        );

        $('#_Senha').css('background', '#DDDDDD');

        $('#_RSenha').attr(
                        {
                            'readonly': 'readonly',
                            'disabled': 'disabled'
                        }
                        );

        $('#_RSenha').css('background', '#DDDDDD');
    }
    else {
        $('#_Senha').removeAttr('readonly');
        $('#_RSenha').removeAttr('readonly');

        $('#_Senha').removeAttr('disabled');
        $('#_RSenha').removeAttr('disabled');

        $('#_Senha').css('background', '#FFFFFF');
        $('#_RSenha').css('background', '#FFFFFF');
    }

    $('#_CPF').attr("disabled", false);
    $('#_Num_Cartao').attr("disabled", false);
}

function CheckFieldsDontForget() {
    var Email = $('#_Username');

    if (trim(Email.val()).length == 0) {
        alert("Preencha o campo 'E-Mail'");
        Email.focus();
        return false;
    }

    if (!isEmail(Email.val())) {
        alert('Endereço de e-mail inválido!');
        Email.focus();
        return false;
    }

    return true;
}

function DontForget() {
    if (CheckFieldsDontForget()) {
        var TimeOutServiceParameter = 18000000;

        var Email = $('#_Username');

        var req = {
            'Email': Email.val(),
            'PointOfSale': CurrentPointOfSale,
            'SalesChannelId': SalesChannelId
        };

        var clientWS = new ServiceProxy(PathWebService);
        clientWS.invoke("RetrievePassword", { 'req': req }, onDontForgetSuccess, onDontForgetError, undefined, TimeOutServiceParameter);
    }
}

function onDontForgetSuccess(response) {
    if (response.Success == true) {
        try {
            ShowSuccessMessage("Sua senha foi enviada para seu e-mail", "alerta");
        }
        catch (e) {
            ShowErrorMessage("Ocorreu um erro de processamento", "erro");
        }
    }
    else {
        ShowErrorMessage("E-mail inválido", 'alerta');
    }
}

function onDontForgetError(response) {
    ShowErrorMessage(response.FriendlyErrorMessage);
}


function number_format(number, decimals, dec_point, thousands_sep) {
    // %        nota 1: Para 1000.55 retorna com precisão 1 no FF/Opera é 1,000.5, mas no IE é 1,000.6
    // *     exemplo 1: number_format(1234.56);
    // *     retorno 1: '1,235'
    // *     exemplo 2: number_format(1234.56, 2, ',', ' ');
    // *     retorno 2: '1 234,56'
    // *     exemplo 3: number_format(1234.5678, 2, '.', '');
    // *     retorno 3: '1234.57'
    // *     exemplo 4: number_format(67, 2, ',', '.');
    // *     retorno 4: '67,00'
    // *     exemplo 5: number_format(1000);
    // *     retorno 5: '1,000'
    // *     exemplo 6: number_format(67.311, 2);
    // *     retorno 6: '67.31'

    var n = number, prec = decimals;
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;

    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

    var abs = Math.abs(n).toFixed(prec);
    var _, i;

    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;

        _[0] = s.slice(0, i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep + '$1');

        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }

    return s;
}

this.ContactsLoad = function () {
    var ContactList = [];
    var i = 0;
    var contact;
    var celphoneCount = 0;

    while (true) {
        if (window.document.getElementById("selPhoneType" + i) == null)
            break;

        var contact = new Contact();
        contact.PhoneType = $("#selPhoneType" + i).val();
        contact.PhonePrefix = $("#txtPrefix" + i).val();
        contact.Phone = $("#txtPhoneNumber" + i).val();
        if (isNaN(contact.PhoneType))
            contact.PhoneType = 0;

        if (contact.PhoneType == 2)
            celphoneCount = celphoneCount + 1;

        ContactList.push(contact);
        i++;
    }

    if (celphoneCount == ContactList.length)
        for (var i = 0; i < ContactList.length; i++)
            ContactList[i].PhoneType = 0;



    return ContactList;
}

