function xFormSplitterFilter(defaultChunkSize, forceDefaultChunkSize, fieldType) {
  this.ns = xFormSplitterFilter.getNS();
  this.defaultChunkSize      = defaultChunkSize > 0 ? defaultChunkSize : 100;
  this.forceDefaultChunkSize = forceDefaultChunkSize ? true : false;
  this.fieldType             = fieldType ? fieldType : 'hidden';
  this.enabled               = true;
}
/* filter interface */
xFormSplitterFilter.prototype.isEnabled = function() {
  return this.enabled;
}
xFormSplitterFilter.prototype.getName = function() {
  return 'formSplitter';
}
xFormSplitterFilter.getNS = function() {
  return 'transform';
}
xFormSplitterFilter.prototype.split = function(item, chunkSize) {
  var node  = item.getElement();
  var value = item.getValue();

  for (var j = 0; j < value.length; j += chunkSize) {
    var subNode = DOMUtl.createNode(
      'input', 
      null, 
      {type  : this.fieldType,
       value : value.substr(j, chunkSize),
       name  : item.getName()},
      node.ownerDocument);
    node.parentNode.insertBefore(subNode, node);
    this.copyAttrs(subNode, node);
  }
  //disable element
  node.name1 = node.name;
  node.name = '';
  node.removeAttribute('name');

  log(sprintf('    splitted field "%s" into %d chunk(s)', item, Math.ceil(value.length / chunkSize)));
}
xFormSplitterFilter.prototype.copyAttrs = function(target, source) {
  // copy code here
}
xFormSplitterFilter.prototype.process = function(element, logBuffer) {
  for (var iterator = new xFormElementIterator(element, xFormElementIterator.ITERATE_DESCENDANT); 
           iterator.hasMore();
           iterator.nextElement()) {
    var item = iterator.getCurrent();

    if (item.getCustomProperty('apply', this.ns) != 'yes' || 
        item.getCustomProperty('split', this.ns) != 'yes') {
      continue;
    }
    var chunkSize = parseInt(item.getCustomProperty('splitChunkSize', this.ns));
    if (!chunkSize || this.forceDefaultChunkSize) {
      chunkSize = this.defaultChunkSize;
    }

    this.split(item, chunkSize);
  }
  return true;
}