﻿
var RpsCustom = function () {

    return {

        Init: function () {

            RpsCustom.InitRequiredFieldValidation();

        },

        InitRequiredFieldValidation: function () {
            $('label.required').each(function () {
                var forId = '#' + $(this).attr('for');
                var field = $(forId);

                field.blur(function () {
                    var elem = $(this);
                    var val = elem.val();

                    //hide the required message if the value is now filled in
                    if (val !== '')
                        elem.siblings('.required-validator').find('span').hide();
                });
            });
        },

        //event handler that should be bound to a submit event for a form
        ValidateForm: function (e) {

            var field, vSuccess = true;

            for (var i = 0; i < Validators.length; i++) {

                var field = $(Validators[i].id);
                var type = Validators[i].type;
                var val = field.val();

                //if the field is a radio button, get the value of the checked radio button
                if (field.hasClass('radiobutton'))
                    val = field.find('input:checked').val();

                var regex;

                switch (type) {
                    case 'RequiredField':
                        if (val === '' || val == undefined) {
                            field.siblings('.required-validator').find('span').show();
                            vSuccess = false;
                            e.preventDefault();
                        }
                        else {
                            field.siblings('.required-validator').find('span').hide();
                        }
                        break;
                    case 'Areas':
                        if ($('input[name="areas"]:checked').length == 0) {
                            $('#areas').siblings('.required-validator').find('span').show();
                            vSuccess = false;
                            e.preventDefault();
                        }
                        else {
                            field.siblings('.required-validator').find('span').hide();
                        }
                        break;
                };
            }

            return vSuccess;

        }

    };

} ();

var LdeAsyncForm = function () {

    var formLde, divLdeWait;

    function startSubmission(e) {

        e.preventDefault();

        if (RpsCustom.ValidateForm(e) == false)
            return;

        formLde.hide();
        divLdeWait.slideDown();

        $.ajax({
            url: formLde.attr('action'),
            type: 'POST',
            data: formLde.serialize(),
            dataType: 'json',
            success: onSubmitSuccess,
            error: onSubmitError
        });
    }

    function onSubmitSuccess(data, status, xhr) {

        if (data.Success) {
            if (data.Payload && data.Payload.Redirect)
                window.location = data.Payload.Redirect;
            else
                $('#lde-form-message').html(data.Message);
        }
        else {
            $('#lde-form-message').html(R.Common.ErrorProcessingRequest);
        }
    }

    function onSubmitError(xhr, status, error) {
        $('#lde-form-message').html(R.Common.ErrorProcessingRequest);
    }

    return {

        Config: {

        },

        Init: function (form) {

            divLdeWait = $('#lde-form-processing');
            formLde = form;

            if (formLde)
                formLde.submit(startSubmission);

            $('select[name="countryCode"]').change(function () {

                $.ajax({
                    url: '/External/CountryData',
                    data: { countryCode: $(this).val() },
                    dataType: 'json',
                    type: 'GET',
                    success: function (data) {

                        if (data.Success) {
                            var html = [];
                            var state;
                            for (var i = 0; i < data.Payload.states.length; i++) {
                                state = data.Payload.states[i];

                                if (state.id != '')
                                    html.push('<option value="', state.id, '">', state.label, '</option>');
                            }

                            $('select[name="state"]').html(html.join(''));
                        }
                    }
                });

            });
        }
    };

} ();

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != 'undefined'
      ? args[number]
      : match
    ;
    });
};
