'use strict';

oml.Preferences = (function() {

    var that = {};

    that.set = function() {

        var args = Ox.isObject(arguments[0])
                ? args
                : Ox.makeObject([arguments[0], arguments[1]]),
            set = {},
            preferences = oml.user.preferences,
            previousPreferences = Ox.clone(preferences, true);

        Ox.forEach(args, function(value, key) {
            if (!Ox.isEqual(preferences[key], value)) {
                preferences[key] = value;
                set[key] = value;
            }
        });
        if (Ox.len(set)) {
            oml.api.setPreferences(set);
            Ox.forEach(set, function(value, key) {
                Ox.forEach(oml.$ui, function($element) {
                    if (Ox.UI.isElement($element)) {
                        $element.triggerEvent('oml_' + key.toLowerCase(), {
                            value: value,
                            previousValue: previousPreferences[key]
                        });
                    }
                });
            });
        }

    };

    return that;

}());