﻿function xFormCleanerFilter(nullElement) {
  this.ns = xFormCleanerFilter.getNS();
  this.nullElement = nullElement;
  this.enabled = true;
}
/* filter interface */
xFormCleanerFilter.prototype.isEnabled = function() {
  return this.enabled;
}
xFormCleanerFilter.prototype.getName = function() {
  return 'formCleaner';
}
xFormCleanerFilter.getNS = function() {
  return 'cleaner';
}
xFormCleanerFilter.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') {
      continue;
    }

    if (item.getElement().xxx != 'yes') { //getCustomProperty('parsed', this.ns)
      item.setCustomProperty('oldValue', this.ns, md5(item.getValue()));
      item.getElement().xxx = 'yes'; //setCustomProperty('parsed', this.ns, 'yes');
    } else {
      if (md5(item.getValue()) == item.getCustomProperty('oldValue', this.ns)) {
        item.setValue(this.nullElement);
        log(sprintf('    clearing unchanged value for element %s', item));
      } else {
        log(sprintf('value changed for element %s', item));
      }
    }
  }
	return true;
}