(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global.numerifyCurrency = factory());
}(this, (function () { 'use strict';

  function insert(string, subString, start) {
    return string.slice(0, start) + subString + string.slice(start);
  }

  var currency = {
    regexp: /\$/,
    format: function format(value, formatType, roundingFunction, numerify) {
      var symbols = {
        before: formatType.match(/^([+|\-|(|\s|$]*)/)[0],
        after: formatType.match(/([+|\-|)|\s|$]*)$/)[0]
      };
      var symbol = void 0;
      formatType = formatType.replace(/\s?\$\s?/, '');
      var output = numerify._numberToFormat(value, formatType, roundingFunction);
      if (value >= 0) {
        symbols.before = symbols.before.replace(/[-(]/, '');
        symbols.after = symbols.after.replace(/[-)]/, '');
      } else if (value < 0 && !~symbols.before.indexOf('-') && !~symbols.before.indexOf('(')) {
        symbols.before = '-' + symbols.before;
      }
      for (var i = 0; i < symbols.before.length; i++) {
        symbol = symbols.before[i];

        switch (symbol) {
          case '$':
            output = insert(output, '$', i);
            break;
          case ' ':
            output = insert(output, ' ', i);
            break;
        }
      }

      for (var _i = symbols.after.length - 1; _i >= 0; _i--) {
        symbol = symbols.after[_i];

        switch (symbol) {
          case '$':
            output = _i === symbols.after.length - 1 ? output + '$' : insert(output, '$', -(symbols.after.length - (1 + _i)));
            break;
          case ' ':
            output = _i === symbols.after.length - 1 ? output + ' ' : insert(output, ' ', -(symbols.after.length - (1 + _i)));
            break;
        }
      }
      return output;
    }
  };

  return currency;

})));