TrimPath_R.processDOMiTemplate = function(options) {
  var replaceElement = options.replaceElement;
  if (typeof replaceElement == 'string')
    replaceElement = document.getElementById(replaceElement);

  var parseDOMTemplate = function() {
	replaceElement.innerHTML = TrimPath_R.parseDOMTemplate(options.elementId, iFrame.contentWindow.document).process(options.context, options.optionalFlags || {});
    iFrame.loaded = true;
  };

  var cache = TrimPath_R.processDOMiTemplate.cache;
  var divCache = cache[options.template];
  var iFrame;
  if(divCache) 
    iFrame = divCache.firstChild;

  if(iFrame) {
    var loadCheck = function() {
      if(iFrame.loaded) {
        parseDOMTemplate();
      } else {
        setTimeout(loadCheck, 10);
      }
    }
    loadCheck();
  } else {
      iFrame = document.createElement('iframe');
      iFrame.src = options.template;
      var div = document.createElement('div');
      if (window.opera) {
        div.style.position = 'absolute';
        div.style.left = -10000;
        div.style.top = -10000;
      } else {
        div.style.display = 'none';
      }
      div.appendChild(iFrame);
      cache[options.template] = div;
      onLoadFunc = function() {
        parseDOMTemplate();
      };

    if (iFrame.addEventListener){
      iFrame.addEventListener('load', onLoadFunc, false)
    }else if(iFrame.attachEvent){ 
      iFrame.attachEvent('onload', onLoadFunc )
    }
      document.body.appendChild(div);
  }
}
TrimPath_R.processDOMiTemplate.cache = {};
