/// <reference path="../cookie/Store.ts" />
/// <reference path="../cookie/ICookieConfigOptions.ts" />
/// <reference path="../util/StringUtils.ts" />
/// <reference path="../debug.ts" />
var econda;
(function (econda) {
    var tracking;
    (function (tracking) {
        var CookieStore = econda.cookie.Store;
        var StringUtils = econda.util.StringUtils;
        /**
         * Class to access first party visitor id from econda web tracking.
         * @class econda.tracking.VisitorId
         */
        var VisitorId = (function () {
            function VisitorId() {
            }
            /**
             * Get current first party visitor id
             * @returns {String}
             */
            VisitorId.get = function () {
                var cookieValue = CookieStore.getValue('emos_jcvid');
                if (cookieValue !== null) {
                    return cookieValue.split(':', 2)[0];
                }
                return null;
            };
            /**
             * Update first party visitor id
             * @param {String} visitorId new visitor id value
             */
            VisitorId.update = function (visitorId, cookieOptions) {
                if (cookieOptions === void 0) { cookieOptions = {}; }
                var cookieConfig = function (config, sessionOnly) {
                    for (var attrname in cookieOptions) {
                        if (sessionOnly == false || attrname != 'expires') {
                            config[attrname] = cookieOptions[attrname];
                        }
                    }
                    return config;
                };
                if (typeof visitorId !== 'string') {
                    econda.debug.error('Invalid visitor id given in VisitorId::update().');
                    return;
                }
                visitorId = StringUtils.trim(visitorId);
                // register visitorId as property at emos3 object
                var emos3 = window['emos3'];
                if (typeof emos3 === 'object') {
                    emos3.emos_vid = visitorId;
                }
                // update visitor cookie
                var visitorCookieValue = CookieStore.getValue('emos_jcvid');
                var newVisitorCookieValue;
                if (typeof visitorCookieValue === 'string' && visitorCookieValue.indexOf(':') !== -1) {
                    newVisitorCookieValue = visitorId + visitorCookieValue.substring(visitorCookieValue.indexOf(':'));
                }
                else {
                    newVisitorCookieValue = visitorId;
                }
                CookieStore.set(cookieConfig({
                    name: 'emos_jcvid',
                    value: newVisitorCookieValue
                }, false), false);
            };
            return VisitorId;
        }());
        tracking.VisitorId = VisitorId;
    })(tracking = econda.tracking || (econda.tracking = {}));
})(econda || (econda = {}));