{ "version": 3, "sources": ["../../../../../../../../private/var/folders/q8/4dnqkv7n6xl37t7pmtv4lt9w0000gn/T/tmp.ZA9IrFDpFu.js"], "sourcesContent": ["\uFEFF/* globals Map */\nwindow.module = window.module || {};\n(function main(global, module, isWorker, workerSize) {\n var canUseWorker = !!(\n global.Worker &&\n global.Blob &&\n global.Promise &&\n global.OffscreenCanvas &&\n global.OffscreenCanvasRenderingContext2D &&\n global.HTMLCanvasElement &&\n global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n global.URL &&\n global.URL.createObjectURL);\n\n var canUsePaths = typeof Path2D === 'function' && typeof DOMMatrix === 'function';\n var canDrawBitmap = (function () {\n // this mostly supports ssr\n if (!global.OffscreenCanvas) {\n return false;\n }\n\n var canvas = new OffscreenCanvas(1, 1);\n var ctx = canvas.getContext('2d');\n ctx.fillRect(0, 0, 1, 1);\n var bitmap = canvas.transferToImageBitmap();\n\n try {\n ctx.createPattern(bitmap, 'no-repeat');\n } catch (e) {\n return false;\n }\n\n return true;\n })();\n\n function noop() { }\n\n // create a promise if it exists, otherwise, just\n // call the function directly\n function promise(func) {\n var ModulePromise = module.exports.Promise;\n var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise;\n\n if (typeof Prom === 'function') {\n return new Prom(func);\n }\n\n func(noop, noop);\n\n return null;\n }\n\n var bitmapMapper = (function (skipTransform, map) {\n // see https://github.com/catdad/canvas-confetti/issues/209\n // creating canvases is actually pretty expensive, so we should create a\n // 1:1 map for bitmap:canvas, so that we can animate the confetti in\n // a performant manner, but also not store them forever so that we don't\n // have a memory leak\n return {\n transform: function (bitmap) {\n if (skipTransform) {\n return bitmap;\n }\n\n if (map.has(bitmap)) {\n return map.get(bitmap);\n }\n\n var canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n var ctx = canvas.getContext('2d');\n ctx.drawImage(bitmap, 0, 0);\n\n map.set(bitmap, canvas);\n\n return canvas;\n },\n clear: function () {\n map.clear();\n }\n };\n })(canDrawBitmap, new Map());\n\n var raf = (function () {\n var TIME = Math.floor(1000 / 60);\n var frame, cancel;\n var frames = {};\n var lastFrameTime = 0;\n\n if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') {\n frame = function (cb) {\n var id = Math.random();\n\n frames[id] = requestAnimationFrame(function onFrame(time) {\n if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) {\n lastFrameTime = time;\n delete frames[id];\n\n cb();\n } else {\n frames[id] = requestAnimationFrame(onFrame);\n }\n });\n\n return id;\n };\n cancel = function (id) {\n if (frames[id]) {\n cancelAnimationFrame(frames[id]);\n }\n };\n } else {\n frame = function (cb) {\n return setTimeout(cb, TIME);\n };\n cancel = function (timer) {\n return clearTimeout(timer);\n };\n }\n\n return { frame: frame, cancel: cancel };\n }());\n\n var getWorker = (function () {\n var worker;\n var prom;\n var resolves = {};\n\n function decorate(worker) {\n function execute(options, callback) {\n worker.postMessage({ options: options || {}, callback: callback });\n }\n worker.init = function initWorker(canvas) {\n var offscreen = canvas.transferControlToOffscreen();\n worker.postMessage({ canvas: offscreen }, [offscreen]);\n };\n\n worker.fire = function fireWorker(options, size, done) {\n if (prom) {\n execute(options, null);\n return prom;\n }\n\n var id = Math.random().toString(36).slice(2);\n\n prom = promise(function (resolve) {\n function workerDone(msg) {\n if (msg.data.callback !== id) {\n return;\n }\n\n delete resolves[id];\n worker.removeEventListener('message', workerDone);\n\n prom = null;\n\n bitmapMapper.clear();\n\n done();\n resolve();\n }\n\n worker.addEventListener('message', workerDone);\n execute(options, id);\n\n resolves[id] = workerDone.bind(null, { data: { callback: id } });\n });\n\n return prom;\n };\n\n worker.reset = function resetWorker() {\n worker.postMessage({ reset: true });\n\n for (var id in resolves) {\n resolves[id]();\n delete resolves[id];\n }\n };\n }\n\n return function () {\n if (worker) {\n return worker;\n }\n\n if (!isWorker && canUseWorker) {\n var code = [\n 'var CONFETTI, SIZE = {}, module = {};',\n '(' + main.toString() + ')(this, module, true, SIZE);',\n 'onmessage = function(msg) {',\n ' if (msg.data.options) {',\n ' CONFETTI(msg.data.options).then(function () {',\n ' if (msg.data.callback) {',\n ' postMessage({ callback: msg.data.callback });',\n ' }',\n ' });',\n ' } else if (msg.data.reset) {',\n ' CONFETTI && CONFETTI.reset();',\n ' } else if (msg.data.resize) {',\n ' SIZE.width = msg.data.resize.width;',\n ' SIZE.height = msg.data.resize.height;',\n ' } else if (msg.data.canvas) {',\n ' SIZE.width = msg.data.canvas.width;',\n ' SIZE.height = msg.data.canvas.height;',\n ' CONFETTI = module.exports.create(msg.data.canvas);',\n ' }',\n '}',\n ].join('\\n');\n try {\n worker = new Worker(URL.createObjectURL(new Blob([code])));\n } catch (e) {\n // eslint-disable-next-line no-console\n typeof console !== undefined && typeof console.warn === 'function' ? console.warn('🎊 Could not load worker', e) : null;\n\n return null;\n }\n\n decorate(worker);\n }\n\n return worker;\n };\n })();\n\n var defaults = {\n particleCount: 50,\n angle: 90,\n spread: 45,\n startVelocity: 45,\n decay: 0.9,\n gravity: 1,\n drift: 0,\n ticks: 200,\n x: 0.5,\n y: 0.5,\n shapes: ['square', 'circle'],\n zIndex: 100,\n colors: [\n '#26ccff',\n '#a25afd',\n '#ff5e7e',\n '#88ff5a',\n '#fcff42',\n '#ffa62d',\n '#ff36ff'\n ],\n // probably should be true, but back-compat\n disableForReducedMotion: false,\n scalar: 1\n };\n\n function convert(val, transform) {\n return transform ? transform(val) : val;\n }\n\n function isOk(val) {\n return !(val === null || val === undefined);\n }\n\n function prop(options, name, transform) {\n return convert(\n options && isOk(options[name]) ? options[name] : defaults[name],\n transform\n );\n }\n\n function onlyPositiveInt(number) {\n return number < 0 ? 0 : Math.floor(number);\n }\n\n function randomInt(min, max) {\n // [min, max)\n return Math.floor(Math.random() * (max - min)) + min;\n }\n\n function toDecimal(str) {\n return parseInt(str, 16);\n }\n\n function colorsToRgb(colors) {\n return colors.map(hexToRgb);\n }\n\n function hexToRgb(str) {\n var val = String(str).replace(/[^0-9a-f]/gi, '');\n\n if (val.length < 6) {\n val = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\n }\n\n return {\n r: toDecimal(val.substring(0, 2)),\n g: toDecimal(val.substring(2, 4)),\n b: toDecimal(val.substring(4, 6))\n };\n }\n\n function getOrigin(options) {\n var origin = prop(options, 'origin', Object);\n origin.x = prop(origin, 'x', Number);\n origin.y = prop(origin, 'y', Number);\n\n return origin;\n }\n\n function setCanvasWindowSize(canvas) {\n canvas.width = document.documentElement.clientWidth;\n canvas.height = document.documentElement.clientHeight;\n }\n\n function setCanvasRectSize(canvas) {\n var rect = canvas.getBoundingClientRect();\n canvas.width = rect.width;\n canvas.height = rect.height;\n }\n\n function getCanvas(zIndex) {\n var canvas = document.createElement('canvas');\n\n canvas.style.position = 'fixed';\n canvas.style.top = '0px';\n canvas.style.left = '0px';\n canvas.style.pointerEvents = 'none';\n canvas.style.zIndex = zIndex;\n\n return canvas;\n }\n\n function ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {\n context.save();\n context.translate(x, y);\n context.rotate(rotation);\n context.scale(radiusX, radiusY);\n context.arc(0, 0, 1, startAngle, endAngle, antiClockwise);\n context.restore();\n }\n\n function randomPhysics(opts) {\n var radAngle = opts.angle * (Math.PI / 180);\n var radSpread = opts.spread * (Math.PI / 180);\n\n return {\n x: opts.x,\n y: opts.y,\n wobble: Math.random() * 10,\n wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05),\n velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI,\n color: opts.color,\n shape: opts.shape,\n tick: 0,\n totalTicks: opts.ticks,\n decay: opts.decay,\n drift: opts.drift,\n random: Math.random() + 2,\n tiltSin: 0,\n tiltCos: 0,\n wobbleX: 0,\n wobbleY: 0,\n gravity: opts.gravity * 3,\n ovalScalar: 0.6,\n scalar: opts.scalar,\n flat: opts.flat\n };\n }\n\n function updateFetti(context, fetti) {\n fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n fetti.velocity *= fetti.decay;\n\n if (fetti.flat) {\n fetti.wobble = 0;\n fetti.wobbleX = fetti.x + (10 * fetti.scalar);\n fetti.wobbleY = fetti.y + (10 * fetti.scalar);\n\n fetti.tiltSin = 0;\n fetti.tiltCos = 0;\n fetti.random = 1;\n } else {\n fetti.wobble += fetti.wobbleSpeed;\n fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble));\n fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * Math.sin(fetti.wobble));\n\n fetti.tiltAngle += 0.1;\n fetti.tiltSin = Math.sin(fetti.tiltAngle);\n fetti.tiltCos = Math.cos(fetti.tiltAngle);\n fetti.random = Math.random() + 2;\n }\n\n var progress = (fetti.tick++) / fetti.totalTicks;\n\n var x1 = fetti.x + (fetti.random * fetti.tiltCos);\n var y1 = fetti.y + (fetti.random * fetti.tiltSin);\n var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos);\n var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin);\n\n context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')';\n\n context.beginPath();\n\n if (canUsePaths && fetti.shape.type === 'path' && typeof fetti.shape.path === 'string' && Array.isArray(fetti.shape.matrix)) {\n context.fill(transformPath2D(\n fetti.shape.path,\n fetti.shape.matrix,\n fetti.x,\n fetti.y,\n Math.abs(x2 - x1) * 0.1,\n Math.abs(y2 - y1) * 0.1,\n Math.PI / 10 * fetti.wobble\n ));\n } else if (fetti.shape.type === 'bitmap') {\n var rotation = Math.PI / 10 * fetti.wobble;\n var scaleX = Math.abs(x2 - x1) * 0.1;\n var scaleY = Math.abs(y2 - y1) * 0.1;\n var width = fetti.shape.bitmap.width * fetti.scalar;\n var height = fetti.shape.bitmap.height * fetti.scalar;\n\n var matrix = new DOMMatrix([\n Math.cos(rotation) * scaleX,\n Math.sin(rotation) * scaleX,\n -Math.sin(rotation) * scaleY,\n Math.cos(rotation) * scaleY,\n fetti.x,\n fetti.y\n ]);\n\n // apply the transform matrix from the confetti shape\n matrix.multiplySelf(new DOMMatrix(fetti.shape.matrix));\n\n var pattern = context.createPattern(bitmapMapper.transform(fetti.shape.bitmap), 'no-repeat');\n pattern.setTransform(matrix);\n\n context.globalAlpha = (1 - progress);\n context.fillStyle = pattern;\n context.fillRect(\n fetti.x - (width / 2),\n fetti.y - (height / 2),\n width,\n height\n );\n context.globalAlpha = 1;\n } else if (fetti.shape === 'circle') {\n context.ellipse ?\n context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) :\n ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI);\n } else if (fetti.shape === 'star') {\n var rot = Math.PI / 2 * 3;\n var innerRadius = 4 * fetti.scalar;\n var outerRadius = 8 * fetti.scalar;\n var x = fetti.x;\n var y = fetti.y;\n var spikes = 5;\n var step = Math.PI / spikes;\n\n while (spikes--) {\n x = fetti.x + Math.cos(rot) * outerRadius;\n y = fetti.y + Math.sin(rot) * outerRadius;\n context.lineTo(x, y);\n rot += step;\n\n x = fetti.x + Math.cos(rot) * innerRadius;\n y = fetti.y + Math.sin(rot) * innerRadius;\n context.lineTo(x, y);\n rot += step;\n }\n } else {\n context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y));\n context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1));\n context.lineTo(Math.floor(x2), Math.floor(y2));\n context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY));\n }\n\n context.closePath();\n context.fill();\n\n return fetti.tick < fetti.totalTicks;\n }\n\n function animate(canvas, fettis, resizer, size, done) {\n var animatingFettis = fettis.slice();\n var context = canvas.getContext('2d');\n var animationFrame;\n var destroy;\n\n var prom = promise(function (resolve) {\n function onDone() {\n animationFrame = destroy = null;\n\n context.clearRect(0, 0, size.width, size.height);\n bitmapMapper.clear();\n\n done();\n resolve();\n }\n\n function update() {\n if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) {\n size.width = canvas.width = workerSize.width;\n size.height = canvas.height = workerSize.height;\n }\n\n if (!size.width && !size.height) {\n resizer(canvas);\n size.width = canvas.width;\n size.height = canvas.height;\n }\n\n context.clearRect(0, 0, size.width, size.height);\n\n animatingFettis = animatingFettis.filter(function (fetti) {\n return updateFetti(context, fetti);\n });\n\n if (animatingFettis.length) {\n animationFrame = raf.frame(update);\n } else {\n onDone();\n }\n }\n\n animationFrame = raf.frame(update);\n destroy = onDone;\n });\n\n return {\n addFettis: function (fettis) {\n animatingFettis = animatingFettis.concat(fettis);\n\n return prom;\n },\n canvas: canvas,\n promise: prom,\n reset: function () {\n if (animationFrame) {\n raf.cancel(animationFrame);\n }\n\n if (destroy) {\n destroy();\n }\n }\n };\n }\n\n function confettiCannon(canvas, globalOpts) {\n var isLibCanvas = !canvas;\n var allowResize = !!prop(globalOpts || {}, 'resize');\n var hasResizeEventRegistered = false;\n var globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean);\n var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker');\n var worker = shouldUseWorker ? getWorker() : null;\n var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false;\n var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches;\n var animationObj;\n\n function fireLocal(options, size, done) {\n var particleCount = prop(options, 'particleCount', onlyPositiveInt);\n var angle = prop(options, 'angle', Number);\n var spread = prop(options, 'spread', Number);\n var startVelocity = prop(options, 'startVelocity', Number);\n var decay = prop(options, 'decay', Number);\n var gravity = prop(options, 'gravity', Number);\n var drift = prop(options, 'drift', Number);\n var colors = prop(options, 'colors', colorsToRgb);\n var ticks = prop(options, 'ticks', Number);\n var shapes = prop(options, 'shapes');\n var scalar = prop(options, 'scalar');\n var flat = !!prop(options, 'flat');\n var origin = getOrigin(options);\n\n var temp = particleCount;\n var fettis = [];\n\n var startX = canvas.width * origin.x;\n var startY = canvas.height * origin.y;\n\n while (temp--) {\n fettis.push(\n randomPhysics({\n x: startX,\n y: startY,\n angle: angle,\n spread: spread,\n startVelocity: startVelocity,\n color: colors[temp % colors.length],\n shape: shapes[randomInt(0, shapes.length)],\n ticks: ticks,\n decay: decay,\n gravity: gravity,\n drift: drift,\n scalar: scalar,\n flat: flat\n })\n );\n }\n\n // if we have a previous canvas already animating,\n // add to it\n if (animationObj) {\n return animationObj.addFettis(fettis);\n }\n\n animationObj = animate(canvas, fettis, resizer, size, done);\n\n return animationObj.promise;\n }\n\n function fire(options) {\n var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean);\n var zIndex = prop(options, 'zIndex', Number);\n\n if (disableForReducedMotion && preferLessMotion) {\n return promise(function (resolve) {\n resolve();\n });\n }\n\n if (isLibCanvas && animationObj) {\n // use existing canvas from in-progress animation\n canvas = animationObj.canvas;\n } else if (isLibCanvas && !canvas) {\n // create and initialize a new canvas\n canvas = getCanvas(zIndex);\n document.body.appendChild(canvas);\n }\n\n if (allowResize && !initialized) {\n // initialize the size of a user-supplied canvas\n resizer(canvas);\n }\n\n var size = {\n width: canvas.width,\n height: canvas.height\n };\n\n if (worker && !initialized) {\n worker.init(canvas);\n }\n\n initialized = true;\n\n if (worker) {\n canvas.__confetti_initialized = true;\n }\n\n function onResize() {\n if (worker) {\n // TODO this really shouldn't be immediate, because it is expensive\n var obj = {\n getBoundingClientRect: function () {\n if (!isLibCanvas) {\n return canvas.getBoundingClientRect();\n }\n }\n };\n\n resizer(obj);\n\n worker.postMessage({\n resize: {\n width: obj.width,\n height: obj.height\n }\n });\n return;\n }\n\n // don't actually query the size here, since this\n // can execute frequently and rapidly\n size.width = size.height = null;\n }\n\n function done() {\n animationObj = null;\n\n if (allowResize) {\n hasResizeEventRegistered = false;\n global.removeEventListener('resize', onResize);\n }\n\n if (isLibCanvas && canvas) {\n if (document.body.contains(canvas)) {\n document.body.removeChild(canvas);\n }\n canvas = null;\n initialized = false;\n }\n }\n\n if (allowResize && !hasResizeEventRegistered) {\n hasResizeEventRegistered = true;\n global.addEventListener('resize', onResize, false);\n }\n\n if (worker) {\n return worker.fire(options, size, done);\n }\n\n return fireLocal(options, size, done);\n }\n\n fire.reset = function () {\n if (worker) {\n worker.reset();\n }\n\n if (animationObj) {\n animationObj.reset();\n }\n };\n\n return fire;\n }\n\n // Make default export lazy to defer worker creation until called.\n var defaultFire;\n function getDefaultFire() {\n if (!defaultFire) {\n defaultFire = confettiCannon(null, { useWorker: true, resize: true });\n }\n return defaultFire;\n }\n\n function transformPath2D(pathString, pathMatrix, x, y, scaleX, scaleY, rotation) {\n var path2d = new Path2D(pathString);\n\n var t1 = new Path2D();\n t1.addPath(path2d, new DOMMatrix(pathMatrix));\n\n var t2 = new Path2D();\n // see https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix/DOMMatrix\n t2.addPath(t1, new DOMMatrix([\n Math.cos(rotation) * scaleX,\n Math.sin(rotation) * scaleX,\n -Math.sin(rotation) * scaleY,\n Math.cos(rotation) * scaleY,\n x,\n y\n ]));\n\n return t2;\n }\n\n function shapeFromPath(pathData) {\n if (!canUsePaths) {\n throw new Error('path confetti are not supported in this browser');\n }\n\n var path, matrix;\n\n if (typeof pathData === 'string') {\n path = pathData;\n } else {\n path = pathData.path;\n matrix = pathData.matrix;\n }\n\n var path2d = new Path2D(path);\n var tempCanvas = document.createElement('canvas');\n var tempCtx = tempCanvas.getContext('2d');\n\n if (!matrix) {\n // attempt to figure out the width of the path, up to 1000x1000\n var maxSize = 1000;\n var minX = maxSize;\n var minY = maxSize;\n var maxX = 0;\n var maxY = 0;\n var width, height;\n\n // do some line skipping... this is faster than checking\n // every pixel and will be mostly still correct\n for (var x = 0; x < maxSize; x += 2) {\n for (var y = 0; y < maxSize; y += 2) {\n if (tempCtx.isPointInPath(path2d, x, y, 'nonzero')) {\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n }\n\n width = maxX - minX;\n height = maxY - minY;\n\n var maxDesiredSize = 10;\n var scale = Math.min(maxDesiredSize / width, maxDesiredSize / height);\n\n matrix = [\n scale, 0, 0, scale,\n -Math.round((width / 2) + minX) * scale,\n -Math.round((height / 2) + minY) * scale\n ];\n }\n\n return {\n type: 'path',\n path: path,\n matrix: matrix\n };\n }\n\n function shapeFromText(textData) {\n var text,\n scalar = 1,\n color = '#000000',\n // see https://nolanlawson.com/2022/04/08/the-struggle-of-using-native-emoji-on-the-web/\n fontFamily = '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\", \"Twemoji Mozilla\", \"system emoji\", sans-serif';\n\n if (typeof textData === 'string') {\n text = textData;\n } else {\n text = textData.text;\n scalar = 'scalar' in textData ? textData.scalar : scalar;\n fontFamily = 'fontFamily' in textData ? textData.fontFamily : fontFamily;\n color = 'color' in textData ? textData.color : color;\n }\n\n // all other confetti are 10 pixels,\n // so this pixel size is the de-facto 100% scale confetti\n var fontSize = 10 * scalar;\n var font = '' + fontSize + 'px ' + fontFamily;\n\n var canvas = new OffscreenCanvas(fontSize, fontSize);\n var ctx = canvas.getContext('2d');\n\n ctx.font = font;\n var size = ctx.measureText(text);\n var width = Math.ceil(size.actualBoundingBoxRight + size.actualBoundingBoxLeft);\n var height = Math.ceil(size.actualBoundingBoxAscent + size.actualBoundingBoxDescent);\n\n var padding = 2;\n var x = size.actualBoundingBoxLeft + padding;\n var y = size.actualBoundingBoxAscent + padding;\n width += padding + padding;\n height += padding + padding;\n\n canvas = new OffscreenCanvas(width, height);\n ctx = canvas.getContext('2d');\n ctx.font = font;\n ctx.fillStyle = color;\n\n ctx.fillText(text, x, y);\n\n var scale = 1 / scalar;\n\n return {\n type: 'bitmap',\n // TODO these probably need to be transfered for workers\n bitmap: canvas.transferToImageBitmap(),\n matrix: [scale, 0, 0, scale, -width * scale / 2, -height * scale / 2]\n };\n }\n\n module.exports = function () {\n return getDefaultFire().apply(this, arguments);\n };\n module.exports.reset = function () {\n getDefaultFire().reset();\n };\n module.exports.create = confettiCannon;\n module.exports.shapeFromPath = shapeFromPath;\n module.exports.shapeFromText = shapeFromText;\n}((function () {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n return this || {};\n})(), module, false));\nwindow.confetti = module.exports;\n\nfunction isSimple() {\n return document.querySelector(\"html\").classList.contains(\"simple\");\n}\n\nfunction reload(withQuerystring = false) {\n document.location = withQuerystring ? document.location.href : document.location.href.split('?')[0];\n}\n\nfunction forEach(arr, callback) {\n if (!arr) return;\n if (typeof arr === \"string\") arr = document.querySelectorAll(arr);\n Array.prototype.forEach.call(arr, callback);\n};\n\n\nfunction getValueFromNestedObject(obj, propPath) {\n let path = propPath.split('.');\n let current = obj;\n for (let prop of path) {\n if (current.hasOwnProperty(prop)) {\n current = current[prop];\n } else {\n }\n }\n return current;\n}\n\nfunction getNestedValue(obj, path) {\n const properties = path.split('.');\n let value = obj;\n\n for (let i = 0; i < properties.length; i++) {\n if (!value || !value.hasOwnProperty(properties[i])) {\n customLog(0, \"Nothing found for propPath \" + propPath);\n return undefined;\n }\n value = value[properties[i]];\n }\n\n return value;\n}\n\nfunction step(...params) {\n console.log(new Error().stack.match(/at (\\S+)/g)[2]?.split(' ')[1] || 'unknown', ...params);\n}\n//function flattenObject(obj, parent, res = {}) {\n// for (let key in obj) {\n// let propName = parent ? parent + '.' + key : key;\n// if (typeof obj[key] == 'object') {\n// flattenObject(obj[key], propName, res);\n// } else {\n// res[propName] = obj[key];\n// }\n// }\n// return res;\n//}\n\nfunction localText(key, asLowercase, configId, fallbacks, pluralityAmount) {\n let keys = fallbacks ? [key].concat(fallbacks) : [key];\n let value = `MISSING: local.${key}.${localLanguage} fallbacks: ${fallbacks}`;\n if (!localLanguage) {\n localLanguage = document.querySelector(\"body\").getAttribute(\"data-cc\");\n if (!localLanguage) localLanguage = \"da\";\n }\n if (campaignConfigId !== undefined && configId === undefined) configId = campaignConfigId;\n for (let i = 0; i < keys.length; i++) {\n let base = keys[i] + \".\";\n if (configId > 0) {\n let configKey = base + `cc${configId}.`;\n if (local[configKey + localLanguage]) {\n value = asLowercase ? local[configKey + localLanguage].toLowerCase() : local[configKey + localLanguage];\n break;\n }\n if (local[configKey + \"da\"]) {\n value = asLowercase ? local[configKey + \"da\"].toLowerCase() : local[configKey + \"da\"];\n break;\n }\n }\n if (local[base + localLanguage]) {\n value = asLowercase ? local[base + localLanguage].toLowerCase() : local[base + localLanguage];\n break;\n }\n if (local[base + \"da\"]) {\n value = asLowercase ? local[base + \"da\"].toLowerCase() : local[base + \"da\"];\n break;\n }\n }\n return (pluralityAmount == 1 && value.indexOf('|') > 0) ? value.split('|')[1] : value.split('|')[0];\n}\n\nfunction urlParam(name) {\n const results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);\n if (results === null) {\n return null;\n }\n else {\n return decodeURIComponent(results[1]) || 0;\n }\n}\n\nfunction cleanEncodeURIComponent(s) {\n if (!!!s) return s;\n s = s.replace(//gmi, \"\").replace(/(\\r\\n|\\n|\\r)/gm, \"\");\n s = encodeURIComponent(s);\n return s;\n}\n\nasync function loadInto(el, url, callback, mime) {\n console.log(url, mime);\n if (window.fetch) {\n fetch(url, {\n method: 'GET',\n headers: {\n 'Content-type': mime ? mime : 'text/html'\n }\n }).then(response => {\n if (response.ok) {\n return response.text();\n } else {\n throw new Error('Network response was not ok');\n }\n }).then(text => {\n el.innerHTML = text;\n if (callback) callback();\n }).catch(error => {\n customLog(2, 'Fetch Error: ', error);\n });\n } else {\n const xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n el.innerHTML = xhr.responseText;\n if (callback) callback();\n }\n };\n\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader('Content-type', mime ? mime : 'text/html');\n xhr.send();\n }\n}\n\naddDomReadyEventListener(() => {\n document.body.addEventListener('keyup', function (e) {\n if (e.key === 'Tab') {\n let el = document.documentElement;\n el.classList.remove('nfo');\n el.classList.add('tab');\n }\n });\n\n addEvents(\".jslink\", \"click\", function (e) {\n let a = e.target.closest(\".jslink\");\n let href = a ? a.getAttribute(\"href\") : undefined;\n if (href) {\n stopAll(e);\n document.location = href;\n }\n });\n\n forEach(\"form.cf.toggle\", function (el) {\n forEach(el.payment, function (iel) {\n iel.addEventListener('change', function (e) {\n let form = iel.closest(\"form\");\n let target = form.getAttribute(\"data-toggle\").split(\":\");\n let toggle = form.querySelector(\".toggle\");\n let element = form.querySelector(\"input[name=\" + target[0] + \"]:checked\");\n if (element && element.value === target[1]) {\n removeClass(toggle, \"hidden\");\n forEach(toggle.querySelectorAll(\"input\"), function (inp) {\n if (inp.getAttribute(\"data-toggle\") === \"required\") inp.required = true;\n });\n }\n else {\n addClass(toggle, \"hidden\");\n forEach(toggle.querySelectorAll(\"input\"), function (inp) {\n if (inp.getAttribute(\"data-toggle\") === \"required\") inp.required = false;\n });\n }\n });\n });\n });\n});\n\nfunction clone(o) {\n return o ? JSON.parse(JSON.stringify(o)) : o;\n}\n\nfunction selfHost() {\n return window.location.protocol + \"//\" + window.location.host;\n}\n\nlet briefTimer;\n\nfunction addBrief(msg, data, large, confetti) {\n if (!msg) return;\n if (data && data.messages && data.messages.length > 0) return;\n clearTimeout(briefTimer);\n briefTimer = setTimeout(function () {\n let brief = document.querySelector(\"body > .brief\");\n brief.parentNode.removeChild(brief);\n }, 4500);\n let body = document.querySelector(\"body\");\n let brief = document.querySelector(\"body > .brief\");\n\n if (confetti) throwConfetti();\n if (!brief) {\n body.insertAdjacentHTML(\"beforeend\", '
');\n brief = document.querySelector(\"body > .brief\");\n\n brief.addEventListener(\"click\", function (e) {\n stopAll(e);\n });\n }\n large ? addClass(brief, \"large\") : removeClass(brief, \"large\");\n let content = brief.querySelector(\".content\");\n let text = brief.textContent;\n if (msg && text.indexOf(msg) < 0) {\n if (msg.indexOf(\"<\") >= 0 && msg.indexOf(\">\") >= 0) {\n content.insertAdjacentHTML(\"afterbegin\", msg);\n }\n else {\n content.insertAdjacentHTML(\"afterbegin\", '

' + msg + '

');\n }\n }\n}\n\nfunction injectScript(url) {\n const script = document.createElement(\"script\");\n script.src = url;\n document.head.appendChild(script);\n}\n\nfunction addOverlayMessage(msg, extra, confetti) {\n let body = document.querySelector(\"body\");\n let overlay = document.querySelector(\"body > .overlay\");\n if (confetti) throwConfetti();\n if (!overlay) {\n addClass(body, \"noscroll\");\n body.insertAdjacentHTML(\"beforeend\", '
OK
');\n overlay = document.querySelector(\"body > .overlay\");\n\n overlay.addEventListener(\"click\", function (e) {\n hideMessageOverlay();\n stopAll(e);\n });\n\n overlay.querySelector(\".close\").addEventListener(\"click\", function (e) {\n hideMessageOverlay();\n stopAll(e);\n });\n\n overlay.firstChild.addEventListener(\"click\", function (e) {\n stopAll(e);\n });\n }\n let content = overlay.querySelector(\".content\");\n let text = content.textContent;\n if (text.indexOf(msg) < 0) {\n if (msg.indexOf(\"<\") >= 0 && msg.indexOf(\">\") >= 0) {\n content.insertAdjacentHTML(\"afterbegin\", msg + (extra ? '' + extra + \"
\" + new Error().stack.replace(/(?:\\r\\n|\\r|\\n)/g, '
') + '
' : \"\"));\n }\n else {\n content.insertAdjacentHTML(\"afterbegin\", '

' + msg + '

' + (extra ? '' + extra + \"
\" + new Error().stack.replace(/(?:\\r\\n|\\r|\\n)/g, '
') + '
' : \"\"));\n }\n }\n}\n\nfunction hideMessageOverlay() {\n let body = document.querySelector(\"body\");\n let overlay = document.querySelector(\"body > .overlay\");\n body.removeChild(overlay);\n removeClass(\"body\", \"noscroll\");\n}\n\nfunction afToken() {\n return document.querySelector('input[name=__RequestVerificationToken');\n}\n\nfunction maxFromProperties(o, a) {\n let max = 0;\n if (!a || a.length === 0) return max;\n for (let i = 0; i < a.length; i++) {\n let k = a[i];\n if (o[k] && o[k] > max) max = o[k];\n }\n return max;\n}\n\nfunction scrollToElement(el) {\n let p = el.getBoundingClientRect().top + window.scrollY - 100;\n if (window.navigator.userAgent.indexOf(\"Edge\") > 0) {\n document.body.scrollTop = p;\n }\n else {\n window.scrollTo({\n top: p,\n behavior: \"smooth\"\n });\n }\n}\n\nfunction isInt(value) {\n return !isNaN(value) &&\n parseInt(Number(value)) == value &&\n !isNaN(parseInt(value, 10));\n}\n\nfunction isFloat(value) {\n return !isNaN(value) && Number(value) == value;\n}\n\nfunction isNullOrWhiteSpace(value) {\n return typeof value !== \"string\" || !value || !value.trim();\n}\n\nfunction getDomPath(el) {\n let nodeName = el.nodeName.toLowerCase();\n if (el === document.body) return 'body';\n if (el.id) nodeName += '#' + el.id;\n else if (el.classList.length)\n nodeName += '.' + [...el.classList].join('.');\n\n let i = 0;\n let elem = el;\n while (elem = elem.previousSibling) {\n if (elem.nodeType === 1) {\n i++;\n }\n }\n return getDomPath(el.parentNode) + ' ' + i + '-' + nodeName;\n}\n\nfunction singularE(s, v, format, pretty, em) {\n let n = (format ? toComma(v, pretty == true) : v);\n return (em ? `${n}` : n) + s + (v != 1 ? 'e' : '');\n}\n\nfunction hasClass(el, className) { if (el) return el.classList.contains(className); };\nfunction addClass(el, className) {\n if (typeof el === \"string\") {\n forEach(document.querySelectorAll(el), function (iel) { addClass(iel, className); });\n }\n else {\n if (el) el.classList.add(className);\n }\n}\nfunction removeClass (el, className) {\n if (typeof el === \"string\") {\n forEach(document.querySelectorAll(el), function (iel) { removeClass(iel, className); });\n }\n else {\n if (el) el.classList.remove(className);\n }\n}\n\nfunction addEvent(path, event, func) {\n let el = typeof path === \"string\" ? document.querySelector(path) : path;\n if (el) {\n el.addEventListener(event, func);\n }\n}\n\nfunction addEvents(path, event, func, addClassName) {\n const withAddClass = addClassName !== undefined && addClassName != \"\";\n if (typeof path === \"string\") {\n forEach(path, function (el) {\n if (!withAddClass || !el.classList.contains(addClassName)) {\n el.addEventListener(event, func);\n if (withAddClass) addClass(el, addClassName);\n }\n });\n }\n else {\n path.forEach((el) => {\n if (!withAddClass || !el.classList.contains(addClassName)) {\n el.addEventListener(event, func);\n if (withAddClass) addClass(el, addClassName);\n }\n });\n }\n}\n\nfunction toggleClass(el, className) {\n if (typeof el === \"string\") el = document.querySelector(el);\n if (!el) return;\n\n if (hasClass(el, className)) {\n removeClass(el, className);\n }\n else {\n addClass(el, className);\n }\n}\n\nfunction addClasses(els, className) {\n if (!els || els.length === 0) return;\n forEach(els, function (el) {\n addClass(el, className);\n });\n}\n\nfunction removeClasses(els, className) {\n if (!els || els.length === 0) return;\n els.forEach(function (el) {\n removeClass(el, className);\n });\n}\n\nfunction translate(key) {\n const v = Local[key];\n if (v !== undefined) return v;\n return key;\n}\n\nfunction stopAll(e) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n}\n\nfunction hasAny(arr, value, key) {\n return first(arr, value, key) !== null;\n}\n\nfunction isVisible(elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n}\n\nfunction isValidEmail(email) {\n if (email && email.length === 41 && email.substr(-5) === '.GUID') return true;\n return /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(String(email).toLowerCase());\n}\n\nfunction unique(a) {\n return a.sort().filter(function (value, index, array) {\n return (index === 0) || (value !== array[index - 1]);\n });\n}\n\nfunction objectLargestPropertyValue(l, prop) {\n return l.reduce((max, obj) => obj[prop] > max[prop] ? obj : max, l[0]);\n}\n\nfunction first(arr, value, key) {\n if (!arr || !value) return null;\n for (let i = 0; i < arr.length; i++) {\n if (key) {\n if (arr[i][key] === value) {\n return arr[i];\n }\n }\n else {\n if (arr[i] === value) {\n return arr[i];\n }\n }\n }\n return null;\n}\n\nfunction removeElement(el) {\n el.parentNode.removeChild(el);\n}\n\nfunction getWidth(el) {\n return parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\n}\nfunction getHeight(el) {\n return parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\n}\nfunction getOffset(el) {\n let rect = el.getBoundingClientRect();\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n };\n}\n\nfunction getRndInteger(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\nfunction prettyDate(d) {\n return new Date(Date.parse(d)).toLocaleString('da-DK', { day: 'numeric', month: 'long', year: 'numeric' });\n}\n\nfunction throwConfetti() {\n for (let i = 0; i < 14; i++) {\n setTimeout(function () {\n confetti({\n spread: getRndInteger(30, 150),\n startVelocity: getRndInteger(20, 80),\n decay: getRndInteger(80, 100) / 100.0,\n origin: {\n y: getRndInteger(5, 10) / 10.0,\n x: getRndInteger(3, 8) / 10.0\n },\n scalar: getRndInteger(5, 15) / 10.0,\n particleCount: getRndInteger(20, 70)\n });\n }, getRndInteger(50, 500));\n }\n}\n\nfunction getCookie(name) {\n const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');\n return v ? v[2] : null;\n}\n\nfunction setCookie(name, value, days) {\n const d = new Date;\n d.setTime(d.getTime() + 24 * 60 * 60 * 1000 * days);\n document.cookie = name + \"=\" + value + \";path=/;expires=\" + d.toGMTString();\n}\n\nfunction escapeHTML(str, wrap, urlEncode) {\n if (urlEncode) str = encodeURIComponent(str);\n if (wrap && str) {\n let output = \"\";\n str.split(/([ _@+-;:.])/gmi).forEach(s => {\n output += `${new Option(s).innerHTML}`;\n });\n str = output;\n }\n else {\n str = new Option(str).innerHTML;\n }\n return str;\n}\n\nfunction replaceTags(element, replacements, replaceInHTML = false) {\n if (replaceInHTML) {\n let html = element.innerHTML;\n for (let tag in replacements) {\n let regex = new RegExp('\\\\*' + tag + '\\\\*', 'gi');\n html = html.replace(regex, replacements[tag]);\n }\n element.innerHTML = html;\n } else {\n for (let child of element.childNodes) {\n if (child.nodeType === Node.TEXT_NODE) {\n let text = child.nodeValue;\n for (let tag in replacements) {\n let regex = new RegExp('\\\\*' + tag + '\\\\*', 'gi');\n text = text.replace(regex, replacements[tag]);\n }\n child.nodeValue = text;\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n replaceTags(child, replacements, false);\n }\n }\n }\n}\n\nfunction parseTimeStampCookie(u) {\n let timeStamps = useTimestamps ? getCookie(\"TimeStamps\") : undefined;\n if (timeStamps && timeStamps.startsWith(\"[\")) {\n try {\n let parsed = JSON.parse(timeStamps);\n let lc = [];\n forEach(parsed, function (ts) {\n lc.push({ \"note\": ts.Note, \"milliseconds\": ts.Milliseconds });\n });\n try {\n showTimestamps({ \"timeStamps\": lc }, u);\n }\n catch (exi) {\n customLog(2, \"showtimestamps failed\", exi);\n }\n }\n catch (ex) {\n customLog(2, \"timestamp parse failed\", ex);\n }\n }\n}\n\nfunction showTimestamps(data, heading) {\n if (isDebug && data.timeStamps) {\n let pre = document.getElementById(\"debugpre\");\n if (!pre) {\n pre = document.createElement('pre');\n pre.id = \"debugpre\"\n pre.classList.add(\"debugpre\");\n if (!isLocal) pre.classList.add(\"compact\");\n document.body.appendChild(pre);\n }\n if (!pre.classList.contains(\"hasevent\")) {\n pre.addEventListener(\"contextmenu\", (e) => {\n e.target.classList.toggle(\"compact\");\n stopAll(e);\n });\n pre.classList.add(\"hasevent\");\n }\n\n document.querySelectorAll(\".debugpre:not(.active)\")?.forEach(el => {\n el.addEventListener(\"contextmenu\", e => {\n e.target.classList.toggle(\"compact\");\n stopAll(e);\n return false;\n });\n el.classList.add(\"active\");\n });\n\n let s = \"\";\n if (jsTodayIsoDateString != new Date().isoDate()) s += `\\n\"TODAY\" is ${jsTodayIsoDateString}\\n\\n`;\n if (heading) s += ('\\n' + heading).split(\".dk\").slice(-1) + \"\\n\";\n s += `Memberid ${document.querySelector(\"body\").dataset.memberid}\\n\\n`;\n\n forEach(data.timeStamps, function (t) {\n s += (\"000000\" + t.milliseconds).slice(-6) + \" \" + t.note + \"\\n\";\n });\n pre.insertAdjacentHTML(\"beforeend\", s);\n }\n}\n\nfunction refreshParticipantBaseData() {\n setCookie(\"refreshParticipantBaseData\", \"1\");\n}\n\nfunction sendQuantity(quantity) {\n let ev = {\n 'event': 'checkout',\n 'ecommerce': {\n 'currencyCode': 'DKK',\n 'checkout': {\n 'actionField': {\n 'step': 1\n },\n 'products': [{\n 'name': 'Team seats',\n 'id': 1,\n 'price': '85',\n 'quantity': parseInt(quantity.value)\n }]\n }\n }\n };\n plausible(\"purchase\", { revenue: { currency: \"DKK\", amount: parseInt(quantity.value) * 85 } });\n dataLayer.push(ev);\n}\n\nfunction handleResponse(url, result, callback, postdata, source, eventExtra, isFetch) {\n let u = url.split('?');\n if (u.length > 1) u = u[1];\n\n let goal = url.split('/').pop().split('?').pop();\n\n let postdataLength = 0;\n if (typeof postdata === \"string\") {\n postdataLength = postdata.length;\n }\n\n if (goal && goal.length > 0 && (goal.indexOf('=') > 0 || url.indexOf(\"umbraco\") > 0) && (postdata instanceof FormData || postdataLength > 3)) {\n goal = goal.split('=').pop();\n goal += source && source.getAttribute(\"eventextra\") ? source.getAttribute(\"eventextra\") : \"\";\n if (eventExtra) goal += eventExtra;\n plausible(goal);\n }\n\n parseTimeStampCookie(u);\n\n let data = result;\n if (result && result.length > 5 && result.substring(0, 5) === \"error\") {\n if (result.length > 14 && result.substring(0, 14) === \"error.internal\") {\n showApiError(result, true, url);\n }\n else {\n showApiError(result, false);\n }\n return true;\n }\n if (result && result.length > 5 && result.indexOf(\"= 0) {\n if (result.substring(0, 5) !== \"\") + 7);\n let body = document.querySelector(\"body\");\n let div = document.createElement(\"div\");\n addClass(div, \"hidden\");\n div.innerHTML = result;\n body.appendChild(div);\n body.lastChild.firstChild.submit();\n return true;\n }\n if (result && result.length > 1 && result.substring(0, 1) !== \"<\") {\n try {\n data = JSON.parse(result);\n if (data.messages && data.messages.length) {\n showApiMessages(data.messages);\n }\n }\n catch (ex) {\n data = result;\n }\n }\n if (result && result.length > 4 && (result.substr(0, 4) === \"url:\" || result.indexOf(\"url:\") > 0)) {\n if (navigator.userAgent.indexOf(\"Firefox\") != -1) {\n setTimeout(function () { document.location.href = result.substr(result.indexOf(\"url:\") + 4); }, 100);\n }\n else {\n document.location.href = result.substr(result.indexOf(\"url:\") + 4);\n }\n return true;\n }\n if (callback) {\n callback(data, source);\n }\n else if (source) {\n let result = source.querySelector(\".result[data-status='\" + data + \"']\");\n if (result) {\n let url = result.getAttribute(\"data-url\");\n if (url) {\n if (navigator.userAgent.indexOf(\"Firefox\") != -1) {\n setTimeout(function () { document.location = url; }, 100);\n }\n else {\n document.location = url;\n }\n }\n else {\n forEach(source.querySelectorAll(\".result\"), function (el) {\n removeClass(el, \"active\");\n });\n addClass(result, \"active\");\n scrollToElement(result);\n }\n }\n }\n\n if (source) {\n let submit = source.querySelector(\"input[type=submit]\");\n if (submit) submit.removeAttribute(\"disabled\");\n }\n}\n\nfunction handleError(msg, url, data, error, callback = undefined) {\n customLog(2, msg, url, data, error);\n showApiError(genericError, false);\n if (callback) callback(-1);\n}\n\nasync function httpr(url, callback, postdata, source, eventExtra) {\n if (isDebug) {\n let u = url.split('?');\n if (u.length > 1) u = u[1];\n savedTimes[u] = new Date().getTime();\n }\n\n if (url === \"/umbraco/surface/vctasurface/buy\" && postdata && source) {\n sendQuantity(source.querySelector(\"input.product\"));\n }\n\n let fetchAvailable = (typeof fetch !== 'undefined');\n\n if (source) {\n let submit = source.querySelector(\"input[type=submit]\");\n if (submit) submit.setAttribute(\"disabled\", \"disabled\");\n }\n\n let aft = afToken()?.value;\n if (postdata && typeof postdata !== \"string\") {\n postdata.append(\"__RequestVerificationToken\", aft);\n\n if (campaignConfigId) postdata.append(\"campaignConfigId\", campaignConfigId);\n }\n\n let method = postdata !== undefined ? 'POST' : 'GET';\n if (fetchAvailable) {\n let responseUrl = url;\n let headers = {};\n if (method == \"POST\") headers[\"X-CSRF-TOKEN\"] = aft;\n fetch(url, {\n method: method,\n headers: headers,\n body: postdata ? postdata : null\n }).then(response => {\n if (!response.ok) {\n handleError(\"Network response was not ok\", response.url, undefined, undefined, callback)\n }\n responseUrl = response.url;\n return response.text();\n }).then(data => {\n handleResponse(responseUrl, data, callback, postdata, source, eventExtra, true);\n }).catch(error => {\n handleError(\"apierror\", url, undefined, error, callback)\n });\n } else {\n let request = new XMLHttpRequest();\n request.open(method, url, true);\n if (method == 'POST') request.setRequestHeader('X-CSRF-TOKEN', aft);\n request.onload = function () {\n if (request.status >= 200 && request.status < 400) {\n handleResponse(request.responseURL, request.responseText, callback, postdata, source, eventExtra, false);\n } else {\n handleError(\"apierror\", url, undefined, error, callback)\n }\n };\n\n request.onerror = function (data) {\n handleError(\"onerror\", url, data, undefined, callback)\n };\n\n if (postdata !== undefined) {\n try {\n request.send(postdata);\n }\n catch (ex) {\n handleError(\"onerror\", url, undefined, ex, callback)\n }\n }\n else {\n request.send();\n }\n }\n}\n\nfunction daysInMonth(month, year) {\n return new Date(year, month, 0).getDate();\n}\n\nString.prototype.daysInMonth = function () {\n return daysInMonth(this.substring(5, 7), this.substring(0, 4));\n};\n\nfunction isoDate(d) {\n return d.getFullYear() + \"-\" + String(d.getMonth() + 1).padStart(2, \"0\") + \"-\" + String(d.getDate()).padStart(2, \"0\");\n}\n\nDate.prototype.isoDate = function () {\n return isoDate(this);\n}\n\nString.prototype.toDate = function () {\n return new Date(Date.UTC(this.substring(0, 4), this.substring(5, 7) - 1, this.substring(8)));\n};\n\nString.prototype.isoDate = function () {\n return this.substring(0, 10);\n}\n\nString.prototype.isoDatePart = function (p) {\n if (p == \"ymd\") return this;\n if (p == \"ym\") return this.substring(0, 7);\n if (p == \"md\") return this.substring(5);\n if (p == \"y\") return this.substring(0, 4);\n if (p == \"m\") return this.substring(5, 7);\n if (p == \"d\") return this.substring(8);\n customLog(2, `No logical date part for ${p}`);\n return this;\n};\n\nString.prototype.isoPadDateParts = function () {\n let t = this.split(\"-\");\n return $`${t[0]}-${t[1].padStart(2, \"0\")}-${t[2].padStart(2, \"0\")}`\n}\n\nfunction parsedDate(s) {\n let d = s.split(\"T\")[0].split(\"-\");\n return new Date(d[0], d[1] - 1, d[2]);\n}\nfunction toComma(n, pretty) {\n if (pretty) {\n return n.toLocaleString('da-DK', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n }\n else {\n return n.toString().replace('.', ',');\n }\n}\n\nfunction toPoint(n) {\n if (n == '') return 0;\n if (!validNumber.test(n)) return n;\n if (n == 0) return 0;\n n = n.toString();\n if (n.endsWith(\".\") || n.endsWith(\",\")) n = n.substr(0, n.length - 1);\n return Math.round((parseFloat(n.replace(',', '.')) + 0.00001) * 100) / 100;\n}\n\nfunction monthsTotal(a, b) {\n let as = a.split('-');\n let bs = b.split('-');\n let x = as[0] * 12 + as[1];\n let y = bs[0] * 12 + bs[1];\n return y - x + 1;\n}\n\nfunction daysBetween(a, b) {\n let d1 = a.toDate();\n let d2 = b.toDate();\n return Math.ceil((d1.getTime() - d2.getTime()) / (1000 * 3600 * 24));\n}\n\nString.prototype.isoAddDatePart = function (t, v) {\n return adjustDate(this, t, v);\n // let y = this.substring(0, 4);\n // let m = this.substring(5, 7);\n // let d = this.substring(8, 10);\n // console.log(this, y, m, d);\n // if (p == \"y\") sub ? y-- : y++;\n // if (p == \"m\") sub ? m-- : m++;\n // if (p == \"d\") sub ? d-- : d++;\n // console.log(\"after\", this, y, m, d, p, sub);\n // if (m < 1) {\n // y--;\n // m = 12;\n // }\n // if (m > 12) {\n // y++;\n // m = m - 12;\n // }\n // if (d < 1) {\n // m--;\n // if (m < 1) {\n // y--;\n // m = 12;\n // }\n // d = daysInMonth(m, y);\n // }\n // let dim = daysInMonth(m, y);\n // if (d > dim) {\n // m++;\n // if (m > 12) {\n // y++;\n // m = m - 12;\n // }\n // d = d - dim;\n // }\n // let result = `${y}-${String(m).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n // return result;\n};\n\n\n\nfunction adjustDate(dateStr, type, value) {\n if (value == undefined || value == \"\") value = 1;\n let [year, month, day] = dateStr.split('-').map(Number);\n\n let date = new Date(year, month - 1, day);\n\n switch (type) {\n case 'd':\n date.setDate(date.getDate() + value);\n break;\n case 'm':\n date.setMonth(date.getMonth() + value);\n break;\n case 'y':\n date.setFullYear(date.getFullYear() + value);\n break;\n default:\n cumstomLog(2, `Invalid type ${type}. Type must be \"d\", \"m\", or \"y\". Value: ${value} Date: ${dateStr}`);\n }\n\n year = date.getFullYear();\n month = (date.getMonth() + 1).toString().padStart(2, '0');\n day = date.getDate().toString().padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\uFEFF(function () {\n const location = window.location;\n const document = window.document;\n\n const scriptEl = document.querySelector('script[data-api]');\n const endpoint = scriptEl.getAttribute(\"data-api\") || defaultEndpoint(scriptEl);\n const hasDomainLanguage = scriptEl.getAttribute(\"data-domainLanguage\") == \"1\";\n\n function onIgnoredEvent(reason, options) {\n if (reason) console.warn(\"Ignoring Event: \" + reason);\n options && options.callback && options.callback();\n }\n\n function defaultEndpoint(el) {\n return new URL(el.src).origin + \"/api/event\";\n }\n\n function trigger(eventName, options) {\n if (\n location.protocol === \"file:\"\n ) {\n return onIgnoredEvent(\"localhost\", options);\n }\n if (\n window._phantom ||\n window.__nightmare ||\n window.navigator.webdriver ||\n window.Cypress\n ) {\n return onIgnoredEvent(null, options);\n }\n try {\n if (window.localStorage.plausible_ignore === \"true\") {\n return onIgnoredEvent(\"localStorage flag\", options);\n }\n } catch (e) { }\n\n const payload = {};\n let href = location.href.toLowerCase().replace(\"/?\", \"?\");\n let referrer = document.referrer || null;\n if (referrer) {\n referrer = referrer.toLowerCase().replace(\"/?\", \"?\");\n referrer = referrer.endsWith(\"/\") ? referrer.substring(0, referrer.length - 1) : referrer;\n }\n payload.n = eventName;\n payload.u = href.endsWith(\"/\") ? href.substring(0, href.length - 1) : href;\n payload.d = scriptEl.getAttribute(\"data-domain\");\n payload.r = referrer;\n if (options && options.meta) {\n payload.m = JSON.stringify(options.meta);\n }\n if (options && options.props) {\n payload.p = options.props;\n }\n if (hasDomainLanguage) {\n let language = location.host.split('.')[0].split('-')[0];\n if (language && language.length == 2) {\n if (!payload.p) payload.p = {};\n payload.p.browserLanguage = navigator.language || navigator.userLanguage;\n payload.p.language = language;\n }\n }\n\n const propAttributes = scriptEl.getAttributeNames().filter(function (name) {\n return name.substring(0, 6) === \"event-\";\n });\n\n const props = payload.p || {};\n\n propAttributes.forEach(function (attribute) {\n const propKey = attribute.replace(\"event-\", \"\");\n const propValue = scriptEl.getAttribute(attribute);\n props[propKey] = props[propKey] || propValue;\n });\n\n payload.p = props;\n\n // TODO: better send\n\n const url = endpoint;\n const data = JSON.stringify(payload);\n const callback = function () {\n options && options.callback && options.callback();\n }; // Replace with your actual callback function\n\n try {\n // Use Fetch API with keepalive\n fetch(url, {\n method: 'POST',\n keepalive: true,\n headers: {\n 'Content-Type': 'text/plain'\n },\n body: data\n }).then(() => {\n // Ignore the response\n if (typeof callback === 'function') {\n callback();\n }\n }).catch((error) => {\n console.error('Error:', error);\n // Use XMLHttpRequest as a fallback\n const xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.setRequestHeader('Content-Type', 'text/plain');\n xhr.send(data);\n xhr.onload = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n if (typeof callback === 'function') {\n callback();\n }\n }\n };\n });\n } catch (error) {\n console.error('Error:', error);\n }\n\n // var request = new XMLHttpRequest();\n // request.open(\"POST\", endpoint, true);\n // request.setRequestHeader(\"Content-Type\", \"text/plain\");\n\n // request.send(JSON.stringify(payload));\n\n // request.onreadystatechange = function () {\n // if (request.readyState === 4) {\n // options && options.callback && options.callback();\n // }\n // };\n }\n\n const queue = (window.plausible && window.plausible.q) || [];\n window.plausible = trigger;\n for (var i = 0; i < queue.length; i++) {\n trigger.apply(this, queue[i]);\n }\n\n let lastPage;\n\n function page() {\n if (lastPage === location.pathname) return;\n lastPage = location.pathname;\n trigger(\"pageview\");\n }\n\n const his = window.history;\n if (his.pushState) {\n const originalPushState = his[\"pushState\"];\n his.pushState = function () {\n originalPushState.apply(this, arguments);\n page();\n };\n window.addEventListener(\"popstate\", page);\n }\n\n function handleVisibilityChange() {\n if (!lastPage && document.visibilityState === \"visible\") {\n page();\n }\n }\n\n if (document.visibilityState === \"prerender\") {\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n } else {\n page();\n }\n function getLinkEl(link) {\n while (link && (typeof link.tagName === 'undefined' || !isLink(link) || !link.href)) {\n link = link.parentNode\n }\n return link\n }\n\n function isLink(element) {\n return element && element.tagName && element.tagName.toLowerCase() === 'a'\n }\n\n function shouldFollowLink(event, link) {\n // If default has been prevented by an external script, Plausible should not intercept navigation.\n if (event.defaultPrevented) { return false }\n\n const targetsCurrentWindow = !link.target || link.target.match(/^_(self|parent|top)$/i);\n const isRegularClick = !(event.ctrlKey || event.metaKey || event.shiftKey) && event.type === 'click';\n return targetsCurrentWindow && isRegularClick\n }\n\n const MIDDLE_MOUSE_BUTTON = 1;\n\n function handleLinkClickEvent(event) {\n if (event.type === 'auxclick' && event.button !== MIDDLE_MOUSE_BUTTON) { return }\n\n const link = getLinkEl(event.target);\n const hrefWithoutQuery = link && link.href && link.href.split('?')[0];\n\n if (isElementOrParentTagged(link, 0)) {\n // Return to prevent sending multiple events with the same action.\n // Clicks on tagged links are handled by another function.\n return\n }\n if (isOutboundLink(link)) {\n return sendLinkClickEvent(event, link, { name: 'Outbound Link: Click', props: { url: link.href } })\n }\n if (isDownloadToTrack(hrefWithoutQuery)) {\n return sendLinkClickEvent(event, link, { name: 'File Download', props: { url: hrefWithoutQuery } })\n }\n }\n\n function sendLinkClickEvent(event, link, eventAttrs) {\n let followedLink = false;\n\n function followLink() {\n if (!followedLink) {\n followedLink = true\n window.location = link.href\n }\n }\n\n if (shouldFollowLink(event, link)) {\n plausible(eventAttrs.name, { props: eventAttrs.props, callback: followLink })\n setTimeout(followLink, 5000)\n event.preventDefault()\n } else {\n plausible(eventAttrs.name, { props: eventAttrs.props })\n }\n }\n\n document.addEventListener('click', handleLinkClickEvent)\n document.addEventListener('auxclick', handleLinkClickEvent)\n\n function isOutboundLink(link) {\n return link && link.href && link.host && link.host !== location.host\n }\n\n const defaultFileTypes = ['pdf', 'xlsx', 'docx', 'txt', 'rtf', 'csv', 'exe', 'key', 'pps', 'ppt', 'pptx', '7z', 'pkg', 'rar', 'gz', 'zip', 'avi', 'mov', 'mp4', 'mpeg', 'wmv', 'midi', 'mp3', 'wav', 'wma'];\n const fileTypesAttr = scriptEl.getAttribute('file-types');\n const addFileTypesAttr = scriptEl.getAttribute('add-file-types');\n const fileTypesToTrack = (fileTypesAttr && fileTypesAttr.split(\",\")) || (addFileTypesAttr && addFileTypesAttr.split(\",\").concat(defaultFileTypes)) || defaultFileTypes;\n\n function isDownloadToTrack(url) {\n if (!url) { return false }\n\n const fileType = url.split('.').pop();\n return fileTypesToTrack.some(function (fileTypeToTrack) {\n return fileTypeToTrack === fileType\n })\n }\n // Finds event attributes by iterating over the given element's (or its\n // parent's) classList. Returns an object with `name` and `props` keys.\n function getTaggedEventAttributes(htmlElement) {\n const taggedElement = isTagged(htmlElement) ? htmlElement : htmlElement && htmlElement.parentNode;\n const eventAttrs = {name: null, props: {}};\n\n const classList = taggedElement && taggedElement.classList;\n if (!classList) { return eventAttrs }\n\n for (let i = 0; i < classList.length; i++) {\n const className = classList.item(i);\n\n const matchList = className.match(/plausible-event-(.+)(=|--)(.+)/);\n if (!matchList) { continue }\n\n const key = matchList[1];\n const value = matchList[3].replace(/\\+/g, ' ');\n\n if (key.toLowerCase() === 'name') {\n eventAttrs.name = value\n } else {\n eventAttrs.props[key] = value\n }\n }\n\n return eventAttrs\n }\n\n function handleTaggedFormSubmitEvent(event) {\n const form = event.target;\n const eventAttrs = getTaggedEventAttributes(form);\n if (!eventAttrs.name) { return }\n\n event.preventDefault()\n let formSubmitted = false;\n\n function submitForm() {\n if (!formSubmitted) {\n formSubmitted = true\n form.submit()\n }\n }\n\n setTimeout(submitForm, 5000)\n plausible(eventAttrs.name, { props: eventAttrs.props, callback: submitForm })\n }\n\n function isForm(element) {\n return element && element.tagName && element.tagName.toLowerCase() === 'form'\n }\n\n const PARENTS_TO_SEARCH_LIMIT = 3;\n\n function handleTaggedElementClickEvent(event) {\n if (event.type === 'auxclick' && event.button !== MIDDLE_MOUSE_BUTTON) { return }\n\n let clicked = event.target;\n\n let clickedLink;\n let taggedElement;\n // Iterate over parents to find the tagged element. Also search for\n // a link element to call for different tracking behavior if found.\n for (let i = 0; i <= PARENTS_TO_SEARCH_LIMIT; i++) {\n if (!clicked) { break }\n\n // Clicks inside forms are not tracked. Only form submits are.\n if (isForm(clicked)) { return }\n if (isLink(clicked)) { clickedLink = clicked }\n if (isTagged(clicked)) { taggedElement = clicked }\n clicked = clicked.parentNode\n }\n\n if (taggedElement) {\n const eventAttrs = getTaggedEventAttributes(taggedElement);\n\n if (clickedLink) {\n eventAttrs.props.url = clickedLink.href\n sendLinkClickEvent(event, clickedLink, eventAttrs)\n } else {\n plausible(eventAttrs.name, { props: eventAttrs.props })\n }\n }\n }\n\n function isTagged(element) {\n const classList = element && element.classList;\n if (classList) {\n for (let i = 0; i < classList.length; i++) {\n if (classList.item(i).match(/plausible-event-name(=|--)(.+)/)) { return true }\n }\n }\n return false\n }\n\n function isElementOrParentTagged(element, parentsChecked) {\n if (!element || parentsChecked > PARENTS_TO_SEARCH_LIMIT) { return false }\n if (isTagged(element)) { return true }\n return isElementOrParentTagged(element.parentNode, parentsChecked + 1)\n }\n\n document.addEventListener('submit', handleTaggedFormSubmitEvent)\n document.addEventListener('click', handleTaggedElementClickEvent)\n document.addEventListener('auxclick', handleTaggedElementClickEvent)\n})();\n\n\uFEFFvar allSVGs = {};\n// vs\nallSVGs[\"tree\"] = '';\nallSVGs[\"heart\"] = '';\nallSVGs[\"bank\"] = '';\nallSVGs[\"mbike\"] = '';\nallSVGs[\"vs\"] = '';\nallSVGs[\"vsalt\"] = '';\n\n// andet\nallSVGs[\"label\"] = '{{text}}';\nallSVGs[\"star\"] = '';\nallSVGs[\"sparkle\"] = ``;\nallSVGs[\"doubleSparkle\"] = ``;\nclass DaysUI {\n constructor(data, container, today, principalName) {\n this.data = data;\n this.container = container;\n this.jsToday = today;\n this.principalName = principalName;\n this.initialize();\n }\n\n formatKM = new Intl.NumberFormat('da-DK', {\n useGrouping: false,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n\n day = new Intl.DateTimeFormat('da-DK', { weekday: 'long' });\n\n initialize() {\n let s = `

${this.principalName}

`;\n this.data.campaigns.map((c) => {\n let start = c.startDataEntry.split('T')[0];\n let end = c.endDataEntry.split('T')[0];\n s += `

${c.name}

\n

(${start} - ${end})

\n \n \n \n \n \n \n \n `;\n\n\n const currentDate = new Date(start);\n const endDate = new Date(end);\n while (currentDate <= endDate) {\n if (!isNaN(currentDate.getTime())) {\n let disabled = currentDate > this.jsToday;\n let date = currentDate.toISOString().slice(0, 10);\n s += `\n \n \n `;\n }\n currentDate.setDate(currentDate.getDate() + 1);\n }\n s += `
ArbejdeFritid
${currentDate.toLocaleDateString(\"da-DK\")}
${this.dayInput(\"Arbejde\", this.data.days[date], \"distance\", date, disabled)}${this.dayInput(\"Fritid\", this.data.days[date], \"playDistance\", date, disabled)}
`;\n });\n this.container.innerHTML = s + `
`;\n document.getElementById('principaldays').addEventListener('submit', (e) => this.saveChanges(e));\n this.container.querySelectorAll('input[type=\"text\"]').forEach(input => {\n input.addEventListener('change', (e) => {\n this.cleanInput(e.target);\n });\n });\n }\n\n // pattern=\"^[0-9]*[.,]?[0-9]*$\" breaks icloud passwords extension in edge so left out\n dayInput(title, data, field, date, disabled) {\n const value = data ? data[field] : 0;\n return ``;\n }\n\n formatNumberInput(value) {\n // Return empty string for empty or whitespace-only input\n if (!value || value.trim() === '') {\n return '';\n }\n\n // Remove all whitespace\n let cleanValue = value.replace(/\\s/g, '');\n\n // Count occurrences of . and ,\n const dotCount = (cleanValue.match(/\\./g) || []).length;\n const commaCount = (cleanValue.match(/,/g) || []).length;\n\n // Handle decimal separator logic\n if (dotCount + commaCount > 0) {\n let lastSeparatorPos = -1;\n\n // Find the last separator and its position\n const lastDotPos = cleanValue.lastIndexOf('.');\n const lastCommaPos = cleanValue.lastIndexOf(',');\n\n if (lastDotPos > lastCommaPos) {\n lastSeparatorPos = lastDotPos;\n } else {\n lastSeparatorPos = lastCommaPos;\n }\n\n // Remove all separators except the last one and convert it to a dot\n cleanValue = cleanValue.substring(0, lastSeparatorPos).replace(/[.,]/g, '') + '.' + cleanValue.substring(lastSeparatorPos + 1).replace(/[.,]/g, '');\n }\n\n let num = parseFloat(cleanValue);\n\n if (isNaN(num) || num <= 0) {\n return '';\n }\n\n num = Math.min(num, 300);\n\n return this.formatKM.format(num);\n }\n\n cleanInput(input) {\n const date = input.dataset.date;\n const field = input.dataset.field;\n const value = this.formatNumberInput(input.value);\n input.value = value;\n\n if (this.data.days[date] == null) {\n this.data.days[date] = {\n distance: 0,\n playDistance: 0,\n changed: false\n };\n }\n\n this.data.days[date][field] = parseFloat(value.replace(',', '.')) || 0;\n this.data.days[date].changed = value !== input.dataset.initial;\n }\n\n async saveChanges(e) {\n e.preventDefault();\n e.stopPropagation();\n this.container.querySelectorAll('input[type=\"text\"]').forEach(input => {\n this.cleanInput(input);\n });\n console.log(\"saving:\", this.data);\n toAPI(\"setPrincipalDays\", (days) => {\n console.log(days);\n addBrief(\"Dage opdateret\");\n }, this.data);\n }\n}\n\uFEFFconst cacheVersion = 1;\nvar localLanguage = \"\";\nconst savedTimes = {};\n\nwindow.local = {\n \"General.Campaign.da\": \"Kampagne\",\n \"General.Campaign.en\": \"Campaign\",\n \"General.Choose.da\": \"Vælg\",\n \"General.Choose.en\": \"Choose\",\n \"General.Create.da\": \"Opret\",\n \"General.Create.en\": \"Create\",\n \"General.Email.da\": \"Email\",\n \"General.Email.en\": \"Email\",\n \"General.GenericError.da\": \"Der er sket en fejl der ikke burde ske, vi beklager ulejligheden, prøv evt. igen om et par minutter.\",\n \"General.GenericError.en\": \"An unexpected error occured, we apologize for the inconvenience, try again in a minute or two.\",\n \"General.LogIn.da\": \"Log ind\",\n \"General.LogIn.en\": \"Log in\",\n \"General.Municipality.da\": \"Kommune\",\n \"General.Municipality.en\": \"Municipality\",\n \"General.Name.da\": \"Navn\",\n \"General.Name.en\": \"Name\",\n \"General.NotInGroup.cc1.da\": \"Ikke en del af en skole i listen\",\n \"General.NotInGroup.da\": \"Ikke en del af en virksomhedsgruppe i listen\",\n \"General.NotInGroup.en\": \"Not part of a group of workplaces on this list\",\n \"General.Participant.da\": \"Deltager\",\n \"General.Participant.en\": \"Participant\",\n \"General.Participants.da\": \"Deltagere|Deltager\",\n \"General.Participants.en\": \"Participants|Participant\",\n \"General.ParticipantInvite.da\": \"Se dine holddeltagere og inviter med email her\",\n \"General.ParticipantInvite.en\": \"View your team participants and invite by email here\",\n \"General.Password.da\": \"Password (mindst 6 tegn)\",\n \"General.Password.en\": \"Password (at least 6 chars)\",\n \"General.Postcode.da\": \"Postnummer\",\n \"General.Postcode.en\": \"Postcode\",\n \"General.RepeatPassword.da\": \"Gentag password\",\n \"General.RepeatPassword.en\": \"Repeat password\",\n \"General.Save.da\": \"Gem\",\n \"General.Save.en\": \"Save\",\n \"General.Seats.da\": \"Pladser|Plads\",\n \"General.Seats.en\": \"Seats|Seat\",\n \"General.Team.da\": \"Hold\",\n \"General.Team.en\": \"Team\",\n \"General.TeamCaptain.da\": \"Holdkaptajn\",\n \"General.TeamCaptain.en\": \"Team captain\",\n \"General.TeamName.da\": \"Holdnavn\",\n \"General.TeamName.en\": \"Team name\",\n \"General.TeamSize.da\": \"Holdstørrelse\",\n \"General.TeamSize.cc1.da\": \"Antal elever i klassen\",\n \"General.TeamSize.en\": \"Team size\",\n \"General.NotPlay.da\": \"Arbejde\",\n \"General.NotPlay.cc1.da\": \"Skole\",\n \"General.Play.da\": \"Fritid\",\n \"General.Update.da\": \"Opdater\",\n \"General.Update.en\": \"Update\",\n \"General.Work.cc1.da\": \"Skole\",\n \"General.Work.da\": \"Arbejde\",\n \"General.Work.en\": \"Work\",\n \"General.Workplace.cc1.da\": \"Klasse\",\n \"General.Workplace.cc1.en\": \"Class\",\n \"General.Workplace.da\": \"Arbejdsplads\",\n \"General.Workplace.en\": \"Workplace\",\n \"General.WorkplaceGroup.cc1.da\": \"Skole\",\n \"General.WorkplaceGroup.da\": \"Virksomhedsgruppe\",\n \"General.WorkplaceGroup.en\": \"Workplace group\",\n \"General.WorkplaceGroupLabel.cc1.da\": \"Skole\",\n \"General.WorkplaceGroupLabel.da\": \"Er din arbejdsplads en del af en større virksomhedsgruppe? Vælg herunder: (?)Vi bruger denne information til at kunne vise samlet statistik for alle hold i store virksomheder der har flere adresser.\",\n \"General.WorkplaceGroupLabel.en\": \"Is your workplace a part of a group of workplaces? Choose below: (?)We use this information to show statistics for all workplaces in large companies with multiple addresses.\",\n \"General.WorkplaceGroupYour.cc1.da\": \"Din skole\",\n \"General.WorkplaceGroupYour.da\": \"Din virksomhedsgruppe\",\n \"General.WorkplaceGroupYour.en\": \"Your Workplace group\",\n \"General.WorkplaceYour.cc1.da\": \"Din skole\",\n \"General.WorkplaceYour.da\": \"Din arbejdsplads \",\n \"General.WorkplaceYour.en\": \"Your workplace\",\n \"General.YourName.da\": \"Dit navn\",\n \"General.YourName.en\": \"Your name\",\n \"Profile.CreateTeam.da\": \"Opret nyt hold\",\n \"Profile.CreateTeam.cc1.da\": \"Opret ny klasse\",\n \"Profile.CreateTeam.en\": \"Create team\",\n \"Profile.DeleteTeam.da\": \"Slet hold\",\n \"Profile.DeleteTeam.en\": \"Delete team\",\n \"Profile.EditTeam.da\": \"Rediger holddetaljer\",\n \"Profile.EditTeam.en\": \"Edit team details\",\n \"Profile.Municipality.cc1.da\": \"Skolens kommune\",\n \"Profile.Municipality.da\": \"Kommune\",\n \"Profile.Municipality.en\": \"Municipality\",\n \"Profile.Postcode.cc1.da\": \"Skolens postnummer\",\n \"Profile.Postcode.da\": \"Postnummer\",\n \"Profile.Postcode.en\": \"Postcode\",\n \"Profile.SaveBikeDays.da\": \"Gem cykeldage\",\n \"Profile.SaveBikeDays.en\": \"Save bike days\",\n \"Profile.SaveBikeDaysError.da\": \"En eller flere af dine cykeldage har en ugyldig værdig, du kan kun bruge tal.

De ugyldige værdier er fremhævet med rødt\",\n \"Profile.SaveBikeDaysError.cc1.da\": \"En eller flere af dine cykeldage har en ugyldig værdig, du kan kun bruge tal.

De ugyldige værdier er markeret med lyserødt i venstre side\",\n \"Profile.SaveBikeDaysError.en\": \"One or more of your bike days has an invalid value, only numbers can be used.

The invalid value(s) are highlighted in red\",\n \"Profile.WelcomeHeadingPostfix.cc1.da\": \"på fællestour\",\n \"Profile.WelcomeHeadingPostfix.da\": \"cykler til arbejde\",\n \"Signup.Consent.da\": \"Ja, jeg vil gerne deltage i Cyklistforbundets kampagneaktiviteter og accepterer at mine data registreres og anvendes i henhold til Cyklistforbundets persondatapolitik.\",\n \"Signup.Consent.en\": \"Yes, I would like to participate in Cyklistforbundets campaignactivities and hereby consent to the registration of my data and its use according to Cyklistforbundets persondatapolitikto VI CYKLER TIL ARBEJDEs persondatapolitik.\",\n \"Signup.Create.da\": \"Opret profil\",\n \"Signup.Create.en\": \"Create profile\",\n \"Stats.WorkplaceLinkBy.cc1.da\": \"groups\",\n \"Stats.WorkplaceLinkBy.da\": \"companies\",\n \"Stats.WorkplaceLinkText.cc1.da\": \"Se alle hold fra din skole\",\n \"Stats.WorkplaceLinkText.da\": \"Se alle hold på din arbejdsplads\",\n \"Teams.InviteHeading.da\": \"Invitér holddeltagere\",\n \"Teams.InviteHeading.cc1.da\": \"Invitér dine elever\",\n \"Teams.InviteText.da\": \"Skriv email på dem der skal med på dit hold\",\n \"Teams.InviteText.cc1.da\": \"Kopiér linket og del det med dem, der skal med på dit hold:\"\n}\n\uFEFFaddDomReadyEventListener(() => {\n let campaignDropdowns = document.querySelectorAll(\"select[name='campaigns']\");\n\n if (campaignDropdowns && campaignDropdowns.length > 0) {\n toAPI(\"adminCampaigns\", function (data) {\n let options = '';\n forEach(data, function (c) {\n options += '';\n includePlayInTrophyCalculations[c.id] = c.includePlayInTrophyCalculations;\n });\n var empty = '';\n forEach(campaignDropdowns, function (el) {\n el.innerHTML = (el.classList.contains(\"defaultAll\") ? empty : \"\") + options;\n });\n\n if (urlParam(\"campaigntable\") && data) {\n let table = document.getElementById(\"campaignTable\");\n if (!table) {\n table = document.createElement('table');\n table.id = \"campaignTable\"\n document.body.appendChild(table);\n }\n let s = \"\";\n forEach(Object.getOwnPropertyNames(data[0]), function (n) {\n s += \"\" + n + \"\";\n });\n s += \"\";\n forEach(data.reverse(), function (r) {\n s += \"\";\n forEach(Object.values(r), function (c) {\n s += \"\" + c + \"\";\n });\n s += \"\";\n });\n\n table.innerHTML += s;\n }\n }, \"{}\");\n }\n\n addEvent(\"#adminusers .cf\", \"submit\", function (e) {\n let text = e.target.querySelector(\"input[name='text']\");\n let campaign = e.target.querySelector(\"select[name='campaigns']\");\n let post = { \"Users\": true, \"Text\": text.value, \"CampaignId\": campaign.value ? parseInt(campaign.value) : 0 };\n toAPI(\"adminSearch\", function (data) {\n if (data.participants) {\n let table = \"\";\n forEach(data.participants, function (el) {\n table += '';\n });\n if (data.participants.length === 0) table += \"\";\n table += \"
' + el.name + '' + el.email + '' + (el.phone ? el.phone : '-') + '
Ingen resultater
\";\n e.target.closest(\"div\").querySelector(\".table\").innerHTML = table;\n }\n\n }, JSON.stringify(post));\n stopAll(e);\n });\n\n\n addEvent(\"#adminteams .cf\", \"submit\", function (e) {\n let text = e.target.querySelector(\"input[name='text']\");\n let campaign = e.target.querySelector(\"select[name='campaigns']\");\n let post = { \"Teams\": true, \"Text\": text.value, \"CampaignId\": campaign.value ? parseInt(campaign.value) : 0 };\n toAPI(\"adminSearch\", function (data) {\n if (data.teams) {\n let table = \"\";\n forEach(data.teams, function (el) {\n table += '';\n });\n if (data.teams.length === 0) table += \"\";\n table += \"
' + el.campaign + '' + el.name + '' + el.group + '' + el.company + '' + el.municipality + '' + el.owner + '' + el.teamId + '
Ingen resultater
\";\n e.target.closest(\"div\").querySelector(\".table\").innerHTML = table;\n }\n\n }, JSON.stringify(post));\n stopAll(e);\n });\n\n\n addEvent(\"#admincampaigns .cf\", \"submit\", function (e) {\n let campaign = e.target.querySelector(\"select[name='campaigns']\").value;\n let type = e.target.querySelector(\"select[name='type']\").value;\n let from = e.target.querySelector(\"input[name='from']\").value;\n let to = e.target.querySelector(\"input[name='to']\").value;\n let url = '/umbraco/surface/adminvctasurface/participants?campaignId=' + campaign + \"&from=\" + from + \"&to=\" + to;\n if (type === 'Hold') {\n url = VctaAPIUrl + 'teams/' + campaign + '/true';\n if (from) url += \"/\" + from;\n if (to) url += \"/\" + to;\n }\n window.open(url);\n stopAll(e);\n });\n\n addEvent(\"#adminwinners .cf\", \"submit\", function (e) {\n let campaign = e.target.querySelector(\"select[name='campaigns']\").value;\n drawIPiTC = includePlayInTrophyCalculations[campaign];\n let url = VctaAPIUrl + 'teams/' + campaign + '/false';\n httpr(url, function (data) {\n drawData = data;\n let drawForm = document.querySelector(\"#admindraw\");\n removeClass(drawForm, \"hidden\");\n let regions = {};\n let municipalities = {};\n let groups = {};\n let companies = {};\n let potentialCount = 0;\n let sumSeatDays = 0;\n\n forEach(data, function (el) {\n if (el.SD > 0 || (drawIPiTC && el.PSD)) {\n regions[el.R] = true;\n municipalities[el.M] = true;\n groups[el.G] = true;\n companies[el.C] = true;\n potentialCount++;\n sumSeatDays += el.SD + (drawIPiTC ? el.PSD : 0);\n }\n });\n\n addOverlayMessage(`

Kampagnen har ${potentialCount} hold med mindst en cykeldag

Fritidscykling er ${drawIPiTC ? \"\" : \"IKKE \"} med i trækningen

`);\n\n drawForm.querySelector(\"select[name='region']\").innerHTML = '' + createOptions(Object.entries(regions));\n drawForm.querySelector(\"select[name='municipality']\").innerHTML = '' + createOptions(Object.entries(municipalities));\n drawForm.querySelector(\"select[name='group']\").innerHTML = '' + createOptions(Object.entries(groups));\n drawForm.querySelector(\"select[name='company']\").innerHTML = '' + createOptions(Object.entries(companies));\n\n }).then(() => { }).catch((ex) => { showApiError(genericError); });\n stopAll(e);\n });\n\n function download(data, filename, type) {\n var file = new Blob([data], { type: type });\n if (window.navigator.msSaveOrOpenBlob) // IE10+\n window.navigator.msSaveOrOpenBlob(file, filename);\n else {\n var a = document.createElement(\"a\"),\n url = URL.createObjectURL(file);\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(function () {\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }, 0);\n }\n }\n\n addEvent(\"#admingroups .cf\", \"submit\", (e) => {\n stopAll(e);\n\n let groupCollectionId = e.target.querySelector(\"select[name='collectionid']\").value;\n if (groupCollectionId == 0) {\n addBrief(\"Vælg gruppe type først\");\n return;\n }\n let includeObsolete = e.target.querySelector(\"select[name='includeobsolete']\").value == \"1\";\n let post = { \"GroupCollectionId\": parseInt(groupCollectionId), \"includeObsolete\": includeObsolete };\n\n toAPI(\"AdminGroups\", function (data) {\n addBrief(\"Done, en fil med nuværende grupper kan downloades som information/ backup\");\n download(data, \"grupper-\" + groupCollectionId + \"-\" + new Date().isoDate(), \"txt\");\n }, JSON.stringify(post));\n });\n\n addEvent(\"#adminupdategroups .cf\", \"submit\", (e) => {\n stopAll(e);\n\n let groupCollectionId = e.target.querySelector(\"select[name='collectionid']\").value;\n if (groupCollectionId == 0) {\n addBrief(\"Vælg gruppe type først\");\n return;\n }\n let groups = e.target.querySelector(\"textarea\").value?.trim();\n let post = { \"GroupCollectionId\": parseInt(groupCollectionId), \"GroupNames\": groups.split(\"\\n\") };\n\n toAPI(\"AdminUpdateGroups\", function (data) {\n addBrief(\"Done, grupper er opdateret\");\n customLog(0, data);\n }, JSON.stringify(post));\n });\n\n addEvent(\"#adminresetusers label:last-of-type\", \"click\", e => {\n document.querySelector(\"#adminresetusers\").classList.remove(\"flash\");\n });\n\n addEvent(\"#adminresetusers .cf\", \"submit\", (e) => {\n stopAll(e);\n e.target.closest(\"div\").classList.remove(\"flash\");\n\n let resets = e.target.querySelector(\"select[name='resets']\").value;\n if (resets == 0) {\n addBrief(\"Vælg hvad der skal nulstilles/ slettes på brugerne\");\n return;\n }\n let settings = resets.split(',');\n let emails = e.target.querySelector(\"textarea\").value?.trim().split(\"\\n\");\n if (!emails || emails.length == 0 || !settings || settings.length != 3) {\n addBrief(\"Invalid selection / data\");\n return;\n }\n\n let url = `/umbraco/surface/adminvctasurface/reset`;\n var data = [];\n emails.forEach(mail => {\n if (mail) mail = mail.trim();\n if (isValidEmail(mail)) {\n data.push({\n DeleteDays: (settings[0] == \"1\"),\n DeleteSelf: (settings[1] == \"1\"),\n DeleteTeams: (settings[2] == \"1\"),\n Email: mail\n });\n }\n else {\n addBrief(`${mail} is not a valid email`);\n }\n });\n\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-TOKEN': afToken()?.value,\n },\n body: JSON.stringify(data),\n })\n .then(response => response.text())\n .then(data => {\n console.log(data);\n addBrief(data);\n })\n .catch((error) => {\n console.error('Error:', error);\n });\n });\n\n addEvent(\"#admindraw .cf\", \"submit\", function (e) {\n let region = e.target.querySelector(\"select[name='region']\").value;\n let municipality = e.target.querySelector(\"select[name='municipality']\").value;\n let group = e.target.querySelector(\"select[name='group']\").value;\n let company = e.target.querySelector(\"select[name='company']\").value;\n\n let message = `

Udtræk vinder, filtrer Region: '${region}' Kommune: '${municipality}' Virksomhedsgruppe: '${group}' Arbejdsplads: '${company}'

Fritidscykling er ${drawIPiTC ? \"\" : \"IKKE \"} med i trækningen

`;\n\n let potentials = [];\n let sumSeatDays = 0;\n forEach(drawData, function (el) {\n if ((el.SD > 0 || (drawIPiTC && el.PSD > 0)) && (region === \"Alle\" || region === el.R) && (municipality === \"Alle\" || municipality === el.M) && (group === \"Alle\" || group === el.G) && (company === \"Alle\" || company === el.C)) {\n potentials.push(el);\n sumSeatDays += el.SD + (drawIPiTC ? el.PSD : 0);\n }\n });\n\n message += \"Filter matcher \" + potentials.length + \" hold, summen af SeatDays er \" + sumSeatDays + \"

\";\n let r = rnd();\n let winningSD = r * sumSeatDays;\n message += \"Dagens vindernummer er \" + winningSD + \"
baseret på det tilfældige tal \" + r + \" ganget med SeatDays summen \" + sumSeatDays + \"

\";\n\n let currentSeatDays = 0;\n var winner;\n for (var i = 0; i < potentials.length; i++) {\n currentSeatDays += potentials[i].SD + (drawIPiTC ? potentials[i].PSD : 0);\n if (currentSeatDays >= winningSD) {\n winner = potentials[i];\n break;\n }\n }\n\n let date = new Date().toISOString().replace(/:/gi, \"-\");\n\n if (winner) {\n let date = new Date().toISOString().replace(/:/gi, \"-\");\n\n let post = { \"Id\": winner.TI };\n\n let extraInfo = \"\";\n toAPI(\"adminTeamInfo\", function (data) {\n if (data) {\n if (data.OwnerName) extraInfo += \"
Holdejer navn: \" + data.OwnerName;\n if (data.OwnerEmail) extraInfo += \"
Holdejer email: \" + data.OwnerEmail;\n if (data.CaptainName) extraInfo += \"
Kaptajn navn: \" + data.CaptainName;\n if (data.CaptainEmail) extraInfo += \"
Kaptajn email: \" + data.CaptainEmail;\n }\n message += \"Vinderen er: \" + winner.N +\n extraInfo +\n \"
Hold id: \" + winner.TI + \"
Postnummer: \" + winner.Z + \"
Region: \" + winner.R + \"
Kommune: \" + winner.M + \"
Virksomhedsgruppe: \" + winner.G + \"
Arbejdsplads: \" + winner.C +\n \"

Udtræk vinder, filtrer Region: '\" + region + \"' Kommune: '\" + municipality + \"' Virksomhedsgruppe: '\" + group + \"'\" + \"' Arbejdsplads: '\" + company + \"'\" +\n \"

\" + date;\n addOverlayMessage(message);\n download(\"\" + message + \"\", \"draw-\" + date + \".html\", \"html\");\n }, JSON.stringify(post));\n\n }\n else {\n addOverlayMessage(\"Der kunne ikke findes en vinder, der er sandsynligvis sket en fejl.\");\n }\n\n stopAll(e);\n });\n\n});\n\nfunction createOptions(a) {\n let s = '';\n forEach(a, function (el) {\n s += '';\n });\n return s;\n}\n\nvar drawData = [];\nvar drawIPiTC = false;\nvar includePlayInTrophyCalculations = {};\n\nfunction rnd() {\n return crypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32;\n}\nconst apiData = {};\nvar unsavedChanges = 0;\nconst months = [\"\", \"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"];\nconst Days = [\"søn\", \"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\", \"søn\"];\nconst validNumber = /^[0-9.,]+$/;\nvar genericError;\nconst co2factor = 0.135;\nconst kcalfactor = 30;\nconst co2treefactor = 67;\nconst icetokcalfactor = 50;\nconst krSavedFactor = 7.11;\nconst daysSavedFactor = 1200;\nconst trophyNames = {\n \"0\": [\"\", \"Første cykeldag\", \"5 dage i streg\", \"Hele holdet\", \"25km dag\", \"Djævlebakke\",\n \"Regnvejr\", \"Kagedag\", \"Hent en kollega\", \"Mørke\", \"40km dag\",\n \"Mekaniker\", \"Buks i sokken\", \"Kombi transport\", \"Fulgtes ad\", \"Detour\",\n \"Quiz\", \"7 dage\"],\n \"1\": [\"\", \"Første cykeldag\", \"5 dage i streg\", \"Hele holdet\", \"25km dag\", \"Djævlebakke\",\n \"Regnvejr\", \"Kagedag\", \"Hent en kollega\", \"Mørke\", \"40km dag\",\n \"Mekaniker\", \"Buks i sokken\", \"Kombi transport\", \"Fulgtes ad\", \"Detour\",\n \"Quiz\", \"7 dage\"]\n};\n\nconst trophyConfirm = [\"\", \"\", \"\", \"\", \"\",\n \"Fik du kørt op ad en stejl bakke?\",\n \"Dryppede det på dig i dag?\",\n \"Har du haft kage med til hele holdet?\",\n \"Har du hentet en kollega?\",\n \"Har du cyklet i mørke?\",\n \"\",\n \"Har du repareret på din cykel?\",\n \"Fik du kørt med buksen i sokken?\",\n \"Har du både kørt på cykel og brugt et andet transportmiddel?\",\n \"Fulgtes du med en ven?\",\n \"Tog du en omvej?\",\n \"Har du gennemført quizzen?\",\n \"\"];\nvar passiveTrophies = trophyConfirm.map((value, index) => value === \"\" ? index : -1).filter(index => index > 0);\n\nconst mfTrophyOverride = {\"troph1\": \"troph1-1\", \"troph2\": \"troph2-1\", \"troph3\": \"troph3-1\"};\nvar trophyFormatPNG = [5, 11, 12];\nconst playBikeEls = [\"#bikedays\", \"#teamdata\"];\nconst playStatsEls = [\"#stattable\", \"#statfavorites\"];\nvar daysLoaded = false;\nvar profileLoaded = false;\nvar teamDataShown = false;\n\nwindow.onbeforeunload = function (e) {\n if (unsavedChanges > 0) {\n let text = \"Du har ændringer du ikke har gemt, er du sikker på du vil forlade denne side?\";\n if (e) {\n e.returnValue = text;\n }\n return text;\n }\n};\n\naddDomReadyEventListener(() => {\n document.querySelectorAll(\".sparkle\").forEach(el => {\n let svg = el.classList.contains(\"doubleSparkle\") ? \"doubleSparkle\" : \"sparkle\";\n let elf = el.firstElementChild;\n if (elf) {\n elf.insertAdjacentHTML('afterbegin', `${allSVGs[svg]}`);\n elf.insertAdjacentHTML('beforeend', `${allSVGs[svg]}`);\n }\n });\n\n genericError = localText(\"General.GenericError\");\n let campaignCode = urlParam(\"campaigncode\");\n if (campaignCode) {\n sessionStorage['campaignCode'] = `${campaignCode},${Date.now()}`;\n }\n\n if (urlParam(\"removeCampaignCode\") == \"true\") sessionStorage.removeItem(\"campaignCode\");\n\n let teamCode = urlParam(\"teamcode\");\n if (teamCode) {\n sessionStorage['teamCode'] = `${teamCode},${Date.now()}`;\n }\n\n let redirect = document.querySelector(\"#redirect\");\n if (redirect && !(redirect.dataset.target?.toLowerCase() == document.location.pathname.toLowerCase())) {\n document.location = redirect.dataset.target;\n }\n else {\n if ((redirect?.dataset.target?.toLowerCase() == document.location.pathname.toLowerCase())) customLog(2, \"identitical path and redirect path, infinite loop\", redirect?.dataset.target?.toLowerCase(), document.location.pathname.toLowerCase());\n }\n\n if (document.querySelector(\"html\").classList.contains(\"nlo\")) {\n let login = document.querySelector(\"#login\");\n let signup = document.querySelector(\"#signup\");\n if ((teamCode || campaignCode) && signup) {\n signup.querySelector(\".toggler\")?.classList.remove(\"off\");\n }\n else if (campaignConfigId != 1 && signup && !login) signup.querySelector(\".toggler\")?.classList.remove(\"off\");\n else if (login && !signup) login.querySelector(\".toggler\")?.classList.remove(\"off\");\n }\n\n forEach(\"div[data-memberaction]\", function (el) {\n let action = el.dataset.memberaction;\n if (action) {\n switch (action) {\n case \"profile\":\n showProfileMessages(action);\n break;\n case \"teams\":\n showTeams(action);\n break;\n default:\n }\n }\n });\n\n let playStats = !(getCookie(\"playstats\") == \"0\");\n if (playStats) setCookie(\"playstats\", 1, 60);\n\n let ps = document.querySelector(\"#playstats\");\n if (ps) {\n ps.checked = playStats;\n }\n\n addEvent(\"#playstats\", \"click\", function (e) {\n setCookie(\"playstats\", e.target.checked ? \"1\" : \"0\", 60);\n setPlay(playStatsEls, \"playstats\");\n });\n setPlay(playStatsEls, \"playstats\");\n\n const principalsSelect = document.getElementById(\"principals\");\n if (principalsSelect) {\n toAPI(\"principals\", (principals) => {\n Object.entries(principals).forEach(([groupLabel, options]) => {\n const optgroup = document.createElement(\"optgroup\");\n optgroup.label = \"Hold: \" + groupLabel;\n\n Object.entries(options).forEach(([value, text]) => {\n const option = document.createElement(\"option\");\n option.value = value;\n option.textContent = text;\n optgroup.appendChild(option);\n });\n\n principalsSelect.appendChild(optgroup);\n });\n principalsSelect.addEventListener(\"change\", () => {\n toAPI(\"getPrincipalDays\", (days) => {\n const daysManager = new DaysUI(days, document.querySelector('#AgentPrincipals .days'), jsToday, principalsSelect.options[principalsSelect.selectedIndex].textContent);\n }, {\"Id\": principalsSelect.value});\n });\n principalsSelect.disabled = false;\n }, \"{}\");\n }\n});\n\nfunction setPlay(ids, cookie) {\n let play = getCookie(cookie) == \"1\";\n if (play) {\n forEach(ids, function (id) {\n let el = document.querySelector(id);\n if (el && !hasClass(el, \"personal\")) {\n removeClass(el, \"noplay\");\n if (id != \"#stattable\") {\n addClass(el, \"play\");\n }\n }\n });\n }\n else {\n forEach(ids, function (id) {\n let el = document.querySelector(id);\n if (el && !hasClass(el, \"personal\")) {\n addClass(el, \"noplay\");\n removeClass(el, \"play\");\n }\n });\n }\n}\n\nfunction showApiError(error, internal, extra) {\n if (internal) {\n if (error) {\n addOverlayMessage(error, extra);\n }\n addOverlayMessage(genericError, extra);\n }\n else {\n addOverlayMessage(error);\n }\n}\n\nfunction showApiMessages(messages) {\n if (messages && messages.length) {\n forEach(messages, function (msg) {\n addOverlayMessage(msg);\n });\n }\n}\n\nfunction SeatsText(el, c) {\n if (c.seats === 10000) {\n el.insertAdjacentHTML(\"beforeend\", \"

Du kan frit oprette hold til \" + c.name + \"

\");\n }\n else {\n el.insertAdjacentHTML(\"beforeend\", \"

Du har \" + c.seats + \" plads\" + (c.seats === 1 ? \"\" : \"er\") + \" i \" + c.name + \". Fordel dine pladser på hold à \" + c.teamSizeMinimum + \"-\" + c.teamSizeMaximum + \" deltagere.\" + (c.prepaid ? \"\" : \"

Har du brug for flere? Køb her\") + \"

\");\n }\n}\n\nfunction drawTeamRoster(t, partipantEmail, includeChartData) {\n let campaign = campaignById(t.ci);\n let mailto = '';\n let me = undefined;\n let trophiesDisabled = campaign.trophiesDisabled;\n let teamRoster = '';\n\n t.ps.sort(dynamicSortMultiple(\"-d\", \"-k\", \"n\"));\n\n let yellow = -1;\n let green = -1;\n let yScore = [];\n let gScore = [];\n forEach(t.ps, function (p, i) {\n yScore.push(0);\n gScore.push(0);\n\n let pd = p.d + (campaign.includePlayInTrophyCalculations ? p.pd : 0);\n let pk = p.k + (campaign.includePlayInTrophyCalculations ? p.pk : 0);\n\n yScore[i] += (pd * 100);\n yScore[i] += (pk * 0.0001);\n\n gScore[i] += ((p.tr?.length ?? 0) * 100000000);\n gScore[i] += (pd * 100);\n gScore[i] += (pk * 0.0001);\n\n if (yScore[i] > 0 && yScore[i] > yellow) yellow = yScore[i];\n if (gScore[i] > 0 && gScore[i] > green) green = gScore[i];\n });\n\n let ccId = campaign.campaignConfigId;\n\n // TODO: need data made available to draw daily average and/ or sum for all participants, sum can be calculated from average\n let teamInfo = { s: 0, d: 0, pd: 0, k: 0.0, pk: 0.0 };\n let meInfo = { d: 0, pd: 0, k: 0.0, pk: 0.0 };\n if (t.ps && t.ps.length > 0) {\n teamRoster += '';\n forEach(t.ps, function (p, i) {\n let isMe = p.e.toLowerCase() === partipantEmail;\n if (isMe && p.l) isCaptain = true;\n let ps = '' + p.n + (p.l === 1 ? '
' : '') +\n (!trophiesDisabled && yellow > 0 && yScore[i] == yellow ? '
' : '') +\n //(!trophiesDisabled && green > 0 && gScore[i] == green ? '
' : '') +\n '
';\n\n if (!trophiesDisabled) {\n ps += '';\n }\n else {\n ps += \"\";\n }\n ps += '';\n teamInfo.s++;\n teamInfo.d += p.d;\n teamInfo.pd += p.pd;\n teamInfo.k += p.k;\n teamInfo.pk += p.pk;\n\n if (isMe) {\n meInfo.d = p.d;\n meInfo.pd = p.pd;\n meInfo.k = p.k;\n meInfo.pk = p.pk;\n me = p;\n }\n else {\n mailto += (mailto.length > 0 ? '%3B' : '') + p.e.trim();\n }\n teamRoster += ps;\n });\n teamRoster += '
' + localText(\"General.NotPlay\", false, ccId) + '' + localText(\"General.Play\", false, ccId) + '
' + singularE(' dag', p.d) + '' + toComma(p.k, true) + ' km' + p.pd + ' dage' + toComma(p.pk, true) + ' km
'\n + drawTrophies(campaign, p.tr, isMe, false);\n + '
';\n }\n\n\n // TODO add personal and team data from loop, return, add element with id and draw chart\n let personalChartData, teamChartData;\n let start = campaign.startDataEntry.isoDate();\n let end = campaign.endDataEntry.isoDate();\n if (jsTodayIsoDateString < end) end = jsTodayIsoDateString;\n let campaignLength = daysBetween(end, start) + 1;\n\n if (includeChartData) {\n let lbl = [];\n let serDay = [];\n let serPlayDay = [];\n let maxLength = 31;\n let startIndex = campaignLength > maxLength ? campaignLength - maxLength : 0;\n let currentDate = startIndex > 0 ? start.isoAddDatePart(\"d\", startIndex) : start;\n let dayInWeek = currentDate.toDate().getDay();\n while (currentDate <= end) {\n lbl.push(Days[dayInWeek]);\n let v = apiData.days[currentDate];\n\n serDay.push(v?.distance && isFloat(v.distance) ? Number.parseFloat(v.distance) : null);\n serPlayDay.push(v?.playDistance && isFloat(v.distance) ? Number.parseFloat(v.playDistance) : null);\n\n dayInWeek = dayInWeek >= 6 ? dayInWeek = 0 : dayInWeek + 1;\n currentDate = currentDate.isoAddDatePart(\"d\");\n }\n\n personalChartData = {\n labels: lbl,\n series: [\n {\n name: \"Cykling\",\n className: \"day\",\n data: serDay,\n },\n {\n name: \"Fritidscykling\",\n className: \"playday\",\n data: serPlayDay,\n },\n ],\n }\n }\n\n // teamChartData = {\n // labels: [],\n // series: [\n // {\n // name: \"Holdet\",\n // className: \"team\",\n // data: [17, 12, 19, 16, 14, 19, 12, 14, 15, 19, 12, 19, 12, 18],\n // },\n // ],\n // }\n return {\n \"campaign\": campaign,\n \"mailto\": mailto,\n \"me\": me,\n \"teamRoster\": teamRoster,\n \"trophiesDisabled\": trophiesDisabled,\n \"personalChartData\": personalChartData,\n \"teamChartData\": teamChartData,\n \"campaignLength\": campaignLength,\n \"teamInfo\": teamInfo,\n \"meInfo\": meInfo\n };\n}\n\nfunction drawTrophies(campaign, hasTrophies, isMe, labels = false) {\n let ps = \"\";\n\n let label = allSVGs[\"label\"];\n let loop = campaign.enabledTrophies && campaign.enabledTrophies.length > 0 ? campaign.enabledTrophies.replace(/\\s/g, '').split(',').map(Number) : Array.from({ length: trophyNames.length - 1 }, (_, i) => i + 1);\n let l = \"\";\n loop.forEach(type => {\n let grey = hasTrophies ? ((hasTrophies?.indexOf(type) ?? -1) < 0 ? \" grey\" : \"\") : (newTrophy(campaign.id, type) ? \" grey\" : \"\");\n if (labels) {\n l = '
' + label.replace('{{text}}', trophyNames['' + campaign.campaignConfigId][type]) + '
';\n }\n let t = `troph${type}`;\n if (campaign.campaignConfigId == 1 && mfTrophyOverride[t]) t = mfTrophyOverride[t];\n let e = trophyFormatPNG.indexOf(type) >= 0 ? \"png\" : \"svg\";\n\n ps += '
`\n //+ `\"${n}\"`\n + l;\n });\n return ps;\n}\n\nfunction drawPersonalChart(id, barData, lineData) {\n let el = document.getElementById(id);\n if (el) {\n let bEl = el.querySelector(\".bars\");\n let lEl = el.querySelector(\".lines\");\n if (bEl) {\n if (lEl) lEl.parentNode.removeChild(lEl);\n bEl.replaceChildren();\n drawBarchart(bEl, barData.series, barData.labels, false, false, 0, true);\n }\n // TODO draw when data is available\n // if (lEl) {\n // lEl.replaceChildren();\n // drawLineChart(lEl, lineData.series, lineData.labels, false, area = false, 2, false, false);\n // }\n }\n}\n\nconst savedHeights = {};\n\nfunction maintainHeight(el, restore = false) {\n if (!el.style.height && !restore) {\n let key = new Date().getTime();\n el.dataset.savedheightkey = key;\n savedHeights[key] = el.offsetHeight;\n el.style.height = savedHeights[key] + 'px';\n el.innerHTML = \"\";\n }\n else if (restore) {\n if (el.dataset.savedheightkey) delete savedHeights[el.dataset.savedheightkey];\n el.style.height = '';\n }\n}\n\nfunction drawTeamData() {\n let teamData = apiData.profile.teamData;\n\n if (teamData.length === 0) return;\n\n let teamdataContainer = document.getElementById(\"teamdata\");\n maintainHeight(teamdataContainer);\n let partipantEmail = apiData.profile.email.toLowerCase();\n let isCaptain = false;\n forEach(teamData, function (t) {\n let dr = drawTeamRoster(t, partipantEmail, true);\n let ccId = dr.campaign.campaignConfigId;\n\n let chartId = `chart-${t.i}`;\n if (jsTodayIsoDateString >= dr.campaign.startDataEntry.isoDate()) {\n let maxWidth = `min(100%, ${100 + dr.campaignLength * 70}px`;\n dr.charts = `
\n
\n
\n
${localText(\"General.Work\", false, ccId)}${localText(\"General.Play\", false, ccId)}
\n
`;\n }\n else {\n dr.charts = \"\";\n }\n dr.teamRoster =\n '

Deltagere på dit hold

' +\n dr.teamRoster + '
' +\n (dr.mailto.length > 0 && window.campaignConfigId != 1 ? '' : '') +\n (window.campaignConfigId != 1 ? '

Send en udfordring

Indtast email på den du vil udfordre, og vælg hvad du vil udfordre: hold eller ' + localText(\"General.Workplace\", true, ccId) + '.
Vi sender en mail til jer begge to med link til jeres battle side

' +\n '' +\n '' +\n '' +\n '' +\n '
Udfordringen er sendt.
' +\n '
Vi kunne ikke sende udfordringen, er du sikker på den email du har indtastet er med i denne kampagne?
' +\n '' +\n '
' : '');\n\n let intro = '';\n let introEl = document.getElementById(\"profilecampaignintro-\" + t.ci);\n if (introEl) {\n intro = introEl.innerHTML;\n }\n\n let status = \"\";\n if (dr.teamInfo && dr.teamInfo.s > 0 && dr.teamInfo.d > 0) {\n status = `

Du har cyklet ${toComma(dr.meInfo.k, true)} km på ${singularE(' dag', dr.meInfo.d, true, true, true)} og ${toComma(dr.meInfo.pk, true)} fritids km på ${singularE(' dag', dr.meInfo.pd, true, true, true)}
`\n + `Dit hold har cyklet ${toComma(dr.teamInfo.k, true)} km på ${singularE(' dag', dr.teamInfo.d, true, true, true)} og ${toComma(dr.teamInfo.pk, true)} fritids km på ${singularE(' dag', dr.teamInfo.pd, true, true, true)}

`;\n }\n\n let visualProfile = '

' + escapeHTML(t.n) + '' + (ccId != 1 ? \"\" : '​, ' + escapeHTML(t.c)) + ' ' +\n ' - ' + t.ca + '

' +\n status +\n dr.charts +\n intro +\n (dr.trophiesDisabled ? '
' : `

Dine trofæer

`\n + drawTrophies(campaignById(t.ci), undefined, true, true)\n + '
');\n\n let stats = \"\";\n if (dr.charts) document.querySelector(\".r.showDayEntry.hidden.hasSparkle\")?.classList.remove(\"hidden\");\n teamdataContainer.insertAdjacentHTML(\"beforeend\", visualProfile + dr.teamRoster + (stats ? '
' + stats + '
' : ''));\n teamdataContainer.querySelectorAll(\"em, span.nowrap\").forEach(el => {\n if (el.classList.contains(\"nowrap\")) {\n fitWidthSingle(el, el.parentNode);\n }\n else {\n fitWidths(el, el.parentNode, \"span\");\n }\n });\n drawPersonalChart(chartId, dr.personalChartData, dr.teamChartData);\n });\n maintainHeight(teamdataContainer, true);\n\n if (isCaptain) {\n let hasStar = document.querySelector(\"h1\").querySelector(\".star\");\n if (!hasStar) document.querySelector(\"h1\").insertAdjacentHTML(\"afterbegin\", '
' + allSVGs[\"star\"] + '
');\n }\n\n addEvents(\".trophy.active\", \"click\", function (e) {\n stopAll(e);\n let c = e.target.closest(\".active\");\n let info = c.dataset.id.split('-');\n let campaignId = parseInt(info[1]);\n let campaign = campaignById(campaignId);\n let type = parseInt(info[2]);\n\n if (Date.parse(campaign.startDataEntry) < jsToday && newTrophy(campaignId, type) || !hasClass(c, \"grey\")) {\n if (confirm(hasClass(c, \"grey\") ? trophyConfirm[type] : \"Skal trofæet fjernes?\")) {\n let nt = [{\n \"TypeId\": type,\n \"CampaignId\": campaignId,\n \"Action\": hasClass(c, \"grey\") ? 1 : -1\n }];\n saveTrophies(nt);\n }\n }\n else {\n addBrief(\"Når kampagnen er i gang og du har cyklet i regnvejr/ hentet en kollega / taget kage med / besteget din lokale djævlebakke, kan du få trofæet!\");\n }\n });\n\n let replaceHTML = [\"trophyintro|.trophyintro\"];\n forEach(replaceHTML, function (s) {\n s = s.split('|');\n let el = document.getElementById(s[0]);\n if (el) {\n let html = el.innerHTML;\n forEach(el.querySelectorAll(s[1]), function (div) {\n div.innerHTML = html;\n });\n }\n });\n\n initForms();\n\n activateToggles();\n\n removeClass(teamdataContainer.closest(\".r\"), \"hidden\");\n}\n\nfunction fitWidths(el, container, childSelector) {\n if (!childSelector) return;\n el.querySelectorAll(childSelector).forEach(child => {\n fitWidthSingle(child, container);\n });\n}\n\nfunction fitWidthSingle(el, container) {\n let fontSize = window.getComputedStyle(el).getPropertyValue(\"font-size\").replace(\"px\", \"\");\n let overflow = el.offsetWidth > container.offsetWidth;\n let scaled = false;\n while (fontSize > 10 && overflow) {\n fontSize--;\n el.style.fontSize = fontSize + \"px\";\n overflow = el.offsetWidth > container.offsetWidth;\n scaled = true;\n }\n if (scaled) el.classList.add(\"wide\");\n}\n\n\nfunction getTogglePath(toggle) {\n let path = hasClass(toggle, \"remember\") ? getDomPath(toggle) : undefined;\n if (path) path = path.substr(0, path.lastIndexOf('.remember') + 9);\n return path;\n}\n\nfunction activateToggles() {\n let togglers = document.querySelectorAll(\".toggler:not(.active)\");\n addEvents(togglers, \"click\", function (e) {\n let toggle = e.target;\n let path = getTogglePath(toggle);\n if (hasClass(toggle, \"off\")) {\n removeClass(toggle, \"off\");\n if (path) {\n localStorage.setItem(path, true);\n }\n }\n else {\n addClass(toggle, \"off\");\n if (path) {\n localStorage.removeItem(path);\n }\n }\n }, \"active\");\n togglers.forEach((el) => {\n if (el.classList.contains(\"remember\") && localStorage.getItem(getTogglePath(el))) removeClass(el, \"off\");\n });\n}\n\nfunction addMessageToNextLoad(msg, brief = true) {\n const key = brief ? \"NextLoadBriefMessages\" : \"NextLoadMessages\";\n let json = sessionStorage.getItem(key);\n let arr = json ? JSON.parse(json) : [];\n arr.push(msg);\n sessionStorage.setItem(key, JSON.stringify(arr));\n}\n\nfunction AgeInMinutes(d1) {\n return (Date.now() - d1) / (60 * 1000);\n}\n\nfunction addCode(code, postData, key) {\n if (!code) return;\n let tcParts = code.split(\",\");\n let datePart = tcParts.length < 2 ? Date.now() : tcParts[1] * 1;\n let expired = AgeInMinutes(datePart) > 30;\n customLog(0, key, code, tcParts, AgeInMinutes(datePart), expired, new Date(Date.now()), new Date(datePart));\n if (expired) {\n // TODO: hvad skal vi gøre hvis der lå en gammel teamcode? Hvad skal vi sige?\n sessionStorage.removeItem(key);\n const warning = `${key} expired, ${code} removed, age: ${AgeInMinutes(datePart)} minutes, your time: ${new Date(Date.now())} code time: ${new Date(datePart)} datePart: ${datePart} tcParts: ${JSON.stringify(tcParts)}`;\n customLog(1, warning, AgeInMinutes(datePart), expired);\n }\n else {\n postData[key.toLowerCase()] = tcParts[0];\n }\n}\n\nwindow.onerror = function (message, source, lineno, colno, error) {\n if (visibleLogging) {\n try {\n printError(2, message, source, lineno, colno, error);\n }\n catch (err) {\n console.error(err);\n }\n }\n else {\n console.error(message, source, lineno, colno, error);\n }\n // TODO: anything else meaningful, send an event?\n return false;\n};\n\nfunction customLog(level, ...args) {\n if (level < 0) {\n console.log(...args);\n return;\n }\n if (level > 0) {\n try {\n let err = {};\n args.forEach((a, i) => {\n err[\"p\" + i] = a;\n });\n plausible(level > 1 ? \"error\" : \"warn\", { \"props\": err });\n }\n catch (error) {\n console.error(\"plausible\", error);\n if (visibleLogging) {\n printError(2, ...args)\n }\n }\n }\n if (visibleLogging) {\n printError(level, ...args)\n }\n switch (level) {\n case 0:\n console.log(...args);\n break;\n case 1:\n console.warn(...args);\n break;\n case 2:\n console.error(...args);\n break;\n default:\n console.log(...args);\n }\n}\n\nfunction isElement(o) {\n try {\n return o instanceof HTMLElement;\n } catch (e) {\n return (typeof o === \"object\") &&\n (o.nodeType === 1) &&\n (typeof o.style === \"object\") &&\n (typeof o.ownerDocument === \"object\");\n }\n}\n\nfunction printError(level, ...args) {\n let errors = document.querySelector(\"#errors\");\n if (errors) {\n let html = ` 0 ? `level${level}` : '')}\">`;\n args.forEach((a, i) => {\n html += `${typeof a == \"string\" ? a : (isElement(a) ? escapeHTML(a.outerHTML) : JSON.stringify(a, null, 2))}${i < (args.length - 1) ? \" | \" : \"\"}`;\n });\n errors.insertAdjacentHTML(\"afterbegin\", html + \"\\n\");\n }\n}\n\nfunction showProfileMessages(action) {\n let postData = {};\n let campaignCode = sessionStorage['campaignCode']\n let teamCode = sessionStorage['teamCode'];\n addCode(campaignCode, postData, \"campaignCode\");\n addCode(sessionStorage['teamCode'], postData, \"teamCode\");\n\n toAPI(action, function (data) {\n apiData[action] = data;\n if (!apiData || !apiData.profile) {\n console.error(\"No profile data\");\n }\n if (data.days) {\n addDays(data.days);\n }\n\n if (isDebug) {\n let pre = document.querySelector(\".debugpre.right\");\n if (pre) pre.insertAdjacentHTML(\"beforeend\", \"\\n\" + JSON.stringify(data, null, 2));\n }\n\n apiData[\"invitations\"] = data.invitations;\n let invitationMessages = document.getElementById(\"invitations\");\n if (data.invitations && data.invitations.length > 0) {\n forEach(data.invitations, function (el) {\n invitationMessages.insertAdjacentHTML(\"beforeend\", '

Du er blevet inviteret til at deltage på hold ' +\n el.teamName + ' i kampagnen ' + el.campaignName + ', vil du acceptere invitationen? Ja tak Nej tak

');\n });\n\n forEach(\"body > div.r\", (el, i) => {\n if (i > 1) addClass(el, \"hide\");\n i++;\n });\n invitationMessages.closest(\".r\").classList.remove(\"hide\");\n invitationMessages.closest(\".r\").classList.remove(\"hidden\");\n }\n\n let invitationEls = invitationMessages.querySelectorAll(\"p.campaignInvitation\");\n if (data.invitations && data.invitations.length > 0 && invitationEls && invitationEls > 0) {\n customLog(0, \"should auto accept invitation\");\n }\n forEach(invitationEls, function (el) {\n addEvents(el.querySelectorAll(\"a.click\"), \"click\", function (e) {\n let p = e.target.closest(\"p\");\n let post = {\n \"teamId\": parseInt(p.getAttribute(\"data-teamid\")),\n \"campaignId\": parseInt(p.getAttribute(\"data-campaignid\")),\n \"status\": parseInt(e.target.getAttribute(\"data-value\")),\n \"email\": apiData.profile.email\n };\n\n removeElement(p);\n toAPI(\"invitations\", function (data) {\n if (teamCode) sessionStorage.removeItem('teamCode');\n if (post.status == 6 && data.reload) {\n refreshParticipantBaseData();\n reload();\n }\n else {\n customLog(0, post?.status, data?.reload);\n }\n }, JSON.stringify(post), false, undefined, \"Accept\");\n });\n });\n\n if (invitationMessages && campaignConfigId == 1 && (!apiData.profile.teamData || apiData.profile.teamData.length == 0)) {\n let yesButton = invitationMessages.querySelector(\"a[data-value='6']\");\n if (yesButton) {\n yesButton.dispatchEvent(new Event(\"click\"));\n }\n }\n\n let participantNameEl = document.getElementById(\"participantName\");\n if (participantNameEl) {\n participantNameEl.innerHTML = data.name;\n removeClass(participantNameEl.closest(\".r\"), \"hidden\");\n }\n else {\n let els = document.querySelectorAll(\".replaceTags\");\n if (els) {\n els.forEach((el) => {\n replaceTags(el, { \"*name*\": data.name?.split(new RegExp('[' + [' ', ',', '.', '@', '_', ':', ';'].join('') + ']', 'g'))[0], \"*br*\": \"
\" }, true);\n });\n }\n }\n\n let profileOwnedTeamsContainer = document.querySelector(\"#ProfileOwnedTeams\");\n if (profileOwnedTeamsContainer && apiData.profile.isAnOwner && apiData.profile.ownedTeams) {\n removeClass(profileOwnedTeamsContainer, \"hidden\");\n let s = `

Hold jeg har oprettet

Ret hold, tilføj nye, se invitationslink her

`;\n\n let partipantEmail = apiData.profile.email.toLowerCase();\n apiData.profile.ownedTeams.forEach((t) => {\n let dr = drawTeamRoster(t, partipantEmail, false);\n let cls = dr.teamRoster?.toString() != '' ? \" remember\" : \" disabled\";\n s += `
${t.n}, ${t.c}${apiData.profile.campaigns.length > 1 ? ', ' + t.ca : ''}${singularE(' deltager', t.ps.length)}, ${singularE(' cykeldag', t.d)}, ${t.k} km
` +\n (dr.teamRoster?.toString() != '' ? `
${dr.teamRoster}
` : \"\");\n });\n\n s += `
`;\n profileOwnedTeamsContainer.insertAdjacentHTML(\"afterbegin\", s);\n }\n\n apiData.profile.startDataEntry = new Date(parsedDate(apiData.profile.startDataEntry));\n apiData.profile.endDataEntry = new Date(parsedDate(apiData.profile.endDataEntry));\n apiData.profile.lastEnd = new Date(parsedDate(apiData.profile.lastEnd));\n let messages = document.getElementById(\"messages\");\n let showOnPublicPrepaid = false;\n let hasPublic = false;\n let hasPrepaid = false;\n let hasPaid = false;\n let hasSeats = false;\n let isOnTeam = false;\n let activeCC1 = false;\n\n forEach(data.campaigns, function (c) {\n activeCC1 = c.campaignConfigId == 1;\n if (c.campaignConfigId == campaignConfigId) {\n if (c.public) hasPublic = true;\n if (c.prepaid) hasPrepaid = true;\n if (!c.prepaid) hasPaid = true;\n if (c.public && !c.prepaid) showOnPublicPrepaid = true;\n if (c.seats > 0 && !c.prepaid) {\n hasSeats = true;\n }\n }\n });\n if (!hasSeats) hasSeats = apiData.profile.isAnOwner;\n if (showOnPublicPrepaid) removeClass(\".showOnPublicPrepaid\", \"hidden\");\n if (hasSeats || (data.isACaptain && window.campaignConfigId != 1)) removeClass(\".showIsTeamAdmin\", \"hidden\");\n if (messages.innerHTML.trim() !== '') removeClass(messages.closest(\".r\"), \"hidden\");\n\n let showTeamData = data.teamData.length > 0;\n profileLoaded = true;\n if (showTeamData) {\n if (daysLoaded && !teamDataShown) {\n teamDataShown = true;\n updateTrophies(function () {\n });\n }\n }\n\n let participantEmail = apiData.profile.email.toLowerCase();\n for (let i = 0; i < data.teamData.length; i++) {\n for (let j = 0; j < data.teamData[i].ps.length; j++) {\n if (data.teamData[i].ps[j].e.toLowerCase() === participantEmail) {\n isOnTeam = true;\n break;\n }\n }\n if (isOnTeam) break;\n }\n\n activateToggles();\n\n let stars = \"\";\n let pastParticipations = \"\";\n forEach(apiData.profile.historicParticipations, function (participation) {\n if (participation.wasCaptain) {\n let starId = participation.campaign.id;\n if (CaptainStars.indexOf(\",\" + starId + \",\") < 0) starId = 1;\n stars += '
\"'
' + participation.campaign.name + '' + prettyDate(participation.campaign.startDataEntry) + '
';\n }\n pastParticipations += '' + escapeHTML(participation.team.n) + ' (' + participation.campaign.name + ' ' + prettyDate(participation.campaign.startDataEntry) + ')
';\n });\n\n let captainContent = document.getElementById(\"captainContent\");\n if (stars !== \"\" && captainContent) {\n captainContent.insertAdjacentHTML(\"beforeend\", '
' + stars + '
');\n\n let r = document.getElementById(\"captainContentLink\");\n let a = r ? r.querySelector(\"a\") : undefined;\n if (r) {\n removeClass(r, \"hidden\");\n a.addEventListener(\"click\", function (e) {\n stopAll(e);\n removeClass(captainContent, \"hidden\");\n removeClass(captainContent, \"keep\");\n addClass(r, \"hidden\");\n return false;\n });\n }\n else {\n removeClass(captainContent.closest(\".r\"), \"hidden\");\n }\n }\n\n let ppEl = document.getElementById(\"pastParticipations\");\n if (ppEl) {\n let pastParticipations = \"\";\n forEach(apiData.profile.historicParticipations, function (participation) {\n if (participation.wasCaptain) {\n let starId = participation.campaign.id;\n if (CaptainStars.indexOf(\",\" + starId + \",\") < 0) starId = 1;\n stars += '
\"'
' + participation.campaign.name + '' + prettyDate(participation.campaign.startDataEntry) + '
';\n }\n pastParticipations += '' + escapeHTML(participation.team.n) + ' (' + participation.campaign.name + ' ' + prettyDate(participation.campaign.startDataEntry) + ')
';\n });\n if (pastParticipations !== \"\") {\n let pastParticipationsContent = ppEl.querySelector(\"article\");\n if (!pastParticipationsContent) {\n ppEl.querySelector(\".co\").innerHTML = \"
\";\n pastParticipationsContent = ppEl.querySelector(\"article\");\n }\n pastParticipationsContent.insertAdjacentHTML(\"beforeend\", '

' + pastParticipations + '

');\n\n let r = document.getElementById(\"pastParticipationsLink\");\n let a = r ? r.querySelector(\"a\") : undefined;\n if (a) {\n removeClass(r, \"hidden\");\n a.addEventListener(\"click\", function (e) {\n stopAll(e);\n removeClass(ppEl, \"hidden\");\n removeClass(ppEl, \"keep\");\n addClass(r, \"hidden\");\n return false;\n });\n }\n else {\n removeClass(pastParticipationsContent.closest(\".r\"), \"hidden\");\n }\n }\n }\n\n if (!hasPrepaid && !hasPaid && !activeCC1) removeClass(document.getElementById(\"ProfileNoActiveCampaigns\"), \"hidden\");\n if (!isOnTeam && !hasSeats && hasPublic && hasPaid) removeClass(document.getElementById(\"ProfilePayCampaignNoTeam\"), \"hidden\");\n if (!isOnTeam && hasPrepaid) removeClass(document.getElementById(\"ProfilePrepaidCampaignNoTeam\"), \"hidden\");\n apiData.showDays = showTeamData && jsToday >= apiData.profile.startDataEntry && jsToday <= apiData.profile.lastEnd;\n let campaignIds = apiData.profile.campaigns ? apiData.profile.campaigns.map((el) => el.id) : [];\n if (!apiData.showDays && apiData.profile.teamData.length > 0) {\n document.querySelectorAll(\".showNoDayEntry\").forEach((el) => {\n if (!el.dataset.ids || campaignIds.some(item => el.dataset.ids.includes(item))) el.classList.remove(\"hidden\");\n });\n let hde = document.querySelector(\".showNoDayEntry:not(.hidden)\");\n if (hde) {\n let art = hde.querySelector(\"article\");\n if (art && apiData.profile.teamData) {\n art.insertAdjacentHTML('beforeend', \"

Du er med i:

\");\n forEach(apiData.profile.teamData, function (td) {\n let c = first(apiData.profile.campaigns, td.ci, \"id\");\n if (c) art.insertAdjacentHTML('beforeend', '

' + c.name + '
' + prettyDate(c.startDataEntry) + ' - ' + prettyDate(c.endDataEntry) + '

');\n });\n }\n }\n }\n if (apiData.showDays) showCalendar(apiData.days);\n if (campaignCode) sessionStorage.removeItem('campaignCode');\n if (teamCode) sessionStorage.removeItem('teamCode');\n }, JSON.stringify(postData));\n}\n\nfunction showDays(action) {\n getApiData(action, function (data) {\n addDays(data);\n });\n}\n\nfunction addDays(data) {\n apiData.days = data;\n let days = document.getElementById(\"bikedays\");\n if (!days) return;\n let dates = {};\n dates.endDate = apiData.profile.endDataEntry.isoDate();\n dates.startDate = apiData.profile.startDataEntry.isoDate();\n dates.date = jsToday.isoDate();\n if (dates.date > dates.endDate) dates.date = dates.endDate;\n\n if (apiData.showDays) showCalendar(data);\n\n daysLoaded = true;\n if (profileLoaded && !teamDataShown) {\n teamDataShown = true;\n updateTrophies(function () {\n drawTeamData();\n });\n }\n}\n\nfunction showTeams(action) {\n toAPI(\"municipalities\", function (data) {\n apiData.municipalities = data;\n let s = \"\";\n forEach(\"select[name='municipality']\", function (el) {\n let options = el.querySelectorAll(\"option\");\n if (!options || options.length === 0) {\n let id = el.getAttribute(\"data-id\");\n let zip = el.getAttribute(\"data-zip\");\n el.innerHTML = municipalityOptions(zip, id);\n }\n });\n forEach(data, function (item) {\n s += '';\n });\n }, undefined, true);\n\n getApiData(action, function (data) {\n if (!apiData[\"profile\"]) apiData[\"profile\"] = data;\n apiData.teams = data.teams;\n apiData.onTeams = data.onTeams;\n\n let campaigns = data.campaigns;\n let teamIntro = document.querySelector(\"#teamIntro\");\n if (campaigns && campaigns.length > 0) {\n teamIntro.innerHTML = \"
\";\n let teamIntroDiv = teamIntro.querySelector(\"div\");\n let anySeats = false;\n let anyPaidSeats = false;\n let payable = undefined;\n forEach(campaigns, function (c) {\n if (c.public && !c.prepaid) payable = c;\n if (c.seats > 0 && c.campaignConfigId == campaignConfigId) {\n anySeats = true;\n if (c.public && !c.prepaid && c.seats > 0) anyPaidSeats = true;\n\n SeatsText(teamIntroDiv, c);\n }\n });\n if (payable) {\n if (apiData.profile.onTeams && apiData.profile.onTeams.length > 0) {\n const cos = document.querySelectorAll(\"body > .r\");\n if (cos && cos.length > 0) cos[cos.length - 1].querySelector(\".co\").insertAdjacentHTML(\"beforeend\", \"

Vil du lave et nyt hold eller udvide et eksisterende?

Køb pladser til \" + payable.name + \"

Det er kun den der har oprettet et hold der kan købe flere pladser til holdet.

\");\n }\n else {\n //teamIntroDiv.insertAdjacentHTML(\"beforeend\", \"

Køb pladser til \" + payable.name + \"

\");\n }\n }\n if (payable && teamIntro.innerHTML !== '
') {\n //teamIntro.insertAdjacentHTML(\"afterbegin\", '

Hvor mange pladser har jeg?

');\n }\n else {\n teamIntro.innerHTML = \"\";\n }\n }\n else {\n teamIntro.innerHTML = \"

Der er ikke nogen aktive kampagner i øjeblikket

\";\n }\n\n drawTeams();\n });\n}\n\nfunction municipalityOptions(zip, id) {\n if (!apiData.municipalities) return \"\";\n let zips = apiData.municipalities[zip];\n if (!zips) return \"\";\n let s = \"\";\n if (id) id = id.toString();\n if (zips) {\n if (zips.length > 1) {\n s += '';\n }\n forEach(zips, function (item) {\n s += '';\n });\n }\n return s;\n}\n\n\nfunction getSizeHTML(campaign, teamId) {\n let sizeHTML = '';\n if (!campaign && apiData.profile.campaigns.length > 0) campaign = apiData.profile.campaigns[0];\n if (campaign) {\n let ccId = campaign.campaignConfigId;\n let teams = apiData.teams;\n let seatsLeft = 0;\n seatsLeft = campaign.seats;\n forEach(teams, function (team) {\n if (team.campaignId === campaign.id) seatsLeft -= team.seats;\n });\n let currentSize = 0;\n if (teamId) {\n let team = first(teams, teamId, \"id\");\n if (team) {\n currentSize = team.seats;\n seatsLeft += currentSize;\n }\n }\n if (seatsLeft >= campaign.teamSizeMinimum) {\n for (let i = campaign.teamSizeMinimum; i <= campaign.teamSizeMaximum; i++) {\n if (i <= seatsLeft) sizeHTML += '';\n if (i == seatsLeft && i < campaign.teamSizeMaximum) sizeHTML += ``;\n }\n }\n else {\n sizeHTML = '';\n }\n }\n return sizeHTML;\n}\n\nfunction updateCaptain(form) {\n if (form.dataset.campaignconfigid != \"1\") {\n let captains = form.querySelector(\"select[name='captain']\");\n let currentCaptain = captains.value;\n let captainOptions = \"\";\n forEach(form.querySelectorAll(\"input[name='email']\"), function (el) {\n let v = el.value;\n if (isValidEmail(v)) {\n captainOptions += '' + v + '';\n }\n });\n captains.innerHTML = captainOptions;\n }\n}\n\nfunction addDataList(campaign) {\n let datalist = document.getElementById(\"companies\" + campaign.id);\n if (!datalist) {\n let dls = \"\";\n forEach(campaign.workplaces, function (item) {\n dls += '';\n });\n let dl = document.createElement(\"datalist\");\n dl.id = \"companies\" + campaign.id;\n dl.innerHTML = dls;\n document.body.insertAdjacentElement('beforeend', dl);\n }\n}\n\nfunction drawTeams(openTeamId) {\n let teamsEl = document.getElementById(\"teams\");\n maintainHeight(teamsEl);\n teamsEl.innerHTML = apiData.teams && apiData.teams.length > 0 && apiData.onTeams && apiData.onTeams.length > 0 ? '

Hold, du har oprettet

' : '';\n\n let headingShownForId = [];\n let campaignColors = [];\n forEach(apiData.teams, function (el) {\n let heading = undefined;\n if (headingShownForId.indexOf(el.campaignId) < 0) {\n headingShownForId.push(el.campaignId);\n if (campaignColors.indexOf(el.campaignId) < 0) campaignColors.push(el.campaignId);\n heading = '

' + el.campaignName + '

' + prettyDate(el.startDataEntry) + ' - ' + prettyDate(el.endDataEntry) + '

';\n }\n drawTeam(el, true, heading, (campaignColors.indexOf(el.campaignId) % 4), openTeamId);\n });\n\n if (apiData.teams && apiData.teams.length > 0 && apiData.onTeams && apiData.onTeams.length > 0) {\n teamsEl.insertAdjacentHTML('beforeend', '

Hold, du er holdkaptajn på

');\n }\n\n headingShownForId = [];\n forEach(apiData.onTeams, function (el) {\n if (!hasAny(apiData.teams, el.id, \"id\")) {\n let heading = undefined;\n if (headingShownForId.indexOf(el.campaignId) < 0) {\n headingShownForId.push(el.campaignId);\n if (campaignColors.indexOf(el.campaignId) < 0) campaignColors.push(el.campaignId);\n heading = '

' + el.campaignName + '

' + prettyDate(el.startDataEntry) + ' - ' + prettyDate(el.endDataEntry) + '

';\n }\n drawTeam(el, false, heading, (campaignColors.indexOf(el.campaignId) % 4));\n }\n });\n let campaignsHTML = '';\n let s = '';\n let selectedCampaign = undefined;\n let campaignsWithSeats = 0;\n let selectedGroupId = \"\";\n forEach(apiData.profile.campaigns, function (campaign) {\n if (campaign.seats > 0 && campaign.campaignConfigId == campaignConfigId) {\n let sizeHTML = getSizeHTML(campaign);\n if (sizeHTML != \"\") {\n campaignsHTML += '';\n campaignsWithSeats++;\n if (selectedCampaign === undefined) selectedCampaign = campaign;\n }\n if (campaign.campaignConfigId != 1) addDataList(campaign);\n }\n });\n\n if (selectedCampaign) {\n let sizeHTML = selectedCampaign ? getSizeHTML(selectedCampaign) : \"\";\n\n selectedGroupId = selectedCampaign.groups && selectedCampaign.groups.length === 1 ? selectedCampaign.groups[0].id : \"\";\n let notInGroup = localText(\"General.NotInGroup\", false, selectedCampaign.campaignConfigId);\n let groupLabel = localText(\"General.WorkplaceGroupLabel\", false, selectedCampaign.campaignConfigId);\n\n let groupSelect = \"\";\n if (selectedCampaign.hasDefaultGroup) groupSelect += '';\n forEach(selectedCampaign.groups, function (g) {\n groupSelect += '';\n });\n\n let workplaceValue = '';\n if (selectedCampaign.workplacesAsDropdown && selectedCampaign.workplace && selectedCampaign.workplaces.length == 1) {\n workplaceValue = selectedCampaign.workplaces[0];\n }\n s = campaignsHTML === \"\" ? \"\" : '
' +\n '

0 ? \" off\" : \"\") + '\">' + localText(\"Profile.CreateTeam\") + '

' +\n '
' +\n '' +\n '' +\n ' ' +\n '
' +\n '' +\n '' +\n '';\n }\n\n if (campaignsHTML === '') s = '';\n\n //teamsEl.insertAdjacentHTML('afterbegin', s);\n teamsEl.insertAdjacentHTML('beforeend', s);\n\n if (selectedCampaign && selectedGroupId && s) {\n document.querySelector(\".create select[name='group']\").value = selectedGroupId;\n }\n\n let c = \"\";\n let teamsShown = {};\n forEach(apiData.teams, function (el) {\n if (daysDiff(el.endDataEntry, jsToday) <= 0) {\n c += '

' + el.name + '(' + el.seats + ') - ' + el.campaignName + '

' +\n '
' +\n '' +\n '' +\n '' +\n '
';\n teamsShown[el.id] = 1;\n }\n });\n forEach(apiData.onTeams, function (el) {\n if (!teamsShown[el.id] && daysDiff(el.endDataEntry, jsToday) <= 0) {\n c += '

' + el.name + '(' + el.seats + ') - ' + el.campaignName + '

' +\n '
' +\n '' +\n '' +\n '' +\n '
';\n teamsShown[el.id] = 1;\n }\n });\n\n let oldCombinedEl = document.getElementById(\"combinedDayKM\");\n if (oldCombinedEl) oldCombinedEl.parentElement.removeChild(oldCombinedEl);\n if (c != \"\" && campaignConfigId != 1) {\n teamsEl.parentElement.insertAdjacentHTML('beforeend', '
');\n let combinedEl = document.getElementById(\"combinedDayKM\");\n combinedEl.insertAdjacentHTML('beforeend', '

Samlet indtastning af KM og cykeldage

OBS! Brug kun funktionen, hvis dine holdkammerater absolut ikke har mulighed for selv at logge ind og taste. NÃ¥r du skriver de samlede km og cykeldage ind, vil det overskrive alt, hvad dine holdkammerater har indtastet, og erstatte det med en andel af de resultater du taster.

Læg hele holdets kilometer og cykeldage sammen og udfyld felterne.

Eksempel: Hvis A har cyklet 10 dage og 100km, B har cyklet 5 dage og 50 km, skal man taste: 15 cykeldage og 150 km.

' + c + '
');\n\n addEvents(\"#combinedDayKM input\", \"change\", function (e) {\n if (e.target.type && e.target.type !== \"submit\") {\n let form = e.target.closest(\"form\");\n form.querySelector(\"input[type='submit']\").disabled = false;\n }\n });\n\n addEvents(\"#combinedDayKM form\", \"submit\", function (e) {\n e.preventDefault();\n let form = e.target.closest(\"form\");\n let teamId = parseInt(form.getAttribute(\"data-id\"));\n let campaignId = parseInt(form.getAttribute(\"data-campaignid\"));\n let seats = parseInt(form.getAttribute(\"data-seats\"));\n let length = parseInt(form.getAttribute(\"data-length\"));\n let days = toPoint(form.querySelector('input[name=\"days\"]').value);\n let kms = toPoint(form.querySelector('input[name=\"kms\"]').value);\n if (days > length * seats) {\n addBrief(\"Du har flere cykeldage end der er dage og deltagere til på dit hold.\")\n return;\n }\n if (kms > length * seats * 300) {\n addBrief(\"Du har flere KM end der må være per deltager per dag, maksimum er 300km for en deltager på en dag.\")\n return;\n }\n if (teamId && campaignId && days && kms) {\n if (confirm(\"Er du helt sikker på, du vil taste samlet? Alle deltagere på holdet får overskrevet deres cykeldage og km for kampagnen (og får i stedet tilskrevet deres del af de data, du har indtastet). Den samlede indtastning kan ikke fortrydes.\")) {\n form.querySelector(\"input[type='submit']\").disabled = true;\n let combined = {\n \"TeamId\": teamId,\n \"CampaignId\": campaignId,\n \"Days\": days,\n \"KMs\": kms\n };\n toAPI(\"combinedDayKMs\", function (data) {\n if (data.result == 3) {\n addBrief(\"Data er IKKE gemt, der er indtastet for mange cykeldage eller km i forhold til kampagnens længde og antallet af deltagere på dit hold.\");\n }\n else if (data.result == 2) {\n addBrief(\"Data er IKKE gemt, de er ikke gyldige.\");\n }\n else {\n if (reloadOK()) document.location.reload();\n }\n }, combined);\n }\n }\n });\n }\n\n maintainHeight(teamsEl, true);\n\n addEvents(\"#teams select[name='campaign']\", \"change\", function (e) {\n let campaignSelect = e.target;\n let campaign = campaignById(campaignSelect.value);\n if (campaign) {\n let form = campaignSelect.closest(\".team\");\n let sizeEl = form.querySelector(\"select[name='size']\");\n let groupEl = form.querySelector(\"select[name='group']\");\n let companyEl = form.querySelector(\"input[name='company']\");\n let groupLabel = document.getElementById(\"createGroupLabel\");\n let workplaceLabel = document.getElementById(\"createWorkplaceLabel\");\n\n let notInGroupText = localText(\"General.NotInGroup\", false, campaign.campaignConfigId);\n let groupLabelText = localText(\"General.WorkplaceGroupLabel\", false, campaign.campaignConfigId);\n let workplaceLabelText = localText(\"General.Workplace\", false, campaign.campaignConfigId);\n let workplacePlaceholderText = localText(\"General.Workplace\", false, campaign.campaignConfigId);\n\n groupLabel.innerHTML = groupLabelText;\n workplaceLabel.innerHTML = workplaceLabelText;\n\n addEvents(\"#createGroupLabel a\", \"click\", function (e) {\n let span = e.target.querySelector(\"span\");\n if (span) {\n addOverlayMessage(e.target.querySelector(\"span\").innerHTML);\n stopAll(e);\n }\n });\n\n let selectedGroupId = campaign.groups && campaign.groups.length === 1 ? campaign.groups[0].id : \"\";\n\n let groupOptions = \"\";\n\n if (!selectedGroupId) groupOptions += '';\n if (campaign.hasDefaultGroup) groupOptions += '';\n\n forEach(campaign.groups, function (g) {\n groupOptions += '';\n });\n\n groupEl.innerHTML = groupOptions;\n\n if (campaign.campaignConfigId != 1) companyEl.setAttribute(\"list\", \"companies\" + campaign.id);\n companyEl.setAttribute(\"placeholder\", workplacePlaceholderText);\n\n sizeEl.innerHTML = getSizeHTML(campaign);\n if (selectedGroupId) {\n groupEl.value = selectedGroupId;\n addClass(groupEl.closest(\"div\"), \"hidden\");\n }\n else {\n removeClass(groupEl.closest(\"div\"), \"hidden\");\n }\n }\n });\n\n addEvents(\"label a\", \"click\", function (e) {\n let span = e.target.querySelector(\"span\");\n if (span) {\n addOverlayMessage(e.target.querySelector(\"span\").innerHTML);\n stopAll(e);\n }\n });\n\n let triggerSel = document.querySelector(\"#teams select[name='campaign']\");\n if (triggerSel) triggerSel.dispatchEvent(new Event(\"change\"));\n\n addEvents(\"#teams input[name='zip']\", \"input\", function (e) {\n let z = e.target;\n let k = z.closest(\".team\").querySelector(\"select[name='municipality']\");\n addClass(z, \"changed\");\n let muni = apiData.municipalities[z.value];\n if (!muni) {\n addClass(z, \"error\");\n }\n else {\n removeClass(z, \"error\");\n }\n k.innerHTML = municipalityOptions(z.value, muni && muni.length === 1 ? muni[0][0] : undefined);\n });\n\n\n addEvents(\"#teams input[name='email']\", \"input\", function (e) {\n let el = e.target;\n let v = el.value;\n if (v === el.getAttribute(\"data-value\")) {\n removeClass(el, \"error\");\n removeClass(el, \"changed\");\n return;\n }\n e.target.closest(\".team\").querySelector(\"input[type='submit']\").disabled = false;\n addClass(el, \"changed\");\n if (v === '' || isValidEmail(v)) {\n removeClass(el, \"error\");\n updateCaptain(e.target.closest(\"form\"));\n }\n else {\n addClass(el, \"error\");\n }\n });\n\n addEvents(\"#teams input\", \"input\", function (e) {\n if (e.target.type && e.target.type !== \"submit\") {\n let team = e.target.closest(\".team\");\n addClass(team, \"changed\");\n team.querySelector(\"input[type='submit']\").disabled = false;\n }\n });\n\n addEvents(\"#teams select\", \"change\", function (e) {\n if (e.target.type && e.target.type !== \"submit\") {\n let team = e.target.closest(\".team\");\n addClass(team, \"changed\");\n team.querySelector(\"input[type='submit']\").disabled = false;\n }\n });\n\n addEvents(\"#teams select[name='size']\", \"change\", function (e) {\n let team = e.target.closest(\".team\");\n let visible = e.target.value;\n let i = 0;\n forEach(team.querySelectorAll(\".members div\"), function (el) {\n i++;\n if (i <= visible) {\n removeClass(el, \"hidden\");\n }\n else {\n addClass(el, \"hidden\");\n }\n });\n });\n\n addEvents(\"#teams .copy input\", \"click\", (e) => {\n stopAll(e);\n let el = e.target;\n el.select();\n el.setSelectionRange(0, 99999);\n navigator.clipboard.writeText(el.value);\n el.selectionStart = el.selectionEnd;\n el.blur();\n addBrief(`'${el.value}' blev kopieret til dit clipboard/ udklipsholder.`);\n });\n\n function getBaseProfile() {\n return {\n \"name\": apiData.profile.name,\n \"email\": apiData.profile.email,\n \"teams\": [],\n \"onTeams\": []\n };\n }\n\n addEvents(\"#teams .delete\", \"click\", function (e) {\n stopAll(e);\n if (confirm(\"Er du sikker, du kan ikke fortryde bagefter? (men du kan altid lave et nyt hold)\")) {\n let team = e.target.closest(\".team\");\n let teamId = parseInt(team.getAttribute(\"data-id\"));\n let profile = getBaseProfile();\n let match = first(apiData.teams, teamId, \"id\");\n if (match) profile.teams.push(match);\n if (match) {\n forEach(match.teamParticipants, function (el) {\n el.changed = true;\n el.email = \"\";\n });\n match.delete = true;\n match.changed = true;\n toAPI(\"teams\", function (data) {\n apiData[\"profile\"] = data;\n apiData.teams = data.teams;\n apiData.onTeams = data.onTeams;\n addBrief(\"Holdet er slettet.\", data);\n refreshParticipantBaseData();\n drawTeams();\n }, profile, false, undefined, \"Delete\");\n }\n else {\n addOverlayMessage(\"Vi kan ikke finde holdet du prøver at slette.\");\n }\n }\n });\n\n addEvents(\"#teams form.team\", \"submit\", function (e) {\n e.preventDefault();\n let team = e.target.closest(\".team\");\n e.target.disabled = true;\n let teamId = parseInt(team.getAttribute(\"data-id\"));\n if (teamId) {\n let messages = validateTeam(team);\n if (messages.length) {\n showApiMessages(messages);\n }\n else {\n let profile = getBaseProfile();\n let match = first(apiData.teams, teamId, \"id\");\n if (match) profile.teams.push(match);\n if (!match) {\n match = first(apiData.onTeams, teamId, \"id\");\n if (match) profile.onTeams.push(match);\n }\n if (match) {\n match.name = team.querySelector(\"input[name='name']\").value;\n match.seats = parseInt(team.querySelector(\"select[name='size']\").value);\n match.company = team.querySelector(\"input[name='company']\").value;\n match.groupId = parseInt(team.querySelector(\"select[name='group']\").value);\n match.municipalityId = parseInt(team.querySelector(\"select[name='municipality']\").value);\n match.changed = true;\n match.teamParticipants = [];\n let additions = [];\n\n let ccId = team.dataset.campaignconfigid;\n let captainSelect = team.querySelector(\"select[name='captain']\");\n let captain = captainSelect.value;\n if (ccId != \"1\") {\n let oldCaptain = captainSelect.getAttribute(\"data-value\");\n if (captain && captain !== oldCaptain) additions.push(captain);\n }\n else {\n captain = undefined;\n }\n\n let deletions = [];\n let inputs = team.querySelectorAll(\"input[name='email']\");\n forEach(inputs, function (el) {\n if (hasClass(el.parentNode, \"hidden\")) {\n let dv = el.getAttribute(\"data-value\");\n if (isValidEmail(dv)) deletions.push(dv);\n }\n else {\n if (hasClass(el, \"changed\")) {\n let v = el.value;\n let dv = el.getAttribute(\"data-value\");\n if (v === '' && isValidEmail(dv)) {\n deletions.push(el.getAttribute(\"data-value\"));\n }\n else {\n if (v !== '' && isValidEmail(v)) additions.push(v);\n if (isValidEmail(dv)) {\n deletions.push(dv);\n }\n }\n }\n }\n });\n additions = unique(additions);\n deletions = unique(deletions);\n\n let ignoredAdditions = [];\n let filteredAdditions = [];\n let filteredDeletions = [];\n\n forEach(deletions, function (el) {\n if (additions.indexOf(el) < 0) {\n filteredDeletions.push(el);\n } else {\n ignoredAdditions.push(el);\n }\n });\n\n forEach(additions, function (el) {\n if (filteredDeletions.indexOf(el) < 0 && ignoredAdditions.indexOf(el) < 0) filteredAdditions.push(el);\n });\n\n forEach(filteredAdditions, function (el) {\n let participant = {\n \"teamId\": teamId,\n \"email\": el,\n \"changed\": true\n };\n if (participant.email === captain) {\n participant.status = 3;\n participant.isCaptain = true;\n }\n match.teamParticipants.push(participant);\n });\n forEach(filteredDeletions, function (el) {\n let participant = {\n \"teamId\": teamId,\n \"email\": el,\n \"changed\": true,\n \"status\": -1\n };\n match.teamParticipants.push(participant);\n });\n\n toAPI(\"teams\", function (data) {\n apiData[\"profile\"] = data;\n apiData.teams = data.teams;\n apiData.onTeams = data.onTeams;\n addBrief(\"Holdet er gemt.\", data);\n refreshParticipantBaseData();\n drawTeams(teamId);\n }, profile, false, undefined, \"Update\");\n }\n }\n }\n else {\n let messages = validateTeam(team);\n if (messages.length) {\n showApiMessages(messages);\n }\n else {\n let profile = getBaseProfile();\n profile.teams = [\n {\n \"CampaignId\": parseInt(team.querySelector(\"select[name='campaign']\").value),\n \"Name\": team.querySelector(\"input[name='name']\").value,\n \"Seats\": parseInt(team.querySelector(\"select[name='size']\").value),\n \"TeamParticipants\": [\n ],\n \"Company\": team.querySelector(\"input[name='company']\").value,\n \"GroupId\": parseInt(team.querySelector(\"select[name='group']\").value),\n \"MunicipalityId\": parseInt(team.querySelector(\"select[name='municipality']\").value),\n \"Changed\": true\n }\n ];\n toAPI(\"teams\", function (data) {\n apiData[\"profile\"] = data;\n apiData.teams = data.teams;\n apiData.onTeams = data.onTeams;\n addBrief(\"Holdet er oprettet.\", data);\n refreshParticipantBaseData();\n drawTeams(objectLargestPropertyValue(apiData.teams, \"id\"));\n }, profile, false, undefined, \"Create\");\n }\n }\n });\n\n activateToggles();\n if (document.getElementById(\"teamIntro\") && !document.getElementById(\"teamIntro\").hasAttribute(\"data-active\")) {\n document.getElementById(\"teamIntro\").setAttribute(\"data-active\", \"1\");\n }\n\n initForms();\n\n // let togglers = teamsEl.querySelectorAll(\"#teams h3.toggler\");\n // if (togglers && togglers.length > 0 && togglers.length < 2) togglers[0].click();\n}\n\nfunction getFuncName() {\n return getFuncName.caller.name\n}\n\nfunction validateTeam(team) {\n const messages = [];\n let campaign = campaignById(team.dataset.campaignid);\n let groupValue = team.querySelector(\"select[name='group']\").value;\n let companyValue = team.querySelector(\"input[name='company']\").value;\n let isCreate = !parseInt(team.getAttribute(\"data-id\"));\n if (isCreate) {\n let selectedCampaign = team.querySelector(\"select[name='campaign']\").value;\n if (!isInt(selectedCampaign)) {\n messages.push(\"Der skal vælges en kampagne.\");\n }\n else {\n campaign = campaignById(selectedCampaign);\n }\n\n if (groupValue === \"1\" && team.getAttribute(\"data-groupalert\") !== \"1\") {\n team.setAttribute(\"data-groupalert\", \"1\");\n let cvLC = companyValue.toLowerCase().replace(\" a/s\", \"\").replace(\" aps\");\n let m = \"\";\n let count = 0;\n if (campaign.groups) {\n campaign.groups.forEach(function (g) {\n if (g.name.toLowerCase().indexOf(cvLC) >= 0) {\n m += g.name + \"?
\";\n count++;\n }\n });\n }\n if (count > 0) {\n m = \"

Er din \" + localText(\"General.Workplace\", false, campaign.campaignConfigId) + \" en del af\" + (count > 1 ? \" en af følgende \" + localText(\"General.WorkplaceGroup\", false, campaign.campaignConfigId) + \"r:
\" : \" \") + m + \"Så vælg \" + localText(\"General.WorkplaceGroup\", false, campaign.campaignConfigId) + \" i listen efter du har trykket ok, så kan vi lave den bedst mulige statistik til jer!

Hvis ikke, så bare tryk Opret hold igen

\";\n messages.push(m);\n }\n }\n }\n else {\n if (!parseInt(team.getAttribute(\"data-campaignid\"))) messages.push(\"Holdet du gemmer er ikke tilknyttet en kampagne.\");\n let captainSelector = team.querySelector(\"select[name='captain']\");\n if (campaignConfigId != 1 && captainSelector.querySelectorAll(\"option\").length > 0 && (campaign.public && isNullOrWhiteSpace(captainSelector.value))) messages.push(\"Du skal vælge en kaptajn for holdet.\");\n }\n\n let notInGroup = localText(\"General.NotInGroup\", false, campaign.campaignConfigId);\n\n if (isNullOrWhiteSpace(team.querySelector(\"input[name='name']\").value)) messages.push(\"Holdnavn skal udfyldes.\");\n if (!isInt(team.querySelector(\"select[name='size']\").value)) messages.push(\"Der skal vælges en holdstørrelse.\");\n if (!isInt(groupValue)) messages.push('Der skal vælges en om din ' + localText(\"General.Workplace\", false, campaign.campaignConfigId) + ' er en del af en større ' + localText(\"General.WorkplaceGroup\", false, campaign.campaignConfigId) + ', hvis din ' + localText(\"General.Workplace\", false, campaign.campaignConfigId) + ' ikke er del af en ' + localText(\"General.Workplace\", false, campaign.campaignConfigId) + ' i listen, vælg \"' + notInGroup + '\".');\n if (isNullOrWhiteSpace(companyValue)) messages.push(localText(\"General.Workplace\", false, campaign.campaignConfigId) + \" skal udfyldes.\");\n if (!isInt(team.querySelector(\"select[name='municipality']\").value)) messages.push(\"Der skal vælges en kommune, indtast postnummer og vælg kommune.\");\n\n if (!isCreate) {\n forEach(team.querySelectorAll(\"input[name='email']\"), function (el) {\n let v = el.value;\n if (v !== '' && !isValidEmail(v)) messages.push(v + \" er ikke en gyldig email.\");\n });\n }\n return messages;\n}\n\nfunction drawTeam(team, asOwner, heading, col, openTeamId) {\n let teamsEl = document.getElementById(\"teams\");\n let campaign = campaignById(team.campaignId);\n let selectedGroup = campaign.groups && campaign.groups.length === 1 ? campaign.groups[0].id : \"\";\n\n let ccId = campaign.campaignConfigId;\n\n let notInGroup = localText(\"General.NotInGroup\", false, ccId);\n let groupLabel = localText(\"General.WorkplaceGroupLabel\", false, ccId);\n\n let groupSelect = '';\n\n let workplaceValue = '';\n if (campaign.workplacesAsDropdown && campaign.workplaces && campaign.workplaces.length == 1) {\n workplaceValue = campaign.workplaces[0];\n }\n\n let teamCodeLink = team.code ? `${selves[ccId]}/${team.code}` : \"\";\n\n let s = (heading ? heading : '') + '
' +\n '

' + escapeHTML(team.name) + (campaign.campaignConfigId != 1 ? ' (' + team.seats + ' ' + localText(\"General.Seats\", true, undefined, undefined, team.seats) + ')' : '') + '

' +\n (asOwner ? '' : '

Hvis du har behov for flere pladser på holdet, så kontakt din holdejer ' + team.ownerEmail + '

') +\n (ccId != 1 ? '
' : '') +\n '
' +\n '

' + localText(\"Profile.EditTeam\") + '

' +\n (asOwner ? '' : '') +\n '' +\n '' +\n '' + groupSelect + '
' +\n '' +\n '' +\n (ccId != 1 ? '
' : '') +\n (asOwner ? '' : '') +\n (ccId == 1 ? '
' : '') +\n (ccId == 1 && teamCodeLink ? `

${localText(\"Teams.InviteHeading\", false, ccId)}

${localText(\"Teams.InviteText\", false, ccId)}

` : \"\");\n\n if (ccId != 1) {\n s += `

${localText(\"Teams.InviteHeading\", false, ccId)}

${localText(\"Teams.InviteText\", false, ccId)}

` + '
' +\n '';\n }\n else if (team.teamParticipants && team.teamParticipants.length > 0) {\n s += '

Slet deltager

' +\n '

Klik på en deltager for at fjerne den fra holdet.
Husk at gemme holdet bagefter.

' +\n '
' +\n '
';\n }\n else {\n s += '
';\n }\n\n s += '';\n teamsEl.insertAdjacentHTML('beforeend', s);\n forEach(teamsEl.querySelectorAll(\"label a\"), function (el) {\n el.addEventListener(\"click\", function (e) {\n let span = e.target.querySelector(\"span\");\n if (span) {\n addOverlayMessage(span.innerHTML);\n stopAll(e);\n }\n });\n });\n\n let captainOptions = \"\";\n let memberInputs = \"\";\n let teamEl = teamsEl.querySelector(\"div.team:last-child\");\n let captainSelect = teamEl.querySelector(\"select[name='captain']\");\n let j = 0;\n let resendInvitation = \"\";\n if (!campaign.public || ccId == 1) captainOptions += '';\n forEach(team.teamParticipants, function (el) {\n j++;\n if (ccId != 1) {\n memberInputs += '
';\n }\n else {\n memberInputs += '
' + el.email + '
';\n }\n if (el.status === 1) {\n resendInvitation += ''\n }\n if (ccId != 1) {\n captainOptions += '' + el.email + '';\n if (el.isCaptain) {\n captainSelect.setAttribute(\"data-value\", el.email);\n hasCaptain = true;\n }\n }\n });\n if (resendInvitation !== '') {\n let resendEl = teamEl.querySelector(\".resendInvitation\");\n if (resendEl) {\n resendInvitation = '

Gensend invitationer

Vælg den du vil sende til, en ad gangen

' +\n '
Invitationen er sendt.
' +\n '
' + genericError + '
' +\n '
'\n resendEl.innerHTML = resendInvitation;\n }\n }\n if (ccId != 1) {\n for (let i = 0; i < team.seats - (team.teamParticipants ? team.teamParticipants.length : 0); i++) {\n j++;\n memberInputs += '
';\n }\n }\n let membersEl = teamEl.querySelector(\".members\");\n captainSelect.innerHTML = captainOptions;\n if (captainOptions) {\n captainSelect.classList.remove(\"hidden\");\n captainSelect.previousElementSibling.classList.remove(\"hidden\");\n }\n else {\n captainSelect.classList.add(\"hidden\");\n captainSelect.previousElementSibling.classList.add(\"hidden\");\n }\n membersEl.innerHTML = memberInputs;\n membersEl.querySelectorAll(\".c.cl\").forEach((el) => {\n el.addEventListener(\"click\", (e) => {\n let inp = e.target.querySelector(\"input\");\n inp.value = '';\n inp.dispatchEvent(new Event(\"input\"));\n e.target.classList.add(\"hidden\");\n e.target.classList.remove(\"cl\");\n });\n });\n}\n\nfunction showCalendar(data, date) {\n if (!data) data = [];\n let bikedays = document.getElementById(\"bikedays\");\n\n if (!date) date = jsToday;\n let dates = {};\n dates.today = jsToday.isoDate();\n dates.startDate = isoDate(apiData.profile.startDataEntry);\n dates.endDate = isoDate(apiData.profile.endDataEntry);\n if (dates.endDate > dates.today) dates.endDate = dates.today;\n dates.date = isoDate(date);\n dates.latest = dates.date > dates.endDate ? dates.endDate : dates.date;\n dates.year = dates.latest.isoDatePart(\"y\");\n dates.month = dates.latest.isoDatePart(\"m\");\n dates.startDay = apiData.profile.startDataEntry.getDay();\n dates.dim = daysInMonth(dates.month, dates.year);\n dates.months = monthsTotal(dates.startDate, dates.endDate);\n\n let s = `
`;\n\n let showPlay = false;\n forEach(apiData.profile.campaigns, function (c) {\n if (c.hasPlay) showPlay = true;\n });\n\n let m = dates.latest.substring(0, 8) + \"01\";\n let sym = dates.startDate.isoDatePart(\"ym\");\n let eym = dates.endDate.isoDatePart(\"ym\");\n let lym = dates.latest.isoDatePart(\"ym\");\n let showMonth = bikedays.dataset.showmonth ? bikedays.dataset.showmonth : 1;\n let drawMonth = 1;\n\n while (m >= sym) {\n let ym = m.isoDatePart(\"ym\");\n s += \"
sym ? \"\" : \" dim\") +\n \"\\\">\" + months[1 * m.isoDatePart(\"m\")] + \" \" + m.isoDatePart(\"y\") + \"
  • Mandag
  • Tirsdag
  • Onsdag
  • Torsdag
  • Fredag
  • Lørdag
  • Søndag
  • \";\n\n let dow = m.toDate().getDay();\n for (let i = 1; i < dow; i++) {\n s += \"
  • \";\n }\n let daysInMonth = m.daysInMonth();\n let firstDay = sym == ym ? dates.startDate.isoDatePart(\"d\") : 1;\n let lastDay = lym == ym ? dates.endDate.isoDatePart(\"d\") : daysInMonth;\n for (let i = 1; i <= daysInMonth; i++) {\n let inputDate = ym + \"-\" + String(i).padStart(2, \"0\");\n let v = data[inputDate] && data[inputDate].distance > 0 ? toComma(data[inputDate].distance) : \"\";\n let pv = showPlay ? data[inputDate] && data[inputDate].playDistance > 0 ? toComma(data[inputDate].playDistance) : \"\" : \"\";\n if (i >= firstDay && i <= lastDay) {\n s += '
  • ' + i +\n \".\" +\n (showPlay ? \"\" : \"\") +\n \"
  • \";\n }\n else {\n s += \"
  • \";\n }\n }\n\n let padCells = 35 - daysInMonth - (dow - 1);\n if (padCells < 0) padCells += 7;\n if (padCells > 6) padCells = -1;\n\n for (let i = 0; i < padCells; i++) {\n s += \"
  • \";\n }\n\n s += \"
\";\n m = m.isoAddDatePart(\"m\", -1);\n if (drawMonth == showMonth) bikedays.dataset.showmonth = drawMonth;\n drawMonth++;\n }\n s += `
`;\n\n let options = '';\n let optionDate = dates.startDate;\n while (optionDate <= dates.latest) {\n let optionText = optionDate.toDate().toLocaleDateString(\"da-DK\", { weekday: \"long\", month: \"long\", day: \"numeric\" });\n options = '' + options;\n optionDate = optionDate.isoAddDatePart(\"d\");\n }\n\n s = '
' + s;\n bikedays.querySelector(\".calendar\").innerHTML = s;\n\n setSelectKM();\n\n removeClass(bikedays.closest(\".r\"), \"hidden\");\n\n let day = bikedays.querySelector(\"select[name=day]\");\n addEvent(day, \"change\", function (e) {\n let val = e.target.value;\n document.querySelectorAll(\".calendar li.visible\").forEach((li) => {\n removeClass(li, \"visible\");\n });\n let li = document.querySelector(\"li.\" + val);\n if (li) addClass(li, \"visible\");\n });\n addClass(bikedays.querySelector(\".calendar li.\" + day.value), \"visible\");\n\n addEvents(\"#bikedays .calendarMonth a:not(.dim)\", \"click\", function (e) {\n e.target.classList.contains(\"prev\") ? bikedays.dataset.showmonth++ : bikedays.dataset.showmonth--;\n let showMonth = bikedays.dataset.showmonth - 1;\n bikedays.querySelectorAll(\".ssm\").forEach((el, i) => {\n i == showMonth ? el.classList.remove(\"hidden\") : el.classList.add(\"hidden\");\n });\n });\n\n addEvents(\"#bikedays input[type=text]\", \"keyup\", function (e) {\n let i = e.target;\n let v = i.value;\n let o = i.dataset.old;\n let n = 0;\n let isPlay = hasClass(i, \"pd\");\n if (v !== '') {\n n = toPoint(v);\n if (!validNumber.test(v) || n < 0 || (n > 300 && !isPlay) || (n > 999 && isPlay)) {\n addClass(i, \"error\");\n }\n else {\n removeClass(i, \"error\");\n }\n }\n else {\n removeClass(i, \"error\");\n }\n if (v !== o) {\n let savebikedays = document.getElementById(\"savebikedays\");\n if (savebikedays.disabled) {\n addClass(i.closest(\"form\"), \"changed\");\n unsavedChanges++;\n savebikedays.disabled = false;\n }\n addClass(i, \"changed\");\n }\n else {\n removeClass(i, \"changed\");\n }\n if (e.keyCode === 13) {\n saveCalendar();\n }\n });\n\n addEvents(\"#bikedays input[type=text]\", \"blur\", function (e) {\n let i = e.target;\n let v = i.value;\n if (validNumber.test(v)) i.value = toComma(toPoint(v));\n });\n\n bikedays.querySelector(\".calendar form\").addEventListener(\"submit\", function (e) {\n stopAll(e);\n });\n\n addEvent(\"#savebikedays\", \"click\", function (e) {\n saveCalendar();\n });\n}\n\nfunction isNextDay(d1, d2) {\n let hours = (d2 - d1) / 3600000;\n return hours > 20 && hours < 30;\n}\n\nfunction daysDiff(d1, d2) {\n if (typeof d1 === \"string\") d1 = new Date(d1);\n if (typeof d2 === \"string\") d2 = new Date(d2);\n\n return Math.round((d1.getTime() - d2.getTime()) / 86400000);\n}\n\nfunction daysDuration(d1, d2) {\n if (typeof d1 === \"string\") d1 = new Date(d1);\n if (typeof d2 === \"string\") d2 = new Date(d2);\n\n return Math.round(Math.abs(d1.getTime() - d2.getTime()) / 86400000) + 1;\n}\n\nfunction selectElement(elements, property, value) {\n for (let i = 0; i < elements.length; i++) {\n if (elements[i][property] === value) {\n return elements[i];\n }\n }\n return null;\n}\n\nfunction saveCalendar(callback) {\n let errorInputs = document.querySelector(\"#bikedays\").querySelector(\"input.error\");\n if (errorInputs) {\n showApiError(localText(\"Profile.SaveBikeDaysError\"));\n return false;\n }\n\n let changedDays = {};\n let hasChanges = false;\n let inputDays = {};\n let inputPlayDays = {};\n let dates = {};\n document.querySelector(\"#bikedays\").querySelectorAll(\"input.d\").forEach((d) => { let date = d.dataset.date; inputDays[date] = d; if (!dates[date]) dates[date] = true; });\n document.querySelector(\"#bikedays\").querySelectorAll(\"input.pd\").forEach((pd) => { let date = pd.dataset.date; inputPlayDays[date] = pd; if (!dates[date]) dates[date] = true; });\n let apiDays = apiData.profile.days;\n\n for (let date in dates) {\n if (dates.hasOwnProperty(date)) {\n let apiDay = apiDays[date];\n let d = toPoint(inputDays[date]?.value ?? 0);\n let pd = toPoint(inputPlayDays[date]?.value ?? 0);\n\n if (!apiDay && d > 0 || pd > 0) {\n hasChanges = true;\n changedDays[date] = { \"changed\": true, \"distance\": d, \"playdistance\": pd, \"date\": date };\n }\n else if (apiDay && (toPoint(apiDay.distance) != d || toPoint(apiDay.playdistance) != pd)) {\n hasChanges = true;\n changedDays[date] = { \"changed\": true, \"distance\": d, \"playdistance\": pd, \"date\": date };\n }\n }\n }\n\n if (hasChanges) {\n document.getElementById(\"savebikedays\").disabled = true;\n toAPI(\"days\", function (data) {\n forEach(\"#bikedays input.changed:not(.error)\", function (el) {\n el.setAttribute(\"data-old\", el.value);\n removeClass(el, \"changed\");\n });\n removeClass(document.getElementById(\"savebikedays\").closest(\"form\"), \"changed\");\n if (unsavedChanges > 0) unsavedChanges--;\n apiData.days = data.days;\n apiData.profile.days = data.days;\n apiData.profile.teamStats = data.teamStats;\n apiData.profile.teamData = data.teamData;\n addBrief(\"Dine cykeldage er gemt.\", data);\n\n setSelectKM()\n\n if (callback) callback();\n\n updateTrophies();\n }, changedDays);\n }\n else {\n if (!document.getElementById(\"savebikedays\").disabled) unsavedChanges--;\n if (callback) callback();\n }\n}\n\nfunction setSelectKM() {\n let options = document.querySelectorAll(\"#bikedays select option\");\n options.forEach(o => {\n let optionDate = o.value.split('y').pop();\n if (optionDate && optionDate.length == 10) {\n let d = apiData.days[optionDate]?.distance;\n let pd = apiData.days[optionDate]?.playDistance;\n let dText = d ? ` (${d}/${pd ? pd : 0} km)` : pd ? ` (0/${pd} km)` : \"\";\n o.innerHTML = o.innerHTML.split('(')[0] + dText;\n }\n });\n}\n\nfunction updateTrophies(callback) {\n forEach(apiData.profile.campaigns, function (c) {\n c.endDate = parsedDate(c.endDataEntry);\n c.startDate = parsedDate(c.startDataEntry);\n c.trophyVars = [0, 0, 0, 0, 0, 0,\n new Date(2000, 0), 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0];\n });\n if (apiData.days) {\n Object.keys(apiData.days).forEach(function (key, index) {\n let date = parsedDate(key);\n let dist = apiData.days[key].distance;\n let pdist = apiData.days[key].playDistance;\n forEach(apiData.profile.campaigns, function (c) {\n let currentDist = dist + (c.includePlayInTrophyCalculations ? pdist : 0);\n if (!c.trophiesDisabled && date >= c.startDate && date <= c.endDate && currentDist > 0) {\n c.trophyVars[0] = 1;\n\n // consecutive days\n if (c.trophyVars[5] < 4) {\n isNextDay(c.trophyVars[6], date) ? c.trophyVars[5]++ : c.trophyVars[5] = 0;\n c.trophyVars[6] = date;\n }\n if (currentDist >= 25) c.trophyVars[3] = 1;\n if (currentDist >= 40) c.trophyVars[9] = 1;\n\n // total days\n c.trophyVars[7]++;\n }\n });\n });\n }\n\n let newTrophies = [];\n forEach(apiData.profile.campaigns, function (c) {\n if (!c.trophiesDisabled) {\n //let days = daysDuration(c.startDate, c.endDate);\n //if (c.trophyVars[7] / days >= beyondQualifier) {\n // c.trophyVars[4] = 1;\n //}\n if (c.trophyVars[7] >= 7) c.trophyVars[16] = 1;\n\n if (c.trophyVars[5] >= 4) c.trophyVars[1] = 1;\n\n let td = apiData.profile.teamData;\n if (c.trophyVars[0] === 1 && td && td.length > 0) {\n let all = true;\n let ps = undefined;\n for (let i = 0; i < td.length; i++) {\n if (td[i].ci === c.id) {\n ps = td[i].ps;\n break;\n }\n }\n if (ps && ps.length >= 2) {\n for (let i = 0; i < ps.length; i++) {\n if (ps[i].d === 0 && ps[i].tr.indexOf(1) < 0) {\n all = false;\n break;\n }\n }\n }\n if (all) c.trophyVars[2] = 1;\n }\n\n let enabledTrophies = c.enabledTrophies ? \",\" + c.enabledTrophies.replace(/\\s/g, '') + \",\" : \"\";\n\n // ret til trofæer - active\n // automatic trophies have no confirm text\n passiveTrophies.forEach(typeId => {\n // trophyVars index is 0, typeId index is 1\n let i = typeId - 1;\n if (c.trophyVars[i] === 1 && newTrophy(c.id, typeId)) {\n if (enabledTrophies === \"\" || enabledTrophies.includes(\",\" + typeId + \",\")) {\n newTrophies.push({\n \"TypeId\": typeId,\n \"CampaignId\": c.id,\n \"Action\": 1\n });\n }\n }\n else if (c.trophyVars[i] === 0 && !newTrophy(c.id, typeId)) {\n newTrophies.push({\n \"TypeId\": typeId,\n \"CampaignId\": c.id,\n \"Action\": -1\n });\n }\n });\n }\n console.log(c.trophyVars);\n });\n console.log({newTrophies}, {passiveTrophies});\n if (newTrophies.length > 0) {\n saveTrophies(newTrophies, callback);\n }\n else {\n if (callback) callback();\n drawTeamData();\n }\n}\n\nfunction saveTrophies(newTrophies, callback) {\n toAPI(\"trophies\", function (trophyData) {\n let totalTrophies = [];\n let removedTrophies = [];\n forEach(trophyData, function (t) {\n let el = document.querySelector(\"#teamdata [data-id='tr-\" + t.campaignId + \"-\" + t.typeId + \"']\");\n let elt = document.querySelector(\"#teamdata [data-id='ttr-\" + t.campaignId + \"-\" + t.typeId + \"']\");\n if (t.action === 1) {\n totalTrophies.push(t);\n if (el) removeClass(el, \"grey\");\n if (elt) removeClass(elt, \"grey\");\n }\n else if (t.action === -1) {\n removedTrophies.push(t.campaignId + \"-\" + t.typeId);\n if (el) addClass(el, \"grey\");\n if (elt) addClass(elt, \"grey\");\n }\n });\n let callUpdate = totalTrophies.length > 0 || removedTrophies.length > 0;\n if (totalTrophies.length > 0) {\n let s = '

TILLYKKE!
Du har fået nye trofæer:
';\n let addedTypes = [];\n forEach(totalTrophies, function (t) {\n if (addedTypes.indexOf(t.typeId) < 0) {\n addedTypes.push(t.typeId);\n s += trophyNames[campaignById('' + t.campaignId).campaignConfigId][t.typeId] + \"
\";\n }\n });\n s += '

';\n addBrief(s, null, true, true);\n }\n\n forEach(apiData.profile.trophies, function (pt) {\n let key = pt.campaignId + \"-\" + pt.typeId;\n if (removedTrophies.indexOf(key) < 0) totalTrophies.push(pt);\n });\n apiData.profile.trophies = totalTrophies;\n\n let em = apiData.profile.email.toLowerCase();\n for (let i = 0; i < apiData.profile.teamData.length; i++) {\n for (let j = 0; j < apiData.profile.teamData[i].ps.length; j++) {\n let participant = apiData.profile.teamData[i].ps[j];\n if (participant.e.toLowerCase() === em) {\n let ci = apiData.profile.teamData[i].ci;\n let newTeamDataTr = [];\n for (let k = 0; k < apiData.profile.trophies.length; k++) {\n let participantTrophy = apiData.profile.trophies[k];\n if (participantTrophy.campaignId === ci) {\n newTeamDataTr.push(participantTrophy.typeId);\n }\n }\n participant.tr = newTeamDataTr;\n }\n }\n }\n\n if (callUpdate) {\n updateTrophies(callback);\n }\n else {\n if (callback) callback();\n drawTeamData();\n }\n }, newTrophies);\n}\n\nfunction newTrophy(campaignId, typeId) {\n let a = apiData.profile.trophies;\n if (!a || a.length === 0) return true;\n for (let i = 0; i < a.length; i++) {\n let t = a[i];\n if (t.campaignId === campaignId && t.typeId === typeId) return false;\n }\n return true;\n}\n\nfunction reloadOK() {\n let key = \"reload.\" + document.location;\n let count = sessionStorage.getItem(key);\n if (count && count > 25) {\n customLog(2, \"more than 25 reloads of the same page, is probably an error\");\n return false;\n }\n else {\n count ? count++ : 1;\n sessionStorage.setItem(key, count);\n return true;\n }\n}\n\nfunction toAPI(action, callback, postData, noAuth, source, eventExtra) {\n let url = noAuth ? VctaAPIUrl + action : vctaSurface + \"ToAPI?action=\" + action;\n httpr(url, function (data) {\n if (data === -1) {\n customLog(2, action, url, data);\n addOverlayMessage(genericError, url);\n }\n else if (data === \"0\") {\n if (document.location.pathname.toLowerCase() != \"/login\") {\n window.location = \"/login\";\n }\n else {\n customLog(2, \"trying to redirect to login, but we're already on login\");\n }\n }\n else {\n callback(data);\n }\n }, typeof postData === \"string\" ? postData : JSON.stringify(postData), source, eventExtra)\n .then(() => { }).catch((ex) => {\n customLog(2, \"httpr exception \" + action, ex);\n showApiError(genericError);\n });\n}\n\nfunction getApiData(action, callback, refresh) {\n if (refresh || !apiData[action]) {\n toAPI(action, function (data) {\n apiData[action] = data;\n callback(data);\n }, \"{}\");\n }\n else {\n callback(apiData[action]);\n }\n}\n\nfunction campaignById(id) {\n return first(apiData.profile.campaigns, parseInt(id), \"id\");\n}\n\uFEFFconst chartColors = [\"-purple\", \"-pink\", \"-green\", \"-blue\", \"-yellow\", \"-darkpurple\"];\n\nconst lineConfig = {\n\tdata: {\n\t},\n\taxisX: {\n\t\tshowLabel: false,\n\t\tshowGrid: false,\n\t},\n\taxisY: {\n\t\tshowLabel: false,\n\t\tshowGrid: false,\n\t\tscaleMinSpace: 50,\n\t\tonlyInteger: true,\n\t},\n\tchartPadding: { top: 40, right: 0, bottom: 10, left: 20 },\n\tlow: 0,\n};\nconst barConfig = {\n\tdata: {\n\t},\n\tchartPadding: lineConfig.chartPadding,\n\taxisY: {\n\t\tscaleMinSpace: 50,\n\t\tonlyInteger: true,\n\t},\n\tseriesBarDistance: 0,\n\tlow: 0,\n};\n\nfunction setSeriesColors(series, colorOffset) {\n\tlet colorIndex = 0 + colorOffset;\n\tfor (var i = 0; i < series.length; i++) {\n\t\tseries[i].className = chartColors[colorIndex];\n\t\tcolorIndex++;\n\t\tif (colorIndex >= chartColors.length) colorIndex = 0;\n\t}\n}\n\nfunction drawLineChart(el, series, labels, acc = false, area = false, colorOffset = 0, animate = false, responsive = false) {\n\tel.classList.add(\"-line\");\n\tif (acc) sumSeries(series);\n\tsetSeriesColors(series, colorOffset);\n\n\tlet config = clone(lineConfig);\n\tconfig.showArea = area;\n\n\tlet data = {\n\t\tseries: series\n\t};\n\n\n\tif (labels && labels.length > 0) {\n\t\tdata.labels = labels;\n\t\tconfig.axisX.showLabel = true;\n\t\tconfig.axisY.showLabel = true;\n\t\tconfig.axisY.showGrid = true;\n\t}\n\n\tif (responsive) {\n\t\tel.classList.add(\"-resp\");\n\t\tif (showLabels) el.parentNode.classList.add(`-h${Math.ceil(data.labels.length / 5.0) * 100}`);\n\t}\n\n\tconst chart = new Chartist.LineChart(el, data, config);\n\n\tif (animate) {\n\t\tel.classList.add(\"-anim\");\n\t\tlet speed = 1000;\n\t\tchart.on(\"draw\", (data) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tel.classList.add(\"-done\");\n\t\t\t}, speed);\n\t\t\tif (!el.classList.contains(\"-done\") && data.type === \"line\" || data.type === \"area\") {\n\t\t\t\tdata.element.animate({\n\t\t\t\t\td: {\n\t\t\t\t\t\tbegin: 0, //speed * data.index,\n\t\t\t\t\t\tdur: speed,\n\t\t\t\t\t\tfrom: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(),\n\t\t\t\t\t\tto: data.path.clone().stringify(),\n\t\t\t\t\t\teasing: Chartist.easings.easeOutQuint,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction sumSeries(series) {\n\tif (!series) return;\n\tseries.forEach(ser => {\n\t\tlet arr = ser.data ? ser.data : ser;\n\t\tif (arr) {\n\t\t\tlet last = 0;\n\t\t\tarr.forEach((e, i) => {\n\t\t\t\tlast += e && isFloat(e) ? Number(e) : 0;\n\t\t\t\tarr[i] = i > 0 ? last : arr[i];\n\t\t\t});\n\t\t}\n\t});\n\treturn series;\n}\n\nfunction drawBarchart(el, series, labels, acc = false, stacked = false, colorOffset = 0, responsive = false) {\n\tel.classList.add(\"-bar\");\n\tif (acc) sumSeries(series);\n\tsetSeriesColors(series, colorOffset);\n\n\tlet config = clone(barConfig);\n\tlet data = {\n\t\tseries: series\n\t};\n\tif (labels && labels.length > 0) data.labels = labels;\n\tconfig.stackBars = stacked;\n\n\tif (stacked) {\n\t\tel.classList.add(\"-stacked\");\n\t}\n\telse if (!stacked) {\n\t\tel.classList.add(`-series${series.length}`);\n\t}\n\n\tlet responsiveConfig = [];\n\tif (responsive) {\n\t\tel.classList.add(\"-resp\");\n\t\tel.parentNode.classList.add(`-h${Math.ceil(labels.length / 5.0) * 100}`);\n\n\t\tresponsiveConfig = [\n\t\t\t[\n\t\t\t\t\"screen and (max-width: 500px)\",\n\t\t\t\t{\n\t\t\t\t\tstackBars: true,\n\t\t\t\t\treverseData: true,\n\t\t\t\t\thorizontalBars: true,\n\t\t\t\t},\n\t\t\t],\n\t\t\t[\n\t\t\t\t\"screen and (max-width: 700px)\",\n\t\t\t\t{\n\t\t\t\t\tstackBars: true,\n\t\t\t\t},\n\t\t\t],\n\t\t];\n\t}\n\n\tnew Chartist.BarChart(el, data, barConfig, responsiveConfig);\n}\n\n\uFEFFaddDomReadyEventListener(() => {\n var elements = document.querySelectorAll('input,select,textarea');\n var invalidListener = function () {\n let form = this.closest(\"form\");\n let firstInvalid = form.querySelector(\":invalid\");\n if (firstInvalid === this) {\n this.scrollIntoView(false);\n scrollToElement(this);\n }\n };\n\n for (var i = elements.length; i--;) {\n elements[i].addEventListener('invalid', invalidListener);\n }\n\n let prefillEmail = urlParam(\"email\");\n if (prefillEmail) {\n forEach(document.querySelectorAll(\"form.prefill\"), function (el) {\n let field = el.querySelector(\"input[type='email']\");\n if (field) field.value = prefillEmail;\n });\n }\n\n initForms();\n\n forEach(\".products .product\", function (el) {\n el.addEventListener(\"input\", function (e) {\n let el = e.target;\n if (el) {\n let v = el.value;\n let p = el.nextElementSibling;\n let pr = el.dataset.price;\n if (v && isInt(v) && p && pr) {\n p.innerHTML = \"I alt \" + toComma(v * toPoint(pr), true) + \" kr.\";\n removeClass(p, \"hidden\");\n }\n else {\n p.innerHTML = \"\";\n addClass(p, \"hidden\");\n }\n }\n });\n });\n});\n\nfunction initForms() {\n let forms = document.querySelectorAll(\"form.simple:not(.initdone)\");\n addEvents(forms, \"submit\", function (e) {\n let form = e.target;\n if (hasClass(form, \"pw\")) {\n let pw = form.querySelector(\"input[name=password]\");\n let newpw = form.querySelector(\"input[name=newpassword]\");\n let pwe = form.querySelector(\"span[for=password]\");\n let blankOk = hasClass(form, \"update\");\n\n if (blankOk && pw.value.length === 0) {\n addClass(pwe, \"hidden\");\n }\n else {\n if (pw.value.length < 6 || pw.value !== newpw.value) {\n removeClass(pwe, \"hidden\");\n return stopAll(e);\n }\n else {\n addClass(pwe, \"hidden\");\n }\n }\n }\n if (hasClass(form, \"hasProducts\")) {\n let sum = 0;\n forEach(form.querySelectorAll(\".product\"), function (el) {\n let val = el.value;\n if (val && isInt(val) && val > 0) sum += parseInt(val);\n });\n if (sum === 0) {\n scrollToElement(form.querySelector(\".products\"));\n return stopAll(e);\n }\n }\n\n httpr(vctaSurface + form.getAttribute(\"data-method\"), undefined, new FormData(form), form)\n .then(() => { }).catch((ex) => { showApiError(genericError); });\n return stopAll(e);\n });\n addClasses(forms, \"initdone\");\n\n\n forms = document.querySelectorAll(\"form.simpleToAPI:not(.initdone)\");\n addEvents(forms, \"submit\", function (e) {\n let form = e.target.closest(\"form\");\n removeClasses(form.querySelectorAll(\".result\"), \"active\");\n\n let dto = {};\n forEach(form.querySelectorAll(\"select, input:not([type=submit]):not([type=button])\"), function (formEl) {\n dto[formEl.getAttribute(\"name\")] = (formEl.getAttribute(\"data-type\") === \"int\" ? parseInt(formEl.value) : formEl.value);\n });\n\n toAPI(form.getAttribute(\"data-method\"), function (data) {\n if (data) {\n let activeResult = form.querySelector(\".result[data-status='\" + data.result + \"']\");\n if (activeResult) addClass(activeResult, \"active\");\n }\n else {\n let activeResult = form.querySelector(\".result[data-status='0']\");\n if (activeResult) addClass(activeResult, \"active\");\n }\n }, dto, false, form);\n\n return stopAll(e);\n });\n addClasses(forms, \"initdone\");\n}\n\uFEFFfunction webPsupport(callback) {\n var webP = new Image();\n webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n webP.onload = webP.onerror = function () {\n callback(webP.height === 2);\n };\n}\n\naddDomReadyEventListener(() => {\n webPsupport(function (hasWebP) {\n let skipSteppingSize = [370, 570, 1170];\n forEach(\"img[data-src]\", function (img) {\n if (hasClass(img, \"lazy\")) return;\n if (!isVisible(img)) {\n addClass(img, \"lazy\");\n return;\n }\n let mode = img.closest(\".images\") ? \"max\" : \"crop\";\n let src = img.getAttribute(\"data-src\")?.toLowerCase();\n let isPNG = src.indexOf(\".png\") > 0;\n let height = img.clientHeight;\n let width = img.clientWidth;\n let uw = img.getAttribute(\"data-uw\");\n if (uw && width > uw) width = uw;\n let allowSizeSteps = true;\n if (hasClass(img, \"defaultAspect\")) {\n if (uw) {\n img.style.maxWidth = uw + \"px\";\n if (uw < width) {\n width = uw;\n allowSizeSteps = false;\n }\n }\n if (img.getAttribute(\"data-aspect\")) {\n height = width * img.getAttribute(\"data-aspect\");\n }\n else {\n height = \"\";\n }\n }\n if (hasClass(img, \"sizebyheight\")) {\n height = img.parentNode.clientHeight;\n width = \"\";\n }\n let pe = img.parentElement;\n if (width <= 1) {\n while (pe) {\n width = pe.offsetWidth;\n if (width > 1) {\n break;\n }\n else {\n pe = pe.parentElement;\n }\n }\n }\n\n if (allowSizeSteps && width && skipSteppingSize.indexOf(width) < 0) {\n let stepSize = 10;\n if (width > 1200) {\n stepSize = 200;\n }\n else if (width > 600) {\n stepSize = 100;\n }\n else if (width > 300) {\n stepSize = 50;\n }\n let steppedWidth = Math.ceil(width / stepSize) * stepSize;\n let steppedHeight = height ? Math.round(height / width * steppedWidth) : height;\n width = steppedWidth;\n height = steppedHeight;\n }\n\n if ((pe === img.parentElement) && pe.tagName !== 'DIV' && pe.closest('article')) height = 0;\n\n if (src.indexOf(\".svg\") < 0) {\n src = src.split('?')[0] + \"?quality=80&rmode=\" + mode + \"&width=\" + (width <= 0 ? \"\" : width) + \"&height=\" + (height <= 1 ? \"\" : height) + (img.getAttribute(\"data-center\") ? \"&rxy=\" + img.getAttribute(\"data-center\") : \"\") + (hasWebP && !isPNG ? \"&format=webp\" : \"\") + (hasClass(img, \"preflow\") ? \"&autorotate=true\" : \"\");\n }\n img.addEventListener(\"load\", function (e) {\n var parent = e.target.parentNode;\n if (parent) {\n setTimeout(function () { addClass(parent, \"hlc\"); }, 300);\n if (parent.classList.contains(\"img\")) addClass(parent, \"lazyloaded\");\n }\n img.removeAttribute(\"data-src\");\n addClass(img, \"lazyloaded\");\n });\n img.setAttribute(\"loading\", \"lazy\");\n img.setAttribute(\"src\", src);\n if (hasClass(img.parentNode, \"contain\")) {\n img.parentNode.setAttribute(\"data-bg\", \"url(\" + img.getAttribute(\"data-src\") + \")\");\n }\n });\n });\n});\n\nfunction injectSVG(el) {\n let src = el.src;\n let parent = el.parentNode;\n removeElement(el);\n loadInto(parent, src, function () { }, \"image/svg+xml\");\n}\n//var videoAccept = '
Du skal acceptere marketing cookies for at se video.
';\n//$(function () {\n// if (window.videoAccept !== undefined) $(\"iframe[data-cookieconsent]\").closest(\".embed-container\").before(videoAccept);\n// $(\"iframe[data-cookieconsent]\").each(function () {\n// $(this).attr(\"src\", $(this).attr(\"data-src\"));\n// });\n//});\n\naddDomReadyEventListener(() => {\n let ticking = false;\n\n function updateScrollY() {\n let s = window.scrollY;\n let f = s.toString().length;\n document.body.setAttribute('data-scroll-y', s);\n let removals = [];\n document.body.classList.forEach(cls => {\n if (cls.startsWith('sy')) removals.push(cls);\n });\n removals.forEach(cls => document.body.classList.remove(cls));\n if (s > 10) {\n document.body.classList.add(\"sy0\");\n document.body.classList.add(\"sy\" + f);\n }\n\n ticking = false;\n }\n\n window.addEventListener('scroll', () => {\n if(!ticking) {\n requestAnimationFrame(updateScrollY);\n ticking = true;\n }\n });\n\n // Initial call to set the attribute on page load\n updateScrollY();\n\n\n let brgr = document.querySelector(\"#burger-check\");\n brgr.addEventListener(\"click\", e => {\n let body = document.querySelector(\"body\");\n if (brgr.checked) {\n body.classList.add(\"menu\");\n }\n else {\n body.classList.remove(\"menu\");\n }\n });\n document.querySelectorAll(\"nav .menu a\").forEach((a) => {\n a.addEventListener(\"click\", (e) => {\n brgr.checked = false;\n });\n });\n\n parseTimeStampCookie(\"main.js\");\n\n if (document.querySelector(\".profileCTA\")) {\n document.querySelectorAll(\".notProfileCTA\").forEach(el => {\n el.classList.add(\"hidden\");\n });\n }\n\n localizeElements();\n\n let chooseLanguage = document.getElementById(\"chooseLanguage\");\n if (chooseLanguage) {\n let r = chooseLanguage.closest(\".r\");\n addEvents(\"#chooseLanguage a\", \"click\", function (e) {\n stopAll(e);\n setCookie(\"VCTALanguage\", e.target.getAttribute(\"data-lang\"), 365);\n addClass(r, \"hidden\");\n return false;\n });\n }\n let switchLanguage = document.getElementById(\"switchLanguage\");\n if (switchLanguage) {\n let switches = switchLanguage.querySelectorAll(\"a\");\n let currentLanguage = getCookie(\"VCTALanguage\");\n if (currentLanguage) {\n forEach(switches, function (el) {\n if (el.getAttribute(\"data-lang\") == currentLanguage) addClass(el, \"disabled\");\n });\n }\n addEvents(\"#switchLanguage a\", \"click\", function (e) {\n\n stopAll(e);\n let setLang = e.target.getAttribute(\"data-lang\");\n setCookie(\"VCTALanguage\", setLang, 365);\n forEach(switches, function (el) {\n if (el.getAttribute(\"data-lang\") == setLang) {\n addClass(el, \"disabled\");\n }\n else {\n removeClass(el, \"disabled\");\n }\n });\n return false;\n });\n }\n\n let map = document.querySelector(\"#map\");\n if (map) {\n var refs = document.getElementsByTagName('script');\n var script = document.createElement('script');\n script.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyBwUmOPOhiVRK3mg2VIwEvldOjF_lSR5Kg&callback=initMap&v=quarterly';\n refs[refs.length - 1].parentNode.insertBefore(script, refs[refs.length - 1]);\n }\n\n forEach(\".pu\", function (el) {\n addClass(el.parentNode, \"haspu\");\n });\n\n var someshare = document.querySelector(\"li.share\");\n if (someshare) {\n var url = window.location.href.split('?')[0].split('#')[0];\n var canonical = document.querySelector(\"link[rel='canonical']\");\n if (canonical) url = canonical.getAttribute(\"href\");\n\n let sh = someshare.querySelector(\".tw\");\n if (sh) sh.setAttribute(\"href\", \"http://twitter.com/share?text=&hashtags=vcta&url=\" + encodeURIComponent(url));\n sh = someshare.querySelector(\".fb\");\n if (sh) sh.setAttribute(\"href\", \"https://www.facebook.com/sharer/sharer.php?u=\" + encodeURIComponent(url));\n }\n\n forEach(\".banner .bike\", function (el) {\n var url = cssVar(\"logocykel\" + el.getAttribute(\"data-bike\"));\n var svg = decodeURIComponent(url.substring(url.indexOf(\",\") + 1, url.indexOf(\")\") - 1));\n el.innerHTML = svg;\n });\n\n let mega = document.querySelector(\"nav.mega > ul\");\n forEach(\".stick a\", function (el) {\n if (!hasClass(el, \"search\") && el !== el.parentNode.children[0]) {\n let li = document.createElement(\"li\");\n addClass(li, \"added\");\n li.innerHTML = el.outerHTML;\n removeClass(li.querySelector(\"a\"), \"button\");\n mega?.prepend(li);\n }\n });\n\n addEvents(\".gallery div > img\", \"click\", function (e) {\n let src = e.target.src;\n if (src) {\n src = src.split('?')[0] + '?quality=80&mode=crop&upscale=false&width=1200&format=webp';\n window.open(src);\n }\n });\n\n activateToggles();\n\n addEvent(\"nav.mega\", \"click\", function (e) {\n e.stopPropagation();\n });\n\n addEvent(\".burger\", \"click\", function (e) {\n toggleClass(\"nav.mega\", \"showMobile\");\n toggleClass(\"body\", \"noscroll\");\n document.getElementById(\"burger-check\").checked = !document.getElementById(\"burger-check\").checked;\n return stopAll(e);\n });\n\n addEvent(\"a.search\", \"click\", function (e) {\n toggleClass(e.target, \"out\");\n return stopAll(e);\n });\n\n addEvents(\".main a, .sub a:not(.search)\", \"click\", function (e) {\n if (hasClass(e.target, \"show\")) {\n hideMenu();\n }\n else {\n let mega = document.querySelector(\"nav.mega\");\n removeClass(mega, \"showMobile\");\n document.getElementById(\"burger-check\").checked = false;\n\n return showMenu(e.target, e);\n }\n return stopAll(e);\n });\n\n addEvent(\".sub form\", \"click\", function (e) {\n e.stopPropagation();\n });\n\n addEvent(\"body\", \"click\", function (e) {\n let s = document.querySelector(\"a.search\");\n if (s) removeClass(s, \"out\");\n hideMenu();\n });\n\n forEach(\"p.limit\", function (el) {\n if (el.offsetHeight > 150) {\n addClass(el, \"limited\");\n }\n else {\n removeClass(el, \"limit\");\n }\n });\n\n addEvent(\"p.limit\", \"click\", function (e) {\n removeClass(e.target, \"limited\");\n stopAll(e);\n });\n\n var pop = document.querySelector(\"div.pop\");\n if (pop) {\n let popId = pop.dataset.id;\n let popKey = \"pop\" + popId;\n let today = new Date().toISOString().split('T')[0];\n let lastShown = localStorage.getItem(popKey);\n if (!lastShown || lastShown != today) {\n localStorage.setItem(popKey, today);\n const dialog = document.getElementById('imageDialog');\n document.body.classList.add(\"noscroll\");\n dialog.addEventListener(\"close\", (e) => {\n document.body.classList.remove(\"noscroll\");\n });\n dialog.querySelector(\"form\").insertAdjacentHTML(\"beforeend\", pop.outerHTML);\n\n let delay = pop.dataset.delay;\n if (delay) {\n setTimeout(function () { document.body.classList.add(\"noscroll\"); dialog.showModal(); }, delay * 1000);\n }\n else {\n document.body.classList.add(\"noscroll\");\n dialog.showModal();\n }\n }\n }\n\n showNextLoadMessages();\n\n if (window.gtmId !== undefined && window.gtmId !== '') {\n window.dataLayer = window.dataLayer || [];\n\n gtag(\"consent\", \"default\", {\n ad_storage: \"denied\",\n analytics_storage: \"denied\",\n wait_for_update: 500\n });\n gtag(\"set\", \"ads_data_redaction\", true);\n\n (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l !== 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', gtmId);\n }\n});\n\nwindow.addEventListener('load', function () {\n setDataScale();\n});\n\nwindow.addEventListener('resize', function () {\n setDataScale();\n});\n\nfunction setDataScale() {\n let vwVal = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n document.querySelector(':root').style.setProperty(\"--currentWidth\", vwVal);\n\n forEach(document.querySelectorAll(\".rscaled\"), function (el) {\n let max = el.getAttribute(\"data-max\");\n if (!max) max = 1170;\n let vw = vwVal;\n if (vw > el.parentNode.offsetWidth) vw = el.parentNode.offsetWidth;\n let elW = el.offsetWidth;\n if (elW > max) max = elW;\n let scale = vw < max ? vw / max : 1;\n if (scale < 0.01) scale = 1;\n el.setAttribute(\"style\", '--rscale: ' + scale + '; --scalemax: ' + max + 'px');\n if (vw < max) {\n addClass(el, \"scaled\");\n }\n else {\n removeClass(el, \"scaled\");\n }\n });\n}\n\nfunction localizeElements() {\n forEach(document.querySelectorAll('[data-local]'), function (el) {\n var t = localText(el.getAttribute(\"data-local\"));\n if (el.tagName === \"INPUT\") {\n let type = el.getAttribute(\"type\");\n if (type === \"submit\" || type === \"button\") {\n el.setAttribute(\"value\", t);\n }\n else {\n el.setAttribute(\"placeholder\", t);\n }\n }\n else {\n el.innerHTML = t;\n }\n });\n}\n\nfunction showNextLoadMessages() {\n let nlBriefMessages = sessionStorage.getItem(\"NextLoadBriefMessages\");\n let nlMessages = sessionStorage.getItem(\"NextLoadMessages\");\n if (nlBriefMessages) {\n addBrief(JSON.parse(nlBriefMessages).join(\"

\"));\n sessionStorage.removeItem(\"NextLoadBriefMessages\");\n }\n if (nlMessages) {\n addOverlayMessage(JSON.parse(nlBriefMessages).join(\"

\"));\n sessionStorage.removeItem(\"NextLoadMessages\");\n }\n}\n\nfunction gtag() {\n dataLayer.push(arguments);\n}\n\nfunction toggle(e) {\n let toggle = e.target;\n if (hasClass(toggle, \"off\")) {\n removeClass(toggle, \"off\");\n }\n else {\n addClass(toggle, \"off\");\n }\n}\n\nfunction hideMenu() {\n let mega = document.querySelector(\"nav.mega\");\n if (mega) {\n addClass(mega, \"hidden\");\n removeClass(mega, \"showMobile\");\n document.getElementById(\"burger-check\").checked = false;\n\n forEach(\".main a, .sub a:not(.search)\", function (el) {\n removeClass(el, \"show\");\n });\n }\n}\n\nfunction showMenu(el, e) {\n forEach(\".main a, .sub a:not(.search)\", function (el) {\n removeClass(el, \"show\");\n });\n addClass(el, \"show\");\n\n var href = el.getAttribute(\"href\");\n var solo = false;\n forEach(\".mega > ul > li > a\", function (elx) {\n if (elx.getAttribute(\"href\") === href) {\n if (!solo) solo = hasClass(elx, \"solo\");\n removeClass(elx.parentNode, \"hidden\");\n }\n else {\n addClass(elx.parentNode, \"hidden\");\n }\n });\n if (solo) return;\n\n removeClass(document.querySelector(\"nav.mega\"), \"hidden\");\n\n if (e) return stopAll(e);\n}\n\uFEFFvar mapData;\nvar map;\nvar lastMarkerId;\nvar extraR = 250;\nvar extraL = 70;\nvar extraT = 300;\nvar lastBounds;\n\nvar smallWidth = 800;\nvar centerMapX = 56.3;\nvar centerMapY = 11.4;\nvar searchZoom = 12;\nvar searchZoomSmall = 10;\nvar defaultZoom = 7;\nvar defaultZoomSmall = 6;\nvar disableMapTable = false;\nvar narrowMap = false;\n\naddDomReadyEventListener(() => {\n let ts = document.querySelector(\"#topstats\");\n if (ts) {\n let qsid = urlParam(\"id\");\n if (qsid) mapCampaignId = qsid;\n if ((mapCampaignId + '').indexOf(\",\") > 0) {\n let parts = mapCampaignId.split(\",\");\n if (parts.length > 1 && parts[1] == \"0\") disableMapTable = true;\n if (parts.length > 2 && parts[2] == \"0\") narrowMap = true;\n\n mapCampaignId = parts[0];\n }\n if (!disableMapTable) {\n httpr(VctaAPIUrl + 'TopStats/' + mapCampaignId, function (data) {\n let t = data.totals.Total;\n //let stats = '';\n let stats = '
' +\n '';\n\n let dict = data.regions;\n let rs = [];\n Object.keys(dict).forEach(function (key) {\n let v = dict[key];\n rs.push([key, v.s, v.d, v.k]);\n });\n\n rs = sortByColumn(rs, 1, 1);\n\n\n forEach(rs, function (r) {\n stats += '';\n });\n\n stats += '
DeltagereCykeldageKM
Total' + drawBar(t.s, t.s, false, \" deltager\" + (t.s === 1 ? \"\" : \"e\")) + '' + drawBar(t.d, t.d, false, \" dag\" + (t.d === 1 ? \"\" : \"e\")) + '' + drawBar(t.k, t.k, false, \" km\") + '
' + r[0] + '' + drawBar(r[1], t.s, false, \" deltager\" + (r[1] === 1 ? \"\" : \"e\")) + '' + drawBar(r[2], t.d, false, \" dag\" + (r[2] === 1 ? \"\" : \"e\")) + '' + drawBar(r[3], t.k, false, \" km\") + '
';\n ts.innerHTML = stats;\n });\n }\n }\n});\n\nfunction CustomMarker(latlng, map, args) {\n this.latlng = latlng;\n this.args = args;\n this.setMap(map);\n}\n\nwindow.initMap = function initMap() {\n CustomMarker.prototype = new google.maps.OverlayView();\n\n CustomMarker.prototype.draw = function () {\n\n var self = this;\n\n var div = this.div;\n\n if (!div) {\n\n div = this.div = document.createElement('div');\n\n div.className = 'marker';\n\n div.dataset.markerid = self.args.markerid;\n if (self.args.zip) div.dataset.zip = self.args.zip;\n if (self.args.ts) div.dataset.ts = self.args.ts;\n if (self.args.ss) div.dataset.ss = self.args.ss;\n if (self.args.size) div.dataset.size = self.args.size;\n if (self.args.ll) div.dataset.ll = self.args.ll;\n\n google.maps.event.addDomListener(div, \"click\", function (e) {\n let el = e.target;\n if (hasClass(el, \"active\")) return;\n addClass(el, \"active\");\n let $map = document.querySelector(\"#map\");\n let $mapinfo = document.querySelector(\"#mapinfo\");\n let to = getOffset(el);\n let mo = getOffset($map);\n\n mo.right = getWidth($map) + mo.left;\n mo.bottom = getHeight($map) + mo.top;\n var panX = 0;\n var panY = 0;\n if (to.left < mo.left + extraL) panX = (mo.left + extraL) - to.left;\n if (to.left > mo.right - extraR) panX = (mo.right - extraR) - to.left;\n if (to.top < mo.top + extraT) panY = (mo.top + extraT) - to.top;\n\n map.panBy(-panX, -panY);\n\n if (lastMarkerId) {\n let $lm = $map.querySelector(\"div[data-markerid='\" + lastMarkerId + \"']\");\n removeClass($lm, \"active\");\n $lm.innerHTML = \"\";\n }\n lastMarkerId = el.getAttribute(\"data-markerid\");\n\n var item = mapData[lastMarkerId];\n el.innerHTML = '

Postnummer ' + item.z + '

' + item.ts + ' hold med ' + item.ss + ' deltagere.

' + ($mapinfo ? '

Se alle hold i ' + item.z + '

' : '') + '

GÃ¥ til statistik for hold i ' + item.z + '

';\n\n if ($mapinfo) {\n let $mi = el.querySelector(\".mapinfo\");\n $mi.addEventListener(\"click\", function (e) {\n scrollToElement(document.querySelector(\"#mapinfo\"));\n stopAll(e);\n });\n }\n\n let $stats = el.querySelector(\".stats\");\n $stats.addEventListener(\"click\", function (e) {\n window.open(e.target.href);\n stopAll(e);\n });\n\n let s = \"\";\n let lastGroup = \"\";\n let lastCompany = \"\";\n forEach(item.wp, function (wp) {\n if (wp.g !== lastGroup) {\n lastGroup = wp.g;\n lastCompany = wp.c;\n s += '

' + lastGroup + '

';\n if (lastCompany !== lastGroup) {\n s += '

' + lastCompany + '

';\n }\n }\n else if (wp.c !== lastCompany) {\n lastCompany = wp.c;\n s += '

' + lastCompany + '

';\n }\n forEach(wp.t, function (t) {\n s += \"

\" + t.n + \" (\" + t.s + \" deltagere, \" + t.d + \" cykeldage, \" + toComma(t.k, true) + \" KM)

\";\n });\n });\n if ($mapinfo) {\n $mapinfo.innerHTML = s;\n removeClass($mapinfo.closest(\".r\"), \"hidden\");\n }\n\n el.querySelector(\"div\").addEventListener(\"click\", function (e) {\n stopAll(e);\n });\n el.querySelector(\".close\").addEventListener(\"click\", function (e) {\n stopAll(e);\n if (lastMarkerId) {\n let $lm = $map.querySelector(\"div[data-markerid='\" + lastMarkerId + \"']\");\n removeClass($lm, \"active\");\n $lm.innerHTML = \"\";\n }\n return false;\n });\n });\n\n var panes = this.getPanes();\n panes.overlayImage.appendChild(div);\n }\n\n var point = this.getProjection().fromLatLngToDivPixel(this.latlng);\n\n if (point) {\n div.style.left = point.x - 10 + 'px';\n div.style.top = point.y - 10 + 'px';\n }\n };\n\n CustomMarker.prototype.remove = function () {\n if (this.div) {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n\n CustomMarker.prototype.getPosition = function () {\n return this.latlng;\n };\n\n var request = new XMLHttpRequest();\n request.open('GET', VctaAPIUrl + 'zips/' + mapCampaignId.split(',')[0], true);\n\n request.onload = function () {\n if (request.status >= 200 && request.status < 400) {\n var data = JSON.parse(request.responseText);\n var mapOptions = {\n zoom: window.innerWidth > smallWidth ? defaultZoom : defaultZoomSmall,\n center: new google.maps.LatLng(centerMapX, centerMapY),\n disableDefaultUI: true,\n styles: mapStyles\n };\n\n map = new google.maps.Map(document.getElementById('map'), mapOptions);\n\n //map.addListener('bounds_changed', function () {\n // log(\"bounds changed\");\n //});\n\n mapData = data;\n\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let size = 1;\n if (item.ts > 4) size = 2;\n if (item.ts > 25) size = 3;\n if (item.ts > 100) size = 4;\n\n overlay = new CustomMarker(\n new google.maps.LatLng(item.lat, item.lng),\n map,\n {\n markerid: i,\n zip: item.z,\n ts: item.ts,\n ss: item.ss,\n size: size,\n ll: item.lat + \",\" + item.lng\n }\n );\n }\n } else {\n console.log(\"error loading map data\");\n }\n };\n\n request.onerror = function () {\n console.log(\"request error loading map data\");\n };\n\n request.send();\n}\n\nvar mapStyles = [\n {\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ebe3cd\"\n }\n ]\n },\n {\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#523735\"\n }\n ]\n },\n {\n \"elementType\": \"labels.text.stroke\",\n \"stylers\": [\n {\n \"color\": \"#f5f1e6\"\n }\n ]\n },\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#c9b2a6\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#dcd2be\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#ae9e90\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.neighborhood\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.natural\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#93817c\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#a5b076\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#447530\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#f5f1e6\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"labels\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"labels.icon\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"stylers\": [\n {\n //\"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#fdfcf8\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#f8c967\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#e9bc62\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"labels\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway.controlled_access\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#e98d58\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway.controlled_access\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#db8555\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"stylers\": [\n {\n //\"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#806b63\"\n }\n ]\n },\n {\n \"featureType\": \"transit\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#8f7d77\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"labels.text.stroke\",\n \"stylers\": [\n {\n \"color\": \"#ebe3cd\"\n }\n ]\n },\n {\n \"featureType\": \"transit.station\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#b9d3c2\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"labels.text\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#92998d\"\n }\n ]\n }\n];\n\uFEFFvar cseUrl = 'https://www.googleapis.com/customsearch/v1/siterestrict?key=AIzaSyDR8Wdq-g47Pf5-bYEdwBKqFL6e_qPyLio&cx=002541532685811098227:95zewwkwhw0&fields=items(title,link,snippet,htmlSnippet,pagemap/cse_image),searchInformation(totalResults),queries(request/searchTerms,nextPage/startIndex)&q=';\n\naddDomReadyEventListener(() => {\n var q = urlParam(\"q\");\n if (q && q !== '') {\n var searchResult = document.getElementById(\"searchResult\");\n if (searchResult) {\n addEvent(\".moreResults a.button\", \"click\", function () {\n showSearchResults(searchResult.getAttribute(\"data-q\"), searchResult, searchResult.getAttribute(\"data-next\"));\n });\n\n forEach(\".searchForm input[type=text]\", function (el) {\n el.value = q;\n });\n\n addEvent(\".searchForm\", \"submit\", function (e) {\n let q = e.target.querySelector(\"input[type=text]\");\n if (q && q.value !== \"\") {\n showSearchResults(q.value, searchResult);\n }\n return false;\n });\n\n showSearchResults(q, searchResult);\n }\n }\n});\n\nfunction showSearchResults(q, searchResult, start) {\n if (!start) start = 1;\n if (q) {\n httpr(cseUrl + encodeURIComponent(q) + \"&start=\" + start, function (data) {\n if (start === 1) searchResult.innerHTML = \"\";\n showItems(data, searchResult);\n })\n .then(() => { }).catch((ex) => { showApiError(genericError); });\n }\n}\n\nfunction showItems(data, searchResult) {\n searchResult.setAttribute(\"data-q\", data.queries.request[0].searchTerms);\n var moreResults = document.querySelector(\".moreResults\");\n if (data.queries.nextPage) {\n removeClass(moreResults, \"hidden\");\n searchResult.setAttribute(\"data-next\", data.queries.nextPage[0].startIndex);\n }\n else {\n addClass(moreResults, \"hidden\");\n }\n var html = \"\";\n if (data.items) {\n for (var i = 0; i < data.items.length; i++) {\n var item = data.items[i];\n\n html += '' +\n '' + item.title + '' +\n '

' + item.htmlSnippet.replace(/
/gi, \"\").replace(/ /gi, \"\") + '

' +\n '
';\n }\n }\n else {\n html = \"

Ingen resultater

\";\n }\n searchResult.insertAdjacentHTML(\"beforeend\", html);\n}\n\uFEFFconst tableData = {\n maxD: 0,\n minD: 0,\n maxK: 0,\n minK: 0,\n maxPD: 0,\n minPD: 0,\n maxPK: 0,\n minPK: 0,\n maxSD: 0,\n minSD: 0,\n maxSK: 0,\n minSK: 0,\n maxPSD: 0,\n minPSD: 0,\n maxPSK: 0,\n minPSK: 0,\n sort: 3,\n order: 0,\n rows: []\n};\n\nconst tableSort = 3;\nlet statsKey = \"stats\";\nlet favsKey = \"favs\";\nlet maxFavorites = 3;\nlet miniView = false;\nlet isPersonal = false;\nlet statsfilterId = \"statsfilter\";\n\naddDomReadyEventListener(() => {\n miniView = urlParam(\"cv\") === \"2\";\n initCSR();\n initStats();\n initPersonalStats();\n});\n\nfunction initPersonalStats() {\n let sf = document.querySelector(\"#statfilterpersonal\");\n if (!sf) return;\n let stattable = document.querySelector(\"#stattable\");\n if (stattable) addClass(stattable, \"workplay\");\n maxFavorites = 30;\n statsKey = \"IndividualStats\";\n favsKey = \"personalfavs\";\n statsfilterId = sf.id;\n isPersonal = true;\n\n let id = urlParam(\"id\");\n let f = urlParam(\"f\");\n\n if (f) {\n try {\n if (f.indexOf(\"-\") >= 0 || f.indexOf(\"[\") < 0) f = atob(f.replace(/-/gi, \"=\"));\n f = JSON.parse(f);\n if (f && f.length > 0) localStorage.setItem(favsKey, JSON.stringify(f));\n }\n catch (ex) {\n console.error(ex);\n }\n }\n if (id) statsCampaignId = id;\n\n httpr(VctaAPIUrl + statsKey + '/' + statsCampaignId, function (data) {\n apiData[statsKey] = data;\n\n let by = urlParam(\"by\");\n let filter = urlParam(\"filter\");\n let sort = urlParam(\"sort\");\n\n if (!sort) {\n sort = data.totals.d > 0 ? \"2,1\" : \"0,1\";\n }\n\n let byEl = document.querySelector(\"select[name='by']\");\n let sortEl = document.querySelector(\"select[name='sort']\");\n\n if (data.campaignConfigId) {\n let groupText = localText('General.WorkplaceGroup', false, data.campaignConfigId);\n let workplaceText = localText('General.Workplace', false, data.campaignConfigId);\n\n byEl.querySelector(\"option[value='g']\").innerHTML = groupText;\n byEl.querySelector(\"option[value='c']\").innerHTML = workplaceText;\n }\n if (!data.hasPlay) {\n let sr = document.getElementById(\"statsRow\");\n if (sr) addClass(sr, \"neverplay\");\n }\n\n sortEl.addEventListener(\"change\", function (e) {\n showStatsTable();\n });\n\n byEl.addEventListener(\"change\", function (e) {\n let by = document.querySelector(\"select[name='by']\").value;\n setFilterData(by);\n });\n\n if (filter) document.querySelector(\"input[name='filter']\").value = filter;\n if (sort) sortEl.value = sort;\n\n if (by) {\n byEl.value = by;\n sendEvent(byEl, \"change\");\n }\n else {\n setFilterData(document.querySelector(\"select[name='by']\").value);\n }\n\n showFavTable();\n showStatsTable();\n\n addClass(document.getElementById(\"statloading\"), \"hidden\");\n removeClass(document.getElementById(\"statfavorites\"), \"hidden\");\n removeClass(document.getElementById(statsfilterId), \"hidden\");\n })\n .then(() => { }).catch((ex) => { showApiError(genericError); });\n\n sf.querySelector(\"form\").addEventListener(\"submit\", function (e) {\n showStatsTable();\n stopAll(e);\n });\n}\n\nfunction initCSR() {\n let csr = document.querySelector(\"#csr\");\n if (!csr) {\n return;\n }\n let id = urlParam(\"id\");\n let cid = urlParam(\"cid\");\n console.log(\"loading data for csr\");\n httpr(VctaAPIUrl + statsKey + '/' + cid, function (data) {\n apiData[statsKey] = data;\n let favStats = loadStatRows(id.split('||'));\n\n csr.innerHTML = getVSHtml(favStats);\n console.log(\"eoapi\", window.eoapi);\n if (window.eoapi && eoapi.isEOPdf()) eoapi.convert();\n })\n .then(() => { }).catch((ex) => { showApiError(genericError); });\n}\nfunction initStats() {\n let sf = document.querySelector(\"#statfilter\");\n if (!sf) return;\n\n if (miniView) addClass(sf, \"hide\");\n\n let id = urlParam(\"id\");\n let f = urlParam(\"f\");\n if (urlParam(\"s\") === \"1\") {\n addClass(sf, \"simple\");\n }\n if (urlParam(\"r\") === \"1\") setTimeout(function () { window.location.reload(false); }, 900000);\n\n if (f) {\n try {\n if (f.indexOf(\"-\") >= 0 || f.indexOf(\"[\") < 0) f = atob(f.replace(/-/gi, \"=\"));\n f = JSON.parse(f);\n if (f && f.length > 0) localStorage.setItem(favsKey, JSON.stringify(f));\n }\n catch (ex) {\n console.error(ex);\n }\n }\n if (id) statsCampaignId = id;\n\n httpr(VctaAPIUrl + statsKey + '/' + statsCampaignId, function (data) {\n apiData[statsKey] = data;\n\n if (data == -1) {\n addOverlayMessage(genericError, \"\");\n return;\n }\n\n let show = urlParam(\"show\");\n let by = urlParam(\"by\");\n let filter = urlParam(\"filter\");\n let sort = urlParam(\"sort\");\n\n if (!show) {\n show = \"companies\";\n }\n if (!sort) {\n sort = data.totals.Total.d > 0 ? \"3,1\" : \"2,1\";\n }\n\n let showEl = document.querySelector(\"select[name='show']\");\n let byEl = document.querySelector(\"select[name='by']\");\n let sortEl = document.querySelector(\"select[name='sort']\");\n\n //if (Object.keys(data.groups).length === 1) {\n // byEl.removeChild(byEl.querySelector(\"option[value='groups']\"));\n // showEl.removeChild(showEl.querySelector(\"option[value='groups']\"));\n //}\n\n if (data.campaignConfigId) {\n let groupText = localText('General.WorkplaceGroup', false, data.campaignConfigId);\n let workplaceText = localText('General.Workplace', false, data.campaignConfigId);\n\n byEl.querySelector(\"option[value='companies']\").innerHTML = workplaceText;\n showEl.querySelector(\"option[value='companies']\").innerHTML = workplaceText;\n\n let byGroupEl = byEl.querySelector(\"option[value='groups']\");\n let showGroupEl = showEl.querySelector(\"option[value='groups']\");\n if (byGroupEl) byGroupEl.innerHTML = groupText;\n if (showGroupEl) showGroupEl.innerHTML = groupText;\n }\n if (!data.hasPlay) {\n let sr = document.getElementById(\"statsRow\");\n if (sr) addClass(sr, \"neverplay\");\n }\n\n sortEl.addEventListener(\"change\", function (e) {\n showStatsTable();\n });\n\n showEl.addEventListener(\"change\", function (e) {\n let v = e.target.value;\n if (v === \"teams\") {\n removeClass(document.getElementById(\"bySelect\"), \"hidden\");\n }\n else {\n if (v !== \"totals\") {\n if (!(byEl.value === \"groups\" && v === \"companies\")) byEl.value = v;\n setFilterData(v);\n }\n addClass(document.getElementById(\"bySelect\"), \"hidden\");\n }\n showStatsTable();\n });\n\n byEl.addEventListener(\"change\", function (e) {\n let by = document.querySelector(\"select[name='by']\").value;\n setFilterData(by);\n });\n\n if (show) showEl.value = show;\n\n if (filter) document.querySelector(\"input[name='filter']\").value = filter;\n if (sort) sortEl.value = sort;\n\n if (by) {\n byEl.value = by;\n sendEvent(byEl, \"change\");\n }\n else {\n setFilterData(document.querySelector(\"select[name='by']\").value);\n }\n\n sendEvent(showEl, \"change\");\n showFavTable();\n //showStatsTable();\n\n addClass(document.getElementById(\"statloading\"), \"hidden\");\n removeClass(document.getElementById(\"statfavorites\"), \"hidden\");\n removeClass(document.getElementById(\"statfilter\"), \"hidden\");\n })\n .then(() => { }).catch((ex) => { showApiError(genericError); });\n\n sf.querySelector(\"form\").addEventListener(\"submit\", function (e) {\n showStatsTable();\n stopAll(e);\n });\n}\n\nfunction addFavorite(id) {\n let favs = getFavorites();\n if (favs.indexOf(id) < 0) favs.push(id);\n if (favs.length > maxFavorites) favs.shift();\n let newFavsString = JSON.stringify(favs);\n localStorage.setItem(favsKey, newFavsString);\n let lsNewFavsString = localStorage.getItem(favsKey);\n if (lsNewFavsString !== newFavsString) {\n addOverlayMessage(\"Vi kan ikke gemme din favorit i din browser, måske er der lukket for brug af Local Storage?\");\n }\n else {\n addBrief(\"Tilføjet til favoritter, du kan se dem på toppen af siden.\");\n showFavTable();\n }\n}\n\nfunction removeFavorite(id) {\n let favs = getFavorites();\n if (favs.length > 0) {\n let newFavs = [];\n forEach(favs, function (f) {\n if (id !== f) newFavs.push(f);\n });\n let newFavsString = JSON.stringify(newFavs);\n localStorage.setItem(favsKey, newFavsString);\n let lsNewFavsString = localStorage.getItem(favsKey);\n if (lsNewFavsString !== newFavsString) {\n addOverlayMessage(\"Vi kan ikke fjerne din favorit fra din browser, måske er der lukket for brug af Local Storage?\");\n }\n else {\n showFavTable();\n }\n }\n}\n\nfunction getFavorites() {\n let favs = false;\n if (localStorage) favs = JSON.parse(localStorage.getItem(favsKey));\n return Array.isArray(favs) ? favs : [];\n}\n\nfunction loadStatRows(arr) {\n let o = {\n rs: [],\n mm: {\n minD: 0,\n maxD: 0,\n minK: 0,\n maxK: 0,\n minSD: 0,\n maxSD: 0,\n minSK: 0,\n maxSK: 0\n }\n };\n\n if (isPersonal) {\n let favs = {};\n if (arr && arr.length > 0) {\n forEach(arr, function (i) {\n let j = parseInt(i);\n if (j > 0) favs[j] = 1;\n });\n }\n\n let i = 0;\n forEach(apiData[statsKey].riders, function (p) {\n if (i < maxFavorites && favs[p.pi]) {\n i++;\n if (o.mm.maxD < p.d) o.mm.maxD = p.d;\n if (o.mm.minD > p.d) o.mm.minD = p.d;\n if (o.mm.maxK < p.k) o.mm.maxK = p.k;\n if (o.mm.minK > p.k) o.mm.minK = p.k;\n if (o.mm.maxPD < p.pd) o.mm.maxD = p.pd;\n if (o.mm.minPD > p.pd) o.mm.minD = p.pd;\n if (o.mm.maxPK < p.pk) o.mm.maxK = p.pk;\n if (o.mm.minPK > p.pk) o.mm.minK = p.pk;\n o.rs.push([p.pi, p.n, p.d, p.k, p.pd, p.pk, p.tn, p.r, p.m, p.z, p.g, p.c]);\n }\n });\n }\n else {\n forEach(arr, function (f) {\n let fa = f.split('|');\n let type = fa[0];\n let id = fa[1];\n\n if (type === \"teams\") {\n let ts = apiData[statsKey][type];\n if (ts) {\n id = parseInt(id);\n for (let i = 0; i < ts.length; i++) {\n if (ts[i].ti === id) {\n let t = ts[i];\n let sd = t.d / t.s;\n let sk = t.k / t.s;\n if (o.mm.maxD < t.d) o.mm.maxD = t.d;\n if (o.mm.minD > t.d) o.mm.minD = t.d;\n if (o.mm.maxK < t.k) o.mm.maxK = t.k;\n if (o.mm.minK > t.k) o.mm.minK = t.k;\n if (o.mm.maxSD < sd) o.mm.maxSD = sd;\n if (o.mm.minSD > sd) o.mm.minSD = sd;\n if (o.mm.maxSK < sk) o.mm.maxSK = sk;\n if (o.mm.minSK > sk) o.mm.minSK = sk;\n\n let psd = t.pd / t.s;\n let psk = t.pk / t.s;\n if (o.mm.maxPD < t.pd) o.mm.maxPD = t.pd;\n if (o.mm.minPD > t.pd) o.mm.minPD = t.pd;\n if (o.mm.maxPK < t.pk) o.mm.maxPK = t.pk;\n if (o.mm.minPK > t.pk) o.mm.minPK = t.pk;\n if (o.mm.maxPSD < psd) o.mm.maxPSD = psd;\n if (o.mm.minPSD > psd) o.mm.minPSD = psd;\n if (o.mm.maxPSK < psk) o.mm.maxPSK = psk;\n if (o.mm.minPSK > psk) o.mm.minPSK = psk;\n\n o.rs.push([f, t.n, t.s, t.d, t.k, sd, sk, t.pd, t.pk, psd, psk, t.g, t.c, t.z, type]);\n break;\n }\n }\n }\n }\n else {\n let v = apiData[statsKey][type][id];\n if (v) {\n let sd = v.d / v.s;\n let sk = v.k / v.s;\n if (o.mm.maxD < v.d) o.mm.maxD = v.d;\n if (o.mm.minD > v.d) o.mm.minD = v.d;\n if (o.mm.maxK < v.k) o.mm.maxK = v.k;\n if (o.mm.minK > v.k) o.mm.minK = v.k;\n if (o.mm.maxSD < sd) o.mm.maxSD = sd;\n if (o.mm.minSD > sd) o.mm.minSD = sd;\n if (o.mm.maxSK < sk) o.mm.maxSK = sk;\n if (o.mm.minSK > sk) o.mm.minSK = sk;\n\n let gc = id.split(\"\\u0007\");\n let c = gc.length > 1 ? (gc[0] !== gc[1] ? gc[0] + '
' + gc[1] : gc[1]) : id;\n\n let psd = v.pd / v.s;\n let psk = v.pk / v.s;\n if (o.mm.maxPD < v.pd) o.mm.maxPD = v.pd;\n if (o.mm.minPD > v.pd) o.mm.minPD = v.pd;\n if (o.mm.maxPK < v.pk) o.mm.maxPK = v.pk;\n if (o.mm.minPK > v.pk) o.mm.minPK = v.pk;\n if (o.mm.maxPSD < psd) o.mm.maxPSD = psd;\n if (o.mm.minPSD > psd) o.mm.minPSD = psd;\n if (o.mm.maxPSK < psk) o.mm.maxPSK = psk;\n if (o.mm.minPSK > psk) o.mm.minPSK = psk;\n\n o.rs.push([f, c, v.s, v.d, v.k, sd, sk, v.pd, v.pk, psd, psk, type]);\n }\n }\n });\n }\n\n return o;\n}\n\n\nfunction showFavTable() {\n let favs = getFavorites();\n let favEl = document.getElementById(\"statfavorites\");\n if (favs.length > 0) {\n let favStats = loadStatRows(favs);\n // TODO: get rows correctly, show table correctly, need ParticipantID in data\n\n\n if (isPersonal) {\n let b64favs = btoa(localStorage.getItem(favsKey)).replace(/=/gi, \"-\");\n\n let s = '

Favoritter (max ' + maxFavorites + ')

' +\n '

Del dine favoritter

' +\n '

Kopier linket her og send det til dem du vil dele dine favoritter med


' +\n '';\n for (let i = 0; i < favStats.rs.length; i++) {\n let r = favStats.rs[i];\n\n let itag = '
Hold: ' + r[6] + '' + (r[10] !== r[11] ? r[10] + \"\" : \"\") + r[11] + 'postnr: ' + r[9] + '';\n s += '';\n }\n\n favEl.innerHTML = s + \"
NavnCykeldagekmFritids cykeldageFritids km
' + r[1] + itag + '' + drawBar(r[2], tableData.maxD, false, extraE(' dag', r[2])) + '' + drawBar(r[3], tableData.maxK, false, ' km') +\n '' + drawBar(r[4], tableData.maxPD, false, extraE(' dag', r[4])) + '' + drawBar(r[5], tableData.maxPK, false, ' km') + '-
\";\n\n let share = document.getElementById(\"shareFavs\");\n if (share) {\n share.addEventListener(\"click\", function (e) {\n toggle(e);\n });\n }\n\n setDataScale();\n\n addEvents(\"#statfavorites a.fav\", \"click\", function (e) {\n stopAll(e);\n let tr = e.target.closest(\"tr\");\n let id = tr.getAttribute(\"data-id\");\n removeFavorite(id);\n });\n }\n else {\n if (!miniView) {\n let simple = hasClass(document.getElementById(\"statfilter\"), \"simple\");\n\n let b64favs = btoa(localStorage.getItem(favsKey)).replace(/=/gi, \"-\");\n\n let s = '

Favoritter (max ' + maxFavorites + ')

' +\n '

Del dine favoritter

' +\n '

Kopier linket her og send det til dem du vil dele dine favoritter med


' +\n '' +\n (simple ? '' : '');\n for (let i = 0; i < favStats.rs.length; i++) {\n let itag = '';\n let r = favStats.rs[i];\n\n if (r.length >= 14 && r[14] === \"teams\") itag = '
' + (r[11] !== r[12] ? r[11] + \"\" : \"\") + r[12] + 'postnr: ' + r[13] + '';\n let n = escapeHTML(r[1].replace(/
/gi, \"\\n\")).replace(/\\n/gi, \"
\");\n s += '' +\n '' +\n (simple ? '' : '');\n }\n\n let vs = getVSHtml(favStats);\n\n favEl.innerHTML = s + \"
NavnDeltagereCykeldagekm
(kg CO2 sparet)
Cykeldage pr.
deltager
km pr.
deltager
Fritids cykeldageFritids kmFritids
cykeldage pr.
deltager
Fritids km pr.
deltager
' +\n (window.campaignConfigId != 1 ? '' + n + '' : '' + n + '') + itag + '' + r[2] + '' + drawBar(r[3], favStats.mm.maxD, false, extraE(' dag', r[3])) + '' + drawBar(r[4], favStats.mm.maxK, false, ' km (' + toComma(r[4] * co2factor, true) + ' kg CO2)') +\n '' + drawBar(r[5], favStats.mm.maxSD, false, extraE(' dag', r[5])) + '' + drawBar(r[6], favStats.mm.maxSK, false, ' km') + '
' + drawBar(r[7], tableData.maxPD, false, extraE(' dag', r[7])) + '' + drawBar(r[8], tableData.maxPK, false, ' km') + '' +\n drawBar(r[9], tableData.maxPSD, false, extraE(' dag', r[9])) + '' + drawBar(r[10], tableData.maxPSK, false, ' km') + '-
\" + vs;\n\n let share = document.getElementById(\"shareFavs\");\n if (share) {\n share.addEventListener(\"click\", function (e) {\n toggle(e);\n });\n }\n\n setDataScale();\n\n addEvents(\"#statfavorites a.fav\", \"click\", function (e) {\n stopAll(e);\n let tr = e.target.closest(\"tr\");\n let id = tr.getAttribute(\"data-id\");\n removeFavorite(id);\n });\n }\n else {\n let s = '';\n for (let i = 0; i < favStats.rs.length; i++) {\n let r = favStats.rs[i];\n s += '

' + r[1] + ' ' + toComma(r[2], true) + ' deltagere

' + toComma(r[4], true) + ' km og ' + toComma(r[3], true) + ' cykeldag' + (r[3] == 1 ? '' : 'e') + '

';\n }\n favEl.innerHTML = s;\n }\n }\n\n if (favStats.rs.length === 0) {\n favEl.innerHTML = \"\";\n }\n }\n else {\n favEl.innerHTML = \"\";\n }\n}\n\nfunction extraE(s, n) {\n return s + (n === 1 ? '' : 'e');\n}\n\nfunction getVSHtml(fs) {\n if (window.campaignConfigId == 1) return \"\";\n let s = '
1 ? 'rscaled ' : '') + 'vs vs' + fs.rs.length + '\" data-max=\"' + (fs.rs.length > 2 ? 1170 : 900) + '\">';\n if (fs.rs.length === 1) {\n let r = fs.rs[0];\n s += '
' + allSVGs[\"vsalt\"] + '
' + escapeHTML(r[1]) + '
(' + r[2] + ' deltagere)
' + allSVGs[\"vsalt\"] + '
' +\n '

Cykeldage pr. deltager

' + drawBar(r[5], fs.mm.maxD, false, extraE(' dag', r[5]), allSVGs[\"mbike\"]) + '
' +\n '

Cykeldage alle deltagere

' + drawBar(r[3], fs.mm.maxD, false, extraE(' dag', r[5]), allSVGs[\"mbike\"]) + '
' +\n '

km pr. deltager

' + drawBar(r[6], fs.mm.maxK, false, 'km', allSVGs[\"mbike\"]) + '
' +\n '

km alle deltagere

' + drawBar(r[4], fs.mm.maxK, false, 'km', allSVGs[\"mbike\"]) + '
' +\n '

Så meget sparer I tilsammen ved at cykle fremfor at køre i bil i henholdsvis kg CO2, antal sygedage og samfundsøkonomisk gevinst

' +\n '
' + allSVGs[\"tree\"] + '
' + toComma(r[4] * co2factor, true) + ' kg CO2
' +\n '
' + allSVGs[\"heart\"] + '
' + toComma(r[4] / daysSavedFactor, true) + extraE(' dag', r[4] / daysSavedFactor) + '
' +\n '
' + allSVGs[\"bank\"] + '
' + toComma(r[4] * krSavedFactor, true) + ' DKK
' +\n '
';\n }\n else {\n s += '
';\n forEach(fs.rs, function (r, i) {\n s += '
' + (i > 0 ? '
' + allSVGs[\"vs\"] + '
' : '') + '' + r[1] + '
(' + r[2] + ' deltagere)
';\n });\n s += '

Cykeldage pr. deltager

';\n\n forEach(fs.rs, function (r, i) {\n s += '
' + drawBar(r[5], fs.mm.maxSD, false, extraE(' dag', r[5]), allSVGs[\"mbike\"]) + '
';\n });\n s += '

Cykeldage alle deltagere

';\n\n forEach(fs.rs, function (r, i) {\n s += '
' + drawBar(r[3], fs.mm.maxD, false, extraE(' dag', r[5]), allSVGs[\"mbike\"]) + '
';\n });\n\n s += '

km pr. deltager

';\n forEach(fs.rs, function (r, i) {\n s += '
' + drawBar(r[6], fs.mm.maxSK, false, 'km', allSVGs[\"mbike\"]) + '
';\n });\n\n s += '

km alle deltagere

';\n forEach(fs.rs, function (r, i) {\n s += '
' + drawBar(r[4], fs.mm.maxK, false, 'km', allSVGs[\"mbike\"]) + '
';\n });\n\n s += '

Så mange kg co2 har I sammen sparet ved at cykle fremfor at køre i bil

';\n forEach(fs.rs, function (r, i) {\n s += '
0 ? r[4] / fs.mm.maxK : 0) * 90) + 'px\">' + allSVGs[\"tree\"] + '
' + toComma(r[4] * co2factor, true) + ' kg CO2
';\n });\n\n s += '

I sparer også sygedage

';\n forEach(fs.rs, function (r, i) {\n s += '
0 ? r[4] / fs.mm.maxK : 0) * 90) + 'px\">' + allSVGs[\"heart\"] + '
' + toComma(r[4] / daysSavedFactor, true) + extraE(' dag', r[4] / daysSavedFactor) + '
';\n });\n\n s += '

…og skaber en samfundsøkonomisk gevinst

';\n forEach(fs.rs, function (r, i) {\n s += '
0 ? r[4] / fs.mm.maxK : 0) * 90) + 'px\">' + allSVGs[\"bank\"] + '
' + toComma(r[4] * krSavedFactor, true) + ' DKK
';\n });\n }\n\n return s + '
';\n}\n\nfunction sendEvent(el, e) {\n let event;\n if (typeof (Event) === 'function') {\n event = new Event(e);\n } else {\n event = new Event(e, { bubbles: true, cancelable: true });\n }\n\n el.dispatchEvent(event);\n}\n\nfunction onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\nfunction setFilterData(by) {\n if (isPersonal) {\n let dl = document.getElementById(\"filterdata\");\n let s = \"\";\n if (by) {\n let dict = apiData[statsKey][by];\n if (!dict) {\n dict = {};\n apiData[statsKey][by] = dict;\n forEach(apiData[statsKey][\"riders\"], function (r) {\n if (!dict[r[by]]) dict[r[by]] = 1;\n });\n }\n Object.keys(dict).forEach(function (key) {\n s += '';\n });\n }\n dl.innerHTML = s;\n }\n else {\n let show = document.querySelector(\"select[name='show']\").value;\n let dl = document.getElementById(\"filterdata\");\n let s = \"\";\n if (by && show !== \"totals\") {\n let dict = apiData[statsKey][by];\n Object.keys(dict).forEach(function (key) {\n if (key.indexOf(\"\\u0007\") > 0) {\n let parts = key.split(\"\\u0007\");\n if (parts.length > 1) s += '';\n }\n else {\n s += '';\n }\n });\n }\n dl.innerHTML = s;\n }\n}\n\nfunction sortByColumn(a, index, order) {\n a.sort(sortFunction);\n\n function sortFunction(a, b) {\n let c = a[index];\n let d = b[index];\n if (c < d) {\n return order === 0 ? -1 : 1;\n }\n if (c > d) {\n return order === 0 ? 1 : -1;\n }\n return 0;\n }\n\n return a;\n}\n\nfunction dynamicSort(property) {\n let sortOrder = 1;\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a, b) {\n const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\n return result * sortOrder;\n };\n}\n\nfunction dynamicSortMultiple() {\n const props = arguments;\n return function (obj1, obj2) {\n let i = 0, result = 0;\n const numberOfProperties = props.length;\n while (result === 0 && i < numberOfProperties) {\n result = dynamicSort(props[i])(obj1, obj2);\n i++;\n }\n return result;\n }\n}\n\n\nfunction goCompanies() {\n document.querySelector(\"select[name='by']\").value = \"companies\";\n let sw = document.querySelector(\"select[name='show']\");\n sw.value = \"companies\";\n sendEvent(sw, \"change\");\n}\n\nfunction goTeams() {\n document.querySelector(\"select[name='by']\").value = \"teams\";\n let sw = document.querySelector(\"select[name='show']\");\n sw.value = \"teams\";\n sendEvent(sw, \"change\");\n}\n\nfunction showStatsTable(all) {\n if (isPersonal) {\n showPersonalStatsTable(all);\n }\n else {\n showTeamStatsTable(all);\n }\n}\nfunction showTeamStatsTable(all) {\n let rs = [];\n let show = document.querySelector(\"select[name='show']\").value;\n let by = document.querySelector(\"select[name='by']\").value;\n let filter = document.querySelector(\"input[name='filter']\").value;\n\n let searchLinks = document.getElementById(\"searchLinks\");\n let filterExact = filter.endsWith('$');\n if (filterExact) filter = filter.substring(0, filter.length - 1);\n if (filter) {\n if (show === \"teams\" && by === \"teams\") {\n searchLinks.innerHTML = 'Søg efter \"' + escapeHTML(filter) + '\" i ' + localText(\"General.Workplace\", true, apiData[statsKey].campaignConfigId) + '';\n removeClass(searchLinks, \"hidden\");\n }\n else if (show === \"companies\") {\n searchLinks.innerHTML = 'Søg efter \"' + escapeHTML(filter) + '\" i hold';\n removeClass(searchLinks, \"hidden\");\n }\n else {\n addClass(searchLinks, \"hidden\");\n }\n\n filter = filter.toLowerCase();\n }\n else {\n addClass(searchLinks, \"hidden\");\n }\n if (all) {\n rs = tableData.rows;\n }\n else {\n let sort = document.querySelector(\"select[name='sort']\").value;\n\n let loc = document.location;\n // TODO: does this line save current location to history before changing?\n // window.history.pushState({}, document.title, document.location);\n window.history.replaceState({}, document.title, loc.protocol + \"//\" + loc.host + loc.pathname + \"?id=\" + statsCampaignId + \"&show=\" + encodeURIComponent(show) +\n \"&filter=\" + encodeURIComponent(filter) + (filterExact ? '$' : '') + \"&by=\" + encodeURIComponent(by) +\n \"&s=\" + (urlParam(\"s\") === \"1\" ? \"1\" : \"\") + \"&r=\" + (urlParam(\"r\") === \"1\" ? \"1\" : \"\") +\n \"&cv=\" + (urlParam(\"cv\") !== null && urlParam(\"cv\") !== 0 ? urlParam(\"cv\") : \"\") + \"&sort=\" + sort);\n\n tableData.sort = parseInt(sort.split(\",\")[0]);\n tableData.order = parseInt(sort.split(\",\")[1]);\n tableData.maxD = 0;\n tableData.minD = 0;\n tableData.maxK = 0;\n tableData.minK = 0;\n tableData.maxSD = 0;\n tableData.minSD = 0;\n tableData.maxSK = 0;\n tableData.minSK = 0;\n\n tableData.maxPD = 0;\n tableData.minPD = 0;\n tableData.maxPK = 0;\n tableData.minPK = 0;\n tableData.maxPSD = 0;\n tableData.minPSD = 0;\n tableData.maxPSK = 0;\n tableData.minPSK = 0;\n if (show === \"teams\") {\n let hash = {};\n let useHash = false;\n if (by && by !== \"teams\") {\n useHash = true;\n let ids = [];\n let dict = apiData[statsKey][by];\n Object.keys(dict).forEach(function (key) {\n let v = dict[key];\n let klc = key.toLowerCase();\n if (!filter || (filterExact ?\n (klc === filter || (by === \"companies\" && klc.indexOf(`\\x07${filter}\\x07`) >= 0) || (by === \"groups\" && klc.indexOf(`${filter}\\x07`) === 0))\n : klc.indexOf(filter) >= 0)) {\n ids = ids.concat(v.tis);\n }\n });\n forEach(ids, function (id) {\n hash[id] = 0;\n });\n }\n forEach(apiData[statsKey][show], function (t) {\n if ((useHash && hash.hasOwnProperty(t.ti)) || (!useHash && (!filter || (filterExact ? t.n.toLowerCase() === filter : t.n.toLowerCase().indexOf(filter) >= 0)))) {\n let sd = t.d / t.s;\n let sk = t.k / t.s;\n if (tableData.maxD < t.d) tableData.maxD = t.d;\n if (tableData.minD > t.d) tableData.minD = t.d;\n if (tableData.maxK < t.k) tableData.maxK = t.k;\n if (tableData.minK > t.k) tableData.minK = t.k;\n if (tableData.maxSD < sd) tableData.maxSD = sd;\n if (tableData.minSD > sd) tableData.minSD = sd;\n if (tableData.maxSK < sk) tableData.maxSK = sk;\n if (tableData.minSK > sk) tableData.minSK = sk;\n\n let psd = t.pd / t.s;\n let psk = t.pk / t.s;\n if (tableData.maxPD < t.pd) tableData.maxPD = t.pd;\n if (tableData.minPD > t.pd) tableData.minPD = t.pd;\n if (tableData.maxPK < t.pk) tableData.maxPK = t.pk;\n if (tableData.minPK > t.pk) tableData.minPK = t.pk;\n if (tableData.maxPSD < psd) tableData.maxPSD = psd;\n if (tableData.minPSD > psd) tableData.minPSD = psd;\n if (tableData.maxPSK < psk) tableData.maxPSK = psk;\n if (tableData.minPSK > psk) tableData.minPSK = psk;\n\n rs.push([t.ti, escapeHTML(t.n), t.s, t.d, t.k, sd, sk, t.pd, t.pk, psd, psk, t.g, t.c, t.z]);\n }\n });\n }\n else if (show === \"companies\") {\n let dict = apiData[statsKey][show];\n Object.keys(dict).forEach(function (key) {\n let v = dict[key];\n let klc = key.toLowerCase();\n\n if (!filter\n || (filterExact ? (klc === filter || (by === \"companies\" && klc.indexOf(`\\x07${filter}\\x07`) >= 0) || (by === \"groups\" && klc.indexOf(`${filter}\\x07`) === 0)) : klc.indexOf(filter) >= 0)\n || v.r.toLowerCase() === filter\n || v.m.toLowerCase() === filter\n ) {\n\n let gc = key.split(\"\\u0007\");\n let c = gc[0].toLowerCase() !== gc[1].toLowerCase() ? escapeHTML(gc[0]) + '
' + escapeHTML(gc[1]) : escapeHTML(gc[1]);\n c += \"
postnr: \" + gc[2] + \"\";\n\n let sd = v.d / v.s;\n let sk = v.k / v.s;\n if (tableData.maxD < v.d) tableData.maxD = v.d;\n if (tableData.minD > v.d) tableData.minD = v.d;\n if (tableData.maxK < v.k) tableData.maxK = v.k;\n if (tableData.minK > v.k) tableData.minK = v.k;\n if (tableData.maxSD < sd) tableData.maxSD = sd;\n if (tableData.minSD > sd) tableData.minSD = sd;\n if (tableData.maxSK < sk) tableData.maxSK = sk;\n if (tableData.minSK > sk) tableData.minSK = sk;\n\n let psd = v.pd / v.s;\n let psk = v.pk / v.s;\n if (tableData.maxPD < v.pd) tableData.maxPD = v.pd;\n if (tableData.minPD > v.pd) tableData.minPD = v.pd;\n if (tableData.maxPK < v.pk) tableData.maxPK = v.pk;\n if (tableData.minPK > v.pk) tableData.minPK = v.pk;\n if (tableData.maxPSD < psd) tableData.maxPSD = psd;\n if (tableData.minPSD > psd) tableData.minPSD = psd;\n if (tableData.maxPSK < psk) tableData.maxPSK = psk;\n if (tableData.minPSK > psk) tableData.minPSK = psk;\n\n rs.push([key, c, v.s, v.d, v.k, sd, sk, v.pd, v.pk, psd, psk]);\n }\n });\n }\n else {\n let dict = apiData[statsKey][show];\n Object.keys(dict).forEach(function (key) {\n let v = dict[key];\n let klc = key.toLowerCase();\n if (!filter\n || (filterExact ? (klc.indexOf(`\\x07`) > 0 ? klc.indexOf(`\\x07${filter}\\x07`) >= 0 : klc === filter) : klc.indexOf(filter) >= 0)\n || (show === \"municipalities\" && filterExact ? v.r?.toLowerCase() === filter : v.r?.toLowerCase().indexOf(filter) >= 0)) {\n let sd = v.d / v.s;\n let sk = v.k / v.s;\n if (tableData.maxD < v.d) tableData.maxD = v.d;\n if (tableData.minD > v.d) tableData.minD = v.d;\n if (tableData.maxK < v.k) tableData.maxK = v.k;\n if (tableData.minK > v.k) tableData.minK = v.k;\n if (tableData.maxSD < sd) tableData.maxSD = sd;\n if (tableData.minSD > sd) tableData.minSD = sd;\n if (tableData.maxSK < sk) tableData.maxSK = sk;\n if (tableData.minSK > sk) tableData.minSK = sk;\n\n let psd = v.pd / v.s;\n let psk = v.pk / v.s;\n if (tableData.maxPD < v.pd) tableData.maxPD = v.pd;\n if (tableData.minPD > v.pd) tableData.minPD = v.pd;\n if (tableData.maxPK < v.pk) tableData.maxPK = v.pk;\n if (tableData.minPK > v.pk) tableData.minPK = v.pk;\n if (tableData.maxPSD < psd) tableData.maxPSD = psd;\n if (tableData.minPSD > psd) tableData.minPSD = psd;\n if (tableData.maxPSK < psk) tableData.maxPSK = psk;\n if (tableData.minPSK > psk) tableData.minPSK = psk;\n\n rs.push([key, key, v.s, v.d, v.k, sd, sk, v.pd, v.pk, psd, psk]);\n }\n });\n }\n rs = sortByColumn(rs, tableData.sort, tableData.order);\n\n tableData.rows = rs;\n }\n let max = all ? rs.length : rs.length > 100 ? 100 : rs.length;\n let simple = hasClass(document.getElementById(\"statfilter\"), \"simple\");\n\n if (miniView) {\n\n let s = '

Hold

';\n let table = document.querySelector(\"#stattable\");\n\n for (let i = 0; i < max; i++) {\n let r = rs[i];\n s += '

' + r[1] + '
' + toComma(r[2], true) + ' deltagere ' + toComma(r[4], true) + ' km og ' + toComma(r[3], true) + ' cykeldag' + (r[3] == 1 ? '' : 'e') + '

';\n }\n\n table.innerHTML = s;\n }\n else {\n let table = document.querySelector(\"#stattable table\");\n let s = 'NavnDeltagereCykeldagekm
(kg CO2 sparet)
Cykeldage pr.
deltager
km pr.
deltager
' +\n (simple ? '' : 'Fritids cykeldageFritids kmFritids
cykeldage pr.
deltager
Fritids km pr.
deltager
');\n let linkName = show === \"totals\" || (show === \"teams\" && window.campaignConfigId == 1) ? false : true;\n\n for (let i = 0; i < max; i++) {\n let itag = '';\n let r = rs[i];\n console.log({r});\n let name = linkName ? '' + r[1] + '' : `${r[1]}`;\n if (show === \"teams\") itag = '
' + (r[11] !== r[12] ? r[11] + \"\" : \"\") + r[12] + 'postnr: ' + r[13] + '';\n s += '' + name + itag + '' + r[2] + '' + drawBar(r[3], tableData.maxD, false, extraE(' dag', r[3])) + '' + drawBar(r[4], tableData.maxK, false, ' km (' + toComma(r[4] * co2factor, true) + ' kg CO2)') +\n '' + drawBar(r[5], tableData.maxSD, false, extraE(' dag', r[5])) + '' + drawBar(r[6], tableData.maxSK, false, ' km') + '' +\n (simple ? '' : '' + drawBar(r[7], tableData.maxPD, false, extraE(' dag', r[7])) + '' + drawBar(r[8], tableData.maxPK, false, ' km') + '' +\n drawBar(r[9], tableData.maxPSD, false, extraE(' dag', r[9])) + '' + drawBar(r[10], tableData.maxPSK, false, ' km') + '+');\n }\n\n table.setAttribute(\"data-show\", show);\n table.innerHTML = s;\n\n let statinfo = document.querySelector(\"#statinfo\");\n s = \"\";\n if (max < rs.length) {\n s += '

Viser de første 100 resultater
Vis alle ' + rs.length + ' resultater

';\n }\n else {\n s += '

' + rs.length + \" resultat\" + (rs.length !== 1 ? \"er\" : \"\") + '

';\n }\n if (window.campaignConfigId != 1 && (urlParam(\"cv\") === null || urlParam(\"cv\") === 0)) {\n s += '

Hent statistik for hele kampagnen som CSV fil til Excel

';\n\n if (by === \"groups\" || (show === \"groups\" && hasClass(by.closest(\"div\"), \"hidden\"))) {\n if (JSON.stringify(getFavorites()).toLowerCase().indexOf('\"groups|' + filter.toLowerCase() + '\"') >= 0) {\n let loc = getStatsLink();\n let linkTeamsLatest = loc + \"sort=0,1\" + \"&f=\" + encodeURIComponent(JSON.stringify(getFavorites()));\n let linkTeamsMost = loc + \"sort=3,1\" + \"&f=\" + encodeURIComponent(JSON.stringify(getFavorites()));\n s += '

Link til virksomhedsgruppen vist med seneste hold først (stor skærm)

';\n s += '

Link til virksomhedsgruppen vist med seneste hold først (lille skærm)

';\n s += '

Link til virksomhedsgruppen vist med holdet med flest cykeldage først (stor skærm)

';\n s += '

Link til virksomhedsgruppen vist med holdet med flest cykeldage først (lille skærm)

';\n }\n }\n }\n\n statinfo.innerHTML = s;\n\n let ths = table.querySelectorAll(\"th\");\n forEach(ths, function (el, i) {\n let a = el.querySelector(\"a\");\n if (a) {\n a.setAttribute(\"data-sort\", i + 1);\n a.addEventListener(\"click\", function (e) {\n let sort = document.querySelector(\"select[name='sort']\");\n let s = parseInt(e.target.getAttribute(\"data-sort\"));\n let o = s !== tableData.sort ? (s === 1 ? 0 : 1) : (tableData.order === 0 ? 1 : 0);\n sort.value = s + \",\" + o;\n sendEvent(sort, \"change\");\n stopAll(e);\n });\n }\n if (i === tableData.sort - 1) {\n addClass(el, \"sort\");\n if (tableData.order === 0) {\n removeClass(el, \"down\");\n }\n else {\n addClass(el, \"down\");\n }\n }\n else {\n removeClass(el, \"sort\");\n }\n });\n\n addEvents(\"#stattable a.name\", \"click\", function (e) {\n stopAll(e);\n let ds = document.querySelector(\"#stattable table\").getAttribute(\"data-show\");\n let v = e.target.textContent.split('\\n')[0];\n let sw = document.querySelector(\"select[name='show']\");\n if (sw.value === \"regions\") {\n document.querySelector(\"select[name='by']\").value = \"municipalities\";\n document.querySelector(\"input[name='filter']\").value = v + '$';\n sw.value = \"municipalities\";\n }\n else if (sw.value === \"municipalities\") {\n document.querySelector(\"select[name='by']\").value = \"companies\";\n document.querySelector(\"input[name='filter']\").value = v + '$';\n sw.value = \"companies\";\n }\n else if (sw.value === \"groups\") {\n document.querySelector(\"select[name='by']\").value = \"groups\";\n document.querySelector(\"input[name='filter']\").value = v + '$';\n sw.value = \"companies\";\n }\n else if (sw.value === \"companies\") {\n let a = [];\n const iterator = document.createNodeIterator(\n e.target,\n NodeFilter.SHOW_TEXT,\n null\n );\n let node;\n while (node = iterator.nextNode()) { a.push(node.textContent) }\n document.querySelector(\"select[name='by']\").value = \"companies\";\n document.querySelector(\"input[name='filter']\").value = (a.length > 2 ? a[1] : a[0]) + '$';\n sw.value = \"teams\";\n }\n else if (sw.value === \"zips\") {\n document.querySelector(\"select[name='by']\").value = \"zips\";\n document.querySelector(\"input[name='filter']\").value = v;\n sw.value = \"companies\";\n }\n else if (sw.value === \"teams\" && window.campaignConfigId != 1) {\n let loc = \"/pstats?id=\" + statsCampaignId + \"&by=tn&filter=\" + v + '$'\n window.open(loc);\n }\n else {\n document.querySelector(\"select[name='by']\").value = ds;\n document.querySelector(\"input[name='filter']\").value = v + '$';\n sw.value = \"teams\";\n }\n sendEvent(sw, \"change\");\n });\n\n addEvents(\"#stattable a.fav\", \"click\", function (e) {\n stopAll(e);\n let tr = e.target.closest(\"tr\");\n let id = tr.getAttribute(\"data-id\");\n let show = tr.closest(\"table\").getAttribute(\"data-show\");\n addFavorite(show + \"|\" + id);\n });\n\n let showAll = document.querySelector(\"a.showall\");\n if (showAll) {\n showAll.addEventListener(\"click\", function (e) {\n if (tableData.rows.length > 1000) {\n addBrief(\"Det kan tage nogle sekunder at tegne tabellen når der er mange resultater.\");\n setTimeout(function () { showStatsTable(true); }, 200);\n }\n else {\n showStatsTable(true);\n }\n stopAll(e);\n });\n }\n }\n}\n\n\nfunction showPersonalStatsTable(all) {\n let rs = [];\n let by = document.querySelector(\"select[name='by']\").value;\n let filter = document.querySelector(\"input[name='filter']\").value;\n let filterExact = filter.endsWith('$');\n if (filterExact) filter = filter.substring(0, filter.length - 1);\n if (filter) {\n filter = filter.toLowerCase();\n }\n if (all) {\n rs = tableData.rows;\n }\n else {\n let sort = document.querySelector(\"select[name='sort']\").value;\n\n let loc = document.location;\n window.history.replaceState({}, document.title, loc.protocol + \"//\" + loc.host + loc.pathname + \"?id=\" + statsCampaignId +\n \"&filter=\" + encodeURIComponent(filter) + (filterExact ? '$' : '') + \"&by=\" + encodeURIComponent(by) + \"&sort=\" + sort);\n\n tableData.sort = parseInt(sort.split(\",\")[0]);\n tableData.order = parseInt(sort.split(\",\")[1]);\n tableData.maxD = 0;\n tableData.minD = 0;\n tableData.maxK = 0;\n tableData.minK = 0;\n\n tableData.maxPD = 0;\n tableData.minPD = 0;\n tableData.maxPK = 0;\n tableData.minPK = 0;\n\n forEach(apiData[statsKey].riders, function (p) {\n if (!filter || (filter && (by == \"z\" ? p[by] == filter : p[by] && filterExact ? p[by].toLowerCase() === filter : p[by].toLowerCase().indexOf(filter) >= 0))) {\n if (tableData.maxD < p.d) tableData.maxD = p.d;\n if (tableData.minD > p.d) tableData.minD = p.d;\n if (tableData.maxK < p.k) tableData.maxK = p.k;\n if (tableData.minK > p.k) tableData.minK = p.k;\n if (tableData.maxPD < p.pd) tableData.maxPD = p.pd;\n if (tableData.minPD > p.pd) tableData.minPD = p.pd;\n if (tableData.maxPK < p.pk) tableData.maxPK = p.pk;\n if (tableData.minPK > p.pk) tableData.minPK = p.pk;\n rs.push([p.pi, p.n, p.d, p.k, p.pd, p.pk, p.tn, p.r, p.m, p.z, p.g, p.c]);\n }\n });\n\n rs = sortByColumn(rs, tableData.sort, tableData.order);\n\n tableData.rows = rs;\n }\n let max = all ? rs.length : rs.length > 100 ? 100 : rs.length;\n\n let table = document.querySelector(\"#stattable table\");\n let s = 'NavnCykeldagekmFritids cykeldageFritids km';\n\n for (let i = 0; i < max; i++) {\n let r = rs[i];\n let name = escapeHTML(r[1]);\n let itag = '
Hold: ' + r[6] + '
' + (r[10] !== r[11] ? r[10] + \"\" : \"\") + r[11] + 'postnr: ' + r[9] + '';\n s += '' + name + itag + '' + drawBar(r[2], tableData.maxD, false, extraE(' dag', r[2])) + '' + drawBar(r[3], tableData.maxK, false, ' km') +\n '' + drawBar(r[4], tableData.maxPD, false, extraE(' dag', r[4])) + '' + drawBar(r[5], tableData.maxPK, false, ' km') + '+';\n }\n\n table.innerHTML = s;\n\n let statinfo = document.querySelector(\"#statinfo\");\n s = \"\";\n if (max < rs.length) {\n s += '

Viser de første 100 resultater
Vis alle ' + rs.length + ' resultater

';\n }\n else {\n s += '

' + rs.length + \" resultat\" + (rs.length !== 1 ? \"er\" : \"\") + '

';\n }\n if (window.campaignConfigId != 1 && urlParam(\"cv\") === null || urlParam(\"cv\") === 0) {\n //s += '

Hent statistik for hele kampagnen som CSV fil til Excel

';\n\n if (by === \"g\") {\n if (JSON.stringify(getFavorites()).toLowerCase().indexOf('\"groups|' + filter.toLowerCase() + '\"') >= 0) {\n let loc = getStatsLink();\n let linkTeamsMost = loc + \"sort=5,1\" + \"&f=\" + encodeURIComponent(JSON.stringify(getFavorites()));\n s += '

Link til virksomhedsgruppen vist med deltageren med flest cykeldage først

';\n }\n }\n }\n\n statinfo.innerHTML = s;\n\n let ths = table.querySelectorAll(\"th\");\n forEach(ths, function (el, i) {\n let a = el.querySelector(\"a\");\n if (a) {\n a.setAttribute(\"data-sort\", i + 1);\n a.addEventListener(\"click\", function (e) {\n let sort = document.querySelector(\"select[name='sort']\");\n let s = parseInt(e.target.getAttribute(\"data-sort\"));\n let o = s !== tableData.sort ? (s === 1 ? 0 : 1) : (tableData.order === 0 ? 1 : 0);\n sort.value = s + \",\" + o;\n sendEvent(sort, \"change\");\n stopAll(e);\n });\n }\n if (i === tableData.sort - 1) {\n addClass(el, \"sort\");\n if (tableData.order === 0) {\n removeClass(el, \"down\");\n }\n else {\n addClass(el, \"down\");\n }\n }\n else {\n removeClass(el, \"sort\");\n }\n });\n\n addEvents(\"#stattable a.fav\", \"click\", function (e) {\n stopAll(e);\n let tr = e.target.closest(\"tr\");\n let id = tr.getAttribute(\"data-id\");\n addFavorite(id);\n });\n\n let showAll = document.querySelector(\"a.showall\");\n if (showAll) {\n showAll.addEventListener(\"click\", function (e) {\n if (tableData.rows.length > 1000) {\n addBrief(\"Det kan tage nogle sekunder at tegne tabellen når der er mange resultater.\");\n setTimeout(function () { showStatsTable(true); }, 200);\n }\n else {\n showStatsTable(true);\n }\n stopAll(e);\n });\n }\n}\n\n\nfunction getStatsLink() {\n return document.location.toString().split(\"sort=\")[0].replace(\"&s=&\", \"&s=1&\").replace(\"&r=&\", \"&r=1&\").replace(\"show=groups\", \"show=teams\");\n}\n\nfunction drawBar(v, max, notext, extra, graphic, height) {\n if (!height) height = 30;\n height -= 10;\n let scale = v > 0 ? v / max : 0;\n return (graphic ? '' + graphic + '' : '') + '' + (notext ? \"\" : '' + toComma(v, true)) + (extra ? extra : '') + '';\n}\ndocument.addEventListener(\"readystatechange\", (e) => {\n let count = window.domReadyEventListeners.length;\n if (document.readyState !== \"loading\") {\n window.domReadyEventListeners.forEach((l) => l());\n window.domReadyEventListeners = [];\n }\n console.log(\"rsc\", document.readyState, count);\n});\n\nconsole.log(\"zl\");\ndocument.querySelector(\"html\").classList.remove(\"jsshow\");\n"], "mappings": "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ACA,CACI,YAAe,oBACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,MACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,MACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,MACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,WACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,WACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,OACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,OACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,OACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,gBACf,QAAW,CACP,CAEA,CACJ,CACJ,EACA,CACI,YAAe,gBACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,iCACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,iCACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,aACf,QAAW,CACP,CAEA,CACJ,CACJ,EACA,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,UACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,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", "names": ["main", "global", "module", "isWorker", "workerSize", "canUseWorker", "canUsePaths", "canDrawBitmap", "canvas", "ctx", "bitmap", "noop", "promise", "func", "ModulePromise", "Prom", "bitmapMapper", "skipTransform", "map", "raf", "TIME", "frame", "cancel", "frames", "lastFrameTime", "cb", "id", "onFrame", "time", "timer", "getWorker", "worker", "prom", "resolves", "decorate", "execute", "options", "callback", "offscreen", "size", "done", "resolve", "workerDone", "msg", "code", "e", "defaults", "convert", "val", "transform", "isOk", "prop", "name", "onlyPositiveInt", "number", "randomInt", "min", "max", "toDecimal", "str", "colorsToRgb", "colors", "hexToRgb", "getOrigin", "origin", "setCanvasWindowSize", "setCanvasRectSize", "rect", "getCanvas", "zIndex", "ellipse", "context", "x", "y", "radiusX", "radiusY", "rotation", "startAngle", "endAngle", "antiClockwise", "randomPhysics", "opts", "radAngle", "radSpread", "updateFetti", "fetti", "progress", "x1", "y1", "x2", "y2", "transformPath2D", "scaleX", "scaleY", "width", "height", "matrix", "pattern", "rot", "innerRadius", "outerRadius", "spikes", "step", "animate", "fettis", "resizer", "animatingFettis", "animationFrame", "destroy", "onDone", "update", "confettiCannon", "globalOpts", "isLibCanvas", "allowResize", "hasResizeEventRegistered", "globalDisableForReducedMotion", "shouldUseWorker", "initialized", "preferLessMotion", "animationObj", "fireLocal", "particleCount", "angle", "spread", "startVelocity", "decay", "gravity", "drift", "ticks", "shapes", "scalar", "flat", "temp", "startX", "startY", "fire", "disableForReducedMotion", "onResize", "obj", "defaultFire", "getDefaultFire", "pathString", "pathMatrix", "path2d", "t1", "t2", "shapeFromPath", "pathData", "path", "tempCanvas", "tempCtx", "maxSize", "minX", "minY", "maxX", "maxY", "maxDesiredSize", "scale", "shapeFromText", "textData", "text", "color", "fontFamily", "fontSize", "font", "padding", "reload", "withQuerystring", "forEach", "arr", "callback", "localText", "key", "asLowercase", "configId", "fallbacks", "pluralityAmount", "keys", "value", "localLanguage", "i", "base", "configKey", "urlParam", "name", "results", "cleanEncodeURIComponent", "s", "el", "addEvents", "a", "href", "stopAll", "forEach", "iel", "e", "form", "target", "toggle", "element", "removeClass", "inp", "addClass", "clone", "o", "selfHost", "briefTimer", "addBrief", "msg", "data", "large", "confetti", "brief", "body", "throwConfetti", "content", "text", "addOverlayMessage", "msg", "extra", "confetti", "body", "overlay", "throwConfetti", "addClass", "e", "hideMessageOverlay", "stopAll", "content", "removeClass", "afToken", "scrollToElement", "el", "p", "isInt", "value", "isFloat", "isNullOrWhiteSpace", "getDomPath", "nodeName", "i", "elem", "singularE", "s", "v", "format", "pretty", "em", "n", "toComma", "hasClass", "className", "addClass", "forEach", "iel", "removeClass", "addEvent", "path", "event", "func", "addEvents", "addClassName", "withAddClass", "toggleClass", "addClasses", "els", "removeClasses", "stopAll", "hasAny", "arr", "value", "key", "first", "isVisible", "elem", "isValidEmail", "email", "unique", "a", "index", "array", "objectLargestPropertyValue", "l", "prop", "max", "obj", "i", "removeElement", "el", "getWidth", "getHeight", "getOffset", "rect", "getRndInteger", "min", "prettyDate", "d", "throwConfetti", "getCookie", "name", "v", "setCookie", "days", "escapeHTML", "str", "wrap", "urlEncode", "output", "s", "replaceTags", "element", "replacements", "replaceInHTML", "html", "tag", "regex", "child", "text", "parseTimeStampCookie", "u", "timeStamps", "parsed", "lc", "forEach", "ts", "showTimestamps", "exi", "customLog", "ex", "data", "heading", "_a", "pre", "e", "t", "refreshParticipantBaseData", "sendQuantity", "quantity", "ev", "handleResponse", "url", "result", "callback", "postdata", "source", "eventExtra", "isFetch", "goal", "postdataLength", "showApiError", "body", "div", "addClass", "showApiMessages", "removeClass", "scrollToElement", "submit", "handleError", "msg", "error", "genericError", "httpr", "savedTimes", "fetchAvailable", "aft", "afToken", "method", "responseUrl", "headers", "response", "request", "daysInMonth", "month", "year", "isoDate", "p", "parsedDate", "toComma", "n", "pretty", "toPoint", "validNumber", "monthsTotal", "b", "as", "bs", "x", "daysBetween", "d1", "d2", "adjustDate", "dateStr", "type", "day", "date", "location", "document", "scriptEl", "endpoint", "defaultEndpoint", "hasDomainLanguage", "onIgnoredEvent", "reason", "options", "trigger", "eventName", "payload", "href", "referrer", "language", "propAttributes", "props", "attribute", "propKey", "propValue", "xhr", "queue", "lastPage", "page", "his", "originalPushState", "handleVisibilityChange", "getLinkEl", "link", "isLink", "shouldFollowLink", "event", "targetsCurrentWindow", "isRegularClick", "MIDDLE_MOUSE_BUTTON", "handleLinkClickEvent", "hrefWithoutQuery", "isElementOrParentTagged", "isOutboundLink", "sendLinkClickEvent", "isDownloadToTrack", "eventAttrs", "followedLink", "followLink", "defaultFileTypes", "fileTypesAttr", "addFileTypesAttr", "fileTypesToTrack", "fileType", "fileTypeToTrack", "getTaggedEventAttributes", "htmlElement", "taggedElement", "isTagged", "classList", "matchList", "handleTaggedFormSubmitEvent", "form", "formSubmitted", "submitForm", "isForm", "PARENTS_TO_SEARCH_LIMIT", "handleTaggedElementClickEvent", "clicked", "clickedLink", "parentsChecked", "allSVGs", "DaysUI", "container", "today", "principalName", "__publicField", "c", "start", "end", "currentDate", "endDate", "disabled", "input", "title", "field", "cleanValue", "dotCount", "commaCount", "lastSeparatorPos", "lastDotPos", "lastCommaPos", "num", "toAPI", "addBrief", "localLanguage", "savedTimes", "campaignDropdowns", "toAPI", "data", "options", "forEach", "c", "includePlayInTrophyCalculations", "empty", "el", "urlParam", "table", "s", "n", "r", "addEvent", "e", "text", "campaign", "post", "stopAll", "type", "from", "to", "url", "drawIPiTC", "httpr", "drawData", "drawForm", "removeClass", "regions", "municipalities", "groups", "companies", "potentialCount", "sumSeatDays", "addOverlayMessage", "createOptions", "ex", "showApiError", "genericError", "download", "filename", "file", "a", "groupCollectionId", "addBrief", "includeObsolete", "_a", "customLog", "_b", "resets", "settings", "emails", "mail", "isValidEmail", "afToken", "response", "error", "region", "municipality", "group", "company", "message", "potentials", "rnd", "winningSD", "currentSeatDays", "winner", "i", "date", "extraInfo", "apiData", "unsavedChanges", "months", "Days", "validNumber", "co2factor", "krSavedFactor", "daysSavedFactor", "trophyNames", "trophyConfirm", "passiveTrophies", "value", "index", "mfTrophyOverride", "trophyFormatPNG", "playStatsEls", "daysLoaded", "profileLoaded", "teamDataShown", "unsavedChanges", "text", "_a", "_b", "_c", "_d", "_e", "_f", "el", "svg", "elf", "allSVGs", "genericError", "localText", "campaignCode", "urlParam", "teamCode", "redirect", "customLog", "login", "signup", "forEach", "action", "showProfileMessages", "showTeams", "playStats", "getCookie", "setCookie", "ps", "addEvent", "e", "setPlay", "principalsSelect", "toAPI", "principals", "groupLabel", "options", "optgroup", "value", "option", "days", "daysManager", "DaysUI", "ids", "cookie", "id", "hasClass", "removeClass", "addClass", "showApiError", "error", "internal", "extra", "addOverlayMessage", "showApiMessages", "messages", "msg", "SeatsText", "c", "drawTeamRoster", "t", "partipantEmail", "includeChartData", "campaign", "campaignById", "mailto", "me", "trophiesDisabled", "teamRoster", "dynamicSortMultiple", "yellow", "green", "yScore", "gScore", "p", "i", "pd", "pk", "ccId", "teamInfo", "meInfo", "isMe", "singularE", "toComma", "drawTrophies", "personalChartData", "teamChartData", "start", "end", "campaignLength", "daysBetween", "lbl", "serDay", "serPlayDay", "maxLength", "startIndex", "currentDate", "dayInWeek", "Days", "v", "apiData", "isFloat", "hasTrophies", "labels", "label", "loop", "trophyNames", "_", "l", "type", "grey", "newTrophy", "mfTrophyOverride", "trophyFormatPNG", "trophyConfirm", "drawPersonalChart", "barData", "lineData", "bEl", "lEl", "drawBarchart", "savedHeights", "maintainHeight", "restore", "key", "drawTeamData", "teamData", "teamdataContainer", "isCaptain", "dr", "chartId", "maxWidth", "intro", "introEl", "status", "visualProfile", "escapeHTML", "stats", "fitWidthSingle", "fitWidths", "addEvents", "stopAll", "info", "campaignId", "nt", "saveTrophies", "addBrief", "s", "html", "div", "initForms", "activateToggles", "container", "childSelector", "child", "fontSize", "overflow", "scaled", "getTogglePath", "toggle", "path", "getDomPath", "togglers", "AgeInMinutes", "d1", "addCode", "code", "postData", "key", "tcParts", "datePart", "expired", "customLog", "warning", "message", "source", "lineno", "colno", "error", "printError", "err", "level", "args", "a", "isElement", "o", "errors", "html", "i", "escapeHTML", "showProfileMessages", "action", "campaignCode", "teamCode", "toAPI", "data", "apiData", "addDays", "pre", "invitationMessages", "forEach", "el", "addClass", "invitationEls", "addEvents", "e", "p", "post", "removeElement", "refreshParticipantBaseData", "reload", "yesButton", "participantNameEl", "removeClass", "els", "_a", "replaceTags", "profileOwnedTeamsContainer", "s", "partipantEmail", "t", "_b", "dr", "drawTeamRoster", "cls", "singularE", "parsedDate", "messages", "showOnPublicPrepaid", "hasPublic", "hasPrepaid", "hasPaid", "hasSeats", "isOnTeam", "activeCC1", "c", "showTeamData", "profileLoaded", "daysLoaded", "teamDataShown", "updateTrophies", "participantEmail", "j", "activateToggles", "stars", "pastParticipations", "participation", "starId", "prettyDate", "captainContent", "r", "stopAll", "ppEl", "pastParticipationsContent", "campaignIds", "item", "hde", "art", "td", "first", "showCalendar", "addDays", "data", "apiData", "dates", "showCalendar", "daysLoaded", "profileLoaded", "teamDataShown", "updateTrophies", "drawTeamData", "showTeams", "action", "toAPI", "s", "forEach", "el", "options", "id", "zip", "municipalityOptions", "item", "getApiData", "campaigns", "teamIntro", "teamIntroDiv", "anySeats", "anyPaidSeats", "payable", "c", "SeatsText", "cos", "drawTeams", "zips", "localText", "getSizeHTML", "campaign", "teamId", "sizeHTML", "ccId", "teams", "seatsLeft", "team", "currentSize", "first", "i", "updateCaptain", "form", "captains", "currentCaptain", "captainOptions", "v", "isValidEmail", "addDataList", "dls", "dl", "openTeamId", "teamsEl", "maintainHeight", "headingShownForId", "campaignColors", "heading", "prettyDate", "drawTeam", "hasAny", "campaignsHTML", "selectedCampaign", "campaignsWithSeats", "selectedGroupId", "notInGroup", "groupLabel", "groupSelect", "g", "workplaceValue", "teamsShown", "daysDiff", "daysDuration", "oldCombinedEl", "addEvents", "e", "campaignId", "seats", "length", "days", "toPoint", "kms", "addBrief", "reloadOK", "campaignSelect", "campaignById", "sizeEl", "groupEl", "companyEl", "workplaceLabel", "notInGroupText", "groupLabelText", "workplaceLabelText", "workplacePlaceholderText", "addOverlayMessage", "stopAll", "groupOptions", "addClass", "removeClass", "triggerSel", "z", "k", "muni", "visible", "getBaseProfile", "profile", "match", "refreshParticipantBaseData", "messages", "validateTeam", "showApiMessages", "additions", "captainSelect", "captain", "oldCaptain", "deletions", "inputs", "hasClass", "dv", "unique", "ignoredAdditions", "filteredAdditions", "filteredDeletions", "participant", "objectLargestPropertyValue", "activateToggles", "initForms", "validateTeam", "team", "messages", "campaign", "campaignById", "groupValue", "companyValue", "isCreate", "selectedCampaign", "isInt", "cvLC", "m", "count", "localText", "captainSelector", "isNullOrWhiteSpace", "notInGroup", "forEach", "el", "v", "isValidEmail", "drawTeam", "asOwner", "heading", "col", "openTeamId", "teamsEl", "selectedGroup", "ccId", "groupLabel", "groupSelect", "g", "workplaceValue", "teamCodeLink", "s", "escapeHTML", "municipalityOptions", "getSizeHTML", "e", "span", "addOverlayMessage", "stopAll", "captainOptions", "memberInputs", "teamEl", "captainSelect", "j", "resendInvitation", "resendEl", "genericError", "i", "membersEl", "inp", "showCalendar", "data", "date", "bikedays", "dates", "isoDate", "apiData", "daysInMonth", "monthsTotal", "showPlay", "c", "sym", "eym", "lym", "showMonth", "drawMonth", "ym", "months", "dow", "firstDay", "lastDay", "inputDate", "toComma", "pv", "padCells", "options", "optionDate", "optionText", "setSelectKM", "removeClass", "day", "addEvent", "val", "li", "addClass", "addEvents", "o", "n", "isPlay", "hasClass", "toPoint", "validNumber", "savebikedays", "unsavedChanges", "saveCalendar", "isNextDay", "d1", "d2", "hours", "daysDiff", "daysDuration", "saveCalendar", "callback", "_a", "_b", "showApiError", "localText", "changedDays", "hasChanges", "inputDays", "inputPlayDays", "dates", "d", "date", "pd", "apiDays", "apiData", "apiDay", "toPoint", "toAPI", "data", "forEach", "el", "removeClass", "unsavedChanges", "addBrief", "setSelectKM", "updateTrophies", "o", "optionDate", "dText", "c", "parsedDate", "key", "index", "dist", "pdist", "currentDist", "isNextDay", "newTrophies", "td", "all", "ps", "i", "enabledTrophies", "passiveTrophies", "typeId", "newTrophy", "saveTrophies", "drawTeamData", "trophyData", "totalTrophies", "removedTrophies", "t", "elt", "addClass", "callUpdate", "addedTypes", "trophyNames", "campaignById", "pt", "em", "j", "participant", "ci", "newTeamDataTr", "k", "participantTrophy", "campaignId", "reloadOK", "count", "customLog", "action", "postData", "noAuth", "source", "eventExtra", "url", "httpr", "addOverlayMessage", "genericError", "ex", "getApiData", "refresh", "id", "first", "chartColors", "lineConfig", "barConfig", "setSeriesColors", "series", "colorOffset", "colorIndex", "sumSeries", "series", "ser", "arr", "last", "e", "i", "isFloat", "drawBarchart", "el", "labels", "acc", "stacked", "colorOffset", "responsive", "setSeriesColors", "config", "clone", "barConfig", "data", "responsiveConfig", "elements", "invalidListener", "scrollToElement", "prefillEmail", "urlParam", "forEach", "field", "initForms", "v", "p", "pr", "isInt", "toComma", "toPoint", "removeClass", "addClass", "forms", "addEvents", "form", "hasClass", "pw", "newpw", "pwe", "stopAll", "sum", "val", "httpr", "ex", "showApiError", "genericError", "addClasses", "removeClasses", "dto", "formEl", "toAPI", "activeResult", "webPsupport", "callback", "webP", "hasWebP", "skipSteppingSize", "img", "_a", "isVisible", "mode", "src", "isPNG", "height", "width", "uw", "allowSizeSteps", "pe", "stepSize", "steppedWidth", "steppedHeight", "parent", "ticking", "updateScrollY", "s", "f", "removals", "cls", "brgr", "e", "body", "a", "parseTimeStampCookie", "el", "localizeElements", "chooseLanguage", "r", "addEvents", "stopAll", "setCookie", "addClass", "switchLanguage", "switches", "currentLanguage", "getCookie", "forEach", "setLang", "removeClass", "refs", "script", "someshare", "url", "canonical", "sh", "svg", "mega", "hasClass", "li", "src", "activateToggles", "addEvent", "toggleClass", "hideMenu", "showMenu", "pop", "popKey", "today", "lastShown", "dialog", "delay", "showNextLoadMessages", "gtag", "w", "d", "l", "i", "j", "dl", "setDataScale", "vwVal", "max", "vw", "elW", "scale", "localText", "type", "nlBriefMessages", "nlMessages", "addBrief", "addOverlayMessage", "toggle", "href", "solo", "elx", "mapData", "map", "lastMarkerId", "extraR", "extraL", "extraT", "smallWidth", "centerMapX", "centerMapY", "defaultZoom", "defaultZoomSmall", "disableMapTable", "narrowMap", "ts", "qsid", "urlParam", "parts", "httpr", "data", "t", "stats", "drawBar", "dict", "rs", "key", "v", "sortByColumn", "forEach", "r", "CustomMarker", "latlng", "map", "args", "self", "div", "e", "el", "hasClass", "addClass", "$map", "$mapinfo", "to", "getOffset", "mo", "getWidth", "getHeight", "panX", "panY", "extraL", "extraR", "extraT", "lastMarkerId", "$lm", "removeClass", "item", "mapData", "scrollToElement", "stopAll", "s", "lastGroup", "lastCompany", "wp", "toComma", "panes", "point", "request", "mapOptions", "smallWidth", "centerMapX", "centerMapY", "mapStyles", "size", "cseUrl", "q", "searchResult", "addEvent", "showSearchResults", "start", "showItems", "ex", "showApiError", "genericError", "moreResults", "html", "tableData", "statsKey", "favsKey", "maxFavorites", "miniView", "isPersonal", "statsfilterId", "urlParam", "initCSR", "initStats", "initPersonalStats", "sf", "stattable", "addClass", "id", "f", "ex", "httpr", "data", "apiData", "by", "filter", "sort", "byEl", "sortEl", "groupText", "localText", "workplaceText", "sr", "e", "showStatsTable", "setFilterData", "sendEvent", "showFavTable", "removeClass", "showApiError", "genericError", "stopAll", "csr", "cid", "favStats", "loadStatRows", "getVSHtml", "addOverlayMessage", "show", "showEl", "byGroupEl", "showGroupEl", "v", "addFavorite", "favs", "getFavorites", "newFavsString", "addBrief", "removeFavorite", "newFavs", "forEach", "arr", "o", "j", "i", "p", "fa", "type", "ts", "t", "sd", "sk", "psd", "psk", "gc", "c", "favEl", "b64favs", "s", "getStatsLink", "r", "itag", "drawBar", "tableData", "extraE", "share", "toggle", "setDataScale", "addEvents", "toComma", "simple", "hasClass", "n", "escapeHTML", "cleanEncodeURIComponent", "selfHost", "co2factor", "vs", "fs", "allSVGs", "daysSavedFactor", "krSavedFactor", "el", "event", "setFilterData", "by", "isPersonal", "dl", "s", "dict", "apiData", "statsKey", "forEach", "r", "key", "show", "parts", "sortByColumn", "a", "index", "order", "sortFunction", "b", "c", "d", "dynamicSort", "property", "sortOrder", "dynamicSortMultiple", "props", "obj1", "obj2", "i", "result", "numberOfProperties", "showStatsTable", "all", "isPersonal", "showPersonalStatsTable", "showTeamStatsTable", "rs", "show", "by", "filter", "searchLinks", "filterExact", "escapeHTML", "localText", "apiData", "statsKey", "removeClass", "addClass", "tableData", "sort", "loc", "urlParam", "hash", "useHash", "ids", "dict", "key", "v", "klc", "forEach", "id", "t", "sd", "sk", "psd", "psk", "gc", "c", "_a", "_b", "sortByColumn", "max", "simple", "hasClass", "miniView", "s", "table", "i", "r", "toComma", "linkName", "itag", "name", "drawBar", "extraE", "co2factor", "statinfo", "getFavorites", "getStatsLink", "linkTeamsLatest", "linkTeamsMost", "ths", "el", "a", "e", "o", "sendEvent", "stopAll", "addEvents", "ds", "sw", "iterator", "node", "tr", "addFavorite", "showAll", "addBrief", "p", "notext", "extra", "graphic", "height", "scale", "count", "l"] }