///<reference path="./IMacroFilter.ts" />
///<reference path="./StringFilter.ts" />
///<reference path="./HtmlElementFilter.ts" />
var econda;
(function (econda) {
    var tagmanager;
    (function (tagmanager) {
        var macro;
        (function (macro) {
            var filter;
            (function (filter_1) {
                /**
                 * Filters a value. Will use specialized filter implementations based on value type.
                 * @class econda.tagmanager.macro.filter.Filter
                 */
                var Filter = (function () {
                    function Filter() {
                        this.initFilters();
                    }
                    Filter.prototype.initFilters = function () {
                        this.filters = {};
                        this.filters['string'] = new econda.tagmanager.macro.filter.StringFilter();
                        this.filters['html_element'] = new econda.tagmanager.macro.filter.HtmlElementFilter();
                    };
                    Filter.prototype.getFilteredValue = function (macroDefinition, valueToFilter) {
                        if (valueToFilter === undefined) {
                            return undefined;
                        }
                        // process special objects
                        var tmpValue = valueToFilter, filter = null;
                        if (valueToFilter instanceof HTMLElement) {
                            filter = this.getFilterByType('html_element');
                        }
                        if (filter !== null) {
                            tmpValue = filter.getFilteredValue(macroDefinition, valueToFilter);
                        }
                        // proces string filter and regexp
                        var filter = this.getFilterByType('string');
                        return filter.getFilteredValue(macroDefinition, tmpValue);
                    };
                    Filter.prototype.getFilterByType = function (typeName) {
                        var ret = null;
                        if (typeof this.filters[typeName] != 'undefined') {
                            ret = this.filters[typeName];
                        }
                        return ret;
                    };
                    return Filter;
                }());
                filter_1.Filter = Filter;
            })(filter = macro.filter || (macro.filter = {}));
        })(macro = tagmanager.macro || (tagmanager.macro = {}));
    })(tagmanager = econda.tagmanager || (econda.tagmanager = {}));
})(econda || (econda = {}));