cfe.replace=new Class({Implements:[new Options,new Events],options:{scope:false,spacer:"",onInit:$empty,onInitSingle:$empty,onBeforeInitSingle:$empty,onSetModuleOption:$empty,onRegisterModule:$empty,onUnregisterModule:$empty,onComplete:$empty},modules:{},moduleOptions:{},moduleOptionsAll:{},initialize:function(){this.options.spacer=cfe.spacer;this.registerAllModules.bind(this)()},registerAllModules:function(){$each(cfe.module,function(b,a){if(a!="Generic"){this.registerModule(a)}}.bind(this))},registerModule:function(a){modObj=cfe.module[a];this.fireEvent("onRegisterModule",[a,modObj]);this.modules[a]=modObj;this.moduleOptions[a]={};return true},registerModules:function(a){$each(a,function(b){this.registerModule(b)},this)},unregisterModule:function(a){modObj=cfe.module[a];this.fireEvent("onUnregisterModule",[a,modObj]);delete this.modules[a]},unregisterModules:function(a){$each(a,function(b){this.unregisterModule(b)},this)},setModuleOption:function(b,a,c){modObj=cfe.module[b];this.fireEvent("onSetModuleOption",[b,modObj,a,c]);if(!modObj){this.moduleOptionsAll[a]=c}else{this.moduleOptions[b][a]=c}},setModuleOptions:function(b,a){$each(a,function(d,c){this.setModuleOption(b,c,d)}.bind(this))},init:function(a){this.setOptions(this.options,a);if($type(this.options.scope)!="element"){this.options.scope=$(document.body)}this.fireEvent("onInit");$each(this.modules,function(e,c,d){var b=e.prototype.selector;this.options.scope.getElements(b).each(function(g,f){var h={instanceID:f,spacer:this.options.spacer,replaces:g};this.fireEvent("onBeforeInitSingle",[g,f,h]);var j=new e($merge(h,$merge(this.moduleOptions[c],this.moduleOptionsAll)));this.fireEvent("onInitSingle",j)},this)},this);this.fireEvent("onComplete")}});