define([

'jquery',
'./utils'

], function ($, CompatUtils) {

// No-op CSS adapter that discards all classes by default
function _dropdownAdapter (clazz) {
  return null;
}

function DropdownCSS () { }

DropdownCSS.prototype.render = function (decorated) {
  var $dropdown = decorated.call(this);

  var dropdownCssClass = this.options.get('dropdownCssClass') || '';

  if ($.isFunction(dropdownCssClass)) {
    dropdownCssClass = dropdownCssClass(this.$element);
  }

  var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');
  dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;

  if (dropdownCssClass.indexOf(':all:') !== -1) {
    dropdownCssClass = dropdownCssClass.replace(':all:', '');

    var _cssAdapter = dropdownCssAdapter;

    dropdownCssAdapter = function (clazz) {
      var adapted = _cssAdapter(clazz);

      if (adapted != null) {
        // Append the old one along with the adapted one
        return adapted + ' ' + clazz;
      }

      return clazz;
    };
  }

  var dropdownCss = this.options.get('dropdownCss') || {};

  if ($.isFunction(dropdownCss)) {
    dropdownCss = dropdownCss(this.$element);
  }

  CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);

  $dropdown.css(dropdownCss);
  $dropdown.addClass(dropdownCssClass);

  return $dropdown;
};

return DropdownCSS;

});