function QuickNgRepeat(n,t,i,r){function e(n){var t,i=typeof n;return"object"==i&&null!==n?"function"==typeof(t=n.$$hashKey)?t=n.$$hashKey():void 0===t&&(t=n.$$hashKey=h()):t=n,i+":"+t}function s(n){return n&&n.document&&n.location&&n.alert&&n.setInterval}function h(){for(var t,n=u.length;n;){if(n--,t=u[n].charCodeAt(0),57==t)return u[n]="A",u.join("");if(90!=t)return u[n]=String.fromCharCode(t+1),u.join("");u[n]="0"}return u.unshift("0"),u.join("")}function c(n){if(null==n||s(n))return!1;var t=n.length;return!(1!==n.nodeType||!t)||angular.isArray(n)||!angular.isFunction(n)&&(0===t||"number"==typeof t&&t>0&&t-1 in n)}var o="$$NG_REMOVED",f="err",u=["0","0","0"],l=window.list_id=function(){var n=0;return function(){return"list_"+ ++n}}();return{transclude:"element",priority:1e3,terminal:!0,compile:function(u,s,h){return function(u,s,a){var k,tt,p,it,rt,d,ut,g,w,nt=a.quickNgRepeat,v=nt.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),b={$id:e},y,ft;if(!v)throw f("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",nt);if(d=v[1],ut=v[2],k=v[4],k?(tt=n(k),p=function(n,t,i){return w&&(b[w]=n),b[g]=t,b.$index=i,tt(u,b)}):(it=function(n,t){return e(t)},rt=function(n){return n}),v=d.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/),!v)throw f("iidexp","'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",d);g=v[3]||v[1];w=v[2];y={};ft=a.quickRepeatList||l();u.$watch(ut,r[ft]=function(n){var e,ft,k,ot,l,a,et,b,v,r,d=s[0],tt={},ut=[];if(c(n))v=n,p=p||it;else{p=p||rt;v=[];for(a in n)n.hasOwnProperty(a)&&"$"!=a.charAt(0)&&v.push(a);v.sort()}for(ot=v.length,ft=ut.length=v.length,e=0;e<ft;e++)if(a=n===v?e:v[e],et=n[a],b=p(a,et,e),y.hasOwnProperty(b))r=y[b],delete y[b],tt[b]=r,ut[e]=r;else{if(tt.hasOwnProperty(b))throw angular.forEach(ut,function(n){n&&n.startNode&&(y[n.id]=n)}),f("dupes","Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}",nt,b);ut[e]={id:b};tt[b]=!1}for(a in y)y.hasOwnProperty(a)&&(r=y[a],t.leave(r.elements),angular.forEach(r.elements,function(n){n[o]=!0}),r.scope.$destroy());for(e=0,ft=v.length;e<ft;e++){if(a=n===v?e:v[e],et=n[a],r=ut[e],r.startNode){l=r.scope;k=d;do k=k.nextSibling;while(k&&k[o]);r.startNode==k||t.move(r.elements,null,angular.element(d));d=r.endNode}else l=u.$new();l[g]=et;w&&(l[w]=a);l.$index=e;l.$first=0===e;l.$last=e===ot-1;l.$middle=!(l.$first||l.$last);l.$odd=!(l.$even=e%2==0);r.startNode||(h(l,function(n){t.enter(n,null,angular.element(d));d=n;r.scope=l;r.startNode=n[0];r.elements=n;r.endNode=n[n.length-1];tt[r.id]=r}),"$digest"!==i.$$phase&&"$digest"!==l.$$phase&&l.$digest())}y=tt})}}}}function deviceDetection(){function n(){return/ipad/i.test(navigator.userAgent)}return{isIpad:n}}var lang,_gameSettings;angular.module("rikstoto.clients.js.core.components.templates",[]).run(["$templateCache",function(n){n.put("core/components/leg-menu/ng.leg-menu.tpl.html",'<div class="leg-menu"><table cellspacing="2" class="base-tbl leg-menu-tbl" ng-class="{\'races-only\': !legMenu.isLegSelectorVisible()}"><tbody ng-class="{\'races-only\': !legMenu.isLegSelectorVisible()}"><tr ng-if="legMenu.isLegSelectorVisible()" class="leg-menu-tbl__legs" ng-cloak><th>Avd<\/th><td ng-class="{selected: item.isSelected, selectable: item.legAvailable && !legMenu.isChanging }" ng-click="legMenu.validateAndSelectRace(item.race)" ng-repeat="item in legMenu.viewModel.items track by item.number"><span>{{item.legNumber}}<\/span><\/td><td class="leg-menu-tbl__filler">&nbsp;<\/td><\/tr><tr class="leg-menu-tbl__races" ng-cloak><th>Løp<\/th><td ng-class="{selected: item.isSelected, selectable: item.legAvailable  && !legMenu.isChangingl, openForBet: item.openForBet }" ng-click="legMenu.validateAndSelectRace(item.race)" ng-repeat="item in legMenu.viewModel.items track by item.number"><span>{{::item.number}}<\/span><\/td><td class="leg-menu-tbl__filler">&nbsp;<\/td><\/tr><\/tbody><\/table><\/div>');n.put("core/components/editable-select/ng.editable-select.tpl.html",'<div class="editable-select"><div class="editable-select__manual-input-wrapper"><input autocomplete="off" type="text" ng-readonly="editableSelect.readonly()" ng-blur="editableSelect.hideOptions($event)" ng-change="editableSelect.updateSelectedItem()" ng-keydown="editableSelect.handleKeyPress($event)" ng-click="editableSelect.toggleOptions($event)" ng-model="editableSelect.options.currentValue" class="editable-select__manual-input"><\/div><div class="editable-select__dropdown-trigger" src="" ng-click="editableSelect.toggleOptions($event)"><\/div><div class="editable-select__options" ng-show="editableSelect.optionsVisible"><ul><li class="option" ng-repeat="item in editableSelect.items" ng-click="editableSelect.select(item)" ng-class="{\'selected\': editableSelect.isSelected(item) }">{{item.name}}<\/li><\/ul><\/div><\/div>');n.put("core/components/tab-menu/ng.tab-menu.tpl.html",'<ul class="tab-menu__body"><li class="horizontal-list__item tab-menu__item" ng-class="{selected: menuItem.selected }" ng-repeat="menuItem in tabMenu.menu.items | orderBy:\'order\'" ng-click="tabMenu.selectItem({item: menuItem})"><a href="" class="tab-menu__item-link" ng-click="tabMenu.noop" title="{{menuItem.name}}"><span ng-if="menuItem.shortName" class="small-text">{{menuItem.shortName}}<\/span> <span ng-if="menuItem.shortName" class="normal-text">{{menuItem.name}}<\/span> <span ng-if="!menuItem.shortName">{{menuItem.name}}<\/span><\/a><\/li><\/ul>')}]);angular.module("rikstoto.clients.js.gamewindow.components.templates",[]).run(["$templateCache",function(n){n.put("gamewindow/components/bet-controls/ng.bet-controls.tpl.html",'<div class="bet-controls clearfix"><bet-cost price-info="betControls.state.priceInfo" bet-data="betControls.betData()" bet-type-code="betControls.betTypeCode" bet-method="betControls.betMethod" on-bet-cost-selected="betControls.onBetCostSelect(item, maxPrice)"><\/bet-cost><jackpot-info selected-race="betControls.selectedRace" bet-type-code="betControls.betTypeCode" race-day="betControls.raceDay"><\/jackpot-info><bet-actions ticket="betControls.state.ticket" on-reset="betControls.onReset()" bet-type-code="betControls.betTypeCode" bet-method="betControls.betMethod" race-day-key="betControls.raceDayKey" bet-data="betControls.betData()" on-all-in-toggled="betControls.onAllInToggled()" selected-race="betControls.selectedRace" selected-leg="betControls.selectedLeg" on-perform-buy="betControls.onPerformBuy()" start-time="betControls.startTime"><\/bet-actions><\/div>');n.put("gamewindow/components/game-info/ng.game-info.tpl.html",'<div class="game-info"><header class="game-info__header"><div class="game-info__header__product-info">{{gameInfo.legNameText}}, <span ng-switch="gameInfo.legDetails.betTypeCode.isSingleLegGame()"><span ng-switch-when="true">Løp {{gameInfo.selectedRace.number}}<\/span> <span ng-switch-when="false">Avd. {{gameInfo.selectedLeg.legNo}}<\/span><\/span><\/div><div class="game-info__header__refresh-info" ng-click="gameInfo.forceUpdate()" ng-class="{ updating: gameInfo.isUpdating }"><span class="game-info__header__refresh-info__text">Oppdatert: {{gameInfo.legDetails.details.oddsLastUpdated | moment:\'DD.MM HH:mm\'}}<\/span> <span class="btn--link-lookalike gray game-info__header__refresh-button"><i ng-class="{ rotating: gameInfo.isUpdating }"><\/i><\/span><\/div><\/header><div class="game-info__content"><ul class="horizontal-list"><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.startTime">Forventet start {{gameInfo.selectedRace.startTime | moment:\'HH:mm\'}}<\/li><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.distance">{{gameInfo.selectedRace.distance}}m<\/li><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.startMethod.presentAsText()">{{gameInfo.selectedRace.startMethod.presentAsText()}}<\/li><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.raceForm.presentAsText()">{{gameInfo.selectedRace.raceForm.presentAsText()}}<\/li><li class="horizontal-list__item" ng-if="gameInfo.legDetails.details">Omsetning:&nbsp;<span ng-if="gameInfo.additionalInvestmentbetTypeCodes.length < 2">{{gameInfo.getInvestmentForBetType(gameInfo.betTypeCode)}}<\/span> <span ng-if="gameInfo.additionalInvestmentbetTypeCodes.length === 1">&nbsp;(<span ng-repeat="betTypeCode in gameInfo.additionalInvestmentbetTypeCodes track by betTypeCode.code"> {{betTypeCode.presentAsText()}}: {{gameInfo.getInvestmentForBetType(betTypeCode)}} <\/span>) <\/span><span ng-if="gameInfo.additionalInvestmentbetTypeCodes.length > 1"><span ng-repeat="betTypeCode in gameInfo.additionalInvestmentbetTypeCodes track by betTypeCode.code">{{betTypeCode.presentAsText()}}: {{gameInfo.getInvestmentForBetType(betTypeCode)}}{{$last ? \'\' : \', \'}}<\/span><\/span><\/li><\/ul><\/div><\/div>');n.put("gamewindow/components/program-info/ng.program-info.tpl.html",'<div class="program-info" ng-class="{\'no-tab-menu\': !programInfo.displayTabMenu()}"><tab-menu class="tab-menu--inverted" ng-if="programInfo.displayTabMenu()" menu="programInfo.tabs" select-item="programInfo.activate(item)" ng-class="{\'compact\': programInfo.tabs.items.length > 4}"><\/tab-menu><load-directive class="program-info__active-tab__content" directive-element-name="{{programInfo.activeView}}" bet-type-code="programInfo.betTypeCode" selected-leg="programInfo.selectedLeg" selected-race="programInfo.selectedRace" selected-raceday="programInfo.selectedRaceday" can-select-scratched="programInfo.canSelectScratched" ticket="programInfo.ticket" default-sort="programInfo.defaultSort" default-sort-direction="programInfo.defaultSortDirection" on-select="programInfo.onSelect(start, leg)" hide-tooltip="programInfo.hideTooltip"><\/load-directive><\/div>');n.put("gamewindow/components/raceday-header/ng.raceday-header.tpl.html",'<header class="horizontal-list__header raceday-header"><h2 class="horizontal-list__header__title raceday-header__title ng-binding show-lg">{{racedayHeader.displayName}}&nbsp;{{racedayHeader.date | moment:\'dddd DD.MM\'}}<\/h2><h2 class="horizontal-list__header__title raceday-header__title ng-binding show-sm">{{racedayHeader.displayName}}&nbsp;{{racedayHeader.date | moment:\'DD.MM\'}}<\/h2><span class="raceday-header__corner"><\/span><\/header>');n.put("gamewindow/components/ticket-view/ng.user-markings.tpl.html",'<div class="user-markings" ng-class="userMarkings.masterClass"><load-directive ng-if="userMarkings.status.isReady" directive-element-name="{{userMarkings.activeView}}" races="userMarkings.races" legs="userMarkings.legs" selected-leg="userMarkings.selectedLeg" selected-race="userMarkings.selectedRace" price-info="userMarkings.priceInfo" ticket="userMarkings.ticket" status="userMarkings.status" purchase-click-lyntoto="userMarkings.purchaseClickLyntoto(price)" purchase-click-multiday="userMarkings.purchaseClickMultiday(days,price)" bet-type-code="userMarkings.betTypeCode" can-select-no-start="userMarkings.canSelectNoStart" can-select-scratched="userMarkings.canSelectScratched" show-dd-indicators="userMarkings.showDdIndicators" on-select="userMarkings.onSelect(start, leg)" user-markings="userMarkings"><\/load-directive><\/div>');n.put("gamewindow/components/bet-controls/bet-cost/ng.bet-cost.tpl.html",'<div class="bet-cost clearfix"><div ng-if="!betCost.displaySpecialQPlusLynbanker()" ng-class="{ \'bet-cost__amount-selector--readonly\': betCost.readOnly() }"><div class="bet-cost__number-of-rows" ng-if="!betCost.isLynbanker()"><label>Ant. rekker:&nbsp;<span class="rows">{{betCost.betData().getNumberOfRows()}}<\/span><\/label><\/div><div class="bet-cost__amount-selector" ng-if="betCost.isReady()"><label class="float-left" ng-class="{\'closed-for-bet\': betCost.closedForBetting}" ng-bind-html="betCost.amountLabel()"><\/label><editable-select ng-if="!betCost.rowpriceReadonly" class="select-list" readonly="betCost.readOnly()" items="betCost.priceInfo.displayItems" selected-item="betCost.priceInfo.defaultSelection || betCost.priceInfo.defaultStep" on-select="betCost.onSelect(item)"><\/editable-select><span ng-if="betCost.rowpriceReadonly">{{(betCost.priceInfo.defaultSelection || betCost.priceInfo.defaultStep).name}}<\/span><!--<select ng-model="betCost.options.defaultRowPrice.value" ng-options="step.value as step.name for step in betCost.options.steps"><\/select>--><\/div><div class="bet-cost__ticket-sum" ng-class="{ \'color-red\': !betCost.priceIsValid }" ng-if="!betCost.isLynbanker()"><label>Sum<\/label><span class="amount">{{betCost.getEstimatedPrice() | currency}}<\/span><span class="fee-info" ng-if="betCost.includeFee">(inkl. avgift)<\/span><div ng-if="!betCost.priceIsValid">Totalpris er for høy (maks {{ betCost.maxAllowedCost / 100 | currency }})<\/div><\/div><div ng-if="betCost.isLynbanker()" class="bet-cost__summary"><div class="bet-cost__number-of-rows"><label>Ant. rekker:&nbsp;<span class="rows">{{betCost.betData().getNumberOfRows()}}<\/span><\/label><\/div><div class="bet-cost__ticket-sum" ng-class="{ \'color-red\': !betCost.priceIsValid }"><label>Verdi markerte hester<\/label><span class="amount">{{betCost.getEstimatedPrice() | currency}}<\/span><span class="fee-info" ng-if="betCost.includeFee">(inkl. avgift)<\/span><\/div><div class="bet-cost__summary-error" ng-if="!betCost.priceIsValid">Totalpris er for høy (maks {{ betCost.maxAllowedCost / 100 | currency }})<\/div><\/div><\/div><div ng-if="betCost.displaySpecialQPlusLynbanker()" class="bet-cost__qplus-lynbanker"><div class="bet-cost__rowprice-selector" ng-if="betCost.isReady()"><label class="float-left" ng-if="!betCost.closedforBet">Rekkepris:<\/label><label class="float-left closed-for-bet" ng-if="betCost.closedforBet">Stengt for spill<br>rekkepris må tastes manuelt<\/label><editable-select class="select-list" readonly="betCost.readOnly()" items="betCost.priceInfo.displayItems" selected-item="betCost.priceInfo.defaultSelection" on-select="betCost.onSelectRowPrice(item)"><\/editable-select><!--<select ng-model="betCost.options.defaultRowPrice.value" ng-options="step.value as step.name for step in betCost.options.steps"><\/select>--><\/div><div class="bet-cost__maxprice-selector" ng-if="betCost.isReady()"><label class="float-left" ng-if="!betCost.closedForBet">Velg maksbeløp:<\/label><label class="float-left closed-for-bet" ng-if="betCost.closedforBet">Stengt for spill<br>rekkepris må tastes manuelt<\/label><editable-select class="select-list" readonly="betCost.readOnly()" items="betCost.priceInfo.stepDisplayItems" selected-item="betCost.priceInfo.defaultStep" on-select="betCost.onSelectMaxPrice(item)"><\/editable-select><!--<select ng-model="betCost.options.defaultRowPrice.value" ng-options="step.value as step.name for step in betCost.options.steps"><\/select>--><\/div><div class="bet-cost__summary"><div class="bet-cost__number-of-rows"><label>Ant. rekker:&nbsp;<span class="rows">{{betCost.betData().getNumberOfRows()}}<\/span><\/label><\/div><div class="bet-cost__ticket-sum" ng-class="{ \'color-red\': !betCost.priceIsValid }"><label>Verdi markerte hester<\/label><span class="amount">{{betCost.getEstimatedPrice() | currency}}<\/span><span class="fee-info" ng-if="betCost.includeFee">(inkl. avgift)<\/span><\/div><div class="bet-cost__summary-error" ng-if="!betCost.priceIsValid">Totalpris er for høy (maks {{ betCost.maxAllowedCost / 100 | currency }})<\/div><\/div><\/div><\/div>');n.put("gamewindow/components/bet-controls/bet-actions/ng.bet-actions.tpl.html",'<div class="bet-actions clearfix"><div class="bet-actions__reset margin-top-bottom--md"><a href="#" ng-click="betActions.reset()">Nullstill<\/a><\/div><div class="bet-actions__reset bet-actions__v6 margin-top-bottom--md" ng-if="betActions.selectedLeg.allowAllIn"><input type="checkbox" id="allin" ng-model="betActions.betData().isAllIn" ng-change="betActions.onAllInToggled()"><label for="allin">Jeg spiller <strong>{{betActions.allInText}}<\/strong><\/label><\/div><div class="bet-actions__information margin-top-bottom--md"><img alt="Ikon for informasjon" ng-if="betActions.infoText !== \'\'" src="/Skins/default/Images/Common/information.gif" class="bet-calculator__item__non-button" tooltip-md="\'{{betActions.infoText}}\'"><\/div><div class="bet-actions__place-bet"><button type="button" ng-disabled="!betActions.selectedRace.openForBet || !betActions.selectedLeg.openForBet" ng-click="betActions.onPerformBuy()" class="btn--dark margin-top-bottom--md">Kjøp spill<\/button><\/div><\/div>');n.put("gamewindow/components/bet-controls/jackpot-info/ng.jackpot-info.tpl.html",'<div class="jackpotinfo" ng-show="jackpotInfo.showJackpotInfo"><span class="jackpotinfo__image" ng-class="jackpotInfo.jackpotType"><\/span> <span class="jackpotinfo__label">Dette spillet har<label class="jackpotinfo__label--underline" title="Spillet har ekstra penger i potten. For detaljer, se &quot;Ukens potter&quot; på forsiden">{{jackpotInfo.jackpotText}}<\/label><\/span><\/div>');n.put("gamewindow/components/bet-controls/countdown/ng.countdown.tpl.html",'<div id="qplusCountdown" class="countdown margin-left-right-bottom--md" ng-show="countdown.info.active === true"><div class="countdown__inner"><span class="countdown__inner__left"><\/span><div class="countdown__inner__body"><span class="countdown__inner__body__progressbar" ng-class="{\'countdown__inner__body__progressbar--active\': countdown.info.aboutToExpire === false && countdown.info.expired === false, \'countdown__inner__body__progressbar--inactive\': countdown.info.aboutToExpire === true || countdown.info.expired === true}" ng-style="{width: countdown.info.percentage + \'%\'}"><\/span><\/div><span class="countdown__inner__right"><\/span><\/div><div class="countdown__info"><p class="countdown__info__text--red" ng-show="countdown.info.aboutToExpire === true">{{\'game.text.gameStarting\'|translate}}<\/p><p class="countdown__info__text--blue" ng-show="countdown.info.aboutToExpire === false && countdown.info.expired === false">{{\'game.text.soonStart\'|translate}}{{countdown.info.minutesUntilStart}} minutter<\/p><\/div><\/div>');n.put("gamewindow/components/program-info/dd-odds/ng.dd-odds.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="ddOdds.setPredicate(\'dd1.startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="ddOdds.setPredicate(\'dd1.horse.displayName\');">DD-1<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="ddOdds.setPredicate(\'dd2.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="ddOdds.setPredicate(\'dd2.horse.displayName\')">DD-2<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="ddOdds.setPredicate(\'rawOdds\')">Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in ddOdds.viewModel.combinations | orderBy:ddOdds.sort.predicate:ddOdds.sort.reverse track by $index" ng-click="ddOdds.toggle(start)" ng-class="{\'selected\' : ddOdds.isToggled(start),\n                    \'scratched\': ddOdds.isScratched(start) }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.dd1.startNo"><\/td><td class="" ng-bind="start.dd1.horse.displayNameTrimmed" title="{{start.dd1.horse.displayName}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.dd2.startNo"><\/td><td class="" ng-bind="start.dd2.horse.displayNameTrimmed" title="{{start.dd2.horse.displayName}}"><\/td><td class="text-align-right ng-binding"><span>{{start.odds }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/duo-odds/ng.duo-odds.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="duoOdds.setPredicate(\'place1.startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="duoOdds.setPredicate(\'place1.horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="duoOdds.setPredicate(\'place2.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="duoOdds.setPredicate(\'place2.horse.displayName\')">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="duoOdds.setPredicate(\'oddsValue\')">Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in duoOdds.viewModel.combinations | orderBy:duoOdds.sort.predicate:duoOdds.sort.reverse" ng-click="duoOdds.toggle(start)" ng-class="{\'selected\' : duoOdds.isToggled(start) }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.place1.startNo"><\/td><td class="" ng-bind="start.place1.horse.displayNameTrimmed" title="{{start.place1.horse.displayNameTrimmed}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.place2.startNo"><\/td><td class="" ng-bind="start.place2.horse.displayNameTrimmed" title="{{start.place2.horse.displayNameTrimmed}}"><\/td><td class="text-align-right ng-binding"><span>{{start.odds }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/investment/ng.investment.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th ng-class="{sort: investment.sort.predicateName === \'startNo\', desc: investment.sort.reverse }" class="base-tbl__th horses-tbl__th program-info--startNo" ng-click="investment.setPredicate(\'startNo\');">Nr<\/th><th ng-class="{sort: investment.sort.predicateName === \'horse.displayName\', desc: investment.sort.reverse }" class="base-tbl__th horses-tbl__th program-info--horse-displayName" ng-click="investment.setPredicate(\'horse.displayName\');">Hest<\/th><th ng-class="{sort: investment.sort.predicateName === \'driver.displayName\', desc: investment.sort.reverse }" class="base-tbl__th horses-tbl__th program-info--driver-displayName" ng-click="investment.setPredicate(\'driver.displayName\')">{{investment.selectedRace.raceForm.getDriverTypeName()}}<\/th><th ng-class="{sort: investment.sort.predicateName === \'ticketPercentages\', desc: investment.sort.reverse }" class="base-tbl__th horses-tbl__th program-info--ticket-percentages" ng-click="investment.setPredicate(\'ticketPercentages\')">Inns.<\/th><th ng-class="{sort: investment.sort.predicateName === \'winOdds\', desc: investment.sort.reverse }" class="base-tbl__th horses-tbl__th program-info--ticket-winOdds" ng-click="investment.setPredicate(\'winOdds\')">Vinner<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in investment.sorted track by $index" ng-click="(start.scratched && !investment.canSelectScratched) || investment.toggle(start, investment.selectedLeg)" ng-class="{\'selected\' : start.isToggled(investment.selectedLeg),\n                    \'selectable\': (start.scratched && investment.canSelectScratched) || !start.scratched,\n                    \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right program-info--startNo" ng-bind="start.startNo"><\/td><td title="{{start.horse.displayName}}" class="program-info--horse-displayName">{{start.horse.displayNameTrimmed}}<\/td><td title="{{start.driver.displayName}}" class="program-info--driver-displayName">{{start.driver.displayNameTrimmed}}<\/td><td class="text-align-right program-info--ticket-percentages">{{start.getVMarksForBetType(investment.betTypeCode).getInvestmentPercentFormatted()}}%<\/td><td class="text-align-right ng-binding program-info--ticket-winOdds"><span>{{start.getOddsValueFormatted(\'V\') }}<\/span> <span class="direction-caret up" ng-class="start.winOddsTrendClass"><\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/form-tooltip/ng.form-tooltip.tpl.html",'<div ng-class="{ fade: animation() }" ng-show="isOpen() && globalTooltips.areOn" class="standard-tooltip"><div ng-if="!content.scratched"><p class="standard-tooltip__title">Siste løp:<\/p><table class="tooltip__p standard-tooltip__musique"><tr ng-repeat="entry in content.formRows | orderBy:entry.date:true | limitTo:5 track by entry.date"><td class="standard-tooltip__place"><span ng-switch on="entry.place"><span ng-switch-when="0"><span ng-if="entry.disqualified">{{\'game.text.disqualified.\' + entry.disqualifiedReason | translate}}<\/span> <span ng-if="entry.scratched">Strøket<\/span> <span ng-if="!entry.completed && entry.place === 0 && !entry.disqualified">Uplassert<\/span> <\/span><span ng-switch-default>{{entry.place}}. plass<\/span><\/span><\/td><td class="standard-tooltip__type">{{entry.raceType.name}}<\/td><\/tr><\/table><\/div><div ng-if="content.scratched">Strøket - nr {{content.startNo}} {{content.horse.displayName}} {{"game.text.tooltip.scratched"|translate}}<\/div><\/div>');n.put("gamewindow/components/program-info/most-played/ng.most-played.tpl.html",'<section><table class="base-tbl combinations-tbl combinations-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head combinations-tbl__head"><tr><th class="base-tbl__th combinations-tbl__th text-align-right">Nr<\/th><th class="base-tbl__th combinations-tbl__th">Markeringer<\/th><th class="base-tbl__th combinations-tbl__th text-align-right">Innsats<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row combinations-tbl__data-row" ng-click="mostPlayed.selectCombination(combo)" ng-repeat="combo in mostPlayed.selectedRace.mostPlayedCombinations track by combo.rank"><td class="base-tbl__cell--halign-right">{{combo.rank}}<\/td><td><span class="most-played__combination-mark" ng-class="{\'scratched\': mostPlayed.isScratched(start) }" ng-repeat="start in combo.combination">{{start | padLeft:2:\'0\'}}<\/span><\/td><td class="text-align-right">{{combo.totalInvestment / 100 | currency}}<\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/odds-trend/ng.odds-trend.tpl.html",'<section><!--<div tooltip ng-style="style"><\/div>--><!--Horse selection table--><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="oddsTrend.setPredicate(\'startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="oddsTrend.setPredicate(\'horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="oddsTrend.setPredicate(\'prev\')">{{oddsTrend.previousOddsUpdateTime(\'HH:mm\') || \'-\'}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="oddsTrend.setPredicate(\'current\')">{{oddsTrend.currentOddsUpdateTime(\'HH:mm\') || \'-\'}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right"><\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in oddsTrend.selectedRace.starts | filter:{active: true} | orderBy:oddsTrend.sort.predicate:oddsTrend.sort.reverse track by $index" ng-click="start.scratched || oddsTrend.selectStart(start)" ng-class="{\'selected\' : oddsTrend.isSelected(start),\n                    \'disabled\': oddsTrend.isDisabled(start) && !start.scratched,\n                    \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayName"><\/td><td class="text-align-right">{{(start.getOdds(\'QPlus\').previous.getOddsValueFormatted() || \'-\') }}<\/td><td class="text-align-right">{{start.getOdds(\'QPlus\').getOddsValueFormatted() }}<\/td><td class="text-align-right ng-binding"><span class="direction-caret up" ng-class="oddsTrend.oddsTrendClass[start.getOdds(\'QPlus\').getTrend()]"><\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/press-tips/ng.press-tips.tpl.html",'<section><div class="pressSelection-container program-info--width-full"><div class="pressSelection-slides__container" ng-style="starts.pressSelectionSlider.style" ng-if="pressTips.selectedRace.pressTips.length > 0"><table class="base-tbl pressSelection-tbl pressSelection-tbl--game-window program-info--width-full" id="pressSelection"><thead class="pressSelection-tbl__head pressSelection-thead__main"><tr><th class="press-selection__slide-button" ng-click="pressTips.prevSlide()" rowspan="2"><span class="slide-button">&lt;<\/span><\/th><th class="base-tbl__th press-selection__slide-container no-sort"><div class="press-selection__slide" ng-if="pressTips.activeSlide === $index" ng-repeat="outlet in pressTips.selectedRace.pressTips | orderBy:\'quintePoints\':true"><div class="press-selection__outlet-title">{{$index+1}}. {{outlet.author}} - {{outlet.association}}<\/div><div class="press-selection__outlet-points">{{outlet.quintePoints}} poeng&nbsp;*<\/div><\/div><\/th><th class="press-selection__slide-button" ng-click="pressTips.nextSlide()" rowspan="2"><span class="slide-button">&gt;<\/span><\/th><\/tr><\/thead><\/table><\/div><table class="base-tbl pressSelection-tbl pressSelection-tbl--game-window program-info--width-full" ng-if="pressTips.selectedRace.pressTips.length > 0"><thead class="base-tbl__head pressSelection-tbl__head"><tr><th class="base-tbl__th pressSelection-tbl__th no-sort">Nr.<\/th><th class="base-tbl__th pressSelection-tbl__th no-sort">Navn.<\/th><th class="base-tbl__th pressSelection-tbl__th text-align-right no-sort">Rangering<\/th><th class="base-tbl__th pressSelection-tbl__th text-align-right no-sort">V.Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row press-selection__selection-row" ng-repeat="start in pressTips.selectedOutlet.selection" ng-click="start.scratched || pressTips.selectStart(start)" ng-class="{\'selected\' : pressTips.isSelected(start),\n                        \'disabled\': pressTips.isDisabled(start) && !start.scratched,\n                        \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayName"><\/td><td class="text-align-right">{{$index+1}}<\/td><td class="text-align-right ng-binding">{{start.getOdds(pressTips.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="pressTips.oddsTrendClass[start.getOdds(pressTips.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><\/table><div class="pressSelection-infobox" ng-if="pressTips.selectedRace.pressTips.length > 0"><em>* Poengsummen og rangeringen er basert på journalistens treffrate på 5+<\/em><\/div><div class="pressSelection-infobox" ng-if="pressTips.selectedRace.pressTips.length == 0">Ingen pressetips tilgjengelig<\/div><\/div><\/section>');n.put("gamewindow/components/program-info/press-rank/ng.press-rank.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="syntheses"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right no-sort">Nr<\/th><th class="base-tbl__th horses-tbl__th no-sort">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right no-sort">Poeng<\/th><th class="base-tbl__th pressSelection-tbl__th text-align-right no-sort">V.Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body" ng-repeat="category in pressRank.getPressRankCategories()"><tr class="base-tbl__data-row syntheses-tbl__category-row"><td colspan="4">{{ ::category.presentAsText()}}<\/td><\/tr><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in pressRank.selectedRace.starts | filter:{ pressRank: { category: category }} | orderBy:\'pressRank.points\':true" ng-click="start.scratched || pressRank.selectStart(start)" ng-class="{\'selected\' : pressRank.isSelected(start),\n            \'disabled\': pressRank.isDisabled(start) && !start.scratched,\n            \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayName"><\/td><td class="text-align-right">{{start.pressRank.points }}<\/td><td class="text-align-right text-subtle">{{start.getOdds(pressRank.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="pressRank.oddsTrendClass[start.getOdds(pressRank.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><tfoot ng-if="starts.getSynthesesCategories().length > 0"><tr><td colspan="4" class="syntheses-tbl-infobox"><em>Rangert etter samlede pressetips. 8 p til 1.plass, 7 til 2.plass osv<\/em><\/td><\/tr><\/tfoot><\/table><div class="pressSelection-infobox" ng-if="starts.getSynthesesCategories().length == 0">Ingen pressetips tilgjengelig<\/div><\/section>');n.put("gamewindow/components/program-info/triple-odds/ng.triple-odds.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tripleOdds.setPredicate(\'place1.startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tripleOdds.setPredicate(\'place1.horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tripleOdds.setPredicate(\'place2.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tripleOdds.setPredicate(\'place2.horse.displayName\')">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tripleOdds.setPredicate(\'place3.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tripleOdds.setPredicate(\'place3.horse.displayName\')">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tripleOdds.setPredicate(\'oddsValue\')">Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in tripleOdds.viewModel.combinations | orderBy:tripleOdds.sort.predicate:tripleOdds.sort.reverse" ng-click="tripleOdds.toggle(start)" ng-class="{\'selected\' : tripleOdds.isToggled(start) }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.place1.startNo"><\/td><td class="" ng-bind="start.place1.horse.displayNameTrimmedTriple" title="{{start.place1.horse.displayName}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.place2.startNo"><\/td><td class="" ng-bind="start.place2.horse.displayNameTrimmedTriple" title="{{start.place2.horse.displayName}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.place3.startNo"><\/td><td class="" ng-bind="start.place3.horse.displayNameTrimmedTriple" title="{{start.place3.horse.displayName}}"><\/td><td class="text-align-right ng-binding"><span>{{start.odds }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/product-ad/ng.product-ad.tpl.html",'<div class="product-ad"><img src="https://www.rikstoto.no/PageFiles/106954/spillvindu_lyntoto_5pluss.gif"><\/div>');n.put("gamewindow/components/program-info/tvilling-odds/ng.tvilling-odds.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tvillingOdds.setPredicate(\'place1.startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tvillingOdds.setPredicate(\'place1.horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tvillingOdds.setPredicate(\'place2.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tvillingOdds.setPredicate(\'place2.horse.displayName\')">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tvillingOdds.setPredicate(\'oddsValue\')">Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in tvillingOdds.viewModel.combinations | orderBy:tvillingOdds.sort.predicate:tvillingOdds.sort.reverse" ng-click="tvillingOdds.toggle(start)" ng-class="{\'selected\' : tvillingOdds.isToggled(start) }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.place1.startNo"><\/td><td class="" ng-bind="start.place1.horse.displayNameTrimmed" title="{{start.place1.horse.displayNameTrimmed}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.place2.startNo"><\/td><td class="" ng-bind="start.place2.horse.displayNameTrimmed" title="{{start.place2.horse.displayNameTrimmed}}"><\/td><td class="text-align-right ng-binding"><span>{{start.odds }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/win-odds/ng.win-odds.tpl.html",'<div class="program-info__active-tab__content"><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winOdds.setPredicate(\'startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="winOdds.setPredicate(\'horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th ng-binding" ng-click="winOdds.setPredicate(\'driver.displayName\')">{{winOdds.selectedRace.raceForm.getDriverTypeName()}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winOdds.setPredicate(\'qplus\')">V.odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr ng-if="!winOdds.hideTooltip" class="base-tbl__data-row horses-tbl__data-row ng-scope" ng-repeat="start in winOdds.selectedRace.starts | filter:{active: true }|orderBy:winOdds.sort.predicate:winOdds.sort.reverse track by $index" ng-click="start.scratched || winOdds.selectStart(start)" ng-class="{\'selected\' : winOdds.isSelected(start),\n            \'disabled\': winOdds.isDisabled(start) && !start.scratched,\n            \'scratched\': start.scratched }" tooltip-form="start"><td class="base-tbl__cell--halign-right ng-binding" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayNameTrimmed" class="ng-binding"><\/td><td ng-bind="start.driver.displayNameTrimmed" class="ng-binding"><\/td><td class="text-align-right ng-binding">{{start.getOdds(winOdds.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="start.scratched ? \'neutral\' : winOdds.oddsTrendClass[start.getOdds(winOdds.betTypeCode).getTrend()]"><\/span><\/td><\/tr><tr ng-if="winOdds.hideTooltip" class="base-tbl__data-row horses-tbl__data-row ng-scope" ng-repeat="start in winOdds.selectedRace.starts | filter:{active: true }|orderBy:winOdds.sort.predicate:winOdds.sort.reverse track by $index" ng-click="start.scratched || winOdds.selectStart(start)" ng-class="{\'selected\' : winOdds.isSelected(start),\n            \'disabled\': winOdds.isDisabled(start) && !start.scratched,\n            \'scratched\': start.scratched }"><td class="base-tbl__cell--halign-right ng-binding" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayNameTrimmed" class="ng-binding"><\/td><td ng-bind="start.driver.displayNameTrimmed" class="ng-binding"><\/td><td class="text-align-right ng-binding">{{start.getOdds(winOdds.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="start.scratched ? \'neutral\' : winOdds.oddsTrendClass[start.getOdds(winOdds.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/program-info/winplace-odds/ng.winplace-odds.tpl.html",'<div class="program-info__active-tab__content"><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="winPlaceOdds.setPredicate(\'horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th ng-binding" ng-click="winPlaceOdds.setPredicate(\'driver.displayName\')">{{winPlaceOdds.selectedRace.raceForm.getDriverTypeName()}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'vinner\')">Vinner<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'min\')">Min<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'max\')">Max<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row ng-scope" ng-repeat="start in winPlaceOdds.selectedRace.starts | filter:{active: true }|orderBy:winPlaceOdds.sort.predicate:winPlaceOdds.sort.reverse track by $index" ng-click="start.scratched || start.toggle(winPlaceOdds.selectedLeg)" ng-class="{\'selected\' : start.isToggled(winPlaceOdds.selectedLeg),\n                    \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right ng-binding"><span>{{start.startNo}}<\/span><span>{{start.getStable(winPlaceOdds.betTypeCode)}}<\/span><\/td><td class="ng-binding" title="{{start.horse.displayName}}">{{start.horse.getDisplayNameTrimmed(12)}}<\/td><td class="ng-binding" title="{{start.driver.displayName}}">{{start.driver.getDisplayNameTrimmed(12)}}<\/td><td class="text-align-right ng-binding">{{start.getOddsValueFormatted(\'V\')}}<\/td><td class="text-align-right ng-binding">{{start.getMinValueFormatted(\'P\')}}<\/td><td class="text-align-right ng-binding">{{start.getMaxValueFormatted(\'P\')}}<\/td><\/tr><\/tbody><\/table><ul class="list stable-odds" ng-if="winPlaceOdds.stableOdds.length > 0"><li ng-repeat="stableOdds in winPlaceOdds.stableOdds track by $index">Stallodds {{stableOdds.stable}}: {{stableOdds.getOddsValueFormatted() | formatNumber : 1 : \'-\'}}<\/li><\/ul><\/div>');n.put("gamewindow/components/ticket-view/common/ng.leg-marks-row.tpl.html",'<ul class="horizontal-list__body" ng-class="legMarksRow.getButtonStates()"><li class="horizontal-list__item" ng-click="legMarksRow.toggle(button, $event)" ng-repeat="button in legMarksRow.markingButtons track by $index"><a type="button" href="" tooltip-start-info="button" class="markings-lst__btn {{::button.cssClass}}">{{::button.startNumber}}<\/a><\/li><\/ul>');n.put("gamewindow/components/ticket-view/common/ng.markings-button.tpl.html",'<button type="button" class="markings-lst__btn selectable" ng-class="markingsButton.getClasses(markingsButton.fixedClasses)" ng-click="markingsButton.select({start: markingsButton.start})">{{::markingsButton.text}}<\/button>');n.put("gamewindow/components/ticket-view/views/andel/qplus/ng.qplus-andel-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Andel-bongen:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynShare.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynShare.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lynbanker/qplus/ng.qplus-lynbanker-markings.tpl.html",'<div><table class="base-tbl markings-tbl" id="markings"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Plass<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Rundt<\/th><\/tr><\/thead><tbody ng-if="markingsTable.isReady" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-if="place < 6" ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}. plass<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" can-disable="true" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td class="base-tbl__cell--halign-center bg-grayblue"><input type="checkbox" ng-model="markingsTable.preSelectList.places[place]" ng-change="markingsTable.setPreselectedPlace(place)"><\/td><\/tr><tr ng-if="place == 6" class="base-tbl__data-row base-tbl__separatorRow" role="presentation"><td colspan="3"><\/td><\/tr><tr ng-if="place == 6" ng-click="markingsTable.setActiveRow(\'preselect\')" class="base-tbl__data-row markings-tbl__data-row bg-grayblue" ng-class="{\'selected\' : markingsTable.isActive(\'preselect\') }"><td><a href="">Rundthester<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="0" can-disable="true" status="markingsTable.status" select="markingsTable.select(start,0)"><\/leg-marks-row><\/td><td><\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/lynbanker/v-game/ng.v-game-lynbanker-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Avd<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left" title="Alle">A<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left" title="Eget spill">E<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Ant<\/th><\/tr><\/thead><tbody class="base-tbl__body markings-tbl__body"><tr ng-repeat="leg in markingsTable.userMarkings.legs" ng-click="markingsTable.userMarkings.updateSelectedRace(leg)" class="base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.userMarkings.isActive(leg) }"><td><a href="">{{leg.legNo}}<span ng-if="markingsTable.hasDD(leg) && markingsTable.showDdIndicators">&nbsp;DD {{markingsTable.getDDLegNumber(leg)}}<\/span><\/a><\/td><td><leg-marks-row starts="markingsTable.userMarkings.getStartsForLeg(leg)" leg="markingsTable.userMarkings.getCurrentLeg()" can-select-no-start="markingsTable.userMarkings.canSelectNoStart" can-select-scratched="markingsTable.userMarkings.canSelectScratched" can-disable="false" leg-number="leg.legNo" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="A" select="markingsTable.userMarkings.selectAll(leg)" is-selected="markingsTable.userMarkings.isAllSelected(leg)"><\/markings-button><\/td><td><markings-button text="E" select="leg.toggleOwnSelection()" is-selected="leg.isOwnSelected"><\/markings-button><\/td><td>{{markingsTable.userMarkings.getNumberOfSelectionsForLeg(leg)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/andel/v-game/ng.v-game-andel-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Din andel utgjør {{lynShare.splitText}} av spillet. Ved gevinst vil du få utbetalt {{lynShare.splitText}} av premiebeløpet:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynShare.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynShare.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lynsystem/duo/ng.duo-lynsystem-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynSystem.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynSystem.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lynsystem/trippel/ng.t-lynsystem-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynSystem.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynSystem..purchaseClickLyntoto({ price: price.value * 100 })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/duo/ng.duo-lyntoto-markings.tpl.html",'<div><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lynsystem/v-game/ng.v-game-lynsystem-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynSystem.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynSystem.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/qplus/ng.qplus-lyntoto-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/trippel/ng.t-lyntoto-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/tvilling/ng.tv-lyntoto-markings.tpl.html",'<div><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/v-game/ng.v-game-lyntoto-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/multiday/qplus/ng.qplus-multiday-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg antall dager og verdi på Flerdager:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="option in multiday.priceInfo.multiDayPrices" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="multiday.purchaseClickMultiday({days: option.days, price: option.price})">{{option.days}} dager<br>kr {{option.displayPrice | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/duo/ng.duo-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left"><\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}. plass<\/a><\/td><td><leg-marks-row starts="markingsTable.selectedRace.starts" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/plass/ng.p-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><leg-marks-row starts="markingsTable.userMarkings.selectedRace.starts" leg="markingsTable.userMarkings.getCurrentLeg()" usermarkings="markingsTable.userMarkings" can-select-no-start="markingsTable.userMarkings.canSelectNoStart" can-select-scratched="markingsTable.userMarkings.canSelectScratched" leg-number="place" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td>{{ markingsTable.userMarkings.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/qplus/ng.qplus-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl" id="markings"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Plass<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Rundt<\/th><\/tr><\/thead><tbody ng-if="markingsTable.isReady" class="base-tbl__body markings-tbl__body base-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places track by place"><tr ng-if="place < 6" ng-click="markingsTable.setActiveRow(place)" class="markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }"><td><a href="">{{::place}}. plass<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" can-disable="true" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td class="base-tbl__cell--halign-center bg-grayblue"><input type="checkbox" ng-model="markingsTable.preSelectList.places[place]" ng-change="markingsTable.setPreselectedPlace(place)"><\/td><\/tr><tr ng-if="place == 6" class="base-tbl__data-row base-tbl__separatorRow" role="presentation"><td colspan="3"><\/td><\/tr><tr ng-if="place == 6" ng-click="markingsTable.setActiveRow(0)" class="base-tbl__data-row markings-tbl__data-row bg-grayblue" ng-class="{\'selected\' : markingsTable.isActive(0) }"><td><a href="">Rundthester<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="0" can-disable="true" status="markingsTable.status" select="markingsTable.select(start,0)"><\/leg-marks-row><\/td><td><\/td><\/tr><tr ng-if="place == 6" ng-click="markingsTable.setActiveRow(place)" class="base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }"><td><a href="">Reserve<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" can-disable="true" status="markingsTable.status" select="markingsTable.select(start,6)"><\/leg-marks-row><\/td><td><\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/trippel/ng.t-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th"><\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Alle<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}. plass<\/a><\/td><td><leg-marks-row starts="markingsTable.selectedRace.starts" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="A" select="markingsTable.selectAll(place)" is-selected="markingsTable.isAllSelected(place)"><\/markings-button><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/tvilling/ng.tv-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th"><\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Alle<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{markingsTable.getRowHeader(place)}}<\/a><\/td><td><leg-marks-row starts="markingsTable.selectedRace.starts" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="A" select="markingsTable.selectAll(place)" is-selected="markingsTable.isAllSelected(place)"><\/markings-button><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/v-game/ng.v-game-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Avd<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Alle<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Ant.<\/th><\/tr><\/thead><tbody class="base-tbl__body markings-tbl__body"><tr ng-repeat="leg in markingsTable.legs track by $index" ng-click="markingsTable.userMarkings.updateSelectedRace(leg)" class="base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : leg === markingsTable.selectedLeg }"><td><a href="">{{leg.legNo}}<span ng-if="markingsTable.hasDD(leg) && markingsTable.showDdIndicators">&nbsp;DD {{::markingsTable.getDDLegNumber(leg)}}<\/span><\/a><\/td><td><leg-marks-row starts="leg.starts" user-markings="markingsTable.userMarkings" leg="markingsTable.selectedLeg" bet-type-code="markingsTable.betTypeCode" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" can-disable="false" status="markingsTable.status" leg-number="leg.legNo" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="A" select="markingsTable.userMarkings.selectAll(leg)" is-selected="markingsTable.userMarkings.isAllSelected(leg)"><\/markings-button><\/td><td>{{markingsTable.userMarkings.getNumberOfSelectionsForLeg(leg)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/vinner/ng.v-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><leg-marks-row starts="markingsTable.selectedRace.starts" leg="markingsTable.selectedLeg" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/vinner-plass/ng.vp-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><leg-marks-row starts="markingsTable.userMarkings.selectedRace.starts" leg="markingsTable.userMarkings.getCurrentLeg()" user-markings="markingsTable.userMarkings" can-select-no-start="markingsTable.userMarkings.canSelectNoStart" can-select-scratched="markingsTable.userMarkings.canSelectScratched" leg-number="place" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>')}]);angular.module("rikstoto.clients.js.gamewindow.components.tooltips",["rikstoto.clients.js.gamewindow.components.tooltips.angularUI","ngSanitize"]);angular.module("rikstoto.clients.js.gamewindow.components.tooltips.angularUI",["ui.bootstrap.bindHtml"]);angular.module("rikstoto.clients.js",["rikstoto.clients.js.core","rikstoto.clients.js.data","rikstoto.clients.js.gamewindow","rikstoto.clients.js.helpers","rikstoto.clients.js.models","rikstoto.clients.js.validation","rikstoto.clients.js.calculators","ngSanitize"]),function(){"use strict";angular.module("rikstoto.clients.js.calculators",["rikstoto.clients.js.core"])}(),function(){"use strict";angular.module("rikstoto.clients.js.core",["rikstoto.clients.js.core.constants","rikstoto.clients.js.core.utils","rikstoto.clients.js.core.filters","rikstoto.clients.js.core.enums","rikstoto.clients.js.core.components","rikstoto.clients.js.core.directives"])}(),function(){"use strict";angular.module("rikstoto.clients.js.data",["rikstoto.clients.js.core","rikstoto.clients.js.models","rikstoto.clients.js.data.serverTime","rikstoto.clients.js.data.pricing","rikstoto.clients.js.data.weather","rikstoto.clients.js.data.settings","rikstoto.clients.js.data.mappings"])}(),function(){"use strict";angular.module("rikstoto.clients.js.gamewindow",["rikstoto.clients.js.gamewindow.components"])}(),function(){"use strict";angular.module("rikstoto.clients.js.helpers",["rikstoto.clients.js.core","rikstoto.clients.js.helpers.betdata","rikstoto.clients.js.helpers.markings","rikstoto.clients.js.helpers.gallopDistance"])}(),function(){"use strict";angular.module("rikstoto.clients.js.models",["rikstoto.clients.js.core.constants","rikstoto.clients.js.core.utils","rikstoto.clients.js.core.enums","rikstoto.clients.js.helpers"])}(),function(){"use strict";angular.module("rikstoto.clients.js.validation",["rikstoto.clients.js.validation.client","rikstoto.clients.js.validation.server"])}(),function(){"use strict";angular.module("rikstoto.clients.js.core.components",["rikstoto.clients.js.core.components.templates"])}(),function(){"use strict";angular.module("rikstoto.clients.js.core.directives",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.core.enums",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.core.constants",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.core.filters",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.data.mappings",["rikstoto.clients.js.core.utils"])}(),function(){"use strict";angular.module("rikstoto.clients.js.core.utils",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.data.pricing",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.data.serverTime",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.data.settings",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.data.weather",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.gamewindow.components",["rikstoto.clients.js.gamewindow.components.templates","rikstoto.clients.js.core","rikstoto.clients.js.models","rikstoto.clients.js.helpers","rikstoto.clients.js.gamewindow.components.tooltips","rikstoto.clients.js.gamewindow.components.tooltips.angularUI"])}(),function(){"use strict";angular.module("rikstoto.clients.js.helpers.betdata",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.helpers.device",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.helpers.gallopDistance",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.helpers.markings",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.validation.client",[])}(),function(){"use strict";angular.module("rikstoto.clients.js.validation.server",[])}();angular.module("rikstoto.clients.js.templates",[]).run(["$templateCache",function(n){n.put("core/components/editable-select/ng.editable-select.tpl.html",'<div class="editable-select"><div class="editable-select__manual-input-wrapper"><input autocomplete="off" type="text" ng-readonly="editableSelect.readonly()" ng-blur="editableSelect.hideOptions($event)" ng-change="editableSelect.updateSelectedItem()" ng-keydown="editableSelect.handleKeyPress($event)" ng-click="editableSelect.toggleOptions($event)" ng-model="editableSelect.options.currentValue" class="editable-select__manual-input"><\/div><div class="editable-select__dropdown-trigger" src="" ng-click="editableSelect.toggleOptions($event)"><\/div><div class="editable-select__options" ng-show="editableSelect.optionsVisible"><ul><li class="option" ng-repeat="item in editableSelect.items" ng-click="editableSelect.select(item)" ng-class="{\'selected\': editableSelect.isSelected(item) }">{{item.name}}<\/li><\/ul><\/div><\/div>');n.put("core/components/leg-menu/ng.leg-menu.tpl.html",'<div class="leg-menu"><table cellspacing="2" class="base-tbl leg-menu-tbl" ng-class="{\'races-only\': !legMenu.isLegSelectorVisible()}"><tbody ng-class="{\'races-only\': !legMenu.isLegSelectorVisible()}"><tr ng-if="legMenu.isLegSelectorVisible()" class="leg-menu-tbl__legs" ng-cloak><th>Avd<\/th><td ng-class="{selected: item.isSelected, selectable: item.legAvailable && !legMenu.isChanging }" ng-click="legMenu.validateAndSelectRace(item.race)" ng-repeat="item in legMenu.viewModel.items track by item.number"><span>{{item.legNumber}}<\/span><\/td><td class="leg-menu-tbl__filler">&nbsp;<\/td><\/tr><tr class="leg-menu-tbl__races" ng-cloak><th>Løp<\/th><td ng-class="{selected: item.isSelected, selectable: item.legAvailable  && !legMenu.isChanging }" ng-click="legMenu.validateAndSelectRace(item.race)" ng-repeat="item in legMenu.viewModel.items track by item.number"><span>{{::item.number}}<\/span><\/td><td class="leg-menu-tbl__filler">&nbsp;<\/td><\/tr><\/tbody><\/table><\/div>');n.put("core/components/tab-menu/ng.tab-menu.tpl.html",'<ul class="tab-menu__body"><li class="horizontal-list__item tab-menu__item" ng-class="{selected: menuItem.selected }" ng-repeat="menuItem in tabMenu.menu.items | orderBy:\'order\'" ng-click="tabMenu.selectItem({item: menuItem})"><a href="#" class="tab-menu__item-link" title="{{menuItem.name}}"><span ng-if="menuItem.shortName" class="small-text">{{menuItem.shortName}}<\/span> <span ng-if="menuItem.shortName" class="normal-text">{{menuItem.name}}<\/span> <span ng-if="!menuItem.shortName">{{menuItem.name}}<\/span><\/a><\/li><\/ul>');n.put("gamewindow/components/bet-controls/ng.bet-controls.tpl.html",'<div class="bet-controls clearfix"><bet-cost price-info="betControls.state.priceInfo" bet-data="betControls.betData()" bet-type-code="betControls.betTypeCode" bet-method="betControls.betMethod" on-bet-cost-selected="betControls.onBetCostSelect(item, maxPrice)"><\/bet-cost><bet-actions ticket="betControls.state.ticket" on-reset="betControls.onReset()" bet-type-code="betControls.betTypeCode" bet-method="betControls.betMethod" race-day-key="betControls.raceDayKey" bet-data="betControls.betData()" selected-race="betControls.selectedRace" selected-leg="betControls.selectedLeg" on-perform-buy="betControls.onPerformBuy()" start-time="betControls.startTime"><\/bet-actions><\/div>');n.put("gamewindow/components/game-info/ng.game-info.tpl.html",'<div class="game-info"><header class="game-info__header"><div class="game-info__header__product-info">{{gameInfo.legDetails.betTypeCode.presentAsText()}}, <span ng-switch="gameInfo.legDetails.betTypeCode.isSingleLegGame()"><span ng-switch-when="true">Løp {{gameInfo.selectedRace.number}}<\/span> <span ng-switch-when="false">Avd. {{gameInfo.selectedLeg.legNo}}<\/span><\/span><\/div><div class="game-info__header__refresh-info" ng-click="gameInfo.forceUpdate()" ng-class="{ updating: gameInfo.isUpdating }"><span class="game-info__header__refresh-info__text">Oppdatert: {{gameInfo.legDetails.details.oddsLastUpdated | moment:\'DD.MM HH:mm\'}}<\/span> <span class="btn--link-lookalike gray game-info__header__refresh-button"><i ng-class="{ rotating: gameInfo.isUpdating }"><\/i><\/span><\/div><\/header><div class="game-info__content"><ul class="horizontal-list"><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.startTime">Forventet start {{gameInfo.selectedRace.startTime | moment:\'HH:mm\'}}<\/li><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.distance">{{gameInfo.selectedRace.distance}}m<\/li><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.startMethod.presentAsText()">{{gameInfo.selectedRace.startMethod.presentAsText()}}<\/li><li class="horizontal-list__item" ng-if="gameInfo.selectedRace.raceForm.presentAsText()">{{gameInfo.selectedRace.raceForm.presentAsText()}}<\/li><li class="horizontal-list__item" ng-if="gameInfo.legDetails.details">Omsetning:&nbsp;<span>{{gameInfo.getInvestmentForBetType(gameInfo.betTypeCode)}}<\/span> <span ng-if="gameInfo.additionalInvestmentbetTypeCodes.length > 0">&nbsp;(<span ng-repeat="betTypeCode in gameInfo.additionalInvestmentbetTypeCodes track by betTypeCode.code">{{betTypeCode.presentAsText()}}: {{gameInfo.getInvestmentForBetType(betTypeCode)}}<\/span>)<\/span><\/li><\/ul><\/div><\/div>');n.put("gamewindow/components/program-info/ng.program-info.tpl.html",'<div class="program-info" ng-class="{\'no-tab-menu\': !programInfo.displayTabMenu()}"><tab-menu class="tab-menu--inverted" ng-if="programInfo.displayTabMenu()" menu="programInfo.tabs" select-item="programInfo.activate(item)" ng-class="{\'compact\': programInfo.tabs.items.length > 4}"><\/tab-menu><load-directive class="program-info__active-tab__content" directive-element-name="{{programInfo.activeView}}" bet-type-code="programInfo.betTypeCode" selected-leg="programInfo.selectedLeg" selected-race="programInfo.selectedRace" selected-raceday="programInfo.selectedRaceday" can-select-scratched="programInfo.canSelectScratched" ticket="programInfo.ticket"><\/load-directive><\/div>');n.put("gamewindow/components/raceday-header/ng.raceday-header.tpl.html",'<header class="horizontal-list__header raceday-header"><h2 class="horizontal-list__header__title raceday-header__title ng-binding show-lg">{{racedayHeader.displayName}}&nbsp;{{racedayHeader.date | moment:\'dddd DD.MM\'}}<\/h2><h2 class="horizontal-list__header__title raceday-header__title ng-binding show-sm">{{racedayHeader.displayName}}&nbsp;{{racedayHeader.date | moment:\'DD.MM\'}}<\/h2><span class="raceday-header__corner"><\/span><\/header>');n.put("gamewindow/components/ticket-view/ng.user-markings.tpl.html",'<div class="user-markings"><load-directive ng-if="userMarkings.status.isReady" directive-element-name="{{userMarkings.activeView}}" races="userMarkings.races" legs="userMarkings.legs" selected-leg="userMarkings.selectedLeg" selected-race="userMarkings.selectedRace" price-info="userMarkings.priceInfo" ticket="userMarkings.ticket" status="userMarkings.status" purchase-click-lyntoto="userMarkings.purchaseClickLyntoto(price)" bet-type-code="userMarkings.betTypeCode" can-select-no-start="userMarkings.canSelectNoStart" can-select-scratched="userMarkings.canSelectScratched" show-dd-indicators="userMarkings.showDdIndicators" user-markings="userMarkings"><\/load-directive><\/div>');n.put("gamewindow/components/bet-controls/bet-actions/ng.bet-actions.tpl.html",'<div class="bet-actions clearfix"><div class="bet-actions__reset margin-top-bottom--md"><a href="#" ng-click="betActions.reset()">Nullstill<\/a><\/div><div class="bet-actions__information margin-top-bottom--md"><img alt="Ikon for informasjon" ng-if="betActions.infoText !== \'\'" src="/Skins/default/Images/Common/information.gif" class="bet-calculator__item__non-button" tooltip-md="\'{{betActions.infoText}}\'"><\/div><div class="bet-actions__place-bet"><button type="button" ng-disabled="!betActions.selectedRace.openForBet || !betActions.selectedLeg.openForBet" ng-click="betActions.onPerformBuy()" class="btn--dark margin-top-bottom--md">Kjøp spill<\/button><\/div><\/div>');n.put("gamewindow/components/bet-controls/bet-cost/ng.bet-cost.tpl.html",'<div class="bet-cost clearfix"><div ng-if="!betCost.displaySpecialQPlusLynbanker()" ng-class="{ \'bet-cost__amount-selector--readonly\': betCost.readOnly() }"><div class="bet-cost__number-of-rows" ng-if="!betCost.isLynbanker()"><label>Ant. rekker:&nbsp;<span class="rows">{{betCost.betData().getNumberOfRows()}}<\/span><\/label><\/div><div class="bet-cost__amount-selector" ng-if="betCost.isReady()"><label class="float-left" ng-bind-html="betCost.amountLabel()"><\/label><editable-select class="select-list" readonly="betCost.readOnly()" items="betCost.priceInfo.displayItems" selected-item="betCost.priceInfo.defaultSelection || betCost.priceInfo.defaultStep" on-select="betCost.onSelect(item)"><\/editable-select><!--<select ng-model="betCost.options.defaultRowPrice.value" ng-options="step.value as step.name for step in betCost.options.steps"><\/select>--><\/div><div class="bet-cost__ticket-sum" ng-class="{ \'color-red\': !betCost.priceIsValid() }" ng-if="!betCost.isLynbanker()"><label>Sum<\/label><span class="amount">{{betCost.getEstimatedPrice() | currency}}<\/span><div ng-if="!betCost.priceIsValid()">Totalpris er for høy (maks {{ betCost.maxAllowedCost / 100 | currency }})<\/div><\/div><div ng-if="betCost.isLynbanker()" class="bet-cost__summary"><div class="bet-cost__number-of-rows"><label>Ant. rekker:&nbsp;<span class="rows">{{betCost.betData().getNumberOfRows()}}<\/span><\/label><\/div><div class="bet-cost__ticket-sum" ng-class="{ \'color-red\': !betCost.priceIsValid() }"><label>Verdi markerte hester<\/label><span class="amount">{{betCost.getEstimatedPrice() | currency}}<\/span><\/div><div class="bet-cost__summary-error" ng-if="!betCost.priceIsValid()">Totalpris er for høy (maks {{ betCost.maxAllowedCost / 100 | currency }})<\/div><\/div><\/div><div ng-if="betCost.displaySpecialQPlusLynbanker()" class="bet-cost__qplus"><div class="bet-cost__rowprice-selector" ng-if="betCost.isReady()"><label class="float-left">Rekkepris:<\/label><editable-select class="select-list" readonly="betCost.readOnly()" items="betCost.priceInfo.displayItems" selected-item="betCost.priceInfo.defaultSelection" on-select="betCost.onSelectRowPrice(item)"><\/editable-select><!--<select ng-model="betCost.options.defaultRowPrice.value" ng-options="step.value as step.name for step in betCost.options.steps"><\/select>--><\/div><div class="bet-cost__maxprice-selector" ng-if="betCost.isReady()"><label class="float-left">Velg maksbeløp:<\/label><editable-select class="select-list" readonly="betCost.readOnly()" items="betCost.priceInfo.stepDisplayItems" selected-item="betCost.priceInfo.defaultStep" on-select="betCost.onSelectMaxPrice(item)"><\/editable-select><!--<select ng-model="betCost.options.defaultRowPrice.value" ng-options="step.value as step.name for step in betCost.options.steps"><\/select>--><\/div><div class="bet-cost__summary"><div class="bet-cost__number-of-rows"><label>Ant. rekker:&nbsp;<span class="rows">{{betCost.betData().getNumberOfRows()}}<\/span><\/label><\/div><div class="bet-cost__ticket-sum" ng-class="{ \'color-red\': !betCost.priceIsValid() }"><label>Verdi markerte hester<\/label><span class="amount">{{betCost.getEstimatedPrice() | currency}}<\/span><\/div><div class="bet-cost__summary-error" ng-if="!betCost.priceIsValid()">Totalpris er for høy (maks {{ betCost.maxAllowedCost / 100 | currency }})<\/div><\/div><\/div><\/div>');n.put("gamewindow/components/bet-controls/countdown/ng.countdown.tpl.html",'<div id="qplusCountdown" class="countdown margin-left-right-bottom--md" ng-show="countdown.info.active === true"><div class="countdown__inner"><span class="countdown__inner__left"><\/span><div class="countdown__inner__body"><span class="countdown__inner__body__progressbar" ng-class="{\'countdown__inner__body__progressbar--active\': countdown.info.aboutToExpire === false && countdown.info.expired === false, \'countdown__inner__body__progressbar--inactive\': countdown.info.aboutToExpire === true || countdown.info.expired === true}" ng-style="{width: countdown.info.percentage + \'%\'}"><\/span><\/div><span class="countdown__inner__right"><\/span><\/div><div class="countdown__info"><p class="countdown__info__text--red" ng-show="countdown.info.aboutToExpire === true">{{\'game.text.gameStarting\'|translate}}<\/p><p class="countdown__info__text--blue" ng-show="countdown.info.aboutToExpire === false && countdown.info.expired === false">{{\'game.text.soonStart\'|translate}}{{countdown.info.minutesUntilStart}} minutter<\/p><\/div><\/div>');n.put("gamewindow/components/program-info/dd-odds/ng.dd-odds.tpl.html",'<section><!--<div tooltip ng-style="style"><\/div>--><!--Horse selection table--><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="ddOdds.setPredicate(\'dd1.startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="ddOdds.setPredicate(\'dd1.horse.displayName\');">DD-1<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="ddOdds.setPredicate(\'dd2.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="ddOdds.setPredicate(\'dd2.horse.displayName\')">DD-2<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="ddOdds.setPredicate(\'odds\')">Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in ddOdds.viewModel.combinations | orderBy:ddOdds.sort.predicate:ddOdds.sort.reverse track by $index" ng-click="ddOdds.toggle(start)" ng-class="{\'selected\' : ddOdds.isToggled(start),\r\n                    \'scratched\': ddOdds.isScratched(start) }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.dd1.startNo"><\/td><td class="" ng-bind="start.dd1.horse.displayNameTrimmed" title="{{start.dd1.horse.displayName}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.dd2.startNo"><\/td><td class="" ng-bind="start.dd2.horse.displayNameTrimmed" title="{{start.dd2.horse.displayName}}"><\/td><td class="text-align-right ng-binding"><span>{{start.odds }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/form-tooltip/ng.form-tooltip.tpl.html",'<div ng-class="{ fade: animation() }" ng-show="isOpen() && globalTooltips.areOn" class="standard-tooltip"><div ng-if="!content.scratched"><p class="standard-tooltip__title">Siste løp:<\/p><table class="tooltip__p standard-tooltip__musique"><tr ng-repeat="entry in content.formRows | orderBy:entry.date:true | limitTo:5 track by entry.date"><td class="standard-tooltip__place"><span ng-switch on="entry.place"><span ng-switch-when="0"><span ng-if="entry.disqualified">{{\'game.text.disqualified.\' + entry.disqualifiedReason | translate}}<\/span> <span ng-if="entry.scratched">Strøket<\/span> <span ng-if="!entry.completed && entry.place === 0 && !entry.disqualified">Uplassert<\/span><\/span> <span ng-switch-default>{{entry.place}}. plass<\/span><\/span><\/td><td class="standard-tooltip__type">{{entry.raceType.name}}<\/td><\/tr><\/table><\/div><div ng-if="content.scratched">Strøket - nr {{content.startNo}} {{content.horse.displayName}} {{"game.text.tooltip.scratched"|translate}}<\/div><\/div>');n.put("gamewindow/components/program-info/investment/ng.investment.tpl.html",'<section><!--<div tooltip ng-style="style"><\/div>--><!--Horse selection table--><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-class="{ \'sort\': investment.sort.predicateName === \'startNo\', reverse: investment.sort.reverse }" ng-click="investment.setPredicate(\'startNo\');">Nr<\/th><th ng-class="{ \'sort\': investment.sort.predicateName === \'horse.displayName\', reverse: investment.sort.reverse }" class="base-tbl__th horses-tbl__th" ng-click="investment.setPredicate(\'horse.displayName\');">Hest<\/th><th ng-class="{ \'sort\': investment.sort.predicateName === \'driver.displayName\', reverse: investment.sort.reverse }" class="base-tbl__th horses-tbl__th" ng-click="investment.setPredicate(\'driver.displayName\')">{{investment.selectedRace.raceForm.getDriverTypeName()}}<\/th><th ng-class="{ \'sort\': investment.sort.predicateName === \'ticketPercentages\', reverse: investment.sort.reverse }" class="base-tbl__th horses-tbl__th text-align-right" ng-click="investment.setPredicate(\'ticketPercentages\')">Inns.<\/th><th ng-class="{ \'sort\': investment.sort.predicateName === \'winOdds\', reverse: investment.sort.reverse }" class="base-tbl__th horses-tbl__th text-align-right" ng-click="investment.setPredicate(\'winOdds\')">Vinner<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in investment.starts |  orderBy:investment.sort.predicate:investment.sort.reverse track by $index" ng-click="(start.scratched && !investment.canSelectScratched) || start.toggle(investment.selectedLeg)" ng-class="{\'selected\' : start.isToggled(investment.selectedLeg),\r\n                    \'selectable\': (start.scratched && investment.canSelectScratched) || !start.scratched,\r\n                    \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td title="{{start.horse.displayName}}" class="">{{start.horse.getDisplayNameTrimmed()}}<\/td><td title="{{start.driver.displayName}}" class="">{{start.driver.getDisplayNameTrimmed()}}<\/td><td class="text-align-right">{{start.getVMarksForBetType(investment.betTypeCode).getInvestmentPercentFormatted() }} %<\/td><td class="text-align-right ng-binding"><span>{{start.getOdds(\'V\').getOddsValueFormatted() }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/most-played/ng.most-played.tpl.html",'<section><table class="base-tbl combinations-tbl combinations-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head combinations-tbl__head"><tr><th class="base-tbl__th combinations-tbl__th text-align-right">Nr<\/th><th class="base-tbl__th combinations-tbl__th">Markeringer<\/th><th class="base-tbl__th combinations-tbl__th text-align-right">Innsats<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row combinations-tbl__data-row" ng-click="mostPlayed.selectCombination(combo)" ng-repeat="combo in mostPlayed.selectedRace.mostPlayedCombinations track by combo.rank"><td class="base-tbl__cell--halign-right">{{combo.rank}}<\/td><td><span class="most-played__combination-mark" ng-class="{\'scratched\': mostPlayed.isScratched(start) }" ng-repeat="start in combo.combination">{{start | padLeft:2:\'0\'}}<\/span><\/td><td class="text-align-right">{{combo.totalInvestment / 100 | currency}}<\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/odds-trend/ng.odds-trend.tpl.html",'<section><!--<div tooltip ng-style="style"><\/div>--><!--Horse selection table--><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="oddsTrend.setPredicate(\'startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="oddsTrend.setPredicate(\'horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="oddsTrend.setPredicate(\'prev\')">{{oddsTrend.previousOddsUpdateTime(\'HH:mm\') || \'-\'}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="oddsTrend.setPredicate(\'current\')">{{oddsTrend.currentOddsUpdateTime(\'HH:mm\') || \'-\'}}<\/th><th><\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in oddsTrend.selectedRace.starts | filter:{active: true} | orderBy:oddsTrend.sort.predicate:oddsTrend.sort.reverse track by $index" ng-click="start.scratched || oddsTrend.selectStart(start)" ng-class="{\'selected\' : oddsTrend.isSelected(start),\r\n                    \'disabled\': oddsTrend.isDisabled(start) && !start.scratched,\r\n                    \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayName"><\/td><td class="text-align-right">{{(start.getOdds(oddsTrend.betTypeCode).previous.getOddsValueFormatted() || \'-\') }}<\/td><td class="text-align-right">{{start.getOdds(oddsTrend.betTypeCode).getOddsValueFormatted() }}<\/td><td class="text-align-right ng-binding"><span class="direction-caret up" ng-class="oddsTrend.oddsTrendClass[start.getOdds(oddsTrend.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/press-rank/ng.press-rank.tpl.html",'<section><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="syntheses"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right no-sort">Nr<\/th><th class="base-tbl__th horses-tbl__th no-sort">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right no-sort">Poeng<\/th><th class="base-tbl__th pressSelection-tbl__th text-align-right no-sort">V.Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body" ng-repeat="category in pressRank.getPressRankCategories()"><tr class="base-tbl__data-row syntheses-tbl__category-row"><td colspan="4">{{ ::category.presentAsText()}}<\/td><\/tr><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in pressRank.selectedRace.starts | filter:{ pressRank: { category: category }} | orderBy:\'pressRank.points\':true" ng-click="start.scratched || pressRank.selectStart(start)" ng-class="{\'selected\' : pressRank.isSelected(start),\r\n            \'disabled\': pressRank.isDisabled(start) && !start.scratched,\r\n            \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayName"><\/td><td class="text-align-right">{{start.pressRank.points }}<\/td><td class="text-align-right text-subtle">{{start.getOdds(pressRank.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="pressRank.oddsTrendClass[start.getOdds(pressRank.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><tfoot ng-if="starts.getSynthesesCategories().length > 0"><tr><td colspan="4" class="syntheses-tbl-infobox"><em>Rangert etter samlede pressetips. 8 p til 1.plass, 7 til 2.plass osv<\/em><\/td><\/tr><\/tfoot><\/table><div class="pressSelection-infobox" ng-if="starts.getSynthesesCategories().length == 0">Ingen pressetips tilgjengelig<\/div><\/section>');n.put("gamewindow/components/program-info/press-tips/ng.press-tips.tpl.html",'<section><div class="pressSelection-container program-info--width-full"><div class="pressSelection-slides__container" ng-style="starts.pressSelectionSlider.style" ng-if="pressTips.selectedRace.pressTips.length > 0"><table class="base-tbl pressSelection-tbl pressSelection-tbl--game-window program-info--width-full" id="pressSelection"><thead class="pressSelection-tbl__head pressSelection-thead__main"><tr><th class="press-selection__slide-button" ng-click="pressTips.prevSlide()" rowspan="2"><span class="slide-button">&lt;<\/span><\/th><th class="base-tbl__th press-selection__slide-container no-sort"><div class="press-selection__slide" ng-if="pressTips.activeSlide === $index" ng-repeat="outlet in pressTips.selectedRace.pressTips | orderBy:\'quintePoints\':true"><div class="press-selection__outlet-title">{{$index+1}}. {{outlet.author}} - {{outlet.association}}<\/div><div class="press-selection__outlet-points">{{outlet.quintePoints}} poeng&nbsp;*<\/div><\/div><\/th><th class="press-selection__slide-button" ng-click="pressTips.nextSlide()" rowspan="2"><span class="slide-button">&gt;<\/span><\/th><\/tr><\/thead><\/table><\/div><table class="base-tbl pressSelection-tbl pressSelection-tbl--game-window program-info--width-full" ng-if="pressTips.selectedRace.pressTips.length > 0"><thead class="base-tbl__head pressSelection-tbl__head"><tr><th class="base-tbl__th pressSelection-tbl__th no-sort">Nr.<\/th><th class="base-tbl__th pressSelection-tbl__th no-sort">Navn.<\/th><th class="base-tbl__th pressSelection-tbl__th text-align-right no-sort">Rangering<\/th><th class="base-tbl__th pressSelection-tbl__th text-align-right no-sort">V.Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row press-selection__selection-row" ng-repeat="start in pressTips.selectedOutlet.selection" ng-click="start.scratched || pressTips.selectStart(start)" ng-class="{\'selected\' : pressTips.isSelected(start),\r\n                        \'disabled\': pressTips.isDisabled(start) && !start.scratched,\r\n                        \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayName"><\/td><td class="text-align-right">{{$index+1}}<\/td><td class="text-align-right ng-binding">{{start.getOdds(pressTips.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="pressTips.oddsTrendClass[start.getOdds(pressTips.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><\/table><div class="pressSelection-infobox" ng-if="pressTips.selectedRace.pressTips.length > 0"><em>* Poengsummen og rangeringen er basert på journalistens treffrate på 5+<\/em><\/div><div class="pressSelection-infobox" ng-if="pressTips.selectedRace.pressTips.length == 0">Ingen pressetips tilgjengelig<\/div><\/div><\/section>');n.put("gamewindow/components/program-info/tvilling-odds/ng.tvilling-odds.tpl.html",'<section><!--<div tooltip ng-style="style"><\/div>--><!--Horse selection table--><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tvillingOdds.setPredicate(\'place1.startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tvillingOdds.setPredicate(\'place1.horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tvillingOdds.setPredicate(\'place2.startNo\')">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="tvillingOdds.setPredicate(\'place2.horse.displayName\')">Hest<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="tvillingOdds.setPredicate(\'oddsValue\')">Odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row" ng-repeat="start in tvillingOdds.viewModel.combinations | orderBy:tvillingOdds.sort.predicate:tvillingOdds.sort.reverse" ng-click="tvillingOdds.toggle(start)" ng-class="{\'selected\' : tvillingOdds.isToggled(start) }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right" ng-bind="start.place1.startNo"><\/td><td class="" ng-bind="start.place1.horse.displayNameTrimmed" title="{{start.place1.horse.displayNameTrimmed}}"><\/td><td class="base-tbl__cell--halign-right" ng-bind="start.place2.startNo"><\/td><td class="" ng-bind="start.place2.horse.displayNameTrimmed" title="{{start.place2.horse.displayNameTrimmed}}"><\/td><td class="text-align-right ng-binding"><span>{{start.odds }}<\/span><\/td><\/tr><\/tbody><\/table><\/section>');n.put("gamewindow/components/program-info/win-odds/ng.win-odds.tpl.html",'<div class="program-info__active-tab__content"><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winOdds.setPredicate(\'startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="winOdds.setPredicate(\'horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th ng-binding" ng-click="winOdds.setPredicate(\'driver.displayName\')">{{winOdds.selectedRace.raceForm.getDriverTypeName()}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winOdds.setPredicate(\'qplus\')">V.odds<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row ng-scope" ng-repeat="start in winOdds.selectedRace.starts | filter:{active: true }|orderBy:winOdds.sort.predicate:winOdds.sort.reverse track by $index" ng-click="start.scratched || winOdds.selectStart(start)" ng-class="{\'selected\' : winOdds.isSelected(start),\r\n            \'disabled\': winOdds.isDisabled(start) && !start.scratched,\r\n            \'scratched\': start.scratched }" tooltip-form="start"><td class="base-tbl__cell--halign-right ng-binding" ng-bind="start.startNo"><\/td><td ng-bind="start.horse.displayNameTrimmed" class="ng-binding"><\/td><td ng-bind="start.driver.displayNameTrimmed" class="ng-binding"><\/td><td class="text-align-right ng-binding">{{start.getOdds(winOdds.betTypeCode).getOddsValueFormatted() }}<span class="direction-caret up" ng-class="winOdds.oddsTrendClass[start.getOdds(winOdds.betTypeCode).getTrend()]"><\/span><\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/program-info/winplace-odds/ng.winplace-odds.tpl.html",'<div class="program-info__active-tab__content"><table class="base-tbl horses-tbl horses-tbl--game-window program-info--width-full" id="starts"><thead class="base-tbl__head horses-tbl__head"><tr><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'startNo\');">Nr<\/th><th class="base-tbl__th horses-tbl__th" ng-click="winPlaceOdds.setPredicate(\'horse.displayName\');">Hest<\/th><th class="base-tbl__th horses-tbl__th ng-binding" ng-click="winPlaceOdds.setPredicate(\'driver.displayName\')">{{winPlaceOdds.selectedRace.raceForm.getDriverTypeName()}}<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'vinner\')">Vinner<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'min\')">Min<\/th><th class="base-tbl__th horses-tbl__th text-align-right" ng-click="winPlaceOdds.setPredicate(\'max\')">Max<\/th><\/tr><\/thead><tbody class="base-tbl__body"><tr class="base-tbl__data-row horses-tbl__data-row ng-scope" ng-repeat="start in winPlaceOdds.selectedRace.starts | filter:{active: true }|orderBy:winPlaceOdds.sort.predicate:winPlaceOdds.sort.reverse track by $index" ng-click="start.scratched || start.toggle(winPlaceOdds.selectedLeg)" ng-class="{\'selected\' : start.isToggled(winPlaceOdds.selectedLeg),\r\n                    \'scratched\': start.scratched }" tooltip-musique="participant"><td class="base-tbl__cell--halign-right ng-binding"><span>{{start.startNo}}<\/span><span>{{start.getStable(winPlaceOdds.betTypeCode)}}<\/span><\/td><td class="ng-binding" title="{{start.horse.displayName}}">{{start.horse.getDisplayNameTrimmed(12)}}<\/td><td class="ng-binding" title="{{start.driver.displayName}}">{{start.driver.getDisplayNameTrimmed(12)}}<\/td><td class="text-align-right ng-binding">{{start.getOdds(\'V\').getOddsValueFormatted()}}<\/td><td class="text-align-right ng-binding">{{start.getOdds(\'P\').getMinValueFormatted()}}<\/td><td class="text-align-right ng-binding">{{start.getOdds(\'P\').getMaxValueFormatted()}}<\/td><\/tr><\/tbody><\/table><ul class="list stable-odds" ng-if="winPlaceOdds.stableOdds.length > 0"><li ng-repeat="stableOdds in winPlaceOdds.stableOdds track by $index">Stallodds {{stableOdds.stable}}: {{stableOdds.odds | formatNumber : 1 : \'-\'}}<\/li><\/ul><\/div>');n.put("gamewindow/components/program-info/product-ad/ng.product-ad.tpl.html",'<div class="product-ad"><img src="https://www.rikstoto.no/PageFiles/106954/spillvindu_lyntoto_5pluss.gif"><\/div>');n.put("gamewindow/components/ticket-view/common/ng.leg-marks-row.tpl.html",'<ul class="horizontal-list__body"><li class="horizontal-list__item" ng-click="legMarksRow.toggle(button)" ng-repeat="button in legMarksRow.markingButtons track by $index"><a type="button" href="" class="markings-lst__btn" tooltip-start-info="button" ng-class="{ \r\n                    \'selected\': button.isSelected(), \r\n                    \'nostart\': !button.active, \r\n                    \'disabled\': legMarksRow.isDisabled(button), \r\n                    \'scratched\': button.scratched(), \r\n                    \'selectable\': button.canSelect }">{{::button.startNumber}}<\/a><\/li><\/ul>');n.put("gamewindow/components/ticket-view/common/ng.markings-button.tpl.html",'<button type="button" class="markings-lst__btn selectable" ng-class="markingsButton.getClasses(markingsButton.fixedClasses)" ng-click="markingsButton.select({start: markingsButton.start})">{{::markingsButton.text}}<\/button>');n.put("gamewindow/components/ticket-view/views/andel/qplus/ng.qplus-andel-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Andel-bongen:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynShare.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynShare.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/andel/v-game/ng.v-game-andel-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Din andel utgjør {{lynShare.splitText}} av spillet. Ved gevinst vil du få utbetalt {{lynShare.splitText}} av premiebeløpet:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynShare.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynShare.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lynbanker/qplus/ng.qplus-lynbanker-markings.tpl.html",'<div><table class="base-tbl markings-tbl" id="markings"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Plass<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Rundt<\/th><\/tr><\/thead><tbody ng-if="markingsTable.isReady" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-if="place < 6" ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}. plass<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" can-disable="true" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td class="base-tbl__cell--halign-center bg-grayblue"><input type="checkbox" ng-model="markingsTable.preSelectList.places[place]" ng-change="markingsTable.setPreselectedPlace(place)"><\/td><\/tr><tr ng-if="place == 6" class="base-tbl__data-row base-tbl__separatorRow" role="presentation"><td colspan="3"><\/td><\/tr><tr ng-if="place == 6" ng-click="markingsTable.setActiveRow(\'preselect\')" class="base-tbl__data-row markings-tbl__data-row bg-grayblue" ng-class="{\'selected\' : markingsTable.isActive(\'preselect\') }"><td><a href="">Rundthester<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="0" can-disable="true" status="markingsTable.status" select="markingsTable.select(start,0)"><\/leg-marks-row><\/td><td><\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/lynbanker/v-game/ng.v-game-lynbanker-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Avd<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left" title="Eget spill">E<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left" title="Alle">A<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Ant<\/th><\/tr><\/thead><tbody class="base-tbl__body markings-tbl__body"><tr ng-repeat="leg in markingsTable.userMarkings.legs" ng-click="markingsTable.userMarkings.updateSelectedRace(leg)" class="base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.userMarkings.isActive(leg) }"><td><a href="#">{{leg.legNo}}<span ng-if="markingsTable.hasDD(leg)">&nbsp;DD {{markingsTable.getDDLegNumber(leg)}}<\/span><\/a><\/td><td><leg-marks-row starts="markingsTable.userMarkings.getStartsForLeg(leg)" leg="markingsTable.userMarkings.getCurrentLeg()" can-select-no-start="markingsTable.userMarkings.canSelectNoStart" can-select-scratched="markingsTable.userMarkings.canSelectScratched" can-disable="false" leg-number="leg.legNo" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="E" select="leg.toggleOwnSelection()" is-selected="leg.isOwnSelected"><\/markings-button><\/td><td><markings-button text="A" select="markingsTable.userMarkings.selectAll(leg)" is-selected="markingsTable.userMarkings.isAllSelected(leg)"><\/markings-button><\/td><td>{{markingsTable.userMarkings.getNumberOfSelectionsForLeg(leg)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/lynsystem/trippel/ng.t-lynsystem-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynSystem.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynSystem..purchaseClickLyntoto({ price: price.value * 100 })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lynsystem/v-game/ng.v-game-lynsystem-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynSystem.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynSystem.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/plass/ng.p-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Plass<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}<\/a><\/td><td><leg-marks-row starts="markingsTable.userMarkings.selectedRace.starts" leg="markingsTable.userMarkings.getCurrentLeg()" can-select-no-start="markingsTable.userMarkings.canSelectNoStart" can-select-scratched="markingsTable.userMarkings.canSelectScratched" leg-number="place" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td>{{ markingsTable.userMarkings.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/qplus/ng.qplus-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl" id="markings"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Plass<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Rundt<\/th><\/tr><\/thead><tbody ng-if="markingsTable.isReady" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places track by place"><tr ng-if="place < 6" ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}. plass<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" can-disable="true" status="markingsTable.status" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td class="base-tbl__cell--halign-center bg-grayblue"><input type="checkbox" ng-model="markingsTable.preSelectList.places[place]" ng-change="markingsTable.setPreselectedPlace(place)"><\/td><\/tr><tr ng-if="place == 6" class="base-tbl__data-row base-tbl__separatorRow" role="presentation"><td colspan="3"><\/td><\/tr><tr ng-if="place == 6" ng-click="markingsTable.setActiveRow(\'preselect\')" class="base-tbl__data-row markings-tbl__data-row bg-grayblue" ng-class="{\'selected\' : markingsTable.isActive(\'preselect\') }"><td><a href="">Rundthester<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="0" can-disable="true" status="markingsTable.status" select="markingsTable.select(start,0)"><\/leg-marks-row><\/td><td><\/td><\/tr><tr ng-if="place == 6" ng-click="markingsTable.setActiveRow(place)" class="base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }"><td><a href="">Reserve<\/a><\/td><td><leg-marks-row starts="markingsTable.getStartsForLeg(markingsTable.selectedLeg)" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" can-disable="true" status="markingsTable.status" select="markingsTable.select(start,6)"><\/leg-marks-row><\/td><td><\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/lynsystem/duo/ng.duo-lynsystem-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lynSystem.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lynSystem.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/trippel/ng.t-vanlig-markings.tpl.html","<div>TRIPPEL!<\/div>");n.put("gamewindow/components/ticket-view/views/vanlig/tvilling/ng.tv-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th"><\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Alle<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}<\/a><\/td><td><leg-marks-row starts="markingsTable.selectedRace.starts" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="A" select="markingsTable.selectAll(place)" is-selected="markingsTable.isAllSelected(place)"><\/markings-button><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/v-game/ng.v-game-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Avd<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Alle<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody class="base-tbl__body markings-tbl__body"><tr quick-ng-repeat="leg in markingsTable.legs" ng-click="markingsTable.userMarkings.updateSelectedRace(leg)" class="base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : leg === markingsTable.selectedLeg }"><td><a href="#">{{leg.legNo}}<span ng-if="markingsTable.hasDD(leg) && markingsTable.showDdIndicators">&nbsp;DD {{markingsTable.getDDLegNumber(leg)}}<\/span><\/a><\/td><td><leg-marks-row starts="markingsTable.userMarkings.getStartsForLeg(leg)" leg="markingsTable.selectedLeg" bet-type-code="markingsTable.betTypeCode" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" can-disable="false" status="markingsTable.status" leg-number="leg.legNo" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td><markings-button text="A" select="markingsTable.userMarkings.selectAll(leg)" is-selected="markingsTable.userMarkings.isAllSelected(leg)"><\/markings-button><\/td><td>{{markingsTable.userMarkings.getNumberOfSelectionsForLeg(leg)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/vanlig/vinner/ng.v-vanlig-markings.tpl.html",'<div><table class="base-tbl markings-tbl"><thead class="markings-tbl__head"><tr><th class="base-tbl__th markings-tbl__th">Plass<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Hester<\/th><th class="base-tbl__th markings-tbl__th markings-tbl__cell--border-left">Antall<\/th><\/tr><\/thead><tbody ng-click="markings.setActiveRow(place)" class="base-tbl__body markings-tbl__body base-tbl__data-row markings-tbl__data-row" ng-class="{\'selected\' : markingsTable.isActive(place) }" ng-repeat="place in markingsTable.places"><tr ng-click="markingsTable.setActiveRow(place)" class=""><td><a href="#">{{::place}}<\/a><\/td><td><leg-marks-row starts="markingsTable.selectedRace.starts" leg="markingsTable.selectedLeg" can-select-no-start="markingsTable.canSelectNoStart" can-select-scratched="markingsTable.canSelectScratched" leg-number="place" select="markingsTable.select(start, place)"><\/leg-marks-row><\/td><td>{{ markingsTable.numberOfSelections(place)}}<\/td><\/tr><\/tbody><\/table><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/qplus/ng.qplus-lyntoto-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/tvilling/ng.tv-lyntoto-markings.tpl.html",'<div><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/v-game/ng.v-game-lyntoto-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>');n.put("gamewindow/components/ticket-view/views/lyntoto/trippel/ng.t-lyntoto-markings.tpl.html",'<div><header class="header-border"><\/header><div class="button-field padding-top--md padding-left-md"><p class="button-field__title margin-bottom--lg margin-top--md"><strong class="ng-binding">Velg verdi på Lyntoto:<\/strong><\/p><div class="margin-bottom--lg button-field__btn-container"><button ng-repeat="price in lyntoto.priceInfo.displayItems" type="button" class="button-field__btn btn--dark ng-binding ng-scope" ng-click="lyntoto.purchaseClickLyntoto({ price: price.value })">kr {{price.name | formatNumber:\'0\'}}<\/button><\/div><div class="margin-bottom--lg button-field__manual-input-container"><label>Eller skriv inn eget beløp å spille for:<\/label><input type="text" value="" ng-model="lyntoto.manualPriceInput"><button type="button" class="btn--light" ng-click="lyntoto.purchaseClickLyntoto({ price: lyntoto.manualPriceInput*100 })">Kjøp spill<\/button><\/div><\/div><\/div>')}]),function(){"use strict";function n(){function n(){return"duoRowCalculator"}function t(n){var r=_.toArray(n),t=_.filter(r,function(n){return n.length>0});if(!t||t.length<2)return 0;var u=t[0]||[],f=t[1]||[],i=0;return _.forEach(u,function(n){_.forEach(f,function(t){n!==t&&n!==t&&i++})}),i}return{calculate:t,getName:n}}angular.module("rikstoto.clients.js.calculators").factory("duoRowCalculator",n)}(),function(){"use strict";function n(){function t(n){return i(n)}function i(t){var f=r(t),e,i,u,o,s;return(delete f[0],delete f[6],e=_.chain(f).toArray().take(5).value(),i=_.maxBy(e,function(n){return(n||{length:0}).length}),i=i||{length:0},u=i.length,0===u)?0:(o=n(u-_.filter(e,function(n){return n.length>1}).length),0===o)?0:(s=n(u),s/o)}function r(n){var t={};return _.forEach(n,function(n,i){t[i]=n}),t}function n(n){if(n<0||isNaN(n))return 0;for(var t=1;n>0;)t*=n,n--;return t}return{calculate:t}}angular.module("rikstoto.clients.js.calculators").factory("qplusRowCalculator",n);n.$inject=[]}(),function(){"use strict";function n(){function n(n){var t=_.toArray(n);return 0===t.length?0:_.chain(t).filter(function(n){return n.length>0}).reduce(function(n,t){return n*t.length},1).value()}return{calculate:n}}angular.module("rikstoto.clients.js.calculators").factory("regularRowCalculator",n)}(),function(){"use strict";function n(n,t,i,r,u,f,e){function s(){o[n.QPlus.code]=i;o[n.VP.code]=r;o[n.TV.code]=u;o[n.T.code]=f;o[n.DUO.code]=e}function h(i){return"string"==typeof i&&(i=n[i]),i&&o[i.code]?o[i.code]:t}var c={get:h},o={};return s(),c}angular.module("rikstoto.clients.js.calculators").factory("rowCalculatorFactory",n);n.$inject=["betTypeCode","regularRowCalculator","qplusRowCalculator","vpRowCalculator","tvRowCalculator","tRowCalculator","duoRowCalculator"]}(),function(){"use strict";function n(){function n(){return"tRowCalculator"}function t(n){var r=_.toArray(n),t=_.filter(r,function(n){return n.length>0});if(!t||0===t.length)return 0;if(t.length<3)return 1;var u=t[0],f=t[1]||[],e=t[2]||[],i=0;return _.forEach(u,function(n){_.forEach(f,function(t){n!==t&&_.forEach(e,function(r){n!==r&&t!==r&&i++})})}),i}return{calculate:t,getName:n}}angular.module("rikstoto.clients.js.calculators").factory("tRowCalculator",n)}(),function(){"use strict";function n(){function n(){return"tvRowCalculator"}function t(n){var f=_.toArray(n),t=_.filter(f,function(n){return n.length>0});if(1===t.length)return t[0].length*(t[0].length-1)/2;var e=t[0],i=0,r=t[1],u=e;return _.forEach(r,function(n){_.forEach(u,function(t){n!==t&&(t<n?i++:r.indexOf(t)===-1?i++:u.indexOf(n)===-1&&i++)})}),i}return{calculate:t,getName:n}}angular.module("rikstoto.clients.js.calculators").factory("tvRowCalculator",n)}(),function(){"use strict";function n(){function n(n){var t=_.toArray(n);return 0===t.length?0:2*t[0].length}return{calculate:n}}angular.module("rikstoto.clients.js.calculators").factory("vpRowCalculator",n)}(),function(){"use strict";function n(n,t,i,r,u,f,e){function o(n){var t=this;t.marks=n.marks||{};t.product=n.product;t.raceDate=moment.isMoment(n.raceDate)?n.raceDate:moment(n.raceDate);t.track=n.track;t.rowPrice=n.rowPrice;t.betMethod=n.betMethod;t.maxPrice=n.maxPrice;t.ownGames=n.ownGames;t.ean=n.ean;t.isAllIn=n.isAllIn;t.raceNumber=n.raceNumber;t.rowPriceStep=n.rowPriceStep;t.fraction=t.product!==r.QPlus?f[100]:"string"==typeof n.fraction||"number"==typeof n.fraction?f[n.fraction]:n.fraction;t.organization=n.organization;t.numberOfDays=n.numberOfDays;t.$dirty=!1}function s(n){return i.fromBitmap(n,10)}function h(n){for(var r,u={},t=1;t<=7;t++)r=n["s"+t],r&&0!=r&&(u[t]=i.fromBitmap(r,10));return u}return o.prototype={clean:function(){this.$dirty=!1},update:function(n){var i,t=this;t.$dirty=t.$dirty||_.chain(t.marks).toArray().flatten().value().join("-")!==_.chain(n.marks).toArray().flatten().value().join("-");t.marks=n.marks;!i&&t.$dirty&&(i="marks");t.$dirty=t.$dirty||t.product!==n.product;t.product=n.product;!i&&t.$dirty&&(i="product");t.$dirty=t.$dirty||t.raceDate.format("YYYY-MM-DD")!==n.raceDate.format("YYYY-MM-DD");t.raceDate=n.raceDate;!i&&t.$dirty&&(i="raceDate");t.$dirty=t.$dirty||t.track!==n.track;t.track=n.track;!i&&t.$dirty&&(i="track");t.$dirty=t.$dirty||t.rowPrice!==n.rowPrice;t.rowPrice=n.rowPrice;!i&&t.$dirty&&(i="rowPrice");t.$dirty=t.$dirty||t.betMethod!==n.betMethod;t.betMethod=n.betMethod;!i&&t.$dirty&&(i="betMethod");t.$dirty=t.$dirty||t.maxPrice!==n.maxPrice;t.maxPrice=n.maxPrice;!i&&t.$dirty&&(i="maxPrice");t.$dirty=t.$dirty||_.chain(t.ownGames).toArray().flatten().value().join("-")!==_.chain(n.ownGames).toArray().flatten().value().join("-");t.ownGames=n.ownGames;!i&&t.$dirty&&(i="ownGames");t.$dirty=t.$dirty||t.ean!==n.ean;t.ean=n.ean;!i&&t.$dirty&&(i="ean");t.$dirty=t.$dirty||t.isAllIn!==n.isAllIn;t.isAllIn=n.isAllIn;!i&&t.$dirty&&(i="isAllIn");isNaN(t.raceNumber)&&isNaN(n.raceNumber)||!t.product.isSingleLegGame()||(t.$dirty=t.$dirty||t.raceNumber!==n.raceNumber,t.raceNumber=n.raceNumber,!i&&t.$dirty&&(i="raceNumber"));t.$dirty=t.$dirty||t.rowPriceStep!==n.rowPriceStep;t.rowPriceStep=n.rowPriceStep;!i&&t.$dirty&&(i="rowPriceStep")},allLegsHaveMarks:function(){return!this.product||this.product.getNumberOfSelectionfields()===_.toArray(this.marks).length},getNumberOfRows:function(){return e.get(this.product).calculate(this.marks,this.betMethod)},getEstimatedTotalPrice:function(){var n=this.getNumberOfRows()*(this.rowPrice||1);return this.fraction&&(n=n*this.fraction.code/100),n},serializeToBetDataString:function(){return o.serializeToBetDataString(this.raceDate,this.track,this.product,this)}},o.load=function(n){return new o(n)},o.serializeToBetDataString=function(n,i,f,e){var o,s,h;if(!n||!i||!f)return"";if(o=angular.extend({raceDate:n,track:i,product:f},e),s=[],s.push(t.getDateSection(o.raceDate)),s.push(t.getTrackSection(o.track)),s.push(t.getBetTypeSection(o.product)),o.ownGames&&s.push(t.getOwnGameSection(o.ownGames)),o.organization&&s.push(t.getOrganizationSection(o.organization)),o.maxPrice&&s.push(t.getMaxPriceSection(o.maxPrice)),o.isAllIn&&s.push(t.getFirstPriceOnlyBetSection(o.isAllIn)),o.fraction&&s.push(t.getFractionSection(o.fraction)),o.rowPrice&&s.push(t.getRowPriceSection(o.rowPrice)),o.betMethod&&("string"==typeof o.betMethod&&(o.betMethod=u[o.betMethod]),s.push(t.getSellTypeSection(o.betMethod.name))),o.marks)for(h in o.marks)if(0===parseInt(h)){if(o.betMethod!==u.lynBanker||o.product!==r.QPlus)continue;s.push(t.getLegMarksSection(parseInt(6),o.marks[0]))}else s.push(t.getLegMarksSection(parseInt(h),o.marks[h]));return o.ean&&s.push(t.getEanSection(o.ean)),o.raceNumber&&s.push(t.getRaceNumberSection(o.raceNumber)),o.numberOfDays&&s.push(t.getNumberOfDaysSection(o.numberOfDays)),s.join("|")},o.parse=function(t){var c=t.split("|"),e=_.reduce(c,function(n,t){var i=t.split(":");return n[i[0]]=i[1],n},{}),i={};return i.marks=h(e),i.product=r[e[n.KeyBetType]],i.raceDate=e[n.KeyDate],i.track=e[n.KeyTrack],i.rowPrice=parseInt(e[n.KeyRowPrice],10),i.betMethod=u[parseInt(e[n.KeySellType],10)],i.maxPrice=parseInt(e[n.KeyMaxPrice],10),i.raceNumber=parseInt(e[n.KeyRaceNumber],10),i.ownGames=s(e[n.KeyOwnGame]),i.isAllIn="1"===e[n.KeyFirstPriceOnlyBet],i.fraction=f[parseInt(e[n.KeyFraction]||100,10)],i.organization=e[n.KeyOrganization]||"NR",i.numberOfDays=parseInt(e[n.KeyNumberOfDays],10),new o(i)},o}n.$inject=["betDataDefinition","betDataHelper","bitMapper","betTypeCode","betMethod","fractionValue","rowCalculatorFactory"];angular.module("rikstoto.clients.js.models").factory("BetData",n)}(),function(){"use strict";function n(n){function t(n){var t=this;t.displayName=n.DisplayName;t.displayNameTrimmed=t.getDisplayNameTrimmed()}return t.prototype={getDisplayNameTrimmed:function(t){return n("trim")(this.displayName,t||15,"...")}},t.load=function(n){return new t(n)},t}n.$inject=["$filter"];angular.module("rikstoto.clients.js.models").factory("Driver",n)}(),function(){"use strict";function n(n,t,i,r,u,f){function e(t){var i=this;i.date=moment(t.RaceInfo.Date);i.raceType=n[t.SportType];i.disqualified=t.ResultInfo.Disqualified;i.disqualifiedReason=t.ResultInfo.DisqualifiedReason;i.driver=t.StartInfo.DriverDisplayName;i.lane=t.StartLane;i.scratched=t.ResultInfo.Scratched;i.completed=t.Completed;i.distance=t.StartInfo.Distance;i.place=t.ResultInfo.Place;i.time=t.ResultInfo.DispKmt;i.trackCode=t.RaceInfo.Track.TrackKey.Code;i.startNumber=t.StartInfo.StartNo;i.raceNumber=t.RaceInfo.RaceNo;i.raceType=r[t.StartInfo.SportType];i.firstPrize=t.RaceInfo.FirstPrize.Amount/100;i.currency=t.Currency;i.distanceToWinner=f.getDistanceTranslation(t.DistanceToWinner);i.performanceShortString=this.getPerformanceShortString();i.placeDisplayText=this.getPlaceDisplayText()}return e.prototype={getFirstPriceInNok:function(n){return u("currency")(this.firstPrize*n,"",0)},getPerformanceShortString:function(){var n=99===this.raceNumber?"-":this.raceNumber;return i.format("{0}-{1}/{2}{3}",this.date.format("DD/MM"),n,this.startNumber,this.getStartTypeModifier())},getStartTypeModifier:function(){return this.raceType===r.Monte?"m":""},getPlaceDisplayText:function(){return 0===this.place?"-":this.place},getLaneDisplayText:function(){return 0===this.lane?"-":this.lane},getToolTipText:function(n){var t=this.disqualified?this.getDisqualifiedReason():""+this.getPlaceTooltipText(),r=99===this.raceNumber?"program.details.tooltip.text.missingRaceNumber":"program.details.tooltip.text";return i.format(lang.translate(r),n.horse.displayName,t,this.raceNumber,this.date.format("DD.MM.YYYY"))},getDisqualifiedReason:function(){var n=t("program.text.disqualified."+(this.disqualifiedReason||""));return"Missing:"===n.substr(0,8)?t("program.text.disqualified.unknown"):n},getPlaceTooltipText:function(){return 0===this.place?"fikk ikke en plassering":"ble nr. "+this.place}},e.load=function(n){return new e(n)},e}n.$inject=["racetype","translate","string","racetype","$filter","gallopDistanceService"];angular.module("rikstoto.clients.js.models").factory("FormRow",n)}(),function(){"use strict";function n(n,t,i){function r(n){var i=this;i.details=t.load(n.Details);i.displayName=n.DisplayName;i.displayNameTrimmed=i.getDisplayNameTrimmed();i.displayNameTrimmedTriple=i.getDisplayNameTrimmed(10)}return r.prototype={getDisplayNameTrimmed:function(n){return i("trim")(this.displayName,n||15,"...")}},r.load=function(n){return new r(n)},r}n.$inject=["modelMapper","HorseDetails","$filter"];angular.module("rikstoto.clients.js.models").factory("Horse",n)}(),function(){"use strict";function n(n){function t(t){var i=this,r=(t.TotalStatistics||{Income:{Amount:0}}).Income.Amount,u=(t.TotalStatistics||{IncomeCurr:"EUR"}).IncomeCurr;i.income=n("currency")(r/100,"",0).trim();i.incomeRaw=r/100;i.incomeCurrency=u;i.age=t.Age;i.sex=t.Sex}return t.load=function(n){return new t(n)},t}n.$inject=["$filter"];angular.module("rikstoto.clients.js.models").factory("HorseDetails",n)}(),function(){"use strict";function n(n,i){function r(r){var u=this;r=_.defaults(r||{},t);u.allowAllIn=r.AllowAllIn;u.allowedLynBetMethods=[];r.AllowLyn&&(u.allowedLynBetMethods.push(i.lynToto),u.allowedLynBetMethods.push(i.lynSystem));r.AllowLynBanker&&u.allowedLynBetMethods.push(i.lynBanker);r.AllowLynBundle&&u.allowedLynBetMethods.push(i.lynBundle);r.AllowLynShare&&u.allowedLynBetMethods.push(i.lynShare);r.AllowMultiday&&u.allowedLynBetMethods.push(i.multiDay);u.isSuper=r.IsSuper;u.legNo=r.LegNo;u.multiLegGameProgress=r.MultiLegGameProgress;u.openForBet=r.OpenForBet;u.raceNo=r.RaceNo;u.betTypeCode=n[r.BetType.Code];u.isMerged=r.IsMerged;u.isOwnSelected=!1;u.readOnly=!1;u.ownSelectedPlaces=[];u.betTypeCode&&(u.displayName=u.betTypeCode.presentAsShortText(),u.betTypeCode.isMultiLegGame()&&(u.displayName+="-"+u.legNo))}return r.prototype={update:function(n){var t=this;t.allowAllIn=n.allowAllIn;t.allowedLynBetMethods=n.allowedLynBetMethods;t.isSuper=n.isSuper;t.multiLegGameProgress=n.multiLegGameProgress;t.openForBet=n.openForBet},isBetMethodAllowed:function(n){return!!n.isSkillGame()||this.allowedLynBetMethods.indexOf(n)>-1},isOwnSelectedFor:function(n){return this.ownSelectedPlaces.indexOf(n)>-1},setOwnSelectionForPlace:function(n){this.readOnly||(this.ownSelectedPlaces=_.union(this.ownSelectedPlaces,[n]))},removeOwnSelectionForPlace:function(n){this.readOnly||(this.ownSelectedPlaces=_.without(this.ownSelectedPlaces,n))},toggleOwnSelectionForPlace:function(n){if(!this.readOnly){var t=this;this.isOwnSelectedFor(n)?t.removeOwnSelectionForPlace(n):t.setOwnSelectionForPlace(n)}},toggleOwnSelection:function(){this.readOnly||(this.isOwnSelected=!this.isOwnSelected)},setReadOnly:function(n){this.readOnly=n}},r.load=function(n){return new r(n)},r}var t={AllowAllIn:!1,AllowLyn:!1,AllowLynBanker:!1,AllowLynShare:!1,AllowMultiday:!1,IsSuper:!1,LegNo:0,MultiLegGameProgress:null,BetType:{Code:99},IsMerged:!1};n.$inject=["betTypeCode","betMethod"];angular.module("rikstoto.clients.js.models").factory("Leg",n)}(),function(){"use strict";function n(){function n(n){var t=this;n=_.defaults(n||{},{name:"",data:{}});t.name=n.name;t.items=[];t.hasSubItems=function(){return t.items.length>0};t.data=n.data;t.parent=n.parent;t.selected=!1;t.order=n.order;t.shortName=n.shortName}return n.prototype={clear:function(){this.items=[]},selectSubMenuItem:function(n){var t,i=this;return _.forEach(i.items,function(n){n.selected&&n.deselect()}),_.forEach(i.items,function(i){i===n?(i.select(),t=i):i.selected&&i.deselect()}),t},select:function(){return this.selected=!0,this},deselect:function(){this.selected=!1;_.invokeMap(this.items,"deselect")},getSelectedSubItem:function(){var n=this;return _.find(n.items,"selected")},addSubItem:function(n){n.parent=this;var t=this.items;t.push(n);this.items=_.sortBy(t,"order")},addSubItems:function(n){var t=this;n instanceof Array||(n=_.toArray(arguments));_.forEach(n,function(n){t.addSubItem(n)})},isLegMenuVisible:function(){var n=this.data;return!(!n.betMethod||!n.betTypeCode)&&!n.betMethod.isMultiDay()&&(!(!n.betTypeCode.isSingleLegGame()||!n.betMethod.isLynGame())||!!n.betMethod.isSkillGame())}},n.load=function(t){return new n(t)},n}n.$inject=["$q"];angular.module("rikstoto.clients.js.models").factory("MenuItem",n)}(),function(){"use strict";function n(){function n(n){var t={},i=_.keysIn(n);return _.forEach(i,function(i){t[_.camelCase(i)]=n[i]}),t}function t(t,i){var r=n(i);return _.assign(t,r)}return{map:t}}angular.module("rikstoto.clients.js.models").factory("modelMapper",n);n.$inject=[]}(),function(){"use strict";function n(){function n(n){function i(n){if(_.isString(n))return i(n.split(/\D/g));if(_.isArray(n))return _.chain(n).map(function(n){return parseInt(n)}).filter(function(n){return!isNaN(n)}).value();throw new Error("Invalid combination-data");}var t=this;t.combination=i(n.Combination);n.TotalInvestment&&(n.Amount=n.TotalInvestment);t.totalInvestment="number"==typeof n.Amount?parseInt(n.Amount):parseInt(n.Amount.Amount);t.rank=n.Rank}return n.prototype={isSameAs:function(n){return n.combination.join("-")===this.combination.join("-")},update:function(n){this.totalInvestment=n.totalInvestment;this.rank=n.rank}},n.load=function(t){return new n(t)},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("MostPlayedCombination",n)}(),function(){"use strict";function n(){function n(n){var t=this;n=_.extend({TotalInvestment:{Amount:0},OddsMarksLastUpdated:null},n);n&&(t.investment=(n.TotalInvestment||{Amount:0}).Amount/100);n.OddsMarksLastUpdated&&(t.oddsLastUpdated=moment(n.OddsMarksLastUpdated))}return n.load=function(t){return new n(t)},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("MultiLegDetails",n)}(),function(){"use strict";function n(n,t,i,r){function u(u){function e(){return f.betTypeCode.name}var f=this;f.allowedLynBetMethods=[];u.AllowLynBanker&&f.allowedLynBetMethods.push(r.lynBanker);u.AllowLynBundle&&f.allowedLynBetMethods.push(r.lynBundle);u.AllowLynShare&&f.allowedLynBetMethods.push(r.lynShare);u.AllowMultiday&&f.allowedLynBetMethods.push(r.multiDay);f.openForBet=u.OpenForBet;f.legs=_.map(u.Legs,n.load);f.betTypeCode=t[u.BetType.Code];f.details=i.load(u.Details);f.displayName=e;f.hasJackpot=u.HasJackpot;f.hasBonus=u.HasBonus;u.AllowLyn&&(f.allowedLynBetMethods.push(r.lynToto),f.betTypeCode!==t.DD&&f.allowedLynBetMethods.push(r.lynSystem))}return u.load=function(n){return new u(n)},u}n.$inject=["Leg","betTypeCode","MultiLegDetails","betMethod"];angular.module("rikstoto.clients.js.models").factory("MultiLegGame",n)}(),function(){"use strict";function n(n,t){function i(t){var i=this;i.isValid=!!t.LegType;i.startNo=[];i.raceNumber=t.RaceNo;i.odds=t.Odds;i.betTypeCode=n[t.LegType];i.max=t.Max||0;i.min=t.Min||0;i.previous;i.updateTime;i.updateTime=t.CurrentOddsUpdateTime?moment.isMoment(t.CurrentOddsUpdateTime)?t.CurrentOddsUpdateTime:moment(t.CurrentOddsUpdateTime):moment();i.startNo=i.betTypeCode===n.DD?[t.DD1,t.DD2]:i.betTypeCode===n.TV?[t.Start1,t.Start2]:i.betTypeCode===n.DUO?[t.Start1,t.Start2]:i.betTypeCode===n.T?[t.Start1,t.Start2,t.Start3]:[t.StartNo];i.oddsValueFormatted=this.getOddsValueFormatted();i.maxValueFormatted=this.getMaxValueFormatted();i.minValueFormatted=this.getMinValueFormatted()}return i.prototype={getOddsValueFormatted:function(){return 0===this.odds?"-":t("formatNumber")(this.odds,1,"-")},getMaxValueFormatted:function(){return 0===this.max?"-":t("formatNumber")(this.max,1,"-")},getMinValueFormatted:function(){return 0===this.min?"-":t("formatNumber")(this.min,1,"-")},update:function(n){var t=this,i;return n.updateTime&&"string"==typeof n.updateTime&&(n.updateTime=moment(n.updateTime)),i=n.updateTime.diff(t.updateTime,"minutes"),i<0?(n.isValid=!0,t.previous=n,void(t.isValid=!0)):(i>0&&(t.previous=angular.copy(t)),t.updateTime=moment.isMoment(n.updateTime)?n.updateTime:moment(),t.odds=n.odds,t.max=n.max,t.min=n.min,t.isValid=!0,self.oddsValueFormatted=this.getOddsValueFormatted(),self.maxValueFormatted=this.getMaxValueFormatted(),void(self.minValueFormatted=this.getMinValueFormatted()))},getTrend:function(){return this.previous&&0!==this.previous&&this.previous.odds!==this.odds?this.previous.odds>this.odds?-1:1:0}},i.createEmpty=function(){return new i({Max:0,Min:0,Odds:0,CurrentOddsUpdateTime:moment().hours(0)})},i.load=function(n){return new i(n)},i}n.$inject=["betTypeCode","$filter"];angular.module("rikstoto.clients.js.models").factory("Odds",n)}(),function(){"use strict";function n(){function n(){var n=this;n.places={}}return n.prototype={reset:function(){self.places={}}},n.load=function(){return new n},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("PreSelectList",n)}(),function(){"use strict";function n(n,t){function i(i){var r=this;r.category=n[t.toCamelCase(i.Category)];r.points=parseInt(i.Points)}return i.load=function(n){return new i(n)},i}n.$inject=["pressRankCategory","string"];angular.module("rikstoto.clients.js.models").factory("PressRank",n)}(),function(){"use strict";function n(){function n(n,t){var i=this;i.association=n.Association;i.author=n.Author;i.quarteGap=n.QuarteGap;i.quartePoints=n.QuartePoints;i.quinteGap=n.QuinteGap;i.quintePoints=n.QuintePoints;i.raceDayKey=n.RaceDayKey;i.raceNumber=n.RaceNumber;i.rank=n.Rank;i.selection=t;i.tierceGap=n.TierceGap;i.tiercePoints=n.TiercePoints;i.totalPoints=n.TotalPoints}return n.load=function(t,i){return new n(t,i)},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("PressTips",n)}(),function(){"use strict";function n(n,t,i){function r(r,f){function o(){return f?r.Steps||r.PredefinedSuperPrices:r.Steps=r.Steps||r.PredefinedPrices}function s(){return f?r.SuperMinPrice.Amount?r.SuperMinPrice.Amount:r.SuperMinPrice:r.MinPrice.Amount?r.MinPrice.Amount:r.MinPrice}function h(){return e.betTypeCode&&e.betMethod?e.betTypeCode===i.QPlus&&[t.lynBanker,t.vanlig].indexOf(e.betMethod)>-1?_.map(n.$properties,function(t){var i=n[t];return u(i.presentAsText(e.defaultRowPrice/100),e.defaultRowPrice,i)}):_.map(e.steps,function(t){return u(t/100,t,n.full,_.some(e.steps,function(n){return n<100}))}):[]}function c(){return _.map(e.steps,function(t){return u(t/100,t,n.full)})}function l(){return e.betTypeCode&&e.betMethod?e.betTypeCode===i.QPlus&&[t.lynBanker,t.vanlig].indexOf(e.betMethod)>-1?e.displayItems[0]:_.find(e.displayItems,{value:e.defaultRowPrice}):null}r=upperCaseProperties(r);var e=this;r&&(r.Steps=o());r=_.defaults(r||{},{MaxPrice:0,MinPrice:0,Steps:[],DefaultRowPrice:0});e.maxPrice=r.MaxPrice.Amount?r.MaxPrice.Amount:r.MaxPrice;e.minPrice=s();e.steps=_.map(o(),function(n){return n.Amount?n.Amount:n});e.defaultRowPrice={defaultRowPrice:(r.DefaultRowPrice||{Amount:0}).Amount||r.DefaultRowPrice}.defaultRowPrice||0;e.betMethod="number"==typeof r.BetMethod||"string"==typeof r.BetMethod?t[r.BetMethod.toString().toLowerCase()]:r.BetMethod;r.Product&&!r.BetType&&(r.BetType=r.Product);e.betTypeCode="number"==typeof r.BetType||"string"==typeof r.BetType?i[r.BetType]:r.BetTypeCode;e.displayItems=h();e.stepDisplayItems=c();e.defaultStep=e.stepDisplayItems[0];e.defaultSelection=l();e.rowPriceStep=r.RowPriceStep;e.multiDayPrices=_.map(r.MultiDayPrices,function(n){return{days:n.Key,price:n.Value.Amount,displayPrice:n.Value.Amount/100}});e.feeInfo=r.feeInfo||r.FeeInfo}function u(n,t,i,r){function u(n){return r?n.toFixed(2).toString().replace(/\./,","):n.toString()}return{name:u(n),value:t,fraction:i}}return r.prototype={getEstimatedFee:function(n){var t=Math.ceil(n/this.feeInfo.StepAmount),i=Math.min(t,this.feeInfo.TotalSteps);return i*this.feeInfo.StepFee},overrideDefaultSelection:function(t,i,r){var u,f;(i&&"string"==typeof i||"number"==typeof i?i=n[i]:i||(i=n.full),"string"!=typeof t&&"number"!=typeof t||(t={value:t,name:(t/100).toString(),fraction:i||n[100]}),t.fraction=t.fraction||i,r)&&(u=_.find(this.stepDisplayItems,function(n){return n.value===r}),u&&(this.defaultStep=u));isNaN(t.value)||(f=_.find(this.displayItems,function(n){return t.value===n.value&&t.fraction===n.fraction}),this.defaultSelection=f?f:t)},reset:function(){this.maxPrice=0;this.minPrice=0;this.steps=[];this.defaultRowPrice=0;this.defaultSelection=null;this.defaultStep=null;this.stepDisplayItems=[];this.displayItems=[];this.betMethod=null;this.betTypeCode=null}},r.load=function(n,t){return new r(n,t)},r}n.$inject=["fractionValue","betMethod","betTypeCode"];angular.module("rikstoto.clients.js.models").factory("PriceInfo",n)}(),function(){"use strict";function n(){function n(n){var t=this;t.name=n.name;t.order=n.order;t.betTypeCodes=n.betTypeCodes;t.betMethods=n.betMethods}return n.prototype={isValidFor:function(n,t){return(this.betTypeCodes.indexOf(n)>-1||0===this.betTypeCodes.length)&&this.betMethods.indexOf(t)>-1}},n.create=function(t,i,r,u){return n.load({name:t,order:i,betTypeCodes:u,betMethods:r})},n.load=function(t){return new n(t)},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("ProgramInfoTab",n)}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){function a(n){var i=this,u,f,h;n=_.defaults(n||{},{Colour:"",Distance:0,Number:0,Name:"",StartMethod:"G"});i.colour=n.Colour;i.distance=n.Distance;i.number=n.Number;i.name=n.Name;i.singleLegGames=_.map(n.SingleLegGames,t.load);i.starts=y(n.Starts||[],i.getSingleLegGame(s.QPlus));i.startTime=moment(n.StartTime);i.legs=_.map(n.Legs,r.load);i.startMethod=o[n.StartMethod];i.raceForm=c[n.RaceForm]||c.Ukjent;i.odds=[];i.mostPlayedCombinations=[];i.pressTips=[];i.openForBet=n.OpenForBet;i.stableOdds=_.map(n.StableOdds,e.load);i.legsMapped={};i.startsMapped={};_.forEach(this.starts,function(n){i.startsMapped[n.startNo]=n});_.forEach(this.legs,function(n){i.legsMapped[n.betTypeCode.code]={legNo:n.legNo,leg:n}});i.preselectList={legs:{}};u=_.map(n.TvillingOdds,function(n){return n.LegType="TV",n});i.loadOdds(u);f=_.map(n.DuoOdds,function(n){return n.LegType="DUO",n});i.loadOdds(f);h=_.map(n.TripleOdds,function(n){return n.LegType="T",n});i.loadOdds(h);i.loadStableOdds(i.stableOdds)}function y(t,i){var r;return i&&(r=i.details.oddsLastUpdated,_.forEach(t,function(n){_.extend(n,{OddsLastUpdated:r})})),_.map(v(t,h.TOTAL_NUMBER_OF_STARTS),n.load)}function v(n,t){if(!t)return n;var i=_.range(n.length,t),r=_.chain(i).map(function(n){return{StartNo:n+1,Active:!1}}).value();return n.concat(r)}return a.prototype={setReadOnly:function(n){this.readOnly=n;_.forEach(this.starts,function(t){t.setReadOnly(n)});_.forEach(this.legs,function(t){t.setReadOnly(n)})},update:function(n,t){var i=this,r;_.forEach(n.singleLegGames,function(n){i.getSingleLegGame(n.betTypeCode).update(n,t)});r=i.getSingleLegGame(s.QPlus);_.forEach(n.starts,function(n){r&&_.forEach(n.odds,function(n){n.updateTime||(n.updateTime=r.details.oddsLastUpdated)});var u=i.getStart(n.startNo);u.update(n,t)});_.forEach(n.legs,function(n){i.getLeg(n.betTypeCode).update(n,t)});i.colour=n.colour;i.distance=n.distance;i.name=n.name;i.startTime=n.startTime;i.startMethod=n.startMethod;i.loadOdds(n.odds);i.openForBet=n.openForBet},loadMostPlayedCombinations:function(n,t){return t=t||this,_.isArray(n)?(t.mostPlayedCombinations=[],void _.forEach(upperCaseProperties(n),function(n){t.loadMostPlayedCombinations(n,t)})):(n.Rank&&(n=i.load(n)),void t.mostPlayedCombinations.push(n))},loadPressTips:function(n){var t=this;this.pressTips=_.map(upperCaseProperties(n),function(n){var i="string"==typeof n.Selection?n.Selection.split("-"):n.Selection,r=_.map(i,function(n){return t.getStart(parseInt(n))});return f.load(n,r)})},loadPressRank:function(n,t){if(t=t||this,_.isArray(n))return void _.forEach(upperCaseProperties(n),function(n){t.loadPressRank(n,t)});var i=t.getStart(n.startNo||n.HorseNo);if(!i)throw new Error("Attempted to load pressRank for start number "+(n.startNo||n.HorseNo)+" which doesn't exist");i.loadPressRank(n)},loadOdds:function(n){var t=this,i;if(_.isArray(n))return void _.forEach(n,function(n){t.loadOdds(n)});if(n.RaceNo||(n.RaceNo=this.number),n.betTypeCode||(n=u.load(n)),0!==n.odds){switch(n.betTypeCode){case s.QPlus:case s.V:case s.P:t.getStart(n.startNo[0]).loadOdds(n)}i=t.getOdds(n.startNo,n.betTypeCode);i&&i.isValid?i.update(n):t.odds.push(n)}},getOdds:function(n,t){var i;return"number"==typeof n||t?i=_.find(this.odds,function(i){var r=_.isArray(n)?n:[n];return i.betTypeCode===t&&i.startNo.join("-")===r.join("-")}):(t=n,i=_.filter(this.odds,function(n){return n.betTypeCode===t}))},loadStableOdds:function(n){var t=this;_.forEach(n,function(n){var i=t.getStart(n.startNo);i.loadStable(n)})},getStableOdds:function(n){return _.chain(this.stableOdds).filter(function(t){return t.betTypeCode===n}).uniqBy(function(n){return n.stable}).value()},getStart:function(n){return this.startsMapped[n]},loadStarts:function(t){this.starts=_.map(v(t,h.TOTAL_NUMBER_OF_STARTS),n.load)},getLegTypes:function(){return _.map(this.legs,function(n){return n.betTypeCode})},getLeg:function(n){return this.legsMapped[n.code]?this.legsMapped[n.code].leg:null},getSingleLegGame:function(n){return _.find(this.singleLegGames,function(t){return t.betTypeCode===n})},getLegNumber:function(n){return this.legsMapped[n.code].legNo||""},hasLeg:function(n,t){return t&&t!==l.vanlig?_.chain(this.legs).filter(function(n){return n.allowedLynBetMethods.indexOf(t)>-1}).some(function(t){return t.betTypeCode===n}).value():_.some(this.legs,function(t){return t.betTypeCode===n})},selectStart:function(n,t,i){var r=this;"number"==typeof n&&(n=r.getStart(n));n.select(t,i);r.preselectList.legs[t]=!1;0===t&&_.chain(r.starts).filter(function(n){return n.isToggled(0)}).forEach(function(n){_.forEach(r.preselectList.legs,function(t,i){t&&n.select(parseInt(i))})}).value()},deselectStart:function(n,t){"number"==typeof n&&(n=self.getStart(n));n.deSelect(t);0===t&&n.clearSelection()},clearPreselect:function(){this.preselectList={legs:{}}},setPreselect:function(n,t){var i=this;i.preselectList.legs[n]=t;i.preselectList.legs[n]?(_.chain(i.starts).forEach(function(t){t.deSelect(n)}).value(),_.chain(i.starts).filter(function(n){return n.isToggled(0)}).forEach(function(n){_.forEach(i.preselectList.legs,function(t,i){t&&n.select(parseInt(i))})}).value()):_.chain(i.starts).forEach(function(t){t.deSelect(n)}).value()}},a.load=function(n){return new a(n)},a}n.$inject=["Start","SingleLegGame","MostPlayedCombination","Leg","Odds","PressTips","StableOdds","startMethod","betTypeCode","gameSettings","raceForm","betMethod"];angular.module("rikstoto.clients.js.models").factory("Race",n)}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function s(r){var f=this;f.raceDayKey=n.load(r.RaceDayKey);f.openForBet=r.OpenForBet;f.name=r.Name;f.racetype=u[r.RaceType];f.races=_.map(r.Races,t.load);f.loadDDOdds(r.DDOdds);f.multiLegGames=_.map(r.MultiLegGames,i.load);f.multiLegGamesOpenForBet=[];f.singleLegGamesOpenForBet=[];f.lynProductsOpenForBet=[];f.allSingleAndMultiLegGamesOpenForBet=function(){return f.multiLegGamesOpenForBet.concat(f.singleLegGamesOpenForBet)};f.refreshData();f.legsCache={};f.readOnly=!1}return s.prototype={setReadOnly:function(n){this.readOnly=n;_.forEach(this.races,function(t){t.setReadOnly(n)})},update:function(n,t){var i=this;_.forEach(n.races,function(n){i.getRace(n.number).update(n,t||{})});i.multiLegGames=n.multiLegGames;i.openForBet=n.openForBet;i.refreshData()},updateSingleLegPoolFromApi:function(n){var t=o.mapSingleLegPool(n),i=s.loadFromApi(t);this.update(i)},updateMultiLegPoolFromApi:function(n){var t=this;o.mapStartsForLegs(t,n)},loadRaces:function(n){this.races=_.map(n,t.load)},getMarksFor:function(n){return _.chain(this.getAllStartsFor(n)).filter(function(n){return n.isToggled()}).map(function(n){var t={};return _.forEach(n.selectionStatus.legs,function(i){t[i]=[n.startNo]}),t}).reduce(function(n,t){return _.mergeWith(n,t,function(n,t){if(_.isArray(n))return n.concat(t)})},{}).value()},loadMarksFor:function(n,t,i,r){var u;if(n&&t)if(u=this,n.isSingleLegGame()){var o=this.getLegFor(n,i),s=u.getStartsForLeg(o),h=_.chain(t).toArray().flatten().value();_.forEach(t,function(t,i){_.forEach(t,function(o){var c=_.find(s,{startNo:o}),l;c.select(parseInt(i));l=_.countBy(h,_.identity)[o];(n===f.QPlus&&(t.length>1||l>1)||r===e.lynBanker&&n===f.QPlus&&6===parseInt(i))&&(c.setReadOnly(!1),c.select(0),c.setReadOnly(u.readOnly))})})}else _.forEach(this.getLegsFor(n,!0),function(n){_.forEach(t[n.legNo],function(t){var i=u.getStartForLeg(n,t);i.setReadOnly(!1);i.select(n);i.setReadOnly(u.readOnly)})})},loadOwnGames:function(n,t){if(n&&t)if(n.isSingleLegGame()){var i=_.first(this.getLegsFor(n));i.ownSelectedPlaces=t}else _.chain(this.getLegsFor(n)).forEach(function(n,i){t.indexOf(i+1)>-1&&(n.isOwnSelected=!0)}).value()},getOwnGamesFor:function(n){if(n.isSingleLegGame()){var t=_.first(this.getLegsFor(n));return t?t.ownSelectedPlaces:[]}return _.chain(this.getLegsFor(n)).filter("isOwnSelected").map(function(n){return n.legNo}).value()},refreshData:function(){var n=this;n.multiLegGamesOpenForBet=n.getMultiLegGamesOpenForBet();n.singleLegGamesOpenForBet=n.getSingleLegGamesOpenForBet();n.lynProductsOpenForBet=n.getLynProductsOpenForBet()},getRace:function(n){var t=this;return _.find(t.races,{number:n})},getGameForLeg:function(n,t){var i=this,r;return n?n.betTypeCode.isSingleLegGame()?(r=n.betTypeCode===f.VP?f.V:n.betTypeCode,_.filter(t?i.getAllSingleLegGames():i.singleLegGamesOpenForBet,function(t){var i=t.leg;return i.betTypeCode===r&&i.legNo===n.legNo&&i.raceNo===n.raceNo})):_.filter(t?i.multiLegGames:i.multiLegGamesOpenForBet,function(t){return _.some(t.legs,function(t){return t.betTypeCode===n.betTypeCode&&t.legNo===n.legNo})}):[]},getLegFor:function(n,t){var r=this,i=r.getRace(t);return i?_.filter(i.legs,function(t){return t.betTypeCode===n})[0]:null},getLegsFor:function(n,t){var i=this;return i.legsCache[n.code]&&0!==i.legsCache[n.code].length&&!t||(i.legsCache[n.code]=_.chain(i.getRacesFor(n,t)).map("legs").flatten().filter(function(t){return t.betTypeCode===n}).map(function(n){return n.starts=i.getStartsForLeg(n),n}).value()),i.legsCache[n.code]},loadDDOdds:function(n){var t=this.getRacesFor(f.DD),i=_.map(n,function(n){return n.LegType="DD",n});_.forEach(t,function(n){n.loadOdds(i)})},getRacesFor:function(n,t){return _.filter(this.races,function(i){return i.hasLeg(n)&&(t||i.openForBet)})},getAllStartsFor:function(n){var t=this;return _.chain(this.getLegsFor(n)).map(function(n){return t.getStartsForLeg(n)}).flatten().value()},getStartForLeg:function(n,t){var i=this;return _.chain(i.races).filter(function(t){return _.includes(t.legs,n)}).map("starts").flatten().filter(function(n){return n.startNo===t}).first().value()},getStartsForLeg:function(n){var t=this;return _.chain(t.races).filter(function(t){return _.includes(t.legs,n)}).map("starts").flatten().value()},getAvailableBetTypeCodesForBetmethod:function(n){var t=this;return n?_.chain(t.allSingleAndMultiLegGamesOpenForBet()).filter(function(t){return t.allowedLynBetMethods.indexOf(n)>-1}).sortBy(function(n){return n.code}).map("betTypeCode").value():[]},getMultiLegGamesOpenForBet:function(){var n=this;return _.filter(n.multiLegGames,"openForBet")},getSingleLegGamesOpenForBet:function(){var n=this;return _.chain(n.races).map("singleLegGames").flatten().filter("openForBet").value()},getAllSingleLegGames:function(){var n=this;return _.chain(n.races).map("singleLegGames").flatten().value()},getLynProductsOpenForBet:function(){var n=this;return _.chain(n.multiLegGames.concat(n.singleLegGamesOpenForBet)).filter("openForBet").map("allowedLynBetMethods").flatten().uniqBy(function(n){return n.code}).value()},resetSelections:function(){_.forEach(this.races,function(n){n.clearPreselect();_.forEach(n.legs,function(n){n.isOwnSelected=!1})});_.chain(this.races).map("starts").flatten().forEach(function(n){n.clearSelection()}).value()}},s.load=function(n){return new s(n)},s.loadFromApi=function(n){return s.load(o.map(n))},s}n.$inject=["RaceDayKey","Race","MultiLegGame","Odds","racetype","betTypeCode","betMethod","apiDataMapper"];angular.module("rikstoto.clients.js.models").factory("RaceDay",n)}(),function(){"use strict";function n(n){function t(t){var i=this;t.date?(i.date=moment.isMoment(t.date)?t.date:moment(t.date),"string"==typeof t.date||moment.isMoment(t.date)||(i.date=moment([t.date.year,t.date.month-1,t.date.day])),i.trackCode=t.trackKey.code,i.orgCode=t.trackKey.orgCode,i.toString=function(){return n.format("{0}_{1}_{2}",i.trackCode,i.orgCode,i.date.format("YYYY-MM-DD"))}):(i.date=moment(t.Date),"string"!=typeof t.Date&&(i.date=moment([t.Date.Year,t.Date.Month-1,t.Date.Day])),i.trackCode=t.TrackKey.Code,i.orgCode=t.TrackKey.OrgCode,i.toString=function(){return n.format("{0}_{1}_{2}",i.trackCode,i.orgCode,i.date.format("YYYY-MM-DD"))})}return t.load=function(n){return new t(n)},t.fromString=function(n){var i=n.split("_");return t.load({Date:i[2],TrackKey:{Code:i[0],OrgCode:i[1]}})},t}n.$inject=["string"];angular.module("rikstoto.clients.js.models").factory("RaceDayKey",n)}(),function(){"use strict";function n(){function n(n){var t=this;n&&(t.investment=(n.Investment||{Amount:0}).Amount/100,t.oddsLastUpdated=moment(n.OddsLastUpdated),t.jackpotValue=(n.JackpotValue||{Amount:0}).Amount/100)}return n.load=function(t){return new n(t)},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("SingleLegDetails",n)}(),function(){"use strict";function n(n,t,i,r){function u(u){function e(){return f.leg.betTypeCode.name}var f=this;f.allowedLynBetMethods=[];f.openForBet=u.OpenForBet;f.leg=n.load(u.Leg);f.details=t.load(u.Details);f.displayName=e;f.betTypeCode=f.leg.betTypeCode;u.AllowLyn&&(f.allowedLynBetMethods.push(i.lynToto),f.leg.betTypeCode===r.QPlus&&f.allowedLynBetMethods.push(i.lynShare));u.Leg.AllowLynBanker&&f.allowedLynBetMethods.push(i.lynBanker);u.Leg.AllowLynBundle&&f.allowedLynBetMethods.push(i.lynBundle);u.Leg.AllowLynShare&&f.allowedLynBetMethods.push(i.lynShare);u.Leg.AllowMultiday&&f.allowedLynBetMethods.push(i.multiDay)}return u.prototype={update:function(n){this.allowedLynBetMethods=n.allowedLynBetMethods;this.openForBet=n.openForBet;this.leg=n.leg;this.details=n.details}},u.load=function(n){return new u(n)},u}n.$inject=["Leg","SingleLegDetails","betMethod","betTypeCode"];angular.module("rikstoto.clients.js.models").factory("SingleLegGame",n)}(),function(){"use strict";function n(n,t){function i(t){var i=this;i.stable=t.Stable;i.odds=t.StableOddsEvol;i.betTypeCode=n.V;i.startNo=t.StartNumber}return i.prototype={getOddsValueFormatted:function(){return 0===this.odds?"-":t("formatNumber")(this.odds,1,"-")},update:function(n){var t=this;t.odds=n.StableOddsEvol}},i.load=function(n){return new i(n)},i}n.$inject=["betTypeCode","$filter"];angular.module("rikstoto.clients.js.models").factory("StableOdds",n)}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){function h(r){function o(){return!f.scratched&&f.active}var f=this;r.Details=_.defaults({},r.Details);f.active=r.Active;f.driverColour=r.DriverColour;f.scratched=r.Scratched;f.startNo=r.StartNo;f.startImage=r.StartImage?e.load(r.StartImage):null;f.driver=r.Driver?n.load(r.Driver):{};f.originalDriver=r.Details&&r.Details.OriginalDriver?n.load(r.Details.OriginalDriver):{};f.driverChanged=(r.Details||{DriverChanged:!1}).DriverChanged;f.horse=r.Horse?t.load(r.Horse):{};f.stable={};f.allFormRows=r.Details&&r.Details.FormRows?_.map(r.Details.FormRows,s.load):[];f.formRows=_.chain(f.allFormRows).orderBy(["date"],"desc").take(5).value().reverse();f.distance=r.Details.Distance;f.startLane=r.Details.StartLane;f.blinkers=r.Details.Blinkers;f.unshod=r.Details.Unshod||"shod";f.weight=r.Details.Weight;f.handicap=r.Details.Handicap;f.trainer=r.Details.Trainer;f.readOnly=!1;f.odds=[];f.oddsLastUpdated=r.OddsLastUpdated;f.isSelectable=o;f.vmarks=_.map(r.VMarks,u.load);f.pressRank;f.selectionStatus={legs:[]};f.winOddsTrendClass="neutral";r.QPlusOdds&&r.QPlusOdds.WinnerOdds&&f.odds.push(i.load({LegType:"QPlus",Odds:r.QPlusOdds.WinnerOdds,StartNo:f.startNo,CurrentOddsUpdateTime:f.oddsLastUpdated}));r.VPOdds&&(r.VPOdds.WinnerOdds&&f.odds.push(i.load({LegType:"V",Odds:r.VPOdds.WinnerOdds,StartNo:f.startNo,CurrentOddsUpdateTime:f.oddsLastUpdated})),(r.VPOdds.PlaceOddsMax||r.VPOdds.PlaceOddsMin)&&f.odds.push(i.load({LegType:"P",Max:r.VPOdds.PlaceOddsMax,Min:r.VPOdds.PlaceOddsMin,StartNo:f.startNo})));f.update=function(n,t){var i=this;i.active=n.active;i.driverColour=n.driverColour;i.startNo=n.startNo;i.startImage=n.startImage;i.distance=n.distance;i.startLane=n.startLane;i.blinkers=n.blinkers;i.unshod=n.unshod;i.weight=n.weight;i.handicap=n.handicap;i.trainer=n.trainer;i.vmarks=n.vmarks;i.loadOdds(n.odds);n.driver.displayName&&(i.driver=n.driver,i.originalDriver=n.originalDriver,n.driverChanged&&i.driverChanged!==n.driverChanged&&(i.driverChanged=n.driverChanged,t.onDriverChanged&&t.onDriverChanged(i)));i.scratched!==n.scratched&&(i.scratched=n.scratched,t.onScratched&&t.onScratched(i))};f.addVmarks=function(n){f.vmarks=_.map([n],u.load)}}return h.prototype={setReadOnly:function(n){this.readOnly=n},getVMarksForBetType:function(n){return _.find(this.vmarks,function(t){return t.betTypeCode===n})},isToggled:function(n){if(void 0===n)return this.selectionStatus.legs.length>0;var t=n;return n instanceof r&&(t=n.legNo),this.selectionStatus.legs.indexOf(t)>-1},isToggledInOther:function(n){var t=n;return n instanceof r&&(t=n.legNo),_.without(this.selectionStatus.legs,t).length>0},reset:function(){this.readOnly||(this.selectionStatus={legs:[]})},toggle:function(n,t){if(!this.readOnly){var i=n;n instanceof r&&(i=n.legNo);this.selectionStatus.legs.indexOf(i)>-1?this.selectionStatus.legs=_.without(this.selectionStatus.legs,i):t?this.selectionStatus.legs=[i]:this.selectionStatus.legs.push(i)}},select:function(n,t){if(!this.readOnly){var i=n;n instanceof r&&(i=n.legNo);t?this.selectionStatus.legs=[i]:this.selectionStatus.legs.indexOf(i)===-1&&this.selectionStatus.legs.push(i)}},deSelect:function(n){if(!this.readOnly){var t=n;n instanceof r&&(t=n.legNo);this.selectionStatus.legs=_.without(this.selectionStatus.legs,t)}},clearSelection:function(){this.readOnly||(this.selectionStatus.legs=[])},getOdds:function(n){"string"==typeof n&&(n=o[n]);var t=_.find(this.odds,function(t){return t.betTypeCode===n});return t||i.createEmpty()},updateTicketPercentage:function(n){this.ticketPercentages=n},getOddsValueFormatted:function(n){return this.getOdds(n).oddsValueFormatted},getMaxValueFormatted:function(n){return this.getOdds(n).maxValueFormatted},getMinValueFormatted:function(n){return this.getOdds(n).minValueFormatted},loadOdds:function(n){var t=this,i,r,u;n&&(_.isArray(n)?_.forEach(n,function(n){t.loadOdds(n)}):(i=this.getOdds(n.betTypeCode),i&&i.isValid?i.update(n):this.odds.push(n)),r=t.getOdds("V").getTrend(),u={"-1":"down",0:"neutral",1:"up"},t.winOddsTrendClass=t.scratched?"neutral":u[r])},loadPressRank:function(n){this.pressRank=n instanceof f?n:f.load(n)},loadStable:function(n){this.stable=n},getStable:function(n){return n?("string"==typeof n&&(n=o[n]),n===o.VP&&(n=o.V),n===this.stable.betTypeCode?this.stable.stable:""):""}},h.load=function(n){return new h(n)},h}n.$inject=["Driver","Horse","Odds","Leg","VMark","PressRank","StartImage","betTypeCode","FormRow"];angular.module("rikstoto.clients.js.models").factory("Start",n)}(),function(){"use strict";function n(n){function t(n){var t=this;t.contentType=n.ContentType;t.base64Image=n.Image;t.imageString=this.getImage()}return t.prototype={getImage:function(){return n.format("data:{0};base64,{1}",this.contentType,this.base64Image)}},t.load=function(n){return new t(n)},t}n.$inject=["string"];angular.module("rikstoto.clients.js.models").factory("StartImage",n)}(),function(){"use strict";function n(n,t,i){function r(n){var t=this;n=_.defaults(n||{},{betMethod:null,betTypeCode:null,fraction:i.full});t.preSelectList={places:{}};t.product={betMethod:n.betMethod,betTypeCode:n.betTypeCode};t.marks={};t.rowPrice=0;t.maxPrice=0;t.fraction=n.fraction;t.selectedPlace=0;t.disabledHelper={}}function f(n){var t=parseInt(n);return"number"!=typeof t||isNaN(t)?"preselect"===n?0:n.legNo:n}var u=this;return u.listeners={},r.prototype={setSelectedPlace:function(n){this.selectedPlace=n},onReset:function(n,t){u.listeners[n.constructor.name]=t},getBetData:function(t,i,r,u,f,e){var o=this;return n.load({raceDate:t.date,track:t.trackCode,product:o.product.betTypeCode,organization:t.orgCode,marks:i,raceNumber:u,ownGames:r,rowPrice:o.rowPrice,fraction:o.fraction,betMethod:o.product.betMethod,maxPrice:o.maxPrice,rowPriceStep:f,isAllIn:!!e})},setPriceInfo:function(n,t){if(n){var i=this;"number"!=typeof n&&"string"!=typeof n||(n={value:parseInt(n)});i.rowPrice=n.value;i.fraction=n.fraction;t&&(i.maxPrice=t)}},numberOfRows:function(){return t.get(this.product.betTypeCode).calculate(this.marks)},getTotalCost:function(){var n=this;return n.numberOfRows()*n.rowPrice*parseInt(n.fraction.code)/1e4},clearLeg:function(n){this.marks[f(n)]=[]},getMarksForLeg:function(n){return this.marks[f(n)]||[]},reset:function(n,t){var i=this;n&&t&&(this.product.betTypeCode=n,this.product.betMethod=t);this.marks={};_.forEach(new Array(this.product.betTypeCode.getNumberOfSelectionfields()),function(n,t){i.marks[t+1]=[]});_.forEach(u.listeners,function(n){n()});this.preSelectList={places:{}}}},r.load=function(n){return new r(n)},r}n.$inject=["BetData","rowCalculatorFactory","fractionValue"];angular.module("rikstoto.clients.js.models").factory("Ticket",n)}(),function(){"use strict";function n(n,t){function i(t){var i=this;i.betTypeCode=n[t.BetType];i.investmentPercent=t.InvestmentPercent;i.marksPercent=t.MarksPercent;i.investmentAmount=t.Investment.Amount}return i.prototype={getInvestmentPercentFormatted:function(){return this.investmentPercent?t("formatNumber")(this.investmentPercent,1,"-"):t("formatNumber")(0,1,"-")}},i.load=function(n){return new i(n)},i}n.$inject=["betTypeCode","$filter"];angular.module("rikstoto.clients.js.models").factory("VMark",n)}(),function(){"use strict";function n(){function n(n){var t=this;t.weatherInfoExists=n.WeatherInfoExists;t.weatherSymbol=n.WeatherSymbol;t.weatherTemperature=n.WeatherTemperature}return n.load=function(t){return new n(t)},n}n.$inject=[];angular.module("rikstoto.clients.js.models").factory("Weather",n)}();lang=lang||{translate:function(n){return n=this.normalizeKey(n),this._texts.hasOwnProperty(n)?this._texts[n]:"Missing: "+n},exists:function(n){return n=this.normalizeKey(n),this._texts.hasOwnProperty(n)},normalizeKey:function(n){return!(n.length<1)&&(n=n.toLowerCase(),n=n.replace(/\//g,"."),"."==n.charAt(0)&&(n=n.substr(1,n.length-1)),n)},add:function(n,t){n=this.normalizeKey(n);this._texts[n]=t},_texts:{}};lang.add("app.common.selltypes.0","");lang.add("app.common.selltypes.qplus.0","Vanlig");lang.add("app.common.selltypes.1","Lynbanker");lang.add("app.common.selltypes.qplus.1","Lynbanker");lang.add("app.common.selltypes.2","Lyntoto");lang.add("app.common.selltypes.3","Lynsystem");lang.add("app.common.selltypes.qplus.3","Lyntoto");lang.add("app.common.selltypes.4","System");lang.add("app.common.selltypes.5","Lynpakke");lang.add("app.common.selltypes.6","Andel");lang.add("app.common.selltypes.qplus.6","Andel");lang.add("app.common.selltypes.7","Eksperten");lang.add("app.common.selltypes.8","Flerdager");lang.add("app.common.selltypes.qplus.8","Flerdager");lang.add("app.common.selltypeCodes.0","Vanlig");lang.add("app.common.selltypeCodes.1","LynBanker");lang.add("app.common.selltypeCodes.2","LynToto");lang.add("app.common.selltypeCodes.3","LynSystem");lang.add("app.common.selltypeCodes.4","System");lang.add("app.common.selltypeCodes.5","LynBundle");lang.add("app.common.selltypeCodes.6","LynShare");lang.add("app.common.selltypeCodes.7","Eksperten");lang.add("app.common.selltypeCodes.8","MultiDay");lang.add("app.common.bettypecodes.0","Undefined");lang.add("app.common.bettypecodes.1","VP");lang.add("app.common.bettypecodes.2","V");lang.add("app.common.bettypecodes.3","P");lang.add("app.common.bettypecodes.4","DUO");lang.add("app.common.bettypecodes.5","T");lang.add("app.common.bettypecodes.6","DD");lang.add("app.common.bettypecodes.7","V4");lang.add("app.common.bettypecodes.8","V5A");lang.add("app.common.bettypecodes.9","V5B");lang.add("app.common.bettypecodes.10","V64");lang.add("app.common.bettypecodes.11","V65");lang.add("app.common.bettypecodes.12","V75");lang.add("app.common.bettypecodes.13","V76");lang.add("app.common.bettypecodes.14","TV");lang.add("app.common.bettypecodes.15","QPlus");lang.add("app.common.bettypecodes.V","V");lang.add("app.common.bettypecodes.VP","V / P");lang.add("app.common.bettypecodes.P","P");lang.add("app.common.bettypecodes.V75","V75");lang.add("app.common.bettypecodes.V76","V76");lang.add("app.common.bettypecodes.V65","V65");lang.add("app.common.bettypecodes.V64","V64");lang.add("app.common.bettypecodes.V5A","V5A");lang.add("app.common.bettypecodes.V5B","V5B");lang.add("app.common.bettypecodes.V4","V4");lang.add("app.common.bettypecodes.DUO","Duo");lang.add("app.common.bettypecodes.T","T");lang.add("app.common.bettypecodes.TV","TV");lang.add("app.common.bettypecodes.DD","DD");lang.add("app.common.bettypecodes.QPlus","5+");lang.add("app.common.bettypenames.V","Vinner");lang.add("app.common.bettypenames.VP","V / P");lang.add("app.common.bettypenames.P","Plass");lang.add("app.common.bettypenames.V75","V75");lang.add("app.common.bettypenames.V76","V76");lang.add("app.common.bettypenames.V65","V65");lang.add("app.common.bettypenames.V64","V64");lang.add("app.common.bettypenames.V5A","V5A");lang.add("app.common.bettypenames.V5B","V5B");lang.add("app.common.bettypenames.V4","V4");lang.add("app.common.bettypenames.DUO","Duo");lang.add("app.common.bettypenames.T","Trippel");lang.add("app.common.bettypenames.TV","Tvilling");lang.add("app.common.bettypenames.DD","Dagens Dobbel");lang.add("app.common.bettypenames.QPlus","5+");lang.add("app.common.bettypenames.0","Undefined");lang.add("app.common.bettypenames.1","Vinner/Plass");lang.add("app.common.bettypenames.2","Vinner");lang.add("app.common.bettypenames.3","Plass");lang.add("app.common.bettypenames.4","Duo");lang.add("app.common.bettypenames.5","Trippel");lang.add("app.common.bettypenames.6","Dagens dobbel");lang.add("app.common.bettypenames.7","V4");lang.add("app.common.bettypenames.8","V5A");lang.add("app.common.bettypenames.9","V5B");lang.add("app.common.bettypenames.10","V64");lang.add("app.common.bettypenames.11","V65");lang.add("app.common.bettypenames.12","V75");lang.add("app.common.bettypenames.13","V76");lang.add("app.common.bettypenames.14","Tvilling");lang.add("app.common.bettypenames.15","5+");lang.add("app.common.newScratches","Det har skjedd strykninger blant hestene du ser på nå.\nDisse er:");lang.add("app.common.scratch","\nNr {0} {1}");lang.add("app.common.communicationError","En teknisk feil oppstod. Vennligst prøv igjen.");lang.add("app.common.drivertype.galop","Rytter");lang.add("app.common.drivertype.monte","Rytter");lang.add("app.common.drivertype.trot","Kusk");lang.add("game.confirmExitKeepMarkingsHeading","Ta med markeringene?");lang.add("game.confirmExitKeepMarkings","Vil du ta med markeringene over til Lynbanker?");lang.add("game.confirmExitLoseMarkings","Du har en delvis utfylt bong \n\nTrykk OK for å fortsette eller Avbryt for å beholde markeringene");lang.add("game.confirmBeforeUnloadExitLoseMarkings","Du har en delvis utfylt bong ");lang.add("game.confirmation.betLimitSetTooLow","Denne ukesgrensen er ikke tilstrekkelig til å dekke ditt valgte spill");lang.add("game.confirmation.betLimitRange","Ukesgrensen må være et heltall mellom 1 og 999.999");lang.add("game.confirmation.fasttrack.mustAcceptTerms","Du må akseptere vilkårene for spill");lang.add("game.confirmation.fasttrack.mustEnterAccountNumber","Du må skrive inn en utbetalingskonto");lang.add("game.confirmation.gamblingExperience.mustChoseOne","Du må velg ett av svaralternativene før du går videre");lang.add("game.text.numberOfRows","Ant. rekker: ");lang.add("game.text.chooseBetPrice","Velg rekkepris");lang.add("game.text.fraction","Rekkepris: ");lang.add("game.text.totalSum","Sum kr");lang.add("game.text.reset","Nullstill");lang.add("game.text.buy","Kjøp spill");lang.add("game.text.totalPriceWarning","Totalpris er for høy (maks kr 99 999)");lang.add("game.text.totalSumToHigh","Totalsummen er for høy");lang.add("game.text.showTooltips","Vis hjelpebokser");lang.add("game.text.gameStarting","Løpet er i ferd med å starte");lang.add("game.text.soonStart","Løpet starter om ca ");lang.add("game.text.flerdagerTitle","Velg pakke du vil kjøpe:");lang.add("game.text.flerdagerTooltip","Kjøper lyntoto for kr {0} til hver av de neste {1} dagene, inkludert valgt løp. Totalt kr {2}.");lang.add("game.text.tooltip.nostart.canselect","Ingen start - kan velges <br />(Spiller du på denne setter systemet automatisk inn en reservehest. I reglementet under hvert enkelt spill står det mer om hvordan erstatningshesten velges ut)");lang.add("game.text.tooltip.scratched.canselect","Strøket nr {0} {1} - kan velges  <br />(Spiller du på denne setter systemet automatisk inn en reservehest. I reglementet under hvert enkelt spill står det mer om hvordan reservehesten velges ut)");lang.add("game.text.tooltip.nostart","Ingen start - kan ikke velges.");lang.add("game.text.tooltip.pmuplus.scratched","Strøket - nr {0} {1} - kan ikke velges");lang.add("game.text.tooltip.active","Nr {0} {1} ({2})");lang.add("game.text.lynbanker.rows","Ant. rekker: ");lang.add("game.text.lynbanker.sum","Verdi markerte hester");lang.add("game.text.lastupdated","Oppdatert");lang.add("game.text.run","Løp");lang.add("game.text.run.uppercase","LØP");lang.add("game.text.update","Oppdater");lang.add("game.text.expectedstart","Forventet start");lang.add("game.text.revenue","Omsetning");lang.add("game.validation.preselectSetButUnused","Du har markert hester i rundtliste, men har ikke satt rundtliste til noen plassering. Rundtliste vil ikke bli brukt.");lang.add("game.text.maxBet","Velg maksbeløp: ");lang.add("game.text.disqualified.ar","Tatt opp eller brøt");lang.add("game.text.disqualified.tb","Styrtet");lang.add("game.text.disqualified.np","-m");lang.add("game.text.disqualified.da","Diskvalifisert");lang.add("game.text.disqualified.unknown","Diskvalifisert");lang.add("app.common.startmethod.unknown","Ukjent");lang.add("app.common.startmethod.volte","Voltestart");lang.add("app.common.startmethod.auto","Autostart");lang.add("app.common.startmethod.linje","Linjestart");lang.add("game.text.tooltip.scratched"," - Kan ikke velges.");lang.add("game.text.information.qplus.vanlig","Det skal velges én hest per plass. Om man ønsker flere rekker kan man lage en rundtliste som settes til én eller flere rader.");lang.add("game.text.information.qplus.lynbanker","Det skal velges 0-2 enkeltmarkeringer, 0-2 markeringer i rundtliste, og rundtliste skal settes til 0-3 plasser.");lang.add("game.text.information.V64.vanlig","Når du velger V6 får du 2.5 ganger gevinsten for 6 rette, men gir avkall på utbetalinger for 5 og 4 rette.");lang.add("game.text.information.V65.vanlig","Når du velger V6 får du 2 ganger gevinsten for 6 rette, men gir avkall på utbetalinger for 5 rette.");lang.add("game.text.information.V75.vanlig","Når du velger V7 får du 2,5 ganger gevinsten for 7 rette, men gir avkall på utbetalinger på 6 og 5 rette.");lang.add("game.text.information.V76.vanlig","Når du velger V7 får du 2 ganger gevinsten for 7 rette, men gir avkall på utbetalinger for 6 rette.");lang.add("game.text.closedforbet","Stengt for spill");lang.add("game.text.programInfo","Klikk her for informasjon om hvordan du bruker denne nettsiden");lang.add("game.text.lyntoto.choosevalueofticket","Velg verdi på Lyntoto:");lang.add("app.validation.noReserveAndNoUnusedStarts","Kjøpet er ikke gjennomført da det er for mange markeringer i bongen. Se gjennom bongen og levèr spillet på nytt.");lang.add("game.qplus.synthesis.favourites","Favoritter");lang.add("game.qplus.synthesis.outsiders","Outsidere");lang.add("game.qplus.synthesis.nochance","Liten sjanse");lang.add("game.pressRank.category.favourites","Favoritter");lang.add("game.pressRank.category.outsiders","Outsidere");lang.add("game.pressRank.category.nochance","Liten sjanse");lang.add("game.gamewindow.programInfo.tabs.win-odds","V.Odds");lang.add("game.gamewindow.programInfo.tabs.most-played","Mest spilte");lang.add("game.gamewindow.programInfo.tabs.odds-trend","Trend");lang.add("game.gamewindow.programInfo.tabs.press-rank","Presserang.");lang.add("game.gamewindow.programInfo.tabs.press-tips","Pressetips");lang.add("game.gamewindow.programInfo.tabs.investment","Innsatsfordeling");lang.add("game.gamewindow.programInfo.tabs.winplace-odds","Individuelle Odds");lang.add("game.gamewindow.programInfo.tabs.triple-odds","Trippel Odds");lang.add("game.gamewindow.programInfo.tabs.tvilling-odds","Tvilling Odds");lang.add("game.gamewindow.programInfo.tabs.duo-odds","Duo Odds");lang.add("game.gamewindow.programInfo.tabs.dd-odds","DD Odds");lang.add("game.gamewindow.ticketValidation.common.incomplete","Bongen er ikke fullstendig");lang.add("game.gamewindow.ticketValidation.common.priceTooHigh","Totalsummen er for høy");lang.add("game.gamewindow.ticketValidation.common.rowPriceTooLow","Ugyldig beløp, minimum rekkepris for dette spillet er 5 kr.");lang.add("game.gamewindow.ticketValidation.common.incorrectRowPrice","Ugyldig rekkepris, minimum steg er {0} kr.");lang.add("game.gamewindow.ticketValidation.common.priceTooLow","Totalsummen er for lav");lang.add("game.gamewindow.ticketValidation.duo.illegalCombination","Bongen er ikke fullstendig");lang.add("game.gamewindow.ticketValidation.common.illegalRowprice.DD","Ugyldig beløp, minimum rekkepris for dette spillet er 5");lang.add("game.gamewindow.ticketValidation.common.illegalRowprice","Ugyldig beløp, beløpet må være et heltall mellom 1 og 99999");lang.add("game.gamewindow.ticketValidation.common.illegalRowprice.V4","Ugyldig beløp, beløpet må være et partall mellom 2 og 99999");lang.add("game.gamewindow.ticketValidation.common.illegalRowprice.onlyEvenNumbers","Ugyldig beløp, beløpet må være et partall mellom 2 og 99999");lang.add("game.gamewindow.ticketValidation.pmuwin.priceTooLow","Ugyldig beløp, minimum rekkepris for dette spillet er 10 kr.");lang.add("game.gamewindow.ticketValidation.tvilling.illegalCombination","Bongen er ikke fullstendig");lang.add("game.gamewindow.ticketValidation.qplus.priceTooHigh","For høy sum. Prisen kan ikke overstige 99 999kr.");lang.add("game.gamewindow.ticketValidation.qplus.priceTooLow","Totalsum på bongen må være minimum 20kr.");lang.add("game.gamewindow.ticketValidation.qplus.preselectInvalid","Kan ikke velge ulike rundtlister");lang.add("game.gamewindow.ticketValidation.lynBanker.tooManyPreselectPlaces","Rundtliste kan ikke brukes på mer enn 3 plasser i Lynbanker");lang.add("game.gamewindow.ticketValidation.lynBanker.tooManyPreselectSelections","Du har valgt for mange hester i rundtlisten.");lang.add("game.gamewindow.ticketValidation.lynBanker.tooManyBankers","For mange markeringer. Lynbanker tillater maks 2 enkeltmarkeringer.");lang.add("game.gamewindow.ticketValidation.lynBanker.tooManyMarks","Du har for mange markeringer eller egne spill valgt til at systemet kan lage en bong til deg innenfor prisen du valgte"),function(){function t(n){return function(){var t={restrict:o(n),controller:n,controllerAs:n.controllerAs||"ctrl",bindToController:!0,replace:!0,link:function(n,t){n.$on("$destroy",function(){t.remove()})}};return n.template?t.template=n.template:n.templateUrl&&(t.templateUrl=n.templateUrl),(n.scope||n.bindings)&&(t.scope=e(n.bindings||n.scope)),t}}function e(n){return u()&&angular.forEach(n,function(t,i){"<"===t[0]&&(n[i]=t.replace("<","="))}),n}function o(n){return n.isDirective?"A":"E"}function i(n){var t,i;for(n=n.replace(/\./g,""),t=n.split("-"),i=1;i<t.length;i++)t[i]=t[i][0].toUpperCase()+t[i].substring(1);return t.join("")}function r(n){var t=n.name;return t}function u(){return angular.version.major>=1&&angular.version.minor<5}function f(n){var t=angular.copy(n);return _.every(t,function(n,t){return"string"!=typeof t||"constructor"===t||t.charAt(0).toUpperCase()===t.charAt(0)})?n:(_.forEach(t,function(n,t,i){"object"==typeof n&&(n=f(n));"string"==typeof t&&t.charAt(0).toUpperCase()!==t.charAt(0)&&"constructor"!==t&&(delete i[t],i[t.charAt(0).toUpperCase()+t.substring(1)]=n)}),t)}angular=angular||{};var n={};u()?(angular._origModule_||(angular._origModule_=angular.module),angular.module=function(u,f,e){var o=angular._origModule_(u,f,e);return n[u]?n[u]:(o.component&&f||(o.component=function(n){angular._origModule_(u).directive.apply(angular,[i(n.selector),t(n)]);angular._origModule_(u).controller(r(n),n)},n[u]=o),o)}):(angular._origModule_||(angular._origModule_=angular.module),angular.module=function(u,f,e){var o=angular._origModule_(u,f,e),s;return n[u]?n[u]:(o.___registeredComponent&&f||(s=o.component,o.component=function(n,f){"function"==typeof n?(angular._origModule_(u).directive.apply(angular,[i(n.selector),t(n)]),angular._origModule_(u).controller(r(n),n)):s(n,f)},n[u]=o,o.___registeredComponent=!0),o)});window.upperCaseProperties=f}();angular.module("rikstoto.clients.js.core.directives",[]);angular.module("rikstoto.clients.js.core.directives").value("quickRepeatList",{});angular.module("rikstoto.clients.js.core.directives").directive("quickNgRepeat",QuickNgRepeat);QuickNgRepeat.$inject=["$parse","$animate","$rootScope","quickRepeatList"],function(){"use strict";function t(t,i,r){var u={isLynGame:function(){return _.includes([n.lynBanker,n.lynToto,n.lynBundle,n.lynShare,n.lynSystem,n.multiDay],this.code)},isSkillGame:function(){return _.includes([n.vanlig,n.lynBanker],this.code)},isMultiDay:function(){return this.code===n.multiDay},getSortIndex:function(){switch(this){case n.vanlig:return 0;case n.lynBanker:return 3;case n.lynToto:return 1;case n.lynSystem:return 2;case n.lynShare:return 4;case n.multiDay:return 5;default:return 9999}},availableBetTypes:function(){var t=[r.V75,r.V76,r.V65,r.V64,r.V5A,r.V5B,r.V4];return this.code===n.lynBanker&&(t.push(r.DD),t.push(r.QPlus)),this.code===n.lynSystem&&this.code!==n.lynShare&&t.push(r.QPlus),this.code===n.lynToto&&(t.push(r.DD),t.push(r.TV),t.push(r.T)),this.code===n.system&&t.push(r.T),this.code===n.vanlig&&(t.push(r.V),t.push(r.DD),t.push(r.P),t.push(r.VP),t.push(r.DUO),t.push(r.T),t.push(r.QPlus)),this.code===n.multiDay&&t.push(r.QPlus),t},presentAsText:function(n){var t=n?n.name+".":"";return i("app.common.selltypes."+t+this.code)}};return t(n,u,"BetMethod")}var n={vanlig:0,lynBanker:1,lynToto:2,lynSystem:3,system:4,lynBundle:5,lynShare:6,eksperten:7,multiDay:8,paalag:9};angular.module("rikstoto.clients.js.core.enums").factory("betMethod",t);t.$inject=["enumFactory","translate","betTypeCode"]}(),function(){"use strict";function t(t,i){var r={isSingleLegGame:function(){return 1===this.numberOfLegs()},isMultiLegGame:function(){return!this.isSingleLegGame()},allowsCustomAmount:function(){switch(this.code){case n.QPlus:return!1;default:return!0}},isVGame:function(){switch(this.code){case n.V5A:case n.V5B:case n.V64:case n.V65:case n.V75:case n.V76:case n.V4:case n.DD:return!0;default:return!1}},numberOfLegs:function(){switch(this.code){case n.VP:case n.V:case n.P:case n.DUO:case n.T:case n.QPlus:case n.TV:return 1;case n.DD:return 2;case n.V4:return 4;case n.V5A:case n.V5B:return 5;case n.V64:case n.V65:return 6;case n.V75:case n.V76:return 7;default:return 0}},getNumberOfSelectionfields:function(){switch(this.code){case n.VP:case n.V:case n.P:return 1;case n.DUO:case n.DD:case n.TV:return 2;case n.T:return 3;case n.V4:return 4;case n.V5A:case n.V5B:return 5;case n.QPlus:return 6;case n.V64:case n.V65:return 6;case n.V75:case n.V76:return 7;default:return 0}},presentAsShortText:function(){return i("app.common.bettypecodes."+this.name)},presentAsText:function(){return i("app.common.bettypenames."+this.name)},getSortIndex:function(){switch(this.code){case n.VP:return 21;case n.P:return 19;case n.V:return 17;case n.TV:return 16;case n.DUO:return 15;case n.T:return 13;case n.DD:return 11;case n.V4:return 9;case n.V5B:return 7;case n.V5A:return 5;case n.V64:return 4;case n.V65:return 3;case n.V76:return 2;case n.V75:return 1;case n.QPlus:return 0;default:return 9999}}};return t(n,r,"BetTypeCode")}var n={Undefined:0,VP:1,V:2,P:3,DUO:4,T:5,DD:6,V4:7,V5A:8,V5B:9,V64:10,V65:11,V75:12,V76:13,TV:14,QPlus:15};angular.module("rikstoto.clients.js.core.enums").factory("betTypeCode",t);t.$inject=["enumFactory","translate"]}(),function(){"use strict";function n(){function n(n,t){var i={},r=function(n){return new Function("return function "+n+"(){}")()};return i.$properties=n,i.getType=function(){return r},_.forEach(n,function(n,u){var f=Object.create(t||null,{name:{writable:!1,value:u},code:{writable:!1,value:n}});f.constructor=r(u);i[n]=f;i[u]=f}),i}return function(t,i,r){return new n(t,i,r)}}angular.module("rikstoto.clients.js.core.enums").factory("enumFactory",n);n.$inject=[]}(),function(){"use strict";function n(n){var i={presentAsText:function(n){switch(this.code){case t.full:return n+" kr.";default:return this.code+"%"}return 0}};return n(t,i,"FractionValue")}var t={full:100,half:50,quarter:25};angular.module("rikstoto.clients.js.core.enums").factory("fractionValue",n);n.$inject=["enumFactory"]}(),function(){"use strict";function t(t,i){var r={presentAsText:function(){return i("game.pressRank.category."+this.name)},getSortIndex:function(){switch(this.code){case n.favourites:return 0;case n.outsiders:return 1;case n.noChance:return 2}}};return t(n,r,"pressRankCategory")}var n={favourites:"favourites",outsiders:"outsiders",noChance:"noChance"};angular.module("rikstoto.clients.js.core.enums").factory("pressRankCategory",t);t.$inject=["enumFactory","translate"]}(),function(){"use strict";function t(t){var i={getDriverTypeName:function(){switch(this.code){case n.Hedge:case n.Steeple:case n.Cross:case n.Galop:case n.Flat:case n.Monte:return"Rytter";case n.Amble:case n.Harness:return"Kusk";default:return"Kusk"}},presentAsText:function(){switch(this.code){case n.Hedge:case n.Steeple:return"Hinderløp";case n.Cross:case n.Galop:case n.Flat:return"Galopp";case n.Amble:case n.Harness:return"Trav";case n.Monte:return"Monté";case n.Ukjent:default:return"Ukjent"}},isMonte:function(){return this.code===n.Monte},isGalop:function(){return!this.isMonte()&&"Trav"!==this.presentAsText()}};return t(n,i,"raceForm")}var n={Cross:1,Galop:2,Hedge:3,Steeple:4,Flat:5,Amble:6,Harness:7,Monte:8,Ukjent:99};angular.module("rikstoto.clients.js.core.enums").factory("raceForm",t);t.$inject=["enumFactory"]}(),function(){"use strict";function n(n){return n(t)}var t={Trav:1,Galopp:2,Monte:3,Unknown:99};angular.module("rikstoto.clients.js.core.enums").factory("racetype",n);n.$inject=["enumFactory"]}(),function(){"use strict";function t(t){var i={presentAsText:function(){switch(this.code){case n.Volte:return"Voltestart";case n.Auto:return"Autostart";case n.Linje:return"Linjestart";default:return""}}};return t(n,i,"startMethod")}var n={Volte:1,Auto:2,Linje:3,Ukjent:99};angular.module("rikstoto.clients.js.core.enums").factory("startMethod",t);t.$inject=["enumFactory"]}(),function(){"use strict";angular.module("rikstoto.clients.js.core.constants").constant("betDataDefinition",{DateTimeFormat:"yyyy-MM-dd",SectionFormat:"{0}:{1}",KeyTrack:"t",KeyBetType:"g",KeySellType:"o",KeyRowPrice:"pr",KeyRaceNumber:"l",KeyLegNumber:"s",KeyMaxPrice:"p",KeyDate:"d",KeyOwnGame:"e",KeyEan:"ean",KeyFraction:"f",KeyFirstPriceOnlyBet:"ai",KeyOrganization:"org",KeyNumberOfDays:"nd"})}(),function(){"use strict";function n(){function i(i,r,u){var f=parseFloat(n(i));return isNaN(f)&&u?u:isNaN(f)?i:parseFloat(n(i)).toFixed(r).replace(t(),",")}function n(n){return(n+"").replace(",",t())}function t(){return 1.1.toLocaleString().substring(1,2)}return function(n,t,r){return i(n,t,r)}}angular.module("rikstoto.clients.js.core.filters").filter("formatNumber",n)}(),function(){"use strict";function n(){return function(n,t){return n&&moment.isMoment(n)&&n.isValid()?n.format(t):!n||n.isValid&&!n.isValid()?"-":n}}angular.module("rikstoto.clients.js.core.filters").filter("moment",n)}(),function(){function n(){return function(n,t,i){var r=n;for("string"!=typeof r&&(r+="");r.length<t;)r=i+r;return r}}angular.module("rikstoto.clients.js.core.filters").filter("padLeft",n);n.$inject=[]}(),function(){"use strict";function n(n){return function(t){return n(t)}}n.$inject=["translate"];angular.module("rikstoto.clients.js.core.filters").filter("translate",n)}(),function(){function n(){return function(n,t,i){var r=n;if("string"!=typeof r&&(r+=""),r.length<=t)return r;for(;(r+i).length>t;)r=r.substring(0,r.length-1);return r+i}}angular.module("rikstoto.clients.js.core.filters").filter("trim",n);n.$inject=[]}(),function(){"use strict";function n(n,t,i,r){var u="game.gamewindow.programInfo.tabs.",f={order:"order",name:function(n){return r(u+n.name)},data:function(n){return{name:n.name}}};n.createMap(t,i,f)}n.$inject=["mapper","ProgramInfoTab","MenuItem","translate"];angular.module("rikstoto.clients.js.data.mappings").run(n)}(),function(){"use strict";function n(n,t){function u(n){var t={};return t.name=n.name,t.races=_.map(n.legs,function(n){return n.number=n.race,n}),t.raceDayKey=n.raceDayKey,t}function f(i,r){var u=n[r.poolType];_.forEach(r.legs,function(f){var e=i.getStartsForLeg(i.getLegFor(u,f.race));_.forEach(e,function(i){var o=_.find(f.starts,function(n){return i.startNo===n.startNumber}),e;void 0!==o&&(e={BetType:r.poolType,InvestmentPercent:o.investmentPercent,MarksPercent:o.investmentPercent,Investment:{Amount:0},VPOdds:{WinnerOdds:o.winOdds,PlaceOddsMin:o.minOdds,PlaceOddsMax:o.maxOdds}},e.VPOdds&&u===n.QPlus&&i.odds.push(t.load({LegType:"QPlus",Odds:e.VPOdds.WinnerOdds,StartNo:i.startNo})),e.VPOdds&&(i.loadOdds(t.load({LegType:"V",Odds:e.VPOdds.WinnerOdds,StartNo:i.startNo})),i.loadOdds(t.load({LegType:"P",Max:e.VPOdds.PlaceOddsMax,Min:e.VPOdds.PlaceOddsMin,StartNo:i.startNo}))),i.addVmarks(e))})})}function e(n){var t={};return t.Name=n.name,t.RaceDayKey=c(n.raceDayKey),t.Races=s(n),t.MultiLegGames=o(n),t}function o(n){var t=r(n);return _.chain(t).filter({isMultiLeg:!0}).uniqBy("poolType").map(function(n){return{BetType:{Code:n.poolType,IsMultiLeg:!0},Legs:_.chain(t).filter({poolType:n.poolType}).map(i).value(),StartTime:null,OpenForBet:n.openForBet}}).value()}function r(n){var i=_.chain(n.races).filter(function(n){return null!==n.pools}).map(function(n){return _.map(n.pools,function(t){return _.extend(t,{raceNo:n.number})})}).flatten().value(),t=_.groupBy(i,"poolType");return _.chain(t).forEach(function(n){_.forEach(n,function(n,t){n.legNo=t+1})}).value(),_.chain(t).toArray().flatten().value()}function s(n){var t=r(n);return _.map(n.races,function(n){return{Number:n.number,Name:n.name,Distance:n.distance,RaceForm:n.raceForm,OpenForBet:_.some(n.pools,{openForBet:!0}),StartTime:n.startTime,StartMethod:n.startType,Legs:_.chain(t).filter({raceNo:n.number}).map(i).value(),SingleLegGames:_.chain(t).filter({raceNo:n.number}).filter({isMultiLeg:!1}).map(function(n){return{Leg:i(n),AllowLyn:n.allowLyn,OpenForBet:n.openForBet}}).value(),Starts:_.map(n.starts,function(t){return h(t,n)})}})}function h(n,t){return{RaceNo:t.number,StartNo:n.startNumber,Horse:{DisplayName:n.horse,Details:{Name:n.horse}},Driver:{DisplayName:n.driver,Details:{}},DriverColour:"",Scratched:n.scratched,Active:!0,Details:{DriverChanged:n.driverChanged,OriginalDriver:{DisplayName:n.originalDriver,Details:{}},Distance:t.distance+n.distance,StartLane:n.postPosition,Trainer:"F.X. Koenig",FormRows:[]},VMarks:[],TicketPercentages:n.investmentPercent,VPOdds:{PlaceOddsMax:null,PlaceOddsMin:null,WinnerOdds:n.winOdds},QPlusOdds:{WinnerOdds:n.winOdds}}}function i(n){return{RaceNo:n.raceNo,LegNo:n.legNo,BetType:{Code:n.poolType},OpenForBet:n.openForBet,IsSuper:n.isSuper,AllowLyn:n.allowLyn,AllowLynBanker:n.allowLynBanker,AllowLynShare:n.allowLynShare,AllowLynBundle:n.allowLynBundle,AllowAllIn:n.allowAllIn,AllowMultiday:!1}}function c(n){var t=moment(n.date);return{TrackKey:{Code:n.track,OrgCode:"NR",CountryCode:null},Date:{Year:t.year(),Month:t.month()+1,Day:t.date()}}}return{map:e,mapSingleLegPool:u,mapStartsForLegs:f}}angular.module("rikstoto.clients.js.core.utils").factory("apiDataMapper",n);n.$inject=["betTypeCode","Odds"]}(),function(){"use strict";function n(){function n(n){return _.reduce(n,function(n,t){return n+Math.pow(2,parseInt(t))},0)}function t(n){for(var i=[],t=1;n>0&&t<100;)(n&Math.pow(2,t))===Math.pow(2,t)&&(i.push(t),n-=Math.pow(2,t)),t++;return i}return{toBitmap:n,fromBitmap:t}}angular.module("rikstoto.clients.js.core.utils").factory("bitMapper",n);n.$inject=[]}(),function(){"use strict";function n(n,t){function i(n,i){var r=[],u;return _.chain(i).forEach(function(n,t){if("$"!==t[0]){var u=i.$attr[t],f=i.$attr[t]+"='"+n+"'";u&&r.push(f)}}).value(),u="<{0} {1}><\/{0}>",t.format(u,n,r.join(" "))}return{restrict:"E",transclude:!0,template:"",link:function(t,r,u){function f(f){if(r.children().length>0&&$(r.children()[0]).remove(),f){r.html(i(f,u));return n(r.contents())(t)}}t.$watch(function(){return u.directiveElementName},function(n){n&&f(n)})},replace:!0}}angular.module("rikstoto.clients.js.core.utils").directive("loadDirective",n);n.$inject=["$compile","string","logger"]}(),function(){function n(n){this.debug=function(t){var r,u,i;"string"==typeof t||"number"==typeof t?(i=_.toArray(arguments),t=i.shift(),r=_.filter(i,function(n){return"string"==typeof n||"number"==typeof n}),u=_.filter(i,function(n){return"string"!=typeof n&&"number"!=typeof n}),console.log.apply(console,[n.format("[DEBUG {0}]",moment().format("HH:mm:ss:ms")),n.format(t,r)].concat(u))):(i=_.toArray(arguments),console.log.apply(console,[n.format("[DEBUG {0}]",moment().format("HH:mm:ss:ms"))].concat(i)))}}angular.module("rikstoto.clients.js.core.utils").service("logger",n);n.$inject=["string"]}(),function(){"use strict";function n(n){function i(n,i){return _.some(t,function(t){return t.fromType===n&&t.toType===i})}function r(n,i){return _.some(t,function(t){return n instanceof t.fromType&&t.toType===i})}function u(n,i){return _.chain(t).filter(function(t){return n instanceof t.fromType&&t.toType===i}).first().value()}function f(n,r,u){i(n,r)||t.push({fromType:n,toType:r,opts:u})}function e(n,t){var i={};return _.chain(t).forEach(function(t,r){i[r]=_.isFunction(t)?t(n):n[t]}).value(),i}function o(t,i){if(!r(t,i))throw new Error(n.format("No map exists -> {0}",i.name));var o=u(t,i),f=new i;return _.extend(f,e(t,o.opts)),f}var t=[];return{createMap:f,map:o,hasMap:i}}angular.module("rikstoto.clients.js.core.utils").factory("mapper",n);n.$inject=["string"]}(),function(){"use strict";function n(){function n(){var n=Array.prototype.slice.call(arguments),t=n.shift();return"object"==typeof n[0]&&(n=n[0]),t.replace(/{(.+?)}/g,function(t,i){return"undefined"!=typeof n[i]?n[i]:t})}function t(n,t){return"undefined"!=typeof n&&null!=n&&n.length>t?n.substr(0,t-3).concat("..."):n}function i(n){return n?("string"!=typeof n&&(n=n.toString()),n[0].toLowerCase()+n.substr(1)):n}function r(n){return n.replace(/([^\W_]+[^\s-]*) */g,function(n){return n.charAt(0).toUpperCase()+n.substr(1).toLowerCase()})}return{format:n,shorten:t,toTitleCase:r,toCamelCase:i}}angular.module("rikstoto.clients.js.core.utils").factory("string",n)}(),function(){"use strict";function n(){if(!lang)throw"eToto.Language.App.js is not loaded";return function(n,t){return!lang.exists(n)&&t?"":lang.translate(n)}}angular.module("rikstoto.clients.js.core.utils").factory("translate",n);n.$inject=[]}(),function(){function n(){function t(t){n.pricingPromise=t;t&&(n.isRegistered=!0)}var n={isRegistered:!1,pricingPromise:function(){throw new Error("no pricingprovider registered. Please call PricingProvider.register(fn(betTypeCode, betMethod, isSuper)) in your module-config");}};return{register:t,$get:["$q","$http",function(t,i){function u(t){t&&(n.isRegistered=!0);r=t}function f(u,f,e){return n.isRegistered?r?r(u,f,e,{$q:t,$http:i}):n.pricingPromise(u,f,e,{$q:t,$http:i}):t.reject("no pricingprovider registered. Please call PricingProvider.register(fn(betTypeCode, betMethod, isSuper)) in your module-config")}function e(){}var r;return{get:f,registerPostConfig:u,invalidateCache:e}}]}}angular.module("rikstoto.clients.js.data.pricing").provider("pricing",n)}(),function(){"use strict";function n(n){function e(n){h();o(n)}function o(n){moment.isMoment(n)||(n=moment.utc(n));n.isValid()&&(u=moment().utc().diff(n),r())}function s(n){var i=_.find(t,function(t){return t.name===n.name});i||t.push(n)}function h(){i&&n.cancel(i);i=n(function(){r()},1e5)}function r(){f.serverTime=moment().subtract(u,"ms").utc();c()}function c(){_.forEach(t,function(n){n.callback(f.serverTime)})}function l(r){_.remove(t,function(n){return n.name===r});0===t.length&&n.cancel(i)}var u=0,i=null,t=[],f={serverTime:0};return{activate:s,removeSubscriber:l,initServerTime:e}}angular.module("rikstoto.clients.js.data.serverTime").factory("serverTime",n);n.$inject=["$interval"]}();_gameSettings=null;!function(){"use strict";function n(){var n={HIDE_DD_INDICATORS:!1,TOTAL_NUMBER_OF_STARTS:30};this.init=function(t){_.extend(n,t)};this.$get=function(){return _gameSettings=this,n}}angular.module("rikstoto.clients.js.data.settings").provider("gameSettings",n);n.$inject=[]}(),function(){"use strict";function n(){var n={};this.init=function(t){_.extend(n,t)};this.$get=["Weather",function(t){return t.load(n)}]}angular.module("rikstoto.clients.js.data.weather").provider("weather",n);n.$inject=[]}(),function(){"use strict";function n(n,t,i,r,u,f,e){function s(r){moment&&moment.isMoment(r)&&(r=r.toDate());var u=i("date")(r,n.DateTimeFormat);return t.format(o,n.KeyDate,u)}function h(i){return t.format(o,n.KeyOrganization,i)}function c(i){return t.format(o,n.KeyTrack,i)}function l(i){return"string"==typeof i&&(i=f[i]),t.format(o,n.KeyBetType,i.name)}function a(i){return t.format(o,n.KeyRaceNumber,i)}function v(i,u){return t.format(o,n.KeyLegNumber+i,r.toBitmap(u))}function y(i){return t.format(o,n.KeyRowPrice,i)}function p(i){if(void 0==u[i])throw new Error("Bad betMethod: '"+i+"', check casing?");return t.format(o,n.KeySellType,u[i].code)}function w(i){return t.format(o,n.KeyFirstPriceOnlyBet,i?"1":"0")}function b(i){return"number"!=typeof i&&"string"!=typeof i||(i=e[i]),t.format(o,n.KeyFraction,i.code)}function k(i){return t.format(o,n.KeyMaxPrice,i)}function d(i){return t.format(o,n.KeyOwnGame,r.toBitmap(i))}function g(i){return t.format(o,n.KeyEan,i)}function nt(i){return t.format(o,n.KeyNumberOfDays,i)}function tt(n,t){if(!n.product){var r=_.find(t,function(n){return n.openForBet}),i=_.find(r.legs,function(n){return n.openForBet&&n.betTypeCode.isMultiLegGame()});if(!i)return;n.product=i.betTypeCode}return n.raceNumber||_.forEach(t,function(t){var i=!0,r=_.find(t.legs,function(t){return t.betTypeCode.code===n.product.code});return r&&(n.raceNumber=t.number,i=!1),i}),n}var o="{0}:{1}";return{getDateSection:s,getTrackSection:c,getBetTypeSection:l,getRaceNumberSection:a,getRowPriceSection:y,getLegMarksSection:v,getSellTypeSection:p,getFirstPriceOnlyBetSection:w,getFractionSection:b,getMaxPriceSection:k,getOwnGameSection:d,getEanSection:g,getOrganizationSection:h,getNumberOfDaysSection:nt,getAdditionalBetData:tt}}angular.module("rikstoto.clients.js.helpers.betdata").factory("betDataHelper",n);n.$inject=["betDataDefinition","string","$filter","bitMapper","betMethod","betTypeCode","fractionValue"]}();angular.module("rikstoto.clients.js.helpers.device").factory("deviceDetection",deviceDetection),function(){function n(n){function t(n){if(!n)return"";var t=u[n.toUpperCase()];return t?t:i(n)}function i(t){t=t.replace(/[Ll]/g,"");var i=0;return isNaN(parseFloat(t))||(i=parseFloat(t)),t.indexOf("/")>0&&(i=t.split("/")[0]/t.split("/")[1],i>1&&(i=1.5)),0==i?"":i>=20?"m":r(n(i,2),["0",","])}function r(n,t){for(;t.indexOf(n[n.length-1])>-1;)n=n.substring(0,n.length-1);return n}var u={ENC:"nk",CTE:"nk",CTT:"nk",T:"head",NS:"nos",LON:"l"};return{getDistanceTranslation:t}}angular.module("rikstoto.clients.js.helpers.gallopDistance").factory("gallopDistanceService",["formatNumberFilter",n])}(),function(){"use strict";function n(n){var t=this;return t.ticket,t.starts,t.updateSelectedPlace=function(){0===t.ticket.selectedPlace?t.ticket.selectedPlace=t.ticket.selectedPlace:this.ticket.selectedPlace===n.QPlus.getNumberOfSelectionfields()?t.ticket.selectedPlace=1:5===t.ticket.selectedPlace?t.ticket.selectedPlace=0:t.ticket.selectedPlace++},t.isDisabled=function(n){return n.isToggledInOther(t.ticket.selectedPlace)},t.isSelected=function(n){return n.isToggled(t.ticket.selectedPlace)},t.selectStart=function(n,i){"undefined"!=typeof i&&t.ticket.setSelectedPlace(i);console.log(t.ticket);var u="preselect"===t.ticket.selectedPlace?0:t.ticket.selectedPlace,r="number"==typeof i?i:u;0===r?(n.toggle(r,!0),_.forEach(t.ticket.preSelectList.places,function(t,i){t&&n.isToggled(r)?n.select(parseInt(i)):n.deSelect(parseInt(i))})):(_.forEach(t.starts,function(t){t!==n&&t.deSelect(r)}),t.ticket.preSelectList.places[r]?n.select(r,!0):n.toggle(r,!0),t.ticket.preSelectList.places[r]=!1);"undefined"==typeof i&&t.updateSelectedPlace()},function(n,i){return t.ticket=n,t.starts=i,t}}angular.module("rikstoto.clients.js.helpers.markings").factory("qplusMarkingsHelper",n);n.$inject=["betTypeCode"]}(),function(){"use strict";function n(n,t,i){function u(u,o){var s;for("string"==typeof u&&(u=n.parse(u)),s=0;s<u.product.getNumberOfSelectionfields();s++)u.marks[s+1]||(u.marks[s+1]=[]);if(u.product===t.DD&&parseInt(u.rowPrice)<500)return r("illegalRowprice.DD");if(u.rowPrice<100||isNaN(parseInt(u.rowPrice))){if(u.product===t.V4)return r("illegalRowprice.V4");if(u.product===t.DD)return r("illegalRowprice.DD");if(u.product!==t.V76&&u.product!==t.V75)return r("illegalRowprice")}if(u.product===t.V4&&parseInt(u.rowPrice)/100%2>0)return r("illegalRowprice.onlyEvenNumbers");var c=u.product.getNumberOfSelectionfields(),l=_.chain(u.marks).toArray().filter(function(n){return n.length>0}).value(),h=c;return u.betMethod===i.lynBanker&&(h=1),l.length<h?{valid:!1,message:"game.gamewindow.ticketValidation.common.incomplete"}:u.betMethod===i.lynBanker?f(u,o):e(u)}function f(t,i){var s,h,e,u,f;if(!i)throw new Error("Races must be provided for lynbanker-validation. Use raceDay.getRacesFor(betTypeCode, true) to get the appropriate array.");if(_.forEach(t.ownGames,function(n){t.marks[n]||(t.marks[n]=[])}),t.ownGames.length===t.product.getNumberOfSelectionfields())return r("tooManyMarks","lynBanker");if(t.maxPrice>9999900)return r("priceTooHigh","common");if(t.getEstimatedTotalPrice()>=t.maxPrice)return r("tooManyMarks","lynBanker");if(s=_.chain(t.marks).filter(function(n,i){return t.ownGames.indexOf(parseInt(i))>-1&&0===n.length}).value(),s.length>0)return r("incomplete");if(h=_.chain(t.marks).filter(function(n,r){return t.ownGames.indexOf(parseInt(r))===-1&&n.length<_.filter(i[parseInt(r)-1].starts,function(n){return n.active&&!n.scratched}).length}).value(),0===h.length)return r("tooManyMarks","lynBanker");for(e=!0,u=1;u<=t.product.getNumberOfSelectionfields();u++)if(f=n.parse(t.serializeToBetDataString()),!(f.ownGames.indexOf(u)>-1)){if(f.marks[u]||(f.marks[u]=[]),f.marks[u].push(99),f.getEstimatedTotalPrice()<=t.maxPrice){e=!0;break}e=!1}return e?o():r("tooManyMarks","lynBanker")}function e(n){if(n.getEstimatedTotalPrice()>9999900)return{valid:!1,message:"game.gamewindow.ticketValidation.common.priceTooHigh"};var t=n.product.getNumberOfSelectionfields(),i=_.chain(n.marks).toArray().filter(function(n){return n.length>0}).value();return i.length<t?{valid:!1,message:"game.gamewindow.ticketValidation.common.incomplete"}:{valid:!0,message:""}}function r(n,t){return t=t||"common",{valid:!1,message:"game.gamewindow.ticketValidation."+t+"."+n}}function o(){return{valid:!0,message:""}}return{validate:u}}angular.module("rikstoto.clients.js.validation.client").factory("defaultTicketValidator",n);n.$inject=["BetData","betTypeCode","betMethod"]}(),function(){"use strict";function n(n){function t(n){return{valid:!1,message:"game.gamewindow.ticketValidation.duo."+n}}function i(){return{valid:!0,message:""}}function r(n){return/^(F[1-9]$)/.test(n)}function u(n){return!n.marks[1]&&n.marks[2]?t("illegalCombination"):0===n.getNumberOfRows()?t("illegalCombination"):i()}function f(n){return n.getEstimatedTotalPrice()>9999900?{valid:!1,message:"game.gamewindow.ticketValidation.common.priceTooHigh"}:u(n)}function e(t){if("string"==typeof t&&(t=n.parse(t)),r(t.track)){if(t.rowPrice<1e3)return{valid:!1,message:"game.gamewindow.ticketValidation.pmuwin.priceTooLow"}}else if(t.rowPrice<500)return{valid:!1,message:"game.gamewindow.ticketValidation.common.rowPriceTooLow"};return f(t)}return{validate:e}}angular.module("rikstoto.clients.js.validation.client").factory("duoTicketValidator",n);n.$inject=["BetData","betTypeCode","betMethod"]}(),function(){"use strict";function n(n,t){function f(n){var t=_.filter(n,function(n){return n.length>1});return!_.some(t,function(n){return n.length!==t[0].length})&&!(_.chain(t).map(function(n){return n.join("-")}).uniq().value().length>1)}function e(n){var i=_.find(n,function(n){return n.length>1})||[],t=_.chain(n).filter(function(n){return 1===n.length}).map(function(n){return n[0]}).value();return t.length===_.uniqBy(t).length&&!(i.length>0&&_.intersection(i,t).length>0)}function r(n){var t={};return _.forEach(n,function(n,i){t[i]=n}),t}function o(n){var u=n.product.getNumberOfSelectionfields()-1,i=r(n.marks),t;return delete i[0],delete i[6],t=_.chain(i).toArray().filter(function(n){return n.length>0}).value(),t.length<u||0===n.getNumberOfRows()?{valid:!1,message:"game.gamewindow.ticketValidation.common.incomplete"}:f(t)?e(t)?n.getEstimatedTotalPrice()<2e3?{valid:!1,message:"game.gamewindow.ticketValidation.qplus.priceTooLow"}:{valid:!0,message:""}:{valid:!1,message:"game.gamewindow.ticketValidation.common.incomplete"}:{valid:!1,message:"game.gamewindow.ticketValidation.qplus.preselectInvalid"}}function s(n){var o,e,f;return n.ownGames.length>3?i("tooManyPreselectPlaces","lynBanker"):(o=r(n.marks),delete o[0],delete o[6],0===_.chain(n.marks).toArray().flatten().value().length)?u():_.filter(o,function(n){return 1===n.length}).length>2?i("tooManyBankers","lynBanker"):(e=t.parse(n.serializeToBetDataString()),f=_.find(e.marks,function(n){return n.length>1}),f&&(f.push(99),e.marks={1:f,2:f,3:f,4:[99],5:[100]},e.getEstimatedTotalPrice()>e.maxPrice)?i("tooManyPreselectSelections","lynBanker"):u())}function h(i){return"string"==typeof i&&(i=t.parse(i)),i.getEstimatedTotalPrice()>9999900?{valid:!1,message:"game.gamewindow.ticketValidation.qplus.priceTooHigh"}:i.betMethod===n.vanlig?o(i):i.betMethod===n.lynBanker?s(i):void 0}function i(n,t){return t=t||"common",{valid:!1,message:"game.gamewindow.ticketValidation."+t+"."+n}}function u(){return{valid:!0,message:""}}return{validate:h}}angular.module("rikstoto.clients.js.validation.client").factory("qplusTicketValidator",n);n.$inject=["betMethod","BetData"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){function v(t,i){return h(function(u,f){var e;"string"==typeof t&&(t=n.parse(t));t.betMethod.isSkillGame()?(e=a.validators[t.product.code]?a.validators[t.product.code].validate(t,i):r.validate(t,i),e.valid?t.rowPriceStep&&t.rowPrice/100%t.rowPriceStep>0?f(c.format(l("game.gamewindow.ticketValidation.common.incorrectRowPrice"),t.rowPriceStep)):u(t):f(l(e.message))):((!t.maxPrice||t.maxPrice<1e3)&&f(l("game.gamewindow.ticketValidation.common.priceTooLow")),t.maxPrice&&t.maxPrice>9999900&&f(l("game.gamewindow.ticketValidation.common.priceTooHigh")),u(t))})}var a=this;return a.validators={},a.validators[t.QPlus.code]=u,a.validators[t.V.code]=f,a.validators[t.P.code]=f,a.validators[t.VP.code]=f,a.validators[t.TV.code]=e,a.validators[t.T.code]=o,a.validators[t.DUO.code]=s,{validate:v}}angular.module("rikstoto.clients.js.validation.client").factory("ticketValidator",n);n.$inject=["BetData","betTypeCode","betMethod","defaultTicketValidator","qplusTicketValidator","vpTicketValidator","tvTicketValidator","tTicketValidator","duoTicketValidator","$q","string","translate"]}(),function(){"use strict";function n(n){function t(n){return{valid:!1,message:"game.gamewindow.ticketValidation.common."+n}}function i(){return{valid:!0,message:""}}function r(n,t,i){var r=0;return _.forEach(n,function(n){_.forEach(t,function(t){n!==t&&_.forEach(i,function(i){n!==i&&t!==i&&r++})})}),r}function u(n){if(0===n.getNumberOfRows())return t("incomplete");var u=_.chain(n.marks).toArray().filter(function(n){return n.length>0}).value();return!u||u.length<3?t("incomplete"):r(u[0],u[1],u[2])<1?t("incomplete"):i()}function f(n){return n.getEstimatedTotalPrice()>9999900?{valid:!1,message:"game.gamewindow.ticketValidation.common.priceTooHigh"}:u(n)}function e(t){"string"==typeof t&&(t=n.parse(t));return t.rowPrice<200?{valid:!1,message:"game.gamewindow.ticketValidation.common.rowPriceTooLow"}:f(t)}return{validate:e}}angular.module("rikstoto.clients.js.validation.client").factory("tTicketValidator",n);n.$inject=["BetData","betTypeCode","betMethod"]}(),function(){"use strict";function n(n){function t(n){return{valid:!1,message:"game.gamewindow.ticketValidation.tvilling."+n}}function i(){return{valid:!0,message:""}}function r(n){return/^(F[1-9]$)/.test(n)}function u(n){if(!n.marks[1]&&n.marks[2]||0===n.getNumberOfRows())return t("illegalCombination");var u=_.chain(n.marks).toArray().filter(function(n){return n.length>0}).value();return 1===u.length&&n.getNumberOfRows()>0?i():u.length>1&&u[0].join("-")===u[1].join("-")?i():r(n.track)&&(_.every(u,function(n){return n.length>1})&&_.intersection(u[0],u[1]).length>=1||_.some(u,function(n){return n.length>1})&&_.intersection(u[0],u[1]).length>1||_.every(u,function(n){return n.length>1})&&0===_.intersection(u[0],u[1]).length)?t("illegalCombination"):i()}function f(n){return n.getEstimatedTotalPrice()>9999900?{valid:!1,message:"game.gamewindow.ticketValidation.common.priceTooHigh"}:u(n)}function e(t){if("string"==typeof t&&(t=n.parse(t)),r(t.track)){if(t.rowPrice<1e3)return{valid:!1,message:"game.gamewindow.ticketValidation.pmuwin.priceTooLow"}}else if(t.rowPrice<500)return{valid:!1,message:"game.gamewindow.ticketValidation.common.rowPriceTooLow"};return f(t)}return{validate:e}}angular.module("rikstoto.clients.js.validation.client").factory("tvTicketValidator",n);n.$inject=["BetData","betTypeCode","betMethod"]}(),function(){"use strict";function n(n){function t(n){return/^(F[1-9]$)/.test(n)}function i(n){if(n.getEstimatedTotalPrice()>9999900)return{valid:!1,message:"game.gamewindow.ticketValidation.common.priceTooHigh"};if(t(n.track)){if(n.rowPrice<1e3)return{valid:!1,message:"game.gamewindow.ticketValidation.pmuwin.priceTooLow"}}else if(n.rowPrice<500)return{valid:!1,message:"game.gamewindow.ticketValidation.common.rowPriceTooLow"};var i=n.product.getNumberOfSelectionfields(),r=_.chain(n.marks).toArray().filter(function(n){return n.length>0}).value();if(r.length<i)return{valid:!1,message:"game.gamewindow.ticketValidation.common.incomplete"};if(t(n.track)){if(n.getEstimatedTotalPrice()<1e3)return{valid:!1,message:"game.gamewindow.ticketValidation.pmuwin.priceTooLow"}}else if(n.getEstimatedTotalPrice()<500)return{valid:!1,message:"game.gamewindow.ticketValidation.common.rowPriceTooLow"};return{valid:!0,message:""}}function r(t){return"string"==typeof t&&(t=n.parse(t)),i(t)}return{validate:r}}angular.module("rikstoto.clients.js.validation.client").factory("vpTicketValidator",n);n.$inject=["BetData","betTypeCode","betMethod"]}(),function(){function n(){function t(t){n.validatePromise=t;t&&(n.isRegistered=!0)}var n={isRegistered:!1,validatePromise:function(){throw new Error("No TicketServerValidationProvider registered. Please call TicketServerValidation.register(fn(betData, context, partner, sublocationId)) in your module-config");}};return{register:t,$get:["$q","$http",function(t,i){function r(r,u,f,e){return n.isRegistered?n.validatePromise(r,u,f,e,{$q:t,$http:i}):t.reject("No TicketServerValidationProvider registered. Please call TicketServerValidation.register(fn(betData, context, partner, sublocationId)) in your module-config")}return{validate:r}}]}}angular.module("rikstoto.clients.js.validation.server").provider("ticketServerValidation",n)}(),function(){"use strict";function n(n,t,i){function u(n,t){n&&(r.options.currentValue=n.name,r.options.selectedItem=n,t||r.hideOptions())}function e(n){return n===r.options.selectedItem}function o(n){var i,t=r.items||[];38===n.keyCode?(i=_.findIndex(t,r.options.selectedItem),0===i?u(t[t.length-1],!0):u(t[i-1],!0),n.preventDefault()):40===n.keyCode?(i=_.findIndex(t,r.options.selectedItem),i===t.length-1?u(t[0],!0):u(t[i+1],!0),n.preventDefault()):f()}function s(n){n.preventDefault();r.optionsVisible=!r.optionsVisible}function f(){t(function(){r.optionsVisible=!1},150)}function h(){r.options.selectedItem&&r.options.selectedItem.name===r.options.currentValue||(r.options.selectedItem={name:r.options.currentValue,value:100*parseFloat(r.options.currentValue.replace(",",".")).toFixed(2)})}function c(){r.options.selectedItem||r.options.currentValue||u(r.selectedItem)}var r=this;r.optionsVisible=!1;r.toggleOptions=s;r.hideOptions=f;r.updateSelectedItem=h;r.select=u;r.isSelected=e;r.handleKeyPress=o;r.options={selectedItem:null,currentValue:""};r.options.selectedItem=r.selectedItem;i.$watch(function(){return r.options.selectedItem},function(n){u(n);r.onSelect({item:n})});i.$watch(function(){return r.items},function(){r.options.selectedItem=r.selectedItem});c()}n.templateUrl="core/components/editable-select/ng.editable-select.tpl.html";n.selector="editable-select";n.controllerAs="editableSelect";n.scope={items:"<",readonly:"&",selectedItem:"<",onSelect:"&"};angular.module("rikstoto.clients.js.core.components").component(n);n.$inject=["$q","$timeout","$scope"]}(),function(){"use strict";function n(n){function u(n){var r=t.betTypeCode.isMultiLegGame()&&n.legsMapped[t.betTypeCode.code]?n.legsMapped[t.betTypeCode.code].legNo:void 0;return{race:n,number:n.number,legAvailable:i(n),legNumber:r,isSelected:n===t.selectedRace,openForBet:n.openForBet}}function i(n){return e(n)&&f(n)}function f(n){return!!t.betMethod&&n.getLeg(t.betTypeCode).isBetMethodAllowed(t.betMethod)}function e(n){return(n.openForBet||t.allowClosedForBet)&&n.hasLeg(t.betTypeCode)}function r(){if(t.races=t.raceDay.races,t.betTypeCode){var n=_.map(t.races,u);t.viewModel.items=n}}function o(){return _.find(t.races,i)}function s(){var n=o();n&&t.validateAndSelectRace(n)}function h(n){i(n)&&t.selectRace({race:n})}function c(){return!t.forceHideLegMenu&&(t.selectedRace||s(),t.betTypeCode&&t.betTypeCode.isMultiLegGame())}var t=this;t.isChanging=!1;t.viewModel={items:[]};t.isLegSelectorVisible=c;t.validateAndSelectRace=h;n.$watch(function(){return t.raceDay},function(n){n&&r()});n.$watch(function(){return t.selectedRace},function(n){t.isChanging=!0;_.forEach(t.viewModel.items,function(t){t.isSelected=t.race===n});t.isChanging=!1});n.$watch(function(){return t.betTypeCode},function(n){t.isChanging=!0;n&&t.raceDay&&r();t.isChanging=!1})}n.templateUrl="core/components/leg-menu/ng.leg-menu.tpl.html";n.selector="leg-menu";n.controllerAs="legMenu";n.scope={selectRace:"&",raceDay:"<",selectedRace:"<",betTypeCode:"<",betMethod:"<",allowClosedForBet:"<",forceHideLegMenu:"<"};angular.module("rikstoto.clients.js.core.components").component(n);n.$inject=["$scope"]}(),function(){"use strict";function n(){var n=this;n.noop=angular.noop}n.templateUrl="core/components/tab-menu/ng.tab-menu.tpl.html";n.selector="tab-menu";n.controllerAs="tabMenu";n.scope={selectItem:"&",menu:"<"};angular.module("rikstoto.clients.js.core.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){var n=this;n.onBetCostSelect=function(t,i){n.onBetCostSelected({item:t,maxPrice:i})}}n.templateUrl="gamewindow/components/bet-controls/ng.bet-controls.tpl.html";n.selector="bet-controls";n.controllerAs="betControls";n.scope={betTypeCode:"<",betMethod:"<",state:"<",onBetCostSelected:"&",raceDayKey:"<",onReset:"&",betData:"&",onAllInToggled:"&",startTime:"<",onPerformBuy:"&",selectedRace:"<",selectedLeg:"<",raceDay:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(n,t,i){function u(){r.raceDay&&(r.legDetails=r.raceDay.getGameForLeg(r.selectedLeg)[0],r.additionalInvestmentbetTypeCodes=[],r.betTypeCode===t.QPlus&&r.additionalInvestmentbetTypeCodes.push(t.V),r.betTypeCode!==t.VP||r.selectedLeg.isMerged||(r.additionalInvestmentbetTypeCodes.push(t.V),r.additionalInvestmentbetTypeCodes.push(t.P)),r.legNameText=r.betTypeCode.isMultiLegGame()?r.betTypeCode.presentAsShortText():r.betTypeCode.presentAsText())}function f(){r.isUpdating=!0;try{if(r.onForceUpdate)return r.onForceUpdate({raceDayKey:r.raceDay.raceDayKey.toString(),selectedRaceNumber:r.selectedRace.number}).then(function(){r.isUpdating=!1});r.isUpdating=!1}catch(n){r.isUpdating=!1}}function e(n){var u=0,f,t;return r.raceDay&&n&&r.selectedRace&&(f=_.find(r.raceDay.getLegsFor(n),{raceNo:r.selectedRace.number}),t=r.raceDay.getGameForLeg(f)[0],t&&t.details.investment&&(u=t.details.investment>0?t.details.investment:" -")),u?i("currency")(u,"",0):"-"}var r=this;r.raceDay;r.legDetails={};r.getInvestmentForBetType=e;r.additionalInvestmentbetTypeCodes=[];r.forceUpdate=f;r.isUpdating=!1;n.$watch(function(){return r.selectedLeg},function(n){n&&u()})}n.templateUrl="gamewindow/components/game-info/ng.game-info.tpl.html";n.selector="game-info";n.controllerAs="gameInfo";n.scope={selectedLeg:"<",raceDay:"<",selectedRace:"<",betTypeCode:"<",onForceUpdate:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode","$filter"]}(),function(){"use strict";function n(n,t,i,r,u,f){function c(){return!(e.hideSingleTab&&s().length<=1)&&!!(e.betTypeCode&&e.betMethod&&e.betMethod.isSkillGame())&&(e.betTypeCode.isMultiLegGame()&&e.betMethod.isSkillGame()||e.betTypeCode===u.TV||e.betTypeCode===u.DUO||e.betTypeCode===u.T||e.betTypeCode===u.QPlus&&e.betMethod.isSkillGame())}function l(){return!!e.betTypeCode&&e.betTypeCode.isVGame()&&[u.DD,u.QPlus].indexOf(e.betTypeCode)===-1}function s(){return _.chain(o).filter(function(n){return n.isValidFor(e.betTypeCode,e.betMethod)}).map(function(n){return t.map(n,r)}).value()}function h(){e.tabs.clear();e.tabs.addSubItems(s());e.activate(e.tabs.items[0])}function a(n,t){e.onStartToggled&&e.onStartToggled({start:n,leg:t.legNo})}var e=this,o;e.tabs=r.load();e.activeView;e.displayTabMenu=c;e.canSelectScratched=!1;e.onSelect=a;o=[];o.push(i.create("win-odds",10,[f.vanlig,f.lynBanker],[u.QPlus]));o.push(i.create("most-played",20,[f.vanlig,f.lynBanker],[u.QPlus]));o.push(i.create("odds-trend",30,[f.vanlig,f.lynBanker],[u.QPlus]));o.push(i.create("press-rank",40,[f.vanlig,f.lynBanker],[u.QPlus]));o.push(i.create("press-tips",50,[f.vanlig,f.lynBanker],[u.QPlus]));o.push(i.create("investment",10,[f.vanlig,f.lynBanker],[u.V4,u.V5A,u.V5B,u.V64,u.V65,u.V75,u.V76]));o.push(i.create("triple-odds",10,[f.vanlig],[u.T]));o.push(i.create("tvilling-odds",5,[f.vanlig],[u.TV]));o.push(i.create("duo-odds",5,[f.vanlig],[u.DUO]));o.push(i.create("winplace-odds",100,[f.vanlig,f.lynBanker],[u.T,u.TV,u.DD,u.V,u.P,u.VP,u.DUO]));o.push(i.create("dd-odds",10,[f.vanlig,f.lynBanker],[u.DD]));o.push(i.create("product-ad",10,[f.lynToto,f.lynShare,f.lynSystem,f.multiDay],[]));n.$watch(function(){return e.betTypeCode},function(){e.betMethod&&e.betTypeCode&&(h(),e.canSelectScratched=l())});n.$watch(function(){return e.betMethod},function(){e.betMethod&&e.betTypeCode&&h()})}n.prototype={activate:function(n){var t=this,i=t.tabs.selectSubMenuItem(n);t.activeView=i.data.name;t.onItemSelect&&t.onItemSelect({name:i.data.name})}};n.templateUrl="gamewindow/components/program-info/ng.program-info.tpl.html";n.selector="program-info";n.controllerAs="programInfo";n.scope={selectedLeg:"<",selectedRace:"<",selectedRaceday:"<",betTypeCode:"<",betMethod:"<",ticket:"<",hideTooltip:"<",hideSingleTab:"<",readOnly:"<",onItemSelect:"&",defaultSort:"<",defaultSortDirection:"<",onStartToggled:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","mapper","ProgramInfoTab","MenuItem","betTypeCode","betMethod"]}(),function(){"use strict";function n(n){function i(n){t.displayName=n.name;t.date=n.raceDayKey.date}var t=this;t.displayName="";t.date;n.$watch(function(){return t.raceDay},function(n){n&&i(n)})}n.templateUrl="gamewindow/components/raceday-header/ng.raceday-header.tpl.html";n.selector="raceday-header";n.controllerAs="racedayHeader";n.scope={raceDay:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope"]}(),function(){"use strict";function n(n,t,i,r,u){function s(n,t){f.onStartToggled({start:n,leg:t})}function o(n){if(n%2==0)return n;for(;n%2!=0;)n++;return n}function h(n){f.onPurchaseLyn({price:n})}function c(n,t){f.onPurchaseMultiday({days:n,price:t})}function l(t,r){function u(){return!t||!r?null:t===n.QPlus?i.format("{0}-{1}-markings",t.name,r.name).toLowerCase():t.isVGame()||t===n.DD?i.format("v-game-{0}-markings",r.name).toLowerCase():i.format("{0}-{1}-markings",t.name,r.name).toLowerCase()}return u()}function a(n){return f.raceDay?f.raceDay.getLegsFor(n,f.allowClosedForBet):[]}function v(t){return t.isVGame()&&[n.DD,n.QPlus].indexOf(t)===-1}function y(t){return t.isVGame()&&[n.DD,n.QPlus].indexOf(t)===-1}function e(n,t){f.raceDay&&(f.status.ready=!1,f.activeView="",n&&(f.canSelectScratched=v(n,t),f.canSelectNoStart=y(n,t),f.legs=a(n),f.races=f.getRaces(),f.masterClass="markings-tbl--"+o(u.TOTAL_NUMBER_OF_STARTS)),f.activeView=l(n,t),f.status.ready=!0)}var f=this;f.legs=[];this.cache={legs:{},starts:{}};f.races;f.activeView;f.canSelectScratched;f.canSelectNoStart;f.purchaseClickLyntoto=h;f.purchaseClickMultiday=c;f.masterClass="markings-tbl--"+o(u.TOTAL_NUMBER_OF_STARTS);f.showDdIndicators=!u.HIDE_DD_INDICATORS;f.onSelect=s;f.status={isReady:!0};r.$watch(function(){return f.raceDay},function(){f.betTypeCode&&f.betMethod&&e(f.betTypeCode,f.betMethod)});r.$watch(function(){return f.betTypeCode},function(n,t){n!==t&&(f.legs=[],e(n,f.betMethod))});r.$watch(function(){return f.betMethod},function(n,t){n!==t&&(f.legs=[],e(f.betTypeCode,n))});r.$on("__gamewindow-event_reset",function(){_.forEach(f.legs,function(n){n.isOwnSelected=!1})})}n.prototype={canSelect:function(n){return!(n.scratched&&!this.canSelectScratched)&&!(!n.active&&!this.canSelectNoStart)},isAllSelected:function(n){var t=this;return!!n&&_.every(n.starts,function(i){return!(t.canSelect(i)&&!i.scratched&&i.active)||i.isToggled(n)})},selectAll:function(n){var t=this,i=!this.isAllSelected(n);_.forEach(n.starts,function(r){r.active&&!r.scratched||(r.deSelect(n),t.onSelect(r,n.legNo));t.canSelect(r)&&!r.scratched&&r.active&&(i?r.select(n):r.deSelect(n),t.onSelect(r,n.legNo))})},isActive:function(n){return!!this.selectedRace&&n.raceNo===this.selectedRace.number},getCurrentLeg:function(){var n=this;return n.selectedLeg},updateSelectedRace:function(n){var t=this,i=t.raceDay.getRace(n.raceNo);t.selectRace({race:i})},getNumberOfSelectionsForLeg:function(n){return n?_.filter(this.getStartsForLeg(n),function(t){return t.isToggled(n)}).length:0},getStartsForLeg:function(n){return n?n.starts:[]},getRaces:function(){return this.raceDay.races},getLegs:function(){var n=this;return _.map(n.legs,function(n){return{leg:n,starts:n.starts}})}};n.templateUrl="gamewindow/components/ticket-view/ng.user-markings.tpl.html";n.selector="user-markings";n.controllerAs="userMarkings";n.scope={selectedRace:"<",selectedLeg:"<",raceDay:"<",betTypeCode:"<",betMethod:"<",ticket:"=",selectRace:"&",priceInfo:"<",onPurchaseLyn:"&",onPurchaseMultiday:"&",allowClosedForBet:"<",readOnly:"<",onStartToggled:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","betMethod","string","$scope","gameSettings"]}(),function(){function n(n){return n(i,"tooltip","mouseenter",{appendToBody:!0,animation:!1,trackMousemove:!0,contentType:"object"})}function t(n){return{restrict:"EA",replace:!0,scope:{content:"=",placement:"@",animation:"&",isOpen:"&"},template:'<div ng-class="{ fade: animation() }" ng-show="isOpen() && globalTooltips.areOn" class="standard-tooltip"><span ng-if="!content.start.active"><span ng-bind-html="content.tooltips.noStart()"><\/span><\/span><div ng-if="content.start.active && content.start.scratched"><span ng-bind-html="content.tooltips.scratched()"><\/span> <\/div><span ng-if="content.start.active && !content.start.scratched">{{content.tooltips.active()}}<\/span><span class="arrow"><\/span><\/div>',link:function(t){t.globalTooltips=n.tooltips}}}var i="tooltipStartInfo";angular.module("rikstoto.clients.js.gamewindow.components.tooltips").directive("tooltipStartInfoPopup",t).directive(i,n);n.$inject=["$tooltip"];t.$inject=["tooltipService"]}(),function(){function n(n){return n("tooltipMd","tooltip","mouseenter",{appendToBody:!0,animation:!1,trackMousemove:!0})}function t(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},template:'<div class="standard-tooltip standard-tooltip--md" ng-bind="content"><\/div>'}}angular.module("rikstoto.clients.js.gamewindow.components.tooltips").directive("tooltipMdPopup",t).directive("tooltipMd",n);n.$inject=["$tooltip"]}(),function(){function n(n){function i(i,r,u){var e=0,f=0,s,h,o;return"floating"===t.position?(s=7,e=i.clientY-u-s,f=i.clientX+s,h=n.innerWidth-r,f>h&&(f=h),t.top=e,t.left=f):"top"===t.position&&(o=i.delegateTarget.getBoundingClientRect(),e=o.top-u-7,f=o.left+o.width/2-r/2,t.top=e,t.left=f),{top:e,left:f}}var t={areOn:!0,bottom:0,left:0,position:"floating"};return{tooltips:t,calculateTooltipPlacement:i}}angular.module("rikstoto.clients.js.gamewindow.components.tooltips").factory("tooltipService",n);n.$inject=["$window"]}(),function(){function n(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},template:'<div class="standard-tooltip" ng-bind="content"><\/div>'}}angular.module("rikstoto.clients.js.gamewindow.components.tooltips").directive("tooltipOnelinePopup",n)}(),function(){function n(n){return n("tooltipOneline","tooltip","mouseenter",{appendToBody:!0,animation:!1,trackMousemove:!0})}n.$inject=["$tooltip"];angular.module("rikstoto.clients.js.gamewindow.components.tooltips").directive("tooltipOneline",n)}(),function(){"use strict";function n(n,t,i,r){function f(){return i(r.format("game.text.information.{1}.{0}",u.betMethod.name,u.betTypeCode.name),!0)}function e(){return u.betTypeCode.name.indexOf("V7")>=0?"V7":"V6"}var u=this;u.infoText="";u.allInText="";u.tooLateForPurchase=!1;t.$watch(function(){return u.betMethod},function(){u.betMethod&&u.betTypeCode&&(u.infoText=f(),u.allInText=e())});t.$watch(function(){return u.betTypeCode},function(){u.betMethod&&u.betTypeCode&&(u.infoText=f(),u.allInText=e())})}n.prototype={reset:function(){this.onReset()}};n.templateUrl="gamewindow/components/bet-controls/bet-actions/ng.bet-actions.tpl.html";n.selector="bet-actions";n.controllerAs="betActions";n.scope={onReset:"&",selectedRace:"<",selectedLeg:"<",betTypeCode:"<",betMethod:"<",betData:"&",onAllInToggled:"&",onPerformBuy:"&",startTime:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$window","$scope","translate","string"]}(),function(){"use strict";function n(n,t){function u(){i.rowPriceTexts&&_.extend(defaultTexts,i.rowPriceTexts);i.rowpriceReadonly&&i.onSelect(i.priceInfo.defaultSelection)}var i=this,r;i.isReady=function(){return!!i.betTypeCode};i.readOnly=function(){return!!i.betTypeCode&&!i.betTypeCode.allowsCustomAmount()};i.isLynbanker=function(){return i.betMethod&&i.betMethod===n.lynBanker};i.displaySpecialQPlusLynbanker=function(){return i.betTypeCode&&i.betMethod&&i.betTypeCode===t.QPlus&&i.betMethod===n.lynBanker};i.maxAllowedCost=9999900;i.priceIsValid=!0;i.getEstimatedPrice=function(){function t(){var t=i.betData(),n;return t?(n=t.getEstimatedTotalPrice(),n>=50?(n+(i.includeFee?i.priceInfo.getEstimatedFee(n):0))/100:0):0}var n=t();return i.priceIsValid=!!i.disablePriceValidation||n<=i.maxAllowedCost/100,n};i.defaultTexts={closedForBetting:"Stengt for spill <br /> rekkepris må tastes manuelt",lynbanker:"Skriv inn eller velg maksbeløp:",regular:"Skriv inn eller velg rekkepris:",readOnly:"Rekkepris:"};i.amountLabel=function(){return i.noBreakPriceText?" ":"<br />",i.closedForBetting?i.defaultTexts.closedForBetting:i.readOnly()?i.defaultTexts.readOnly:i.betMethod===n.lynBanker?i.defaultTexts.lynbanker:i.defaultTexts.regular};i.selectedPrice;i.onSelect=function(t){i.betMethod===n.lynBanker?t&&i.onBetCostSelected({item:i.priceInfo.defaultSelection,maxPrice:t.value}):i.onBetCostSelected({item:t})};r={rowPrice:(i.priceInfo||{defaultSelection:null,value:0}).defaultSelection,maxPrice:(i.priceInfo||{defaultStep:{value:0}}).defaultStep};i.onSelectRowPrice=function(n){r.rowPrice=n;var t=r.maxPrice?r.maxPrice.value:0;i.onBetCostSelected({item:r.rowPrice,maxPrice:t})};i.onSelectMaxPrice=function(n){r.maxPrice=n;var t=r.maxPrice?r.maxPrice.value:0;i.onBetCostSelected({item:r.rowPrice,maxPrice:t})};u()}n.templateUrl="gamewindow/components/bet-controls/bet-cost/ng.bet-cost.tpl.html";n.selector="bet-cost";n.controllerAs="betCost";n.scope={priceInfo:"<",onBetCostSelected:"&",betData:"&",betMethod:"<",betTypeCode:"<",noBreakPriceText:"<",rowpriceReadonly:"<",closedForBetting:"<",includeFee:"<",rowPriceTexts:"<",disablePriceValidation:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betMethod","betTypeCode"]}(),function(){"use strict";function n(n,t){function u(n){i.startTime&&(i.info.minutesUntilStart=i.startTime.diff(n,"minutes"),i.info.expired=i.info.minutesUntilStart<=0,i.info.aboutToExpire=i.info.minutesUntilStart>0&&i.info.minutesUntilStart<1,i.info.percentage=100-Math.round(i.info.minutesUntilStart/r*100),i.info.active=i.info.minutesUntilStart<=r)}var i=this,r=30;i.info={active:!1,minutesUntilStart:30,aboutToExpire:!1,expired:!1,percentage:0};n.$watch(function(){return i.startTime},function(){t.activate({name:"countdown",callback:u})});n.$on("$destroy",function(){t.removeSubscriber("countdown")})}n.templateUrl="gamewindow/components/bet-controls/countdown/ng.countdown.tpl.html";n.selector="countdown";n.controllerAs="countdown";n.scope={startTime:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","serverTime"]}(),function(){"use strict";function n(n,t){var i=this;i.showJackpotInfo=!1;i.jackpotText="";i.jackpotType="";i.getJackpotInfo=function(){var u;i.showJackpotInfo=!1;var n=!1,r=!1,f=!1;i.betTypeCode&&i.betTypeCode.isMultiLegGame()&&i.raceDay.multiLegGames&&(u=_.find(i.raceDay.multiLegGames,function(n){return n.betTypeCode===i.betTypeCode}),u&&(u.hasJackpot&&(f=!0),u.hasBonus&&(i.betTypeCode===t.V76&&(n=!0),i.betTypeCode===t.V75&&(r=!0)),i.showJackpotInfo=f||n||r,i.showJackpotInfo&&(f?(i.jackpotType="jackpotinfo__image--jackpot",i.jackpotText=n?"Jackpot og SuperOnsdag!":r?"Gulljackpot!":"Jackpot!"):n?(i.jackpotType="jackpotinfo__image--super",i.jackpotText="Superonsdag!"):r&&(i.jackpotType="jackpotinfo__image--double",i.jackpotText="Gulljackpot!"))))};n.$watch(function(){return i.betTypeCode},function(){i.betTypeCode&&i.getJackpotInfo()})}n.templateUrl="gamewindow/components/bet-controls/jackpot-info/ng.jackpot-info.tpl.html";n.selector="jackpot-info";n.controllerAs="jackpotInfo";n.scope={selectedRace:"<",betTypeCode:"<",raceDay:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n,t){function u(n){n===i.sort.predicateName?i.sort.reverse=!i.sort.reverse:(i.sort.reverse=!1,i.sort.predicateName=n)}function r(n){var r=n.getLegsFor(t.DD),u=n.getRace(r[0].raceNo),f=n.getRace(r[1].raceNo),e=u.getOdds(t.DD);i.viewModel.combinations=_.chain(e).filter(function(n){return!n.startNo[0].scratched&&!n.startNo[1].scratched}).map(function(n){var t=u.getStart(n.startNo[0]),i=f.getStart(n.startNo[1]);return{dd1:t,dd2:i,odds:n.getOddsValueFormatted(),rawOdds:n.odds,scratched:t.scratched||i.scratched}}).value()}var i=this;i.viewModel={combinations:[]};i.sort={predicateName:"rawOdds",predicate:function(n){return _.get(n,i.sort.predicateName)},reverse:!1};i.setPredicate=u;n.$on("__racedata-updated",function(){i.selectedRaceday&&r(i.selectedRaceday)});n.$watch(function(){return i.selectedRaceday},function(n){n&&r(n)})}n.prototype={isToggled:function(n){return n.dd1.isToggled(1)&&n.dd2.isToggled(2)||n.dd1.isToggled(2)&&n.dd2.isToggled(1)},toggle:function(n){!n.dd1.isToggled(1)&&!n.dd2.isToggled(2)||n.dd1.isToggled(1)&&n.dd2.isToggled(2)?(n.dd1.toggle(1),n.dd2.toggle(2)):(n.dd1.select(1),n.dd2.select(2))}};n.templateUrl="gamewindow/components/program-info/dd-odds/ng.dd-odds.tpl.html";n.selector="dd-odds";n.controllerAs="ddOdds";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<",selectedRaceday:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n,t){function r(n){n===i.sort.predicateName?i.sort.reverse=!i.sort.reverse:(i.sort.reverse=!1,i.sort.predicateName=n)}function u(n){var r=n.getOdds(t.DUO);i.viewModel.combinations=_.chain(r).map(function(t){var i=n.getStart(t.startNo[0]),r=n.getStart(t.startNo[1]);return{place1:i,place2:r,oddsValue:t.odds,odds:t.getOddsValueFormatted(),scratched:i.scratched||r.scratched}}).filter({scratched:!1}).value()}var i=this;i.viewModel={combinations:[]};i.sort={predicateName:"oddsValue",predicate:function(n){return _.get(n,i.sort.predicateName)},reverse:!1};i.setPredicate=r;n.$watch(function(){return i.selectedRace},function(n){n&&u(n)})}n.prototype={isToggled:function(n){return n.place1.isToggled(1)&&n.place2.isToggled(2)},toggle:function(n){n.place1.isToggled(1)||n.place2.isToggled(2)?(n.place1.isToggled(1)||n.place1.toggle(1),n.place2.isToggled(2)||n.place2.toggle(2)):(n.place1.select(1),n.place2.select(2))}};n.templateUrl="gamewindow/components/program-info/duo-odds/ng.duo-odds.tpl.html";n.selector="duo-odds";n.controllerAs="duoOdds";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<",selectedRaceday:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){function n(n){return n("tooltipForm","tooltip","mouseenter",{appendToBody:!0,animation:!1,trackMousemove:!0,contentType:"object"})}function t(n){return{restrict:"EA",replace:!0,scope:{content:"=",placement:"@",animation:"&",isOpen:"&"},templateUrl:"gamewindow/components/program-info/form-tooltip/ng.form-tooltip.tpl.html",link:function(t){t.globalTooltips=n.tooltips}}}angular.module("rikstoto.clients.js.gamewindow.components").directive("tooltipFormPopup",t).directive("tooltipForm",n);n.$inject=["$tooltip"];t.$inject=["tooltipService"]}(),function(){"use strict";function n(n,t){function r(){i.sorted=t("orderBy")(i.starts,i.sort.predicate,i.sort.reverse)}function u(n){n===i.sort.predicateName?i.sort.reverse=!i.sort.reverse:(i.sort.reverse=!1,i.sort.predicateName=n);r()}function f(n,t){n.toggle(t);i.onSelect&&i.onSelect({start:n,leg:t})}var i=this;i.starts;i.sorted=[];i.toggle=f;i.sort={predicateName:"ticketPercentages",predicate:function(n){var t,r,u;return"winOdds"===i.sort.predicateName?(t=n.getOdds("V"),t&&t.odds&&0!==t.odds&&!n.scratched?t.odds:(1e6+n.startNo)*(i.sort.reverse?-1:1)):"ticketPercentages"===i.sort.predicateName?(r=n.getVMarksForBetType(i.betTypeCode),!r)?(1e6+n.startNo)*(i.sort.reverse?-1:1):(u=r.investmentPercent,u?u:(1e6+n.startNo)*(i.sort.reverse?-1:1)):_.get(n,i.sort.predicateName)},reverse:!0};i.setPredicate=u;n.$watch(function(){return i.starts},function(){r()},!0);n.$watch(function(){return i.defaultSort},function(n){n&&u(n)});n.$watch(function(){return i.defaultSortDirection},function(n){n&&(i.sort.reverse="desc"===n,r())});n.$watch(function(){return i.selectedRace},function(n){n&&(i.starts=_.filter(n.starts,{active:!0}),r())})}n.templateUrl="gamewindow/components/program-info/investment/ng.investment.tpl.html";n.selector="investment";n.controllerAs="investment";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<",canSelectScratched:"<",defaultSort:"<",defaultSortDirection:"<",onSelect:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","$filter"]}(),function(){"use strict";function n(n){var t=this;t.markingsHelper=function(){return n(t.ticket,t.selectedRace.starts)}}n.prototype={selectCombination:function(n){var t=this,i=_.map(n.combination,function(n){return t.selectedRace.getStart(n)});_.forEach(t.selectedRace.starts,function(n){n.clearSelection()});_.forEach(i,function(n,i){n.scratched||t.markingsHelper().selectStart(n,i+1)})},isScratched:function(n){return this.selectedRace.getStart(n).scratched}};n.templateUrl="gamewindow/components/program-info/most-played/ng.most-played.tpl.html";n.selector="most-played";n.controllerAs="mostPlayed";n.scope={selectedRace:"<",ticket:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["qplusMarkingsHelper"]}(),function(){"use strict";function n(n,t,i){var r=this;r.oddsTrendClass={"-1":"down",0:"neutral",1:"up"};r.sort={predicateName:"startNo",predicate:function(n){var i=n.getOdds(r.betTypeCode),t;return i?"prev"===r.sort.predicateName?(t=i.previous||{odds:-1},t===-1?r.sort.reverse?-1e5:1e5:t.odds):"current"===r.sort.predicateName?(t=i,t===-1?r.sort.reverse?-1e5:1e5:t.odds):_.get(n,r.sort.predicateName):null},reverse:!1};r.markingsHelper=function(){var t=r.selectedRace?r.selectedRace.starts:[];return n(r.ticket,t)};r.isDisabled=this.markingsHelper().isDisabled;r.isSelected=this.markingsHelper().isSelected;r.selectStart=this.markingsHelper().selectStart;r.updateSelectedPlace=this.markingsHelper().updateSelectedPlace;r.currentOddsUpdateTime=function(n){var f=this,u,r;return f.selectedRace?(u=_.chain(this.selectedRace.starts).filter(function(n){return n.active&&n.odds&&n.odds.length>0}).map(function(n){return n.getOdds(i.QPlus)}).value(),r=_.max(u,function(n){return(n||{updateTime:0}).updateTime}),r?t("moment")(r.updateTime,n):null):null};r.previousOddsUpdateTime=function(n){var f=this,u,r;return f.selectedRace?(u=_.chain(this.selectedRace.starts).filter(function(n){return n.active&&n.odds&&n.odds.length>0}).map(function(n){return n.getOdds(i.QPlus)}).value(),r=_.chain(u).filter(function(n){return n&&n.previous}).max(function(n){return(n.previous||{updateTime:0}).updateTime}).value(),r.previous?t("moment")(r.previous.updateTime,n):null):null}}n.prototype={setPredicate:function(n){n===this.sort.predicateName?this.sort.reverse=!this.sort.reverse:(this.sort.reverse=!1,this.sort.predicateName=n)}};n.templateUrl="gamewindow/components/program-info/odds-trend/ng.odds-trend.tpl.html";n.selector="odds-trend";n.controllerAs="oddsTrend";n.scope={selectedRace:"<",betTypeCode:"<",ticket:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["qplusMarkingsHelper","$filter","betTypeCode"]}(),function(){"use strict";function n(n,t){function r(){return _.chain(n.$properties).toArray().sortBy(function(t){return n[t].getSortIndex()}).map(function(t){return n[t]}).value()}var i=this;i.getPressRankCategories=r;i.oddsTrendClass={"-1":"down",0:"neutral",1:"up"};i.markingsHelper=function(){var n=i.selectedRace?i.selectedRace.starts:[];return t(i.ticket,n)};i.isDisabled=this.markingsHelper().isDisabled;i.isSelected=this.markingsHelper().isSelected;i.selectStart=this.markingsHelper().selectStart;i.updateSelectedPlace=this.markingsHelper().updateSelectedPlace}n.prototype={};n.templateUrl="gamewindow/components/program-info/press-rank/ng.press-rank.tpl.html";n.selector="press-rank";n.controllerAs="pressRank";n.scope={selectedRace:"<",betTypeCode:"<",ticket:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["pressRankCategory","qplusMarkingsHelper"]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/program-info/product-ad/ng.product-ad.tpl.html";n.selector="product-ad";n.controllerAs="productAd";n.scope={};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(n,t){function u(){i.activeSlide===i.selectedRace.pressTips.length-1?i.activeSlide=0:i.activeSlide++;r(i.activeSlide)}function f(){0===i.activeSlide?i.activeSlide=i.selectedRace.pressTips.length-1:i.activeSlide--;r(i.activeSlide)}function r(n){i.selectedOutlet=i.selectedRace.pressTips[n]}var i=this;i.activeSlide=0;i.oddsTrendClass={"-1":"down",0:"neutral",1:"up"};i.nextSlide=u;i.prevSlide=f;i.selectedOutlet;r(i.activeSlide);i.markingsHelper=function(){var n=i.selectedRace?i.selectedRace.starts:[];return t(i.ticket,n)};i.isDisabled=this.markingsHelper().isDisabled;i.isSelected=this.markingsHelper().isSelected;i.selectStart=this.markingsHelper().selectStart;i.updateSelectedPlace=this.markingsHelper().updateSelectedPlace;n.$watch(function(){return i.selectedRace.pressTips},function(n){n&&r(i.activeSlide)})}n.prototype={};n.templateUrl="gamewindow/components/program-info/press-tips/ng.press-tips.tpl.html";n.selector="press-tips";n.controllerAs="pressTips";n.scope={selectedRace:"<",betTypeCode:"<",ticket:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","qplusMarkingsHelper"]}(),function(){"use strict";function n(n,t){function r(n){n===i.sort.predicateName?i.sort.reverse=!i.sort.reverse:(i.sort.reverse=!1,i.sort.predicateName=n)}function u(n){var r=n.getOdds(t.T);i.viewModel.combinations=_.chain(r).map(function(t){var i=n.getStart(t.startNo[0]),r=n.getStart(t.startNo[1]),u=n.getStart(t.startNo[2]);return{place1:i,place2:r,place3:u,oddsValue:t.odds,odds:t.getOddsValueFormatted(),scratched:i.scratched||r.scratched||u.scratched}}).filter({scratched:!1}).value()}var i=this;i.viewModel={combinations:[]};i.sort={predicateName:"oddsValue",predicate:function(n){return _.get(n,i.sort.predicateName)},reverse:!1};i.setPredicate=r;n.$watch(function(){return i.selectedRace},function(n){n&&u(n)})}n.prototype={isToggled:function(n){return n.place1.isToggled(1)&&n.place2.isToggled(2)&&n.place3.isToggled(3)},toggle:function(n){n.place1.isToggled(1)||n.place2.isToggled(2)||n.place2.isToggled(3)?(n.place1.isToggled(1)||n.place1.toggle(1),n.place2.isToggled(2)||n.place2.toggle(2),n.place3.isToggled(3)||n.place3.toggle(3)):(n.place1.select(1),n.place2.select(2),n.place3.select(3))}};n.templateUrl="gamewindow/components/program-info/triple-odds/ng.triple-odds.tpl.html";n.selector="triple-odds";n.controllerAs="tripleOdds";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<",selectedRaceday:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n,t,i){function u(n){n===this.sort.predicateName?this.sort.reverse=!this.sort.reverse:(this.sort.reverse=!1,this.sort.predicateName=n)}function f(){r.isDisabled=r.markingsHelper().isDisabled;r.isSelected=r.markingsHelper().isSelected;r.selectStart=r.markingsHelper().selectStart;r.updateSelectedPlace=r.markingsHelper().updateSelectedPlace}var r=this;r.getDriverType=function(){};r.sort={predicateName:"startNo",predicate:function(n){if("qplus"===r.sort.predicateName){var i=n.getOdds(t.QPlus);return i&&i.odds&&0!==i.odds&&!n.scratched?i.odds:(1e6+n.startNo)*(r.sort.reverse?-1:1)}return _.get(n,r.sort.predicateName)},reverse:!1};r.setPredicate=u;r.oddsTrendClass={"-1":"down",0:"neutral",1:"up"};r.markingsHelper=function(){if(r.ticket){var t=r.selectedRace?r.selectedRace.starts:[];return n(r.ticket,t)}return{isDisabled:!0,isSelected:!1,selectStart:function(){return null}}};r.isDisabled=this.markingsHelper().isDisabled;r.isSelected=this.markingsHelper().isSelected;r.selectStart=this.markingsHelper().selectStart;r.updateSelectedPlace=this.markingsHelper().updateSelectedPlace;i.$watch(function(){return r.ticket},function(){f()})}n.templateUrl="gamewindow/components/program-info/win-odds/ng.win-odds.tpl.html";n.selector="win-odds";n.controllerAs="winOdds";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<",ticket:"<",hideTooltip:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["qplusMarkingsHelper","betTypeCode","$scope"]}(),function(){"use strict";function n(n,t){function u(n){n===this.sort.predicateName?this.sort.reverse=!this.sort.reverse:(this.sort.reverse=!1,this.sort.predicateName=n)}function r(n){i.stableOdds=!i.betTypeCode||i.betTypeCode!==t.V&&i.betTypeCode!==t.VP?[]:n.getStableOdds(t.V)}var i=this;i.reverse=!1;i.predicate;i.stableOdds=[];i.sort={predicateName:"startNo",predicate:function(n){if(["vinner","min","max"].indexOf(i.sort.predicateName)>-1){var r=null;return"vinner"===i.sort.predicateName?r=(n.getOdds(t.V)||{odds:null}).odds:"min"===i.sort.predicateName?r=(n.getOdds(t.P)||{min:null}).min:"max"===i.sort.predicateName&&(r=(n.getOdds(t.P)||{max:null}).max),r?r:i.sort.reverse?-1e5:1e5}return _.get(n,i.sort.predicateName)},reverse:!1};i.setPredicate=u;n.$watch(function(){return i.selectedRace},function(n){i.stableOdds=[];r(n)});n.$watch(function(){return i.betTypeCode},function(){i.stableOdds=[];r(i.selectedRace)})}n.templateUrl="gamewindow/components/program-info/winplace-odds/ng.winplace-odds.tpl.html";n.selector="winplace-odds";n.controllerAs="winPlaceOdds";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n,t){function r(n){n===i.sort.predicateName?i.sort.reverse=!i.sort.reverse:(i.sort.reverse=!1,i.sort.predicateName=n)}function u(n){var r=n.getOdds(t.TV);i.viewModel.combinations=_.chain(r).map(function(t){var i=n.getStart(t.startNo[0]),r=n.getStart(t.startNo[1]);return{place1:i,place2:r,oddsValue:t.odds,odds:t.getOddsValueFormatted(),scratched:i.scratched||r.scratched}}).filter({scratched:!1}).value()}var i=this;i.viewModel={combinations:[]};i.sort={predicateName:"oddsValue",predicate:function(n){return _.get(n,i.sort.predicateName)},reverse:!1};i.setPredicate=r;n.$watch(function(){return i.selectedRace},function(n){n&&u(n)})}n.prototype={isToggled:function(n){return n.place1.isToggled(1)&&n.place2.isToggled(2)||n.place1.isToggled(2)&&n.place2.isToggled(1)},toggle:function(n){!n.place1.isToggled(1)&&!n.place2.isToggled(2)||n.place1.isToggled(1)&&n.place2.isToggled(2)?(n.place1.toggle(1),n.place2.toggle(2)):(n.place1.select(1),n.place2.select(2))}};n.templateUrl="gamewindow/components/program-info/tvilling-odds/ng.tvilling-odds.tpl.html";n.selector="tvilling-odds";n.controllerAs="tvillingOdds";n.scope={betTypeCode:"<",selectedLeg:"<",selectedRace:"<",selectedRaceday:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n,t,i,r){function e(){return _.chain(u.markingButtons).map(function(n,t){var i=[];return n.isDisabled()&&i.push("disabled--"+(t+1).toString()),n.scratched()&&i.push("scratched--"+(t+1).toString()),n.active||i.push("no-start--"+(t+1).toString()),n.isSelected()&&i.push("selected--"+(t+1).toString()),n.selectable()&&i.push("selectable--"+(t+1).toString()),i}).flatten().value()}function o(){return""+Math.floor(1e6*Math.random())}function s(){for(var t,n=0;n<r.TOTAL_NUMBER_OF_STARTS;n++)t=u.starts[n],t&&u.markingButtons[n].init(t,u.legNumber,u.canSelectNoStart,u.canSelectScratched,u.canDisable)}function h(n,t){n.canSelect&&(u.select({start:n.start,place:u.legNumber}),u.leg.betTypeCode===i.QPlus&&t.stopPropagation())}var u=this,f;for(u.id=o(),u.toggle=h,u.canStartsBeDisabled=!1,u.buttonStates=[],u.getButtonStates=e,u.markingButtons=[],f=0;f<r.TOTAL_NUMBER_OF_STARTS;f++)u.markingButtons.push(new t);u.isDisabled=function(n){return!!u.canStartsBeDisabled&&n.isDisabled()};n.$on("$destroy",function(){u.markingButtons=null});n.$watch(function(){return u.starts},function(n){u.status||(u.status={ready:!0});n&&n.length>0&&u.status.ready&&s()});n.$watch(function(){return u.leg},function(n){u.canStartsBeDisabled=n.betTypeCode===i.QPlus})}n.templateUrl="gamewindow/components/ticket-view/common/ng.leg-marks-row.tpl.html";n.selector="leg-marks-row";n.controllerAs="legMarksRow";n.scope={userMarkings:"<",leg:"<",starts:"<",canSelectNoStart:"<",canSelectScratched:"<",canDisable:"<",legNumber:"<",select:"&",status:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","StartButton","betTypeCode","gameSettings"]}(),function(){"use strict";function n(){function r(){return!(u()&&!n.canSelectScratched)&&!(!i()&&!n.canSelectNoStart)}function u(){return!(n.mode===t.fixed||!n.start)&&n.start.scratched}function f(){return n.isDisabled}function i(){return n.mode===t.fixed||!n.start||n.start.active}function e(){!n.text&&n.start?n.text=n.start.startNo:n.mode=t.fixed;n.start&&(i()||n.fixedClasses.push("nostart"),n.start.scratched&&n.fixedClasses.push("scratched"));r()&&n.fixedClasses.push("selectable")}var n=this,t;n.fixedClasses=[];t={dynamic:"dynamic",fixed:"fixed"};n.getClasses=function(t){var i=[].concat(t);return n.isSelected&&i.push("selected"),n.getDisabledStatus()&&i.push("disabled"),i};e();n.getDisabledStatus=f;n.mode=t.dynamic}n.templateUrl="gamewindow/components/ticket-view/common/ng.markings-button.tpl.html";n.selector="markings-button";n.controllerAs="markingsButton";n.scope={start:"<",text:"@",select:"&",isSelected:"<",canSelectNoStart:"<",canSelectScratched:"<",isDisabled:"<",tooltip:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["translate","string"]}(),function(){"use strict";function n(n,t){function i(){function r(){return!(!i.start.active&&!i.canSelectNoStart)&&!(i.start.scratched&&!i.canSelectScratched)}function u(n,t,u,f,e){i.canSelectNoStart=u;i.canSelectScratched=f;i.legNumber=t;i.start=n||{startNo:0,active:!1,scratched:!1,horse:{displayName:""}};i.startNumber=i.start.startNo;i.active=i.start.active;i.canDisable=e;i.canSelect=r();i.name=i.start.horse.displayName;i.cssClass="markings-button--"+i.start.startNo}var i=this;i.canSelectNoStart;i.canSelectScratched;i.legNumber;i.start;i.startNumber;i.active;i.cssClass="";i.name;i.scratched=function(){return i.start.scratched};i.selectable=function(){return r()};i.canDisable;i.tooltips={noStart:function(){var r=i.canSelectNoStart?"game.text.tooltip.nostart.canselect":"game.text.tooltip.nostart";return n.format(t(r),i.start.startNo,i.start.horse.displayName,i.start.driver.displayName)},scratched:function(){var r=i.canSelectScratched?"game.text.tooltip.scratched.canselect":"game.text.tooltip.pmuplus.scratched";return n.format(t(r),i.start.startNo,i.start.horse.displayName,i.start.driver.displayName)},active:function(){return n.format(t("game.text.tooltip.active"),i.start.startNo,i.start.horse.displayName,i.start.driver.displayName)}};i.init=u;u()}return i.prototype={isDisabled:function(){return this.canDisable&&_.without(this.start.selectionStatus.legs,this.legNumber).length>0},isSelected:function(){return this.start.selectionStatus&&this.start.selectionStatus.legs.indexOf(this.legNumber)>-1},toggle:function(){function t(t){return!(!t.active&&!n.canSelectNoStart)&&!(t.scratched&&!n.canSelectScratched)}var n=this,i=t(this.start);i&&this.start.toggle(this.legNumber)}},i.load=function(n,t,r,u,f){return new i(n,t,r,u,f)},i}n.$inject=["string","translate"];angular.module("rikstoto.clients.js.gamewindow.components").factory("StartButton",n)}(),function(){function n(){return function(n,t,i){t.addClass("ng-binding").data("$binding",i.bindHtmlUnsafe);n.$watch(i.bindHtmlUnsafe,function(n){t.html(n||"")})}}angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",n)}(),function(){angular.module("rikstoto.clients.js.gamewindow.components.tooltips.angularUI").provider("$tooltip",function(){function i(n){var t="-";return n.replace(/[A-Z]/g,function(n,i){return(i?t:"")+n.toLowerCase()})}var r={contentType:"string",placement:"top",animation:!0,popupDelay:0},n={mouseenter:"mouseleave",click:"click",focus:"blur"},t={};this.options=function(n){angular.extend(t,n)};this.setTriggers=function(t){angular.extend(n,t)};this.$get=["tooltipService","$window","$compile","$timeout","$document","$interpolate",function(u,f,e,o,s,h){return function(f,c,l,a){function w(t){var i=t||v.trigger||l,r=n[i]||i;return{show:i,hide:r}}function b(){var n='content="'+y+"content"+p+'" ';return"string"===v.contentType?n:'content="content" '}var v=angular.extend({},r,t,a),k=i(f),y=h.startSymbol(),p=h.endSymbol(),d='<div class="ng-ui-tooltip"'+k+'-popup title="'+y+"title"+p+'" '+b()+'placement="'+y+"placement"+p+'" animation="animation" is-open="isOpen"><\/div>';return{restrict:"EA",compile:function(){var n=e(d);return function(t,i,r){function b(n){if(h){var t={},i=h[0].offsetWidth,r=h[0].offsetHeight;u.calculateTooltipPlacement(n,i,r);t.top=u.tooltips.top+"px";t.left=u.tooltips.left+"px";h.css(t)}}function st(){e.isOpen?tt():nt()}function nt(n){function i(){return ot(n)}u.tooltips.areOn&&(yt&&!t.$eval(r[c+"Enable"])||(ct(),e.popupDelay?y||(y=o(i,e.popupDelay,!1),y.then(function(t){t(n)})):ot(n)(n)))}function tt(){t.$apply(function(){k()})}function ot(n){return y=null,a&&(o.cancel(a),a=null),e.content?(ht(),h.css({top:0,left:0,display:"block"}),g?s.find("body").append(h):i.after(h),e.isOpen=!0,e.$digest(),b(n),b):angular.noop}function k(){e.isOpen=!1;o.cancel(y);y=null;e.animation?a||(a=o(d,500)):d()}function ht(){h&&d();p=e.$new();h=n(p,angular.noop)}function d(){a=null;h&&(h.remove(),h=null);p&&(p.$destroy(),p=null)}function ct(){lt();at()}function lt(){var n=r[c+"Placement"];e.placement=angular.isDefined(n)?n:v.placement}function at(){var t=r[c+"PopupDelay"],n=parseInt(t,10);e.popupDelay=isNaN(n)?v.popupDelay:n}function vt(){var n=r[c+"Trigger"];rt();l=w(n);l.show===l.hide?i.bind(l.show,st):(i.bind(l.show,nt),i.bind(l.hide,tt));it&&i.bind("mousemove",b)}var h,p,a,y,g=!!angular.isDefined(v.appendToBody)&&v.appendToBody,l=w(void 0),yt=angular.isDefined(r[c+"Enable"]),it=!!angular.isDefined(v.trackMousemove)&&v.trackMousemove,e=t.$new(!0),rt,ut,ft,et;e.isOpen=!1;r.$observe(f,function(n){var i=t.$eval(n);i?(t.$watch(function(){return t[n]},function(n){n&&(e.content=n)}),e.content=i):e.content=n;!n&&e.isOpen&&k()});r.$observe("disabled",function(n){n&&e.isOpen&&k()});r.$observe(c+"Title",function(n){e.title=n});rt=function(){i.unbind(l.show,nt);i.unbind(l.hide,tt);i.unbind("mousemove",b)};ut=t.$eval(r[c+"TrackMousemove"]);it=angular.isDefined(ut)?ut:it;vt();ft=t.$eval(r[c+"Animation"]);e.animation=angular.isDefined(ft)?!!ft:v.animation;et=t.$eval(r[c+"AppendToBody"]);g=angular.isDefined(et)?et:g;g&&t.$on("$locationChangeSuccess",function(){e.isOpen&&k()});t.$on("$destroy",function(){o.cancel(a);o.cancel(y);rt();d();e=null})}}}}}]}).directive("ngTooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},template:'<div class="ng-ui-tooltip" ng-class="{ in: isOpen(), fade: animation() }"><div class="tooltip-inner" ng-bind="content"><\/div><\/div>'}}).directive("ngTooltip",["$tooltip",function(n){return n("tooltip","tooltip","mouseenter")}]).directive("ngTooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",animation:"&",isOpen:"&"},template:'<div class="ng-ui-tooltip" ng-class="{ in: isOpen(), fade: animation() }"><div class="tooltip-inner" bind-html-unsafe="content"><\/div><\/div>'}}).directive("ngTooltipHtmlUnsafe",["$tooltip",function(n){return n("tooltipHtmlUnsafe","tooltip","mouseenter")}])}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/andel/qplus/ng.qplus-andel-markings.tpl.html";n.selector="qplus-lynshare-markings";n.controllerAs="lynShare";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(n,t){function r(n){n&&((n===t.V5A||t.V5B)&&(i.splitText="1/5"),n===t.V4&&(i.splitText="1/4"))}var i=this;i.splitText="1/10";r(i.betTypeCode);n.$watch(function(){return i.betTypeCode},function(n){r(n)})}n.templateUrl="gamewindow/components/ticket-view/views/andel/v-game/ng.v-game-andel-markings.tpl.html";n.selector="v-game-lynshare-markings";n.controllerAs="lynShare";n.scope={priceInfo:"<",purchaseClickLyntoto:"&",betTypeCode:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lynsystem/duo/ng.duo-lynsystem-markings.tpl.html";n.selector="duo-lynsystem-markings";n.controllerAs="lynSystem";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lynsystem/trippel/ng.t-lynsystem-markings.tpl.html";n.selector="t-lynsystem-markings";n.controllerAs="lynSystem";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lynsystem/v-game/ng.v-game-lynsystem-markings.tpl.html";n.selector="v-game-lynsystem-markings";n.controllerAs="lynSystem";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(n,t,i){function u(){r.canSelectNoStart=r.userMarkings.canSelectNoStart;r.canSelectScratched=r.userMarkings.canSelectScratched;r.preSelectList=r.ticket.preSelectList;r.isDisabled=r.markingsHelper().isDisabled;r.isSelected=r.markingsHelper().isSelected;r.select=r.markingsHelper().selectStart}this.places=this.getPlaces(n.QPlus);this.setActiveRow(1);var r=this;r.isReady=!1;r.markingsHelper=function(){if(r.ticket){var n=r.userMarkings.getStartsForLeg(r.selectedLeg);return t(r.ticket,n)}return{isDisabled:!0,isSelected:!1}};this.isDisabled=this.markingsHelper().isDisabled;this.isSelected=this.markingsHelper().isSelected;this.select=this.markingsHelper().selectStart;this.canSelectNoStart;this.canSelectScratched;this.preSelectList;i.$on("__gamewindow-event_reset",function(){u()});i.$watch(function(){r.ticket},function(){u()});i.$watch(function(){return r.selectedLeg},function(n){r.isReady=n?!0:!1})}n.prototype={getStartsForLeg:function(n){return this.userMarkings.getStartsForLeg(n)},selectedPlace:function(){return this.ticket.selectedPlace},isActive:function(n){return this.selectedPlace()===n},setActiveRow:function(n){this.ticket&&this.ticket.setSelectedPlace(n)},getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},setPreselectedPlace:function(n){var t=this.selectedLeg,i=this.userMarkings.getStartsForLeg(this.selectedLeg);this.preSelectList.places[n]?(t.setOwnSelectionForPlace(n),_.forEach(i,function(t){t.isToggled(n)&&t.toggle(n);!t.isToggled(n)&&t.isToggled(0)&&t.toggle(n)})):(t.removeOwnSelectionForPlace(n),_.forEach(i,function(t){t.isToggled(n)&&t.toggle(n)}))}};n.templateUrl="gamewindow/components/ticket-view/views/lynbanker/qplus/ng.qplus-lynbanker-markings.tpl.html";n.selector="qplus-lynbanker-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",ticket:"<",status:"<",selectedLeg:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","qplusMarkingsHelper","$scope"]}(),function(){"use strict";function n(n){var t=this;t.getDDLegNumber=function(i){return _.find(t.races,{number:i.raceNo}).getLegNumber(n.DD)};t.hasDD=function(i){return t.userMarkings.betTypeCode!==n.DD&&_.find(t.races,{number:i.raceNo}).hasLeg(n.DD)};t.select=function(n,t){n.toggle(t)}}n.templateUrl="gamewindow/components/ticket-view/views/lynbanker/v-game/ng.v-game-lynbanker-markings.tpl.html";n.selector="v-game-lynbanker-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",races:"<",betTypeCode:"<",showDdIndicators:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode"]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lyntoto/duo/ng.duo-lyntoto-markings.tpl.html";n.selector="duo-lyntoto-markings";n.controllerAs="lyntoto";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lyntoto/qplus/ng.qplus-lyntoto-markings.tpl.html";n.selector="qplus-lyntoto-markings";n.controllerAs="lyntoto";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lyntoto/trippel/ng.t-lyntoto-markings.tpl.html";n.selector="t-lyntoto-markings";n.controllerAs="lyntoto";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lyntoto/tvilling/ng.tv-lyntoto-markings.tpl.html";n.selector="tv-lyntoto-markings";n.controllerAs="lyntoto";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/lyntoto/v-game/ng.v-game-lyntoto-markings.tpl.html";n.selector="v-game-lyntoto-markings";n.controllerAs="lyntoto";n.scope={priceInfo:"<",purchaseClickLyntoto:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(n,t){var i=this;this.places=this.getPlaces(n.DUO);t.$watch(function(){return i.selectedRace},function(n,t){n&&n!==t&&_.forEach(i.selectedRace.starts,function(n){n.deSelect(1)})})}n.prototype={getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},select:function(n,t){!n.scratched&&n.active&&n.toggle(t)},numberOfSelections:function(n){return this.selectedRace?_.filter(this.selectedRace.starts,function(t){return t.isToggled(n)}).length:0},getRowHeader:function(n){if(!this.isPmuRaceDay(this.userMarkings.raceDay.raceDayKey.trackCode)){if(1===n)return"1. plass";if(2===n)return"2. plass"}return n}};n.templateUrl="gamewindow/components/ticket-view/views/vanlig/duo/ng.duo-vanlig-markings.tpl.html";n.selector="duo-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",selectedRace:"<",selectedLeg:"<",canSelectNoStart:"<",canSelectScratched:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","$scope"]}(),function(){"use strict";function n(n,t){var i=this;this.places=this.getPlaces(n.P);t.$watch(function(){return i.userMarkings.selectedRace},function(n,t){n&&n!==t&&_.forEach(i.userMarkings.selectedRace.starts,function(n){n.deSelect(1)})})}n.prototype={getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},select:function(n,t){!n.scratched&&n.active&&n.toggle(t)},numberOfSelections:function(n){return this.userMarkings.selectedRace?_.filter(this.userMarkings.selectedRace.starts,function(t){return t.isToggled(n)}).length:0}};n.templateUrl="gamewindow/components/ticket-view/views/vanlig/plass/ng.p-vanlig-markings.tpl.html";n.selector="p-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","$scope"]}(),function(){"use strict";function n(n,t,i){function u(){r.preSelectList=r.ticket.preSelectList;r.isDisabled=r.markingsHelper().isDisabled;r.isSelected=r.markingsHelper().isSelected;r.select=r.markingsHelper().selectStart}this.places=this.getPlaces(n.QPlus);this.setActiveRow(1);var r=this;r.isReady=!1;r.markingsHelper=function(){if(r.selectedRace){var n=r.selectedRace.starts;return t(r.ticket,n)}return{isDisabled:!0,isSelected:!1}};this.isDisabled=this.markingsHelper().isDisabled;this.isSelected=this.markingsHelper().isSelected;this.select=this.markingsHelper().selectStart;this.canSelectNoStart;this.canSelectScratched;this.preSelectList;i.$watch(function(){r.ticket},function(){u()});i.$watch(function(){return r.selectedLeg},function(n){r.isReady=n?!0:!1});i.$on("__gamewindow-event_reset",function(){u()})}n.prototype={getStartsForLeg:function(){if(this.selectedRace)return this.selectedRace.starts},selectedPlace:function(){return this.ticket.selectedPlace},isActive:function(n){return this.selectedPlace()===n},setActiveRow:function(n){this.ticket&&this.ticket.setSelectedPlace(n)},getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},setPreselectedPlace:function(n){var t=this.selectedRace.starts;this.ticket.preSelectList.places[n]?_.forEach(t,function(t){t.isToggled(n)&&t.toggle(n);!t.isToggled(n)&&t.isToggled(0)&&t.toggle(n)}):_.forEach(t,function(t){t.isToggled(n)&&t.toggle(n)})}};n.templateUrl="gamewindow/components/ticket-view/views/vanlig/qplus/ng.qplus-vanlig-markings.tpl.html";n.selector="qplus-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",ticket:"<",status:"<",selectedLeg:"<",selectedRace:"<",canSelectNoStart:"<",canSelectScratched:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","qplusMarkingsHelper","$scope"]}(),function(){"use strict";function n(n,t){var i=this;this.places=this.getPlaces(t.T);n.$watch(function(){return i.selectedRace},function(n,t){n&&n!==t&&_.forEach(i.selectedRace.starts,function(n){n.deSelect(1)})})}n.templateUrl="gamewindow/components/ticket-view/views/vanlig/trippel/ng.t-vanlig-markings.tpl.html";n.selector="t-vanlig-markings";n.controllerAs="markingsTable";n.scope={selectedRace:"<",selectedLeg:"<",canSelectNoStart:"<",canSelectScratched:"<",userMarkings:"<"};n.prototype={isAllSelected:function(n){var t=this;return _.every(t.selectedRace.starts,function(i){return!(t.userMarkings.canSelect(i)&&!i.scratched&&i.active)||i.isToggled(n)})},selectAll:function(n){var t=this,i=!this.isAllSelected(n);_.forEach(t.selectedRace.starts,function(r){t.userMarkings.canSelect(r)&&!r.scratched&&r.active&&(i?r.select(n):r.deSelect(n))})},getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},select:function(n,t){!n.scratched&&n.active&&n.toggle(t)},numberOfSelections:function(n){return this.selectedRace?_.filter(this.selectedRace.starts,function(t){return t.isToggled(n)}).length:0}};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n){var t=this;t.getDDLegNumber=function(i){return _.find(t.races,{number:i.raceNo}).getLegNumber(n.DD)};t.hasDD=function(i){return!(t.betTypeCode===n.DD||!i)&&_.find(t.races,{number:i.raceNo}).hasLeg(n.DD)};t.select=function(n,i){n.toggle(i);t.onSelect&&t.onSelect({start:n,leg:i})}}n.templateUrl="gamewindow/components/ticket-view/views/vanlig/v-game/ng.v-game-vanlig-markings.tpl.html";n.selector="v-game-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",races:"<",betTypeCode:"<",legs:"<",status:"<",selectedLeg:"<",canSelectScratched:"<",canSelectNoStart:"<",showDdIndicators:"<",onSelect:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode"]}(),function(){"use strict";function n(n,t){var i=this;this.places=this.getPlaces(t.TV);n.$watch(function(){return i.selectedRace},function(n,t){n&&n!==t&&_.forEach(i.selectedRace.starts,function(n){n.deSelect(1)})})}n.prototype={isAllSelected:function(n){var t=this;return _.every(t.selectedRace.starts,function(i){return!(t.userMarkings.canSelect(i)&&!i.scratched&&i.active)||i.isToggled(n)})},selectAll:function(n){var t=this,i=!this.isAllSelected(n);_.forEach(t.selectedRace.starts,function(r){t.userMarkings.canSelect(r)&&!r.scratched&&r.active&&(i?r.select(n):r.deSelect(n))})},getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},select:function(n,t){!n.scratched&&n.active&&n.toggle(t)},numberOfSelections:function(n){return this.selectedRace?_.filter(this.selectedRace.starts,function(t){return t.isToggled(n)}).length:0},isPmuRaceDay:function(n){return/^(F[1-9]$)/.test(n)},getRowHeader:function(n){if(!this.isPmuRaceDay(this.userMarkings.raceDay.raceDayKey.trackCode)){if(1===n)return"Hester";if(2===n)return"Utgang"}return n}};n.templateUrl="gamewindow/components/ticket-view/views/vanlig/tvilling/ng.tv-vanlig-markings.tpl.html";n.selector="tv-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",selectedRace:"<",selectedLeg:"<",canSelectNoStart:"<",canSelectScratched:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){"use strict";function n(n,t){var i=this;this.places=this.getPlaces(n.V);t.$watch(function(){return i.selectedRace},function(n,t){n&&n!==t&&_.forEach(i.selectedRace.starts,function(n){n.deSelect(1)})})}n.prototype={getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},select:function(n,t){!n.scratched&&n.active&&n.toggle(t)},numberOfSelections:function(n){return this.selectedRace?_.filter(this.selectedRace.starts,function(t){return t.isToggled(n)}).length:0}};n.templateUrl="gamewindow/components/ticket-view/views/vanlig/vinner/ng.v-vanlig-markings.tpl.html";n.selector="v-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<",selectedRace:"<",selectedLeg:"<",canSelectNoStart:"<",canSelectScratched:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","$scope"]}(),function(){"use strict";function n(){}n.templateUrl="gamewindow/components/ticket-view/views/multiday/qplus/ng.qplus-multiday-markings.tpl.html";n.selector="qplus-multiday-markings";n.controllerAs="multiday";n.scope={priceInfo:"<",purchaseClickMultiday:"&"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=[]}(),function(){"use strict";function n(n,t){var i=this;this.places=this.getPlaces(n.VP);t.$watch(function(){return i.userMarkings.selectedRace},function(n,t){n&&n!==t&&_.forEach(i.userMarkings.selectedRace.starts,function(n){n.deSelect(1)})})}n.prototype={getPlaces:function(n){return _.chain(new Array(n.getNumberOfSelectionfields())).map(function(n,t){return t+1}).value()},select:function(n,t){!n.scratched&&n.active&&n.toggle(t)},numberOfSelections:function(n){return this.userMarkings.selectedRace?_.filter(this.userMarkings.selectedRace.starts,function(t){return t.isToggled(n)}).length:0}};n.templateUrl="gamewindow/components/ticket-view/views/vanlig/vinner-plass/ng.vp-vanlig-markings.tpl.html";n.selector="vp-vanlig-markings";n.controllerAs="markingsTable";n.scope={userMarkings:"<"};angular.module("rikstoto.clients.js.gamewindow.components").component(n);n.$inject=["betTypeCode","$scope"]}(),function(){"use strict";angular.module("game",["rikstoto.web","rikstoto.web.game-window","rikstoto.clients.js","ngAnimate","ngSanitize"])}(),function(n){"use strict";function t(){}function i(n){angular.element(document).ready(function(){moment.locale("nb-no");var t=angular.element(document.getElementById("qplus"));angular.module("game").config(["selectedRacedayProvider","gameSettingsProvider",function(t,i){i.init({TOTAL_NUMBER_OF_STARTS:n.HighestRunnerNumber});n&&t.init(n)}]);angular.bootstrap(t,["game"],{strictDi:!1})})}angular.module("game").config(t);t.$inject=["selectedRacedayProvider"];n.initQplusGame=i}(window),function(){"use strict";function n(n){n.start("game-window")}angular.module("rikstoto.web.game-window",["rikstoto.clients.js","rikstoto.web.game-window.updates","rikstoto.web.game-window.components"]).run(n);n.$inject=["eventDispatcherWrapper"]}(),function(){"use strict";angular.module("rikstoto.web.game-window.components",[])}(),function(){"use strict";angular.module("rikstoto.web.game-window.updates",[])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut){function lt(){ft.raceDay.resetSelections()}function ni(n){n&&(ot=[],ft.raceDay.update(n,gt),it(function(){ti()}))}function ti(){var n="";ot.length>0&&(n=b("app.common.newScratches"),_.forEach(ot,function(t){n+=tt.format(b("app.common.scratch"),t.start.startNo,t.start.horse.displayName,t.raceNumber)}));ot.length>0&&alert(n);ot=[]}function oi(){var n=Uri(window.location.href),t=n.getQueryParamValue("partner")||"",i=n.getQueryParamValue("context")||"",r=n.getQueryParamValue("sublocid")||"";return{partner:t,context:i,sublocid:r}}function at(n){ct=!0;var t=oi();return o.PrepareTicketConfirmation(n.serializeToBetDataString(),t.context,t.partner,t.sublocid).then(function(t){var r=JSON.parse(t.Result);if(!r){vt("Noe gikk dessverre galt. Vennligst prøv igjen, eller kontakt kundestøtte dersom problemet vedvarer.");return}r.IsValid?ft.state.isTipEditMode?EPi&&EPi.GetDialog().Close(n.serializeToBetDataString()):i.location=r.RedirectUrl:r.RequiresLogin?k.login().then(function(){at(n)}):vt(r.Message)})}function si(n){ct=!1;alert(n)}function vt(n){ct=!1;alert(n)}function hi(n){var t=ft.currentBetData();t.maxPrice=n;w.validate(t).then(at,vt)}function ci(n,t){var i=ft.currentBetData();i.numberOfDays=n;i.maxPrice=t;w.validate(i).then(at,vt)}function li(){ft.state.isAllIn=!ft.state.isAllIn}function ai(){var n=ft.currentBetData(),t=ft.raceDay.getRacesFor(n.product);w.validate(n,t).then(at,si)}function bt(n){var t;return ft.menu.currentMenuPoint&&ft.menu.currentMenuPoint.data&&ft.state.selectedRace?t=ft.state.selectedRace.getLeg(ft.menu.currentMenuPoint.data.betTypeCode):ft.menu.currentMenuPoint&&ft.menu.currentMenuPoint.data&&!ft.state.selectedRace&&(t=ft.raceDay.getLegsFor(ft.menu.currentMenuPoint.data.betTypeCode)[0]),t&&n&&ft.selectRace(ft.raceDay.getRace(t.raceNo)),t}function vi(){var n=ft.state.selectedRace.number;s.GetOddsTrend(ft.raceDay.raceDayKey.toString(),n).then(function(t){var i=_.map(JSON.parse(t.Result),function(n){return v.load({RaceNo:n.RaceNumber,StartNo:n.StartNo,Odds:n.PreviousOdds,CurrentOddsUpdateTime:n.PreviousOddsUpdateTime,LegType:l.QPlus.code})});ft.raceDay.getRace(n).loadOdds(i)})}function yi(n){n&&n.data&&(ft.state.selectedRace&&n.data.betTypeCode===l.QPlus&&s.GetOddsTrend(ft.raceDay.raceDayKey.toString(),ft.state.selectedRace.number).then(function(n){var t=_.map(JSON.parse(n.Result),function(n){return v.load({RaceNo:n.RaceNumber,StartNo:n.StartNo,Odds:n.PreviousOdds,CurrentOddsUpdateTime:n.PreviousOddsUpdateTime,LegType:l.QPlus.code})});ft.state.selectedRace.loadOdds(t)}),ft.state.selectedRace&&n.data.betTypeCode!==l.QPlus&&ii())}function st(n,t){var i,r,u;if(n||t||lt(),!t&&ft.state.selectedRace&&n&&n!==ft.state.selectedRace&&ft.menu.currentMenuPoint.data.betTypeCode.isSingleLegGame()){if(i=dt(),!i)return;lt()}ft.state.selectedRace=n;ft.state.selectedLeg=bt(!1);n&&ft.state.selectedLeg&&(r=ft.state.selectedLeg.betTypeCode.isSingleLegGame(),u=r?n.startTime:_.first(ft.raceDay.getRacesFor(ft.state.selectedLeg.betTypeCode)).startTime,ft.state.startTime=u);yi(ft.menu.currentMenuPoint)}function pi(n,t){var i=e.selectSubMenuItem(n),r;return t||n.data.betMethod!==d.lynBanker||lt(),ft.state.ticket.reset(i.data.betTypeCode,i.data.betMethod),r=ft.state.selectedRace,r&&r.openForBet&&r.hasLeg(i.data.betTypeCode,i.data.betMethod)||(r=ft.raceDay.getRacesFor(i.data.betTypeCode,!1,i.data.betMethod)[0]),st(r),ft.menu.selectedSubMenuItem=i,ft.menu.selectedMainMenuItem=i.parent,i}function yt(n){function i(){return bt(!1).isSuper}ft.state.priceInfo.reset();var t=ui();return n?n.data.betTypeCode?ht[n.data.betTypeCode.code+"_"+n.data.betMethod.code]?h.when(ht[n.data.betTypeCode.code+"_"+n.data.betMethod.code]).then(function(t){return ft.state.priceInfo=c.load(t),n}):o.GetPriceStepsWithSuperSpecification(n.data.betMethod.name,n.data.betTypeCode.name,i()).then(function(r){var u=_.extend(JSON.parse(r.Result),{BetMethod:n.data.betMethod,BetTypeCode:n.data.betTypeCode});return i()&&(u.DefaultRowPrice=u.MinPrice),ft.state.priceInfo=c.load(u),t&&t.product===n.data.betTypeCode&&t.betMethod===n.data.betMethod&&(t.rowPrice||t.maxPrice)&&ft.state.priceInfo.overrideDefaultSelection({name:t.rowPrice/100,value:t.rowPrice},t.fraction,t.maxPrice),ht[n.data.betTypeCode.code+"_"+n.data.betMethod.code]=u,n},function(){return ft.state.priceInfo=c.load({}),ht[n.data.betTypeCode.code+"_"+n.data.betMethod.code]={},n}):h.resolve(n):h.reject()}function wi(n,t,i){var r=e.selectItem(n),u;return(ft.state.ticket.reset(r.data.betTypeCode,r.data.betMethod),st(null,t),ft.menu.selectedMainMenuItem=r,n.hasSubItems())?i&&(u=_.find(n.items,function(n){return n.name===i}),u)?pt(u,t):pt(n.items[0],t):(ft.menu.selectedSubMenuItem=null,r)}function ri(){if(!ft.menu.selectedMainMenuItem)return undefined;return ft.menu.selectedMainMenuItem.getSelectedSubItem()||ft.menu.selectedMainMenuItem}function pt(n,t){var u,r,i;if(u=!ft.menu.currentMenuPoint||[g.V,g.P,g.VP].indexOf(n.data.betTypeCode)>-1&&[g.V,g.P,g.VP].indexOf(ft.menu.currentMenuPoint.data.betTypeCode)>-1?!0:t?!0:dt(),u)return r=pi(n,t),ft.menu.currentMenuPoint=ri(),yt(r),i=ft.state.selectedRace,i&&i.openForBet&&i.hasLeg(ft.menu.currentMenuPoint.data.betTypeCode,ft.menu.currentMenuPoint.data.betMethod)||(i=ft.raceDay.getRacesFor(ft.menu.currentMenuPoint.data.betTypeCode,!1,ft.menu.currentMenuPoint.data.betMethod)[0]),st(i),r}function et(n,t){var r,u=!1,e,i,f;if(n.data.betMethod===d.lynBanker?t===undefined?r=nr(function(t){t=="yes"?et(n,!0):t=="no"&&et(n,!1)}):(r=!0,u=t):r=dt(),r)return u||lt(),ft.menu.currentMenuPoint&&(e=ft.menu.currentMenuPoint.name),i=wi(n,u,e),ft.menu.currentMenuPoint=ri(),yt(i),f=ft.raceDay.getRacesFor(i.data.betTypeCode),f.indexOf(ft.state.selectedRace)===-1&&st(_.first(f)),RaceDayList.updateSelected&&RaceDayList.updateSelected(ft.raceDay.raceDayKey.toString(),i.data.betTypeCode.name),i}function bi(n,t){ft.state.ticket.setPriceInfo(n||ft.state.priceInfo.defaultRowPrice,t)}function ki(){ft.raceDay.resetSelections();ft.menu.selectedSubMenuItem?(ft.state.ticket.reset(ft.menu.selectedSubMenuItem.data.betTypeCode,ft.menu.selectedSubMenuItem.data.betMethod),yt(ft.menu.selectedSubMenuItem)):(ft.state.ticket.reset(ft.menu.selectedMainMenuItem.data.betTypeCode,ft.menu.selectedMainMenuItem.data.betMethod),yt(ft.menu.selectedMainMenuItem));t.$broadcast("__gamewindow-event_reset")}function kt(n,t,i){for(var r,f,u=0;u<n.length;u++){if(r=n[u],r.items.length>0&&(f=kt(r.items,t,i),f))return[r,f[0]];if(t&&i){if(r.data.betTypeCode===t&&r.data.betMethod===i)return[r]}else if(t){if(!i&&r.data.betTypeCode===t)return[r]}else if(r.data.betMethod===i)return[r]}}function ui(){var i=Uri(window.location.href).getQueryParamValue("betdata"),r,u,t,f,n;return i?(r=decodeURIComponent(i),u=p.parse(r),u):(t=Uri(window.location.href).getQueryParamValue("betdatapart"),t)?(f=decodeURIComponent(t),n=p.parse(f),!n.raceNumber&&n.product&&_.forEach(ft.raceDay.races,function(t){var i=!0,r=_.find(t.legs,function(t){return t.betTypeCode.code===n.product.code});return r&&(n.raceNumber=t.number,i=!1),i}),n):undefined}function di(){i.onbeforeunload=function(){var n=_.toArray((ft.currentBetData()||{marks:[]}).marks);if(n.length>0&&!ct)return lang.translate("game.confirmBeforeUnloadExitLoseMarkings")};model.pmuMarkingsCheck=gi}function gi(){var t=!0,i=_.toArray((ft.currentBetData()||{marks:[]}).marks);return i.length>0&&(t=confirm(lang.translate("game.confirmExitLoseMarkings"))),t&&n.$destroy(),t}function dt(){var n=_.toArray((ft.currentBetData()||{marks:[]}).marks);return n.length>0?confirm(lang.translate("game.confirmExitLoseMarkings")):!0}function nr(n){var r=_.toArray((ft.currentBetData()||{marks:[]}).marks),t,i;return r.length>0?(t=lang.translate("game.confirmExitKeepMarkingsHeading"),i=lang.translate("game.confirmExitKeepMarkings"),SimpleMessageBox.show(t,i,SimpleMessageBox.buttonYes|SimpleMessageBox.buttonNo,SimpleMessageBox.buttonYes,n),!1):!0}function tr(){var n=Uri(window.location.href).getQueryParamValue("betdataeditor");return n==="1"}function fi(n){function t(n,t){return n===g.QPlus&&t===d.lynSystem?d.lynToto:t}ir();di();ft.state.isTipEditMode=tr();e.getMenu().then(function(i){var r,u,f,e,o;ft.menu.items=i;r=ui();r&&!model.markingsNavigationChecked?(u=kt(ft.menu.items,r.product,t(r.product,r.betMethod)),u&&u.length!==0?u.length>1?pt(u[1]):et(u[0]):et(ft.menu.items[0]),f=ft.raceDay.getRace(r.raceNumber),f&&f.openForBet&&f.hasLeg(r.product,r.betMethod)||(f=ft.raceDay.getRacesFor(r.product,!1,r.betMethod)[0]),ft.selectRace(f),ft.raceDay.loadOwnGames(r.product,r.ownGames),r.betMethod===d.lynBanker&&r.product===g.QPlus&&_.forEach(r.ownGames,function(n){r.marks[n]=r.marks[6]}),ft.raceDay.loadMarksFor(r.product,r.marks,r.raceNumber,r.betMethod),ft.state.isAllIn=r.isAllIn,r.product===g.QPlus&&(_.some(r.marks,function(n){return n.length>1})?_.forEach(r.marks,function(n,t){n.length>1&&(ft.state.ticket.preSelectList.places[parseInt(t)]=!0)}):(e=_.chain(r.marks).countBy(_.identity).map(function(n,t){return{count:n,mark:parseInt(t)}}).find(function(n){return n.count>1}).value(),e&&_.forEach(r.marks,function(n,t){n.indexOf(e.mark)>-1&&(ft.state.ticket.preSelectList.places[parseInt(t)]=!0)})))):n?(o=kt(ft.menu.items,g[n],d.vanlig),o?et(o[0]):et(ft.menu.items[0])):et(ft.menu.items[0]);ei=!0;ft.isLoading=!1})}function ir(){function t(n){if(n.raceDayKey===ft.raceDay.raceDayKey.toString()){var t,i=ft.raceDay.getRacesFor(ft.menu.currentMenuPoint.data.betTypeCode);return _.chain(i).forEach(function(i){i.number===n.raceNumber&&(t=i.getStart(n.startNumber))}).value(),t}return null}rt.on(n,rt.events.ScratchedParticipant,function(n,i){var r=t(i),u;r&&(u=angular.copy(r),u.scratched=!0,r.update(u,gt),it(function(){ti()}))});rt.on(n,rt.events.ReinstatedParticipant,function(n,i){var r=t(i),u;r&&(u=angular.copy(r),u.scratched=!1,r.update(u,{}))});rt.on(n,rt.events.ChangedParticipantDriver,function(n,i){var u=t(i),r;u&&(r=angular.copy(u),r.originalDriver=angular.copy(r.driver),r.driverChanged=!0,r.driver=ut.load({DisplayName:i.newDriverDisplayName}),u.update(r,{}))})}var ft=this,ei=!1,ii,ht;ft.raceDay;ft.selectedRaceday=f;ft.onPurchaseLyn=hi;ft.onPurchaseMultiday=ci;ft.performBuy=ai;ft.onAllInToggled=li;var ct=!1,ot=[],gt={onScratched:function(n){ft.menu.currentMenuPoint.data.betTypeCode.isSingleLegGame()?ft.state.selectedRace.starts.indexOf(n)>-1&&ot.push({start:n,raceNumber:ft.state.selectedRace.number}):_.chain(ft.raceDay.getRacesFor(ft.menu.currentMenuPoint.data.betTypeCode)).forEach(function(t){t.starts.indexOf(n)>-1&&ot.push({start:n,raceNumber:t.number})}).value()}},wt={mostPlayedCombinations:function(){s.GetMostPlayedCombinations(ft.raceDay.raceDayKey.toString(),ft.state.selectedRace.number).then(function(n){var t=_.map(JSON.parse(n.Result),function(n){return a.load(n)});ft.state.selectedRace.loadMostPlayedCombinations(t)})},pressSelections:function(){s.GetPressSelections(ft.raceDay.raceDayKey.toString(),ft.state.selectedRace.number).then(function(n){ft.state.selectedRace.loadPressTips(JSON.parse(n.Result))})},pressSyntheses:function(){s.GetPressSyntheses(ft.raceDay.raceDayKey.toString(),ft.state.selectedRace.number).then(function(n){ft.state.selectedRace.loadPressRank(JSON.parse(n.Result))})}};ft.isLoading=!0;it(function(){ft.raceDay||(ft.isLoading=!0)},250);ft.onActivity=function(){ft.raceDay&&ft.state.selectedRace&&ft.forceUpdate(ft.raceDay.raceDayKey.toString(),ft.state.selectedRace.number)};ft.onProgramSelect=function(n){if(ft.state.selectedRace&&ft.menu.currentMenuPoint.data.betTypeCode===l.QPlus)switch(n){case"most-played":wt.mostPlayedCombinations();break;case"press-tips":wt.pressSelections();break;case"press-rank":wt.pressSyntheses()}};ft.preSaleAvailable=!1;o.GetOpenPresaleGameRound().then(function(n){ft.preSaleAvailable=n.Result==="PresaleAvailable"});n.$on("__racedata-updated",function(n,t){ni(t)});ft.forceUpdate=function(n,t){return nt.getUpdatedRaceData(n,t).then(function(n){n&&ni(n)})};ii=_.throttle(vi,3e3);ft.selectMenuItem=et;ft.selectSubMenuItem=pt;ft.selectRace=st;ft.betCostSelected=bi;ft.reset=ki;ft.currentBetData=function(){if(ft.raceDay&&ft.menu.currentMenuPoint){var n=ft.raceDay.getMarksFor(ft.menu.currentMenuPoint.data.betTypeCode),t=ft.raceDay.getOwnGamesFor(ft.menu.currentMenuPoint.data.betTypeCode),i=ft.state.selectedRace?ft.state.selectedRace.number:0,r=ft.state.selectedLeg?ft.state.selectedLeg.allowAllIn?ft.state.isAllIn:undefined:undefined;return ft.state.ticket.getBetData(ft.raceDay.raceDayKey,n,t,i,ft.state.priceInfo.rowPriceStep,r)}return null};ft.selectedRaceday.then(function(n){ft.raceDay=n;try{fi(model.betType)}catch(t){fi()}});ft.state={raceDay:ft.raceDay,selectedRace:0,startTime:0,selectedLeg:null,ticket:new r,priceInfo:new c,isSkillGame:!0};ft.menu={items:[],selectedMainMenuItem:null,currentMenuPoint:null};n.$on("$destroy",function(){model.pmuMarkingsCheck=null});ht={};n.$watch(function(){return ft.menu.currentMenuPoint},function(n){n&&n.data&&(ft.state.selectedLeg=bt(!0),ft.state.isSkillGame=n.data.betMethod.isSkillGame())})}n.templateUrl="/js/rikstoto.web/features/game-window/ng.game-window.tpl.html";n.selector="game-window";n.controllerAs="gameWindow";n.scope={};angular.module("rikstoto.web.game-window").component(n);n.$inject=["$scope","$rootScope","$window","Ticket","logger","selectedRaceday","menu","BettingService","QPlusJsonService","$q","PriceInfo","betTypeCode","MostPlayedCombination","Odds","StableOdds","BetData","ticketValidator","translate","authentication","betMethod","betTypeCode","updates","string","$timeout","eventHandler","Driver"]}(),function(){"use strict";function n(){return{restrict:"A",scope:{value:"="},link:function(n,t){var i=t[0],r=new Odometer({el:i,value:0,format:"",theme:"default"});n.$watch(function(){return n.value},function(n){r.update(n)})}}}angular.module("rikstoto.web.game-window.components").directive("odometer",n)}(),function(){"use strict";function n(n,t){function r(n){var e=n.getLegsFor(t.QPlus,!0)[0],r;e&&(r=n.getGameForLeg(e,!0)[0],i.jackPotAvailable=r&&r.details&&r.details.jackpotValue>0,r&&r.details&&(r.details.jackpotValue&&(i.jackpotValue=u(r.details.jackpotValue),i.jackpotHeader=f(i.jackpotValue)),i.totalInvestment=r.details.investment))}function u(n){return Math.floor(n/1e6)}function f(n){return n>8e7?"Jackpot":"Lykketallspott"}var i=this;i.jackpotValue;i.jackpotValueText="millioner";i.jackpotHeader;i.jackPotAvailable=!1;n.$watch(function(){return i.raceDay},function(n){n&&r(n)})}n.templateUrl="/js/rikstoto.web/features/game-window/components/qplus-jackpot/ng.qplus-jackpot.tpl.html";n.selector="qplus-jackpot";n.controllerAs="qPlusJackpot";n.scope={raceDay:"="};angular.module("rikstoto.web.game-window.components").component(n);n.$inject=["$scope","betTypeCode"]}(),function(){function n(n,t,i,r,u,f,e,o){function p(){a(s.raceDay.raceDayKey.toString(),1).then(function(t){n.$broadcast("__racedata-updated",t)})}function a(n,i){return moment().diff(c)<3e3?o.resolve():(c=moment(),v(),t.GetRaceDataUpdated(n,i).then(function(n){return f.load(JSON.parse(n.Result))},w))}function v(){h!=null&&u.cancel(h);h=u(p,y,!1)}function w(){}var s=this,h=null,y=1e7,c=moment(),l;return s.raceDay,e.then(function(n){s.raceDay=n}),l={getUpdatedRaceData:a},v(),l}angular.module("rikstoto.web.game-window.updates").factory("updates",n);n.$inject=["$rootScope","QPlusJsonService","$window","betTypeCode","$timeout","RaceDay","selectedRaceday","$q"]}()