///<reference path="./IMacroReader.ts" />
///<reference path="./IMacroReaderResult.ts" />
///<reference path="../IMacroDefinition.ts" /> 
var econda;
(function (econda) {
    var tagmanager;
    (function (tagmanager) {
        var macro;
        (function (macro) {
            var reader;
            (function (reader) {
                /**
                 * Read data from current url of current document. This class if for internal use only.
                 * @class econda.tagmanager.macro.reader.UriReader
                 * @private
                 */
                var UrlReader = (function () {
                    function UrlReader() {
                        this._url = null;
                        this._cachedParams = null;
                    }
                    UrlReader.prototype.setUrl = function (url) {
                        this._url = url;
                        return this;
                    };
                    UrlReader.prototype.getUrl = function () {
                        if (this._url === null) {
                            this._url = window.document.URL;
                        }
                        return this._url;
                    };
                    UrlReader.prototype.readValue = function (macroDefinition) {
                        var ret;
                        try {
                            var value = macroDefinition.patternSourceName
                                ? this._getParam(macroDefinition.patternSourceName)
                                : this.getUrl();
                            ret = {
                                value: value,
                                success: (value !== undefined)
                            };
                        }
                        catch (e) {
                            ret = {
                                value: undefined,
                                success: false,
                                error: e
                            };
                        }
                        return ret;
                    };
                    UrlReader.prototype.readValueWithEvent = function (macroDefinition, eventData) {
                        return {
                            value: undefined,
                            success: false
                        };
                    };
                    UrlReader.prototype._getParam = function (name) {
                        if (this._cachedParams === null) {
                            this._updateCachedParams();
                        }
                        if (typeof this._cachedParams[name] === 'undefined') {
                            return undefined;
                        }
                        return this._cachedParams[name];
                    };
                    UrlReader.prototype._updateCachedParams = function () {
                        this._cachedParams = {};
                        var url = this.getUrl();
                        var search = url.substr(url.indexOf('?') + 1);
                        var tokens = search.split('&');
                        for (var n = 0; n < tokens.length; n++) {
                            var pair = tokens[n].split(/^([^=]{1,})=(.*)$/);
                            if (pair.length >= 3) {
                                this._cachedParams[decodeURIComponent(pair[1])] = decodeURIComponent(pair[2]);
                            }
                            else if (pair.length === 1) {
                                this._cachedParams[decodeURIComponent(pair[0])] = '';
                            }
                        }
                    };
                    return UrlReader;
                }());
                reader.UrlReader = UrlReader;
            })(reader = macro.reader || (macro.reader = {}));
        })(macro = tagmanager.macro || (tagmanager.macro = {}));
    })(tagmanager = econda.tagmanager || (econda.tagmanager = {}));
})(econda || (econda = {}));