var viewModel = (function() {
    var self = this;
    selectedUser = ko.observable(new user());
    mobileNo = ko.observable('');
    mobileOperators = ko.observableArray([
            'GLOBE',
            'SMART',
            'SUN',
            'DITO'
        ]);
    mobileOperator = ko.observable('');
    rates = ko.observableArray();
    selectedRate = ko.observable(new rate());
    token = ko.observable('');
    password = ko.observable('');
    resetText = ko.observable('reset');
    showdenom = ko.observable(false);
    qoute = function(data, event) {
        $(event.currentTarget).attr("disabled", "disabled");
        $(event.currentTarget).html('Processing')
        var parameters = {
            '_endpoint': 'load/quote',
            'sku': selectedRate().sku,
            'msisdn': this.mobileNo(),
        };
        $.ajax({
            url: "/restadapter",
            type: "GET",
            data: $.param(ko.toJS(parameters)),
            processData: false,
            contentType: "application/json",
            dataType: "json",
            success: function(result) {
                $("#btnsendloadnext_div").hide();
                $("#password_div").show();
                $('#btnsendloadsubmit_div').show();
                $(event.currentTarget).attr("disabled", false);
                $(event.currentTarget).html('forwardNext');
                token(result.data.token);
            },
            error: function(result) {
                var error = ko.utils.parseJson(result.responseText);
                var text = "";
                $.each(error.message, function(index, val) {
                    text += index + ": " + val + "
";
                });
                text += "";
                toastr.error(text);
                $(event.currentTarget).attr("disabled", false);
                $(event.currentTarget).html('forwardNext');
            }
        });
    };
    buy = function(data, event) {
        $(event.currentTarget).attr("disabled", "disabled");
        $(event.currentTarget).html('Processing')
        var parameters = {
            '_endpoint': 'load/buy',
            'token': token,
            'password': password
        };
        $.ajax({
            url: "/restadapter",
            type: "POST",
            data: ko.toJSON(parameters),
            processData: false,
            contentType: "application/json",
            dataType: "json",
            success: function(result) {
                toastr.success('Transaction being processed');
                selectedUser().moneyWallet((parseFloat(selectedUser().moneyWallet()) - parseFloat(selectedRate().amount())).toFixed(2));
                amplify.store("__client", ko.toJS(selectedUser()));
                $('#btnsendloadsubmit_div').hide()
                $('#btnsendloaddone_div').show();
                $(event.currentTarget).attr("disabled", false);
                $(event.currentTarget).html('forwardSubmit');
                resetText('Done');
            },
            error: function(result) {
                $(event.currentTarget).attr("disabled", false);
                $(event.currentTarget).html('forwardSubmit');
                var error = ko.utils.parseJson(result.responseText);
                var text = "";
                $.each(error.message, function(index, val) {
                    text += index + ": " + val + "
";
                });
                text += "";
                toastr.error(text);
            }
        });
    };
    reset = function() {
        this.mobileNo('');
        this.mobileOperator('');
        this.rates([]);
        this.selectedRate('');
        this.token('');
        this.password("");
        this.password(null);
        this.oldValue = undefined;
        $("#btnsendloadnext").attr("disabled", false);
        $("#btnsendloadnext").html('forwardNext');
        $("#btnsendloadsubmit").attr("disabled", false);
        $("#btnsendloadsubmit").html('forwardSubmit');
    };
    onOperatorChange = function() {
        $("#denom_amnt").hide();
        $("#denom").hide();
        var parameters = {
            '_endpoint': 'rate/user/' + selectedUser().id(),
            'size': 500,
            'page': 1,
            'filter': 'category:' + mobileOperator() + ':=:AND',
            'fields': 'rates.sku,amount,facevalue'
        };
        $.ajax({
            url: "/restadapter",
            type: "GET",
            data: $.param(ko.toJS(parameters)),
            processData: true,
            contentType: "application/json",
            dataType: "json",
            success: function(result) {
                ko.utils.arrayForEach(result.data.records, function(model) {
                    rates.push(new rate(model));
                });
                $("#denom_amnt").show();
                $("#denom").show();
            },
            error: function(result) {
                var text = "";
                $.each(result.responseJSON, function(index, val) {
                    text += index + ": " + val + "
";
                });
                text += "";
                toastr.error(text);
            }
        });
        return true;
    };
    onMSISDChange = function() {
        oldValue = typeof(oldValue) == 'undefined' ? '' : oldValue;
        if (oldValue != this.mobileNo() && this.mobileNo().length == 12) {
            rates([]);
            mobileOperator('');
            oldValue = this.mobileNo();
            var parameters = {
                '_endpoint': 'load/operator_lookup',
                'msisdn': this.mobileNo()
            };
            mobileOperator('PROCESSING...');
            $.ajax({
                url: "/restadapter",
                type: "GET",
                data: $.param(ko.toJS(parameters)),
                processData: false,
                contentType: "application/json",
                dataType: "json",
                success: function(result) {
                    mobileOperator(result.data.operatorType);
                    /* if (result.data.subscriptionType == "POSTPAID") {
                        toastr.error("Mobile number should be a prepaid number");
                        mobileOperator('');
                    } else { */
                        var parameters = {
                            '_endpoint': 'rate/user/' + selectedUser().id(),
                            'size': 500,
                            'page': 1,
                            'filter': 'category:' + result.data.operatorType + ':=:AND',
                            'fields': 'rates.sku,amount,facevalue'
                        };
                        $.ajax({
                            url: "/restadapter",
                            type: "GET",
                            data: $.param(ko.toJS(parameters)),
                            processData: true,
                            contentType: "application/json",
                            dataType: "json",
                            success: function(result) {
                                rates([]);
                                ko.utils.arrayForEach(result.data.records, function(model) {
                                    rates.push(new rate(model));
                                });
                            },
                            error: function(result) {
                                var text = "";
                                $.each(result.responseJSON, function(index, val) {
                                    text += index + ": " + val + "
";
                                });
                                text += "";
                                toastr.error(text);
                            }
                        });
                    //}
                },
                error: function(result) {
                    var text = "";
                    $.each(result.data.records, function(index, val) {
                        text += index + ": " + val + "
";
                    });
                    text += "";
                    toastr.error(text);
                }
            });
        }
        return true;
    };
})();
ko.bindingHandlers.executeOnEnter = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
        var allBindings = allBindingsAccessor();
        $(element).keypress(function(event) {
            var keyCode = (event.which ? event.which : event.keyCode);
            allBindings.executeOnEnter.call(viewModel);
            return true;
        });
    }
};
(function($) {
    $.fn.inputFilter = function(inputFilter) {
        return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function(event) {
            if (inputFilter(this.value)) {
                this.oldValue = this.value;
                this.oldSelectionStart = this.selectionStart;
                this.oldSelectionEnd = this.selectionEnd;
            } else if (this.hasOwnProperty("oldValue")) {
                this.value = this.oldValue;
                this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
            }
        });
    };
}(jQuery));
ko.bindingHandlers.MSISDN = {
    init: function(element, valueAccessor) {
        $(element).inputFilter(function(value) {
            value = value.replace(/\D/g, '');
            var isnum = /^\d+$/.test(value);
            if ((isnum && value.length < 13) || (event.keyCode == '8')) {
                value = value.replace(/[^\d\.]/g, "");
                if (value.length > 9 && value.length <= 12) {
                    if (value.length <= 12 && value.charAt(0) == '9') {
                        var number = value.substr(value.length - 10);
                        value = "63" + number;
                    }
                    if (value.length <= 12 && value.charAt(0) == '0') {
                        var number = value.substr(value.length - 9);
                        value = "63" + number;
                    }
                }
            }
            element.value = value;
            if (event.keyCode != '8')
                return /^(0|9|6|(63)|(09)|(639)|$)[0-9]{0,9}$/.test(value);
        });
    }
};
ko.applyBindings(viewModel);