/* global createNS */
/* exported filtersFactory */

var filtersFactory = (function () {
  var ob = {};
  ob.createFilter = createFilter;
  ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;

  function createFilter(filId) {
    var fil = createNS('filter');
    fil.setAttribute('id', filId);
    fil.setAttribute('filterUnits', 'objectBoundingBox');
    fil.setAttribute('x', '0%');
    fil.setAttribute('y', '0%');
    fil.setAttribute('width', '100%');
    fil.setAttribute('height', '100%');
    return fil;
  }

  function createAlphaToLuminanceFilter() {
    var feColorMatrix = createNS('feColorMatrix');
    feColorMatrix.setAttribute('type', 'matrix');
    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
    feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');
    return feColorMatrix;
  }

  return ob;
}());
