MV = MV || {};

MV.ProviderType = (function() {
    var _ptcomponents = {
        detail: MV.ProviderTypeDetail
    };

    var loadDefaultListeners = function loadDefaultListeners() {
        var defaultListeners = "onShow onSubmit onValidate";
        var arlisteners = defaultListeners.split(' ');
        var retobj = {};
        for (var i = 0; i < arlisteners.length; i++) {
            retobj[arlisteners[i]] = $.extend(true, {}, MV.Listener);
        }
        return retobj;
    };

    var createOptionalFields = function(searchFieldsConfig) {
        return _ptcomponents.searchFormFactory.createOptionalFields(searchFieldsConfig);
    };

    return {
        init: function(providerTypeTemplates) {
            this.templates = providerTypeTemplates;
            return this;
        },
        load: function(providerTypeConfig) {
            this.id = providerTypeConfig.id;
            this.config = providerTypeConfig;
            this.mvProviderTypeId = providerTypeConfig.mvProviderTypeId;
            this.providerTypeCode = providerTypeConfig.Code;
            this.name = providerTypeConfig.Name;
            this.listeners = loadDefaultListeners();

            return this;
        },
        createOptionalFields: function(searchFieldsConfig) {
            return createOptionalFields(searchFieldsConfig);
        }
    };

    // module end
})();
