!function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:i})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e){t.exports=angular},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.APP_NAME="PsStrategy",e.API_URL="/api"},function(t,e,n){n(3),t.exports=n(32)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1),r=n(4);i.module(o.APP_NAME,["ui.router","ngMaterial","md.data.table","ngSanitize","summernote"]).config(["$stateProvider","$urlRouterProvider","$httpProvider",function(t,e,i){i.defaults.withCredentials=!0,i.defaults.headers.get||(i.defaults.headers.get={}),i.defaults.headers.get["If-Modified-Since"]="Mon, 26 Jul 1997 05:00:00 GMT",i.defaults.headers.get["Cache-Control"]="no-cache",i.defaults.headers.get.Pragma="no-cache",t.state("root",{url:"",abstract:!0,template:'\n                    <div id="lo2" class="wrapper bgGrey clearfix" ng-controller="RootCtrl as ctrl">\t\n                        <ps-header/>\n                        <ui-view></ui-view>\n                        <ps-footer/>\n                    </div>\n                    '}).state("root.home",{data:r.StateUtils.makeStateData({title:"My documents"}),url:"/home",template:n(5)}).state("root.profile",{data:r.StateUtils.makeStateData({title:"My profile"}),url:"/profile",template:n(6)}).state("root.wizard",{data:r.StateUtils.makeStateData({title:"Wizard"}),url:"/wizard/:documentId",template:n(7)}).state("admin",{url:"",abstract:!0,template:'\n                    <div id="lo2" class="wrapper bgGrey clearfix" ng-controller="AdminCtrl as ctrl">\t\n                        <ps-header/>\n                        <div class="cl clFixed cl-left bgGrey">\n                            <div class="bgImage"></div>\n                        </div>\n                        <div class="cl cl-right">\n                            <div class="content iPadding bgGrey">\n                                <md-tabs md-dynamic-height md-border-bottom md-center-tabs="true" ng-if="ctrl.user.isAdmin">\n                                    <md-tab label="Dokumenter" ui-sref="admin.documents" md-active="ctrl.$state.includes(\'admin.documents\')"></md-tab>\n                                    <md-tab label="Brukere" ui-sref="admin.users" md-active="ctrl.$state.includes(\'admin.users\')"></md-tab>\n                                    <md-tab label="Fakturaer" ui-sref="admin.invoices" md-active="ctrl.$state.includes(\'admin.invoices\')"></md-tab>\n                                    <md-tab label="Notifikasjoner" ui-sref="admin.notifications" md-active="ctrl.$state.includes(\'admin.notifications\')"></md-tab>\n                                </md-tabs>\n                                <div class="postContent">\n                                    <ui-view></ui-view>\n                                </div>\n                            </div>\n                        </div>\n                        <ps-footer/>\n                    </div>\n                    '}).state("admin.documents",{data:r.StateUtils.makeStateData({title:"Documents"}),url:"/documents",template:n(8)}).state("admin.users",{data:r.StateUtils.makeStateData({title:"Users"}),url:"/users",template:n(9)}).state("admin.invoices",{data:r.StateUtils.makeStateData({title:"Invoices"}),url:"/invoices",template:n(10)}).state("admin.notifications",{data:r.StateUtils.makeStateData({title:"Notifications"}),url:"/notifications",template:n(11)}),e.otherwise("/home")}]).run(["AppTitle","Config",function(t,e){e.getUser().catch(function(t){401==t.status&&function(){try{return window.self!==window.top}catch(t){return!0}}()&&window.parent.postMessage({command:"ps-authorize",apiUrl:o.API_URL+"/users/destinet-login"},"*")})}]),n(12),n(13),n(14),n(15),n(16),n(17),n(18),n(19),n(20),n(21),n(23),n(25),n(26),n(27),n(29)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){}return t.makeStateData=function(t){return t},t.getStateData=function(t){return t.data},t}();e.StateUtils=i},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div class="cl clFixed cl-left bgGrey">\n<div class="bgImage">\n</div>\n</div>\n<div class="cl cl-right">\n<div class="content iPadding bgGrey">\n<div class="postContent" ng-controller="HomeCtrl as ctrl">\n<h1 class="sans-serif">Dokumenter</h1>\n<p class="textGrey" ng-if="!ctrl.user">Pårørendesenteret har på oppdrag fra Helsedirektoratet utviklet Pårørendeveilederen som et verktøy for utvikling av pårørendestrategi på kommunenivå. <br/>\nDu ledes gjennom spørsmål med forklarende tekster og gode eksempler og ender opp med en ferdig PDF som er klar til bruk i din kommune. <br/> <br/>\nLogg inn med din bruker for å komme i gang.</p>\n<p ng-if="ctrl.user">Klikk på "Pårørendestrategi" for å komme i gang.<br/><br/> Arbeidet ditt vil alltid bli lagret underveis.</p>\n<div class="formField">\n<div class="row" ng-repeat="userDocument in ctrl.userDocuments">\n<div class="field docField" ng-click="ctrl.wizard(userDocument.documentId)">{{userDocument.name}}</div>\n<a class="iconBtn editIcon" ng-click="ctrl.wizard(userDocument.documentId)"></a>\n<a class="iconBtn pdfIcon" ng-click="ctrl.download(userDocument.id)" ng-if="userDocument.pdfPath.length"></a>\n<br><br>\n</div>\n</div>\n</div>\n</div>\n</div>',r="/partials/ui.root.home.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div class="cl clFixed cl-left bgGrey">\n<div class="bgImage">\n</div>\n</div>\n<div class="cl cl-right">\n<div class="content iPadding bgGrey">\n<div class="postContent" ng-controller="ProfileCtrl as ctrl">\n<form class="formLayout" name="userForm">\n<fieldset>\n<div class="formField">\n<div class="deco"><h3>Min profil</h3></div>\n<div class="row clearfix">\n<div class="form3col">\n<label class="tLabel textGrey">Kommune</label>\n<input type="text" ng-model="ctrl.user.municipalityName" disabled="disabled"/>\n</div>\n<div class="form3col midCol">\n<label class="tLabel textGrey">Fornavn og etternavn</label>\n<input type="text" ng-model="ctrl.user.name" required/>\n</div>\n<div class="form3col">\n<label class="tLabel textGrey">Epost</label>\n<input type="email" ng-model="ctrl.user.email" required/>\n</div>\n</div>\n</div>\n<br>\n<div><a ng-click="ctrl.editPassword()">Endre passord</a></div>\n<div class="formField submit clearfix">\n<div class="row clearfix">\n<div class="formLeft">\n<div class="btn submitBtn">\n<input type="button" value="Lagre" ng-disabled="!userForm.$valid || (ctrl.user.newPassword.length && ctrl.user.newPassword != ctrl.user.confirmPassword)" ng-click="ctrl.update()">\n</div>\n<a class="btnDeleteAccount" ng-click="ctrl.delete()">Slett konto</a>\n</div>\n</div>\n</div>\n</fieldset>\n</form>\n</div>\n</div>\n</div>',r="/partials/ui.root.profile.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div ng-controller="WizardCtrl as ctrl" class="wizard">\n<div id="progress" class="cl cl-left clFixed" ng-if="ctrl.userDocument">\n<div class="proWrapper">\n<div class="floatInfo" ng-show="ctrl.userDocument.document.mainSteps[ctrl.active.mainStep - 1].steps[ctrl.active.step - 1].description.length">\n<span class="step-heading">Eksempler:</span>\n<div class="step-description" ng-bind-html="ctrl.userDocument.document.mainSteps[ctrl.active.mainStep - 1].steps[ctrl.active.step - 1].description"></div>\n</div>\n<div class="rowStep" ng-class="{active: ctrl.active.mainStep == 0}">\n<div class="steps mainStep finished" ng-click="ctrl.goIntro()">\n<div class="proInfo">\n<h4 class="proHead"></h4>\n<p class="proText">&nbsp;</p>\n</div>\n<div class="bar">\n<div class="dots mainDot" style="visibility: hidden;">\n<span>i</span>\n</div>\n</div>\n</div>\n</div>\n<div class="rowStep" ng-repeat="mainStep in ctrl.userDocument.document.mainSteps" ng-class="{active: ctrl.active.mainStep == mainStep.sortOrder, current: ctrl.active.mainStep == mainStep.sortOrder && !ctrl.active.step}">\n<div class="steps mainStep" ng-class="{finished: ctrl.active.mainStep >= mainStep.sortOrder}">\n<div class="proInfo">\n<h4 class="proHead"></h4>\n<p class="proText">&nbsp;</p>\n</div>\n<div class="bar" ng-click="ctrl.go(mainStep)">\n<div class="dots mainDot">\n<span>{{mainStep.sortOrder}}</span>\n</div>\n</div>\n</div>\n<div class="steps smallStep" ng-repeat="step in mainStep.steps" ng-class="{\r\n                                finished: ctrl.active.mainStep > mainStep.sortOrder || (ctrl.active.mainStep == mainStep.sortOrder && ctrl.active.step > step.sortOrder),\r\n                                \'finished newest\': ctrl.active.mainStep == mainStep.sortOrder && ctrl.active.step == step.sortOrder,\r\n                                \'reach\': mainStep.sortOrder == ctrl.reach.mainStep && step.sortOrder == ctrl.reach.step\r\n                            }">\n<div class="bar">\n<div class="dots smallDot" ng-click="ctrl.go(mainStep, step)">\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class="cl cl-right" ng-if="ctrl.userDocument">\n<div class="content iPadding">\n<div class="postContent">\n<form class="userDocumentForm">\n<div ng-show="ctrl.active.mainStep == 0 && ctrl.active.step == 0">\n<div class="content-wrapper">\n<h1 class="chapter-heading">Introduksjon</h1>\n<div class="textGrey pre-wrap" ng-bind-html="ctrl.userDocument.document.introText"></div>\n</div>\n<div class="formField">\n<div class="row">\n<div class="width70 inlineBtn">\n<div class="btn submitBtn">\n<input type="button" value="Neste" ng-click="ctrl.active.mainStep = 1">\n</div>\n</div>\n</div>\n</div>\n</div>\n<div ng-repeat="mainStep in ctrl.userDocument.document.mainSteps | orderBy:\'sortOrder\'">\n<div ng-show="ctrl.active.mainStep == mainStep.sortOrder && !ctrl.active.step">\n<div class="content-wrapper width70">\n<h1 class="chapter-heading">{{mainStep.name}}</h1>\n<div class="textGrey pre-wrap" ng-bind-html="mainStep.description"></div>\n</div>\n<div class="formField">\n<div class="row">\n<div class="width70 inlineBtn">\n<div class="btn cancelBtn">\n<input type="button" value="Tilbake" ng-click="mainStep.sortOrder == 1 ? ctrl.goIntro() : ctrl.back(mainStep)">\n</div>\n<div class="btn submitBtn">\n<input type="button" value="Neste" ng-click="ctrl.next(mainStep)">\n</div>\n</div>\n</div>\n</div>\n</div>\n<div ng-repeat="step in mainStep.steps | orderBy:\'sortOrder\'">\n<fieldset ng-hide="ctrl.active.mainStep != mainStep.sortOrder || ctrl.active.step != step.sortOrder">\n<div class="content-wrapper">\n<h1 class="question-heading">{{mainStep.name}}</h1>\n<div class="question-wrapper width70" ng-repeat="question in step.questions | orderBy:\'sortOrder\'" ng-class="{\'question-wrapper-title\': question.type == 1, collapse: question.choices.length && question.hide}">\n<div class="textGrey pre-wrap question" ng-class="{\'question-title\': question.type == 1, \'text-title\': question.type != 1}" ng-click="ctrl.collapseAnswer(question)" ng-bind-html="question.text"></div>\n<div ng-show="question.type == 1 && question.choices.length">\n<br ng-hide="question.hide && !question.userAnswers[0].choiceId"/>\n<div ng-repeat="choice in question.choices | filter: {id: question.userAnswers[0].choiceId}" ng-show="question.hide && question.userAnswers[0].choiceId">\n<md-icon style="color:green; margin-top:-3px;">check_circle</md-icon> {{choice.text}}\n</div>\n<md-radio-group ng-model="question.userAnswers[0].choiceId" ng-change="ctrl.collapseAnswer(question)" ng-hide="question.hide">\n<md-radio-button ng-repeat="choice in question.choices | orderBy:\'sortOrder\'" value="{{choice.id}}">{{choice.text}}</md-radio-button>\n</md-radio-group>\n<div ng-repeat="choice in question.choices | orderBy:\'sortOrder\'" style="margin-left:40px;">\n<div class="question-wrapper" ng-repeat="subQuestion in choice.subQuestions | orderBy:\'sortOrder\'" ng-show="choice.id == question.userAnswers[0].choiceId" ng-class="{collapse: subQuestion.hide}">\n<div class="textGrey pre-wrap question" ng-class="{\'question-title\': subQuestion.type == 1, \'text-title\': subQuestion.type != 1}" ng-click="ctrl.collapseAnswer(subQuestion, true)" ng-bind-html="subQuestion.text"></div>\n<div ng-show="subQuestion.type == 1 && subQuestion.subChoices.length">\n<br ng-hide="subQuestion.hide && !subQuestion.userSubAnswers[0].subChoiceId"/>\n<div ng-repeat="subChoice in subQuestion.subChoices | filter: {id: subQuestion.userSubAnswers[0].subChoiceId}" ng-show="subQuestion.hide && subQuestion.userSubAnswers[0].subChoiceId">\n<md-icon style="color:green; margin-top:-3px;">check_circle</md-icon> {{subChoice.text}}\n</div>\n<md-radio-group ng-model="subQuestion.userSubAnswers[0].subChoiceId" ng-change="ctrl.collapseAnswer(subQuestion, true)" ng-hide="subQuestion.hide">\n<md-radio-button ng-repeat="subChoice in subQuestion.subChoices | orderBy:\'sortOrder\'" value="{{subChoice.id}}">{{subChoice.text}}</md-radio-button>\n</md-radio-group>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class="question-wrapper">\n<div class="row clearfix">\n<div class="width70">\n<summernote config="ctrl.editorOptions" ng-model="step.userInputs[0].inputText"></summernote>\n<div ng-if="ctrl.stepInputRevisions(step.id).length > 1">\n<br>\n<b>Revisjoner:</b>\n<div class="input-revision">\n<table>\n<tr ng-repeat="revision in ctrl.stepInputRevisions(step.id) | orderBy:\'-createdTime\'">\n<td>{{revision.createdTime | date:\'dd-MM-yyyy HH:mm:ss\'}}</td>\n<td>\n<button ng-click="ctrl.viewInputRevision(step, revision)" style="margin-right: 10px;">Se</button>\n<button ng-click="ctrl.revertInputRevision(step, revision.inputText)">Endre til</button>\n</td>\n</tr>\n</table>\n</div>\n</div>\n</div>\n</div>\n</div>\n</div>\n<div class="formField">\n<div class="row">\n<div class="width70 inlineBtn">\n<div class="btn cancelBtn">\n<input type="button" value="Tilbake" ng-click="ctrl.back(mainStep, step)">\n</div>\n<div class="btn submitBtn">\n<input type="button" value="Neste" ng-hide="ctrl.active.mainStep == ctrl.userDocument.document.mainSteps.length && ctrl.active.step == mainStep.steps.length" ng-disabled="!ctrl.checkValidStep(step)" ng-click="ctrl.next(mainStep, step)">\n</div>\n<div class="btn submitBtn downloadBtn">\n<input type="button" value="Last ned PDF" ng-show="ctrl.active.mainStep == ctrl.userDocument.document.mainSteps.length && ctrl.active.step == mainStep.steps.length" ng-disabled="!ctrl.checkValidStep(step)" ng-click="ctrl.download(ctrl.userDocument.id)">\n</div>\n</div>\n</div>\n</div>\n</fieldset>\n</div>\n</div>\n</form>\n</div>\n</div>\n</div>\n</div>',r="/partials/ui.root.wizard.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div class="formField" ng-controller="DocumentCtrl as ctrl">\n<div class="deco" style="overflow: hidden;">\n<h3 style="float: left;">Dokumenter</h3>\n<button class="btnLink" style="float: right;" ng-click="ctrl.edit()">Opprett dokument</button>\n</div>\n<div class="row" ng-repeat="document in ctrl.documents">\n<div class="field" ng-click="ctrl.edit(document.id)">{{document.name}}</div>\n</div>\n<div ng-if="!ctrl.documents.length">Ingen dokumenter</div>\n</div>',r="/partials/ui.admin.documents.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div class="formField" ng-controller="UserCtrl as ctrl">\n<div class="deco"><h3>Brukere</h3></div>\n<div class="row flexWrapper inlineField">\n<div class="field rightIcon twoField" ng-repeat="user in ctrl.users" ng-click="ctrl.detail(user.id)">\n{{user.name}}\n</div>\n</div>\n</div>',r="/partials/ui.admin.users.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div class="formField" ng-controller="InvoiceCtrl as ctrl">\n<div class="deco">\n<h3>Fakturaer</h3>\n</div>\n<div class="row" ng-repeat="payment in ctrl.payments">\n<div class="field" ng-click="ctrl.detail(payment.id)">{{payment.user.name}} - {{payment.user.userName}}</div>\n</div>\n<div ng-if="!ctrl.payments.length">Ingen fakturaer</div>\n</div>',r="/partials/ui.admin.invoices.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<div class="formField" ng-controller="NotificationCtrl as ctrl">\n<div class="deco" style="overflow: hidden;">\n<h3 style="float: left;">Notifikasjoner</h3>\n<button class="btnLink" style="float: right;" ng-click="ctrl.send()">Send notifikasjon</button>\n</div>\n<div layout="row" ng-repeat="notification in ctrl.notifications">\n<div flex class="field" style="width: auto" ng-click="ctrl.detail(notification.id)">{{notification.subject}}</div>\n<div class="field" style="width: auto">{{notification.createdTime | date:\'dd-MM-yyyy\'}}</div>\n</div>\n<div ng-if="!ctrl.notifications.length">Ingen notifikasjoner</div>\n</div>',r="/partials/ui.admin.notifications.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1);n(0).module(i.APP_NAME).factory("AppTitle",function(){var t;return{getTitle:function(){return t},setTitle:function(e){return t=e}}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1);n(0).module(i.APP_NAME).factory("Config",["$http",function(t){var e;return{getUser:function(){return e||(e=t.get(i.API_URL+"/current-user"))}}}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1);n(0).module(i.APP_NAME).directive("appTitle",function(){return{restrict:"A",template:"{{ getTitle() }}",controllerAs:"ctrl",controller:["AppTitle","$scope",function(t,e){e.getTitle=function(){return t.getTitle()}}]}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1);n(0).module(i.APP_NAME).directive("psHeader",function(){return{restrict:"E",template:'\n            <header>\n                <div class="tMenu clFixed flexWrapper">\n                    <div class="cl cl-left wLogo bgGrey" ng-click="HeaderCtrl.goHome()">\n                        <div class="logo">&nbsp;</div>\n                    </div>\n                    <div class="cl cl-right cPanel iPadding flexWrapper">\n                        <div class="gjesdal flexWrapper">\n                            <div class="inline gjesdalLogo" ng-click="HeaderCtrl.goHome()"><img ng-src="{{HeaderCtrl.logoUrl}}" style="width:100%;"/></div>\n                            <div class="inline gjesdalText"><p class="textBlack">Velkommen <span>{{HeaderCtrl.user.name}}</span></p></div>\n                        </div>\n                        <div class="control flexWrapper">\n                            <a class="cHome" ng-if="!HeaderCtrl.user.isAdmin" ng-click="HeaderCtrl.$state.go(\'root.home\')">Dokumenter</a>\n                            <div class="cUser" ng-if="HeaderCtrl.user" ng-click="HeaderCtrl.$state.go(\'root.profile\')">&nbsp;</div>\n                            <div class="cLogout" ng-if="HeaderCtrl.user" ng-click="HeaderCtrl.logout()">Logg ut</div>\n                            <a ng-if="!HeaderCtrl.user" href="{{HeaderCtrl.loginUrl}}">Logg inn</a>\n                        </div>\n                    </div>\n                </div>\n            </header>\n            ',controllerAs:"HeaderCtrl",controller:["$state","$http","Config",function(t,e,n){var o=this,r=i.API_URL.replace("/api","");this.$state=t,this.logoUrl="/dist/images/gjestal-logo.png",n.getUser().then(function(t){o.user=t.data,o.user.countyName.length&&o.user.municipalityName.length&&(o.logoUrl=r+"/images/coat-of-arms/"+o.user.countyName+"/"+o.user.municipalityName+".png")}),this.loginUrl=r+"/account/login",this.goHome=function(){return t.go(o.user.isAdmin?"admin.documents":"root.home")},this.logout=function(){e.post(i.API_URL+"/users/logout",{}).then(function(t){location.href="/"})}}]}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1);n(0).module(i.APP_NAME).directive("psFooter",function(){return{restrict:"E",template:'\n                <footer ng-if="FooterCtrl.$state.current.name != \'root.wizard\'"><a target="_blank" href="http://parorendesenteret.no">Pårørendesenteret</a></footer>\n            ',controllerAs:"FooterCtrl",controller:["$state",function(t){this.$state=t}]}})},function(t,e){angular.module("summernote",[]).controller("SummernoteController",["$scope","$attrs","$timeout",function(t,e,n){"use strict";var i,o=angular.copy(t.summernoteConfig)||{};if(angular.isDefined(e.height)&&(o.height=+e.height),angular.isDefined(e.minHeight)&&(o.minHeight=+e.minHeight),angular.isDefined(e.maxHeight)&&(o.maxHeight=+e.maxHeight),angular.isDefined(e.placeholder)&&(o.placeholder=e.placeholder),angular.isDefined(e.focus)&&(o.focus=!0),angular.isDefined(e.airmode)&&(o.airMode=!0),angular.isDefined(e.dialogsinbody)&&(o.dialogsInBody=!0),angular.isDefined(e.lang)){if(!angular.isDefined($.summernote.lang[e.lang]))throw new Error('"'+e.lang+'" lang file must be exist.');o.lang=e.lang}o.callbacks=o.callbacks||{},angular.isDefined(e.onInit)&&(o.callbacks.onInit=function(e){t.init({evt:e})}),angular.isDefined(e.onEnter)&&(o.callbacks.onEnter=function(e){t.enter({evt:e})}),angular.isDefined(e.onFocus)&&(o.callbacks.onFocus=function(e){t.focus({evt:e})}),angular.isDefined(e.onPaste)&&(o.callbacks.onPaste=function(e){t.paste({evt:e})}),angular.isDefined(e.onKeyup)&&(o.callbacks.onKeyup=function(e){t.keyup({evt:e})}),angular.isDefined(e.onKeydown)&&(o.callbacks.onKeydown=function(e){t.keydown({evt:e})}),angular.isDefined(e.onImageUpload)&&(o.callbacks.onImageUpload=function(e){t.imageUpload({files:e,editable:t.editable})}),angular.isDefined(e.onMediaDelete)&&(o.callbacks.onMediaDelete=function(e){var n={attrs:{}};n.tagName=e[0].tagName,angular.forEach(e[0].attributes,function(t){n.attrs[t.name]=t.value}),t.mediaDelete({target:n})}),this.activate=function(r,s,a){var l=function(){var t=s.summernote("code");s.summernote("isEmpty")&&(t=""),a&&a.$viewValue!==t&&n(function(){a.$setViewValue(t)},0)},c=o.callbacks.onChange;o.callbacks.onChange=function(i){n(function(){s.summernote("isEmpty")&&(i=""),l()},0),angular.isDefined(e.onChange)?t.change({contents:i,editable:t.editable}):angular.isFunction(c)&&c.apply(this,arguments)},angular.isDefined(e.onBlur)&&(o.callbacks.onBlur=function(e){!o.airMode&&s.blur(),t.blur({evt:e})}),s.summernote(o);var d,u=s.next(".note-editor");u.find(".note-toolbar").click(function(){l(),u.hasClass("codeview")?(u.on("keyup",l),a&&(d=r.$watch(function(){return a.$modelValue},function(t){u.find(".note-codable").val(t)}))):(u.off("keyup",l),angular.isFunction(d)&&d())}),a&&(a.$render=function(){a.$viewValue?s.summernote("code",a.$viewValue):s.summernote("empty")}),angular.isDefined(e.editable)&&(t.editable=u.find(".note-editable")),angular.isDefined(e.editor)&&(t.editor=s),i=s,s.on("$destroy",function(){s.summernote("destroy"),t.summernoteDestroyed=!0})},t.$on("$destroy",function(){t.summernoteDestroyed||i.summernote("destroy")})}]).directive("summernote",[function(){"use strict";return{restrict:"EA",transclude:"element",replace:!0,require:["summernote","?ngModel"],controller:"SummernoteController",scope:{summernoteConfig:"=config",editable:"=",editor:"=",init:"&onInit",enter:"&onEnter",focus:"&onFocus",blur:"&onBlur",paste:"&onPaste",keyup:"&onKeyup",keydown:"&onKeydown",change:"&onChange",imageUpload:"&onImageUpload",mediaDelete:"&onMediaDelete"},template:'<div class="summernote"></div>',link:function(t,e,n,i,o){var r=i[0],s=i[1];if(s)var a=t.$watch(function(){return s.$viewValue},function(n){a(),e.append(n),r.activate(t,e,s)},!0);else o(t,function(t,n){e.append(t.html())}),r.activate(t,e,s)}}}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("RootCtrl",["$state","Config",function(t,e){this.$state=t}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("AdminCtrl",["$state","Config",function(t,e){var n=this;this.$state=t,e.getUser().then(function(t){return n.user=t.data})}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("HomeCtrl",["$mdDialog","$http","$mdToast","Config","$state",function(t,e,n,i,r){var s=this;this.toast=function(t){return n.show(n.simple().textContent(t).position("bottom right"))},this.load=function(){e.get(o.API_URL+"/user-documents/"+s.user.id).then(function(t){s.userDocuments=t.data})},i.getUser().then(function(t){s.user=t.data,s.user.isAdmin?r.go("admin.documents"):s.load()}),this.wizard=function(t){return r.go("root.wizard",{documentId:t})},this.download=function(t){return window.open(o.API_URL+"/user-documents/"+t+"/download")}}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("UserCtrl",["$mdDialog","$http","$mdToast",function(t,e,i){var r=this,s=this;this.toast=function(t){return i.show(i.simple().textContent(t).position("bottom right"))},this.load=function(){e.get(o.API_URL+"/users").then(function(t){r.users=t.data})},this.load(),this.detail=function(i){return t.show({clickOutsideToClose:!0,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){var n=this;this.cancel=function(){return t.cancel()},e.get(o.API_URL+"/users/"+i).then(function(t){n.user=t.data}),this.resetPassword=function(t){e.put(o.API_URL+"/users/reset-password/"+t,{}).then(function(t){s.toast("Tilbakestilling av passord var vellykket")})}}],template:n(22)})}}])},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<md-dialog flex="90" flex-gt-md="50">\n<md-toolbar>\n<div class="md-toolbar-tools">\n<h3>Bruker detaljer</h3>\n<span flex></span>\n<md-button class="md-icon-button" ng-click="ctrl.cancel()">\nx\n</md-button>\n</div>\n</md-toolbar>\n<md-dialog-content class="md-dialog-content">\n<ul class="detail-list">\n<li>\n<b>Navn:</b> {{ctrl.user.name}}\n</li>\n<li>\n<b>Epost:</b> {{ctrl.user.email}}\n</li>\n<li>\n<b>Kommune:</b> {{ctrl.user.municipalityName}}\n</li>\n</ul>\n</md-dialog-content>\n<md-dialog-actions layout="row">\n<md-button class="md-primary md-raised" ng-click="ctrl.resetPassword(ctrl.user.id)">\nTilbakestill passord\n</md-button>\n</md-dialog-actions>\n</md-dialog>',r="/partials/ui.admin.users.detail.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("DocumentCtrl",["$mdDialog","$http","$mdToast",function(t,e,i){var r=this,s=this;this.toast=function(t){return i.show(i.simple().textContent(t).position("bottom right"))},this.load=function(){e.get(o.API_URL+"/documents").then(function(t){r.documents=t.data})},this.load(),this.edit=function(i){return t.show({clickOutsideToClose:!1,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){var n=this;this.active={mainStep:0,step:0},this.editorOptions={tooltip:!1,toolbar:["bold","italic","link","ul"]},this.goStep=function(t,e){n.active={mainStep:t,step:e}},this.cancel=function(){return t.cancel()},this.load=function(){i>0?e.get(o.API_URL+"/documents/"+i).then(function(t){n.document=t.data}):n.document={name:"",mainSteps:[]}},this.load(),this.arrayFromNumber=function(t){for(var e=[],n=1;n<=t;n++)e.push(n);return e},this.addMainStep=function(){n.document.mainSteps.push({name:"",sortOrder:n.document.mainSteps.length+1,steps:[]}),n.active={mainStep:n.document.mainSteps.length,step:0}},this.addStep=function(t){t.steps.push({name:"",enableInput:!0,sortOrder:t.steps.length+1,questions:[]}),n.active={mainStep:t.sortOrder,step:t.steps.length}},this.addQuestion=function(t,e){t.questions.push({text:"",sortOrder:t.questions.length+1,type:e,choices:[]})},this.addChoice=function(t){t.choices.push({text:"",sortOrder:t.choices.length+1,subQuestions:[]})},this.addSubQuestion=function(t,e){t.subQuestions.push({text:"",sortOrder:t.subQuestions.length+1,type:e,subChoices:[]})},this.addSubChoice=function(t){t.subChoices.push({text:"",sortOrder:t.subChoices.length+1})},this.remove=function(t,e){t.splice(e,1),t.forEach(function(t,e){return t.sortOrder=e+1})},this.changeSortOrder=function(t,e,n,i){i<n?t.filter(function(t){return t.sortOrder>=i&&t.sortOrder<=n-1}).forEach(function(t){t.sortOrder+=1}):t.filter(function(t){return t.sortOrder>=n+1&&t.sortOrder<=i}).forEach(function(t){t.sortOrder-=1}),e.sortOrder=i},this.validDocument=function(){if(!n.document.mainSteps.length)return!1;for(var t=0;t<n.document.mainSteps.length;t++){if(!n.document.mainSteps[t].steps.length)return!1}return!0},this.update=function(){i>0?e.put(o.API_URL+"/documents/"+i,n.document).then(function(e){s.load(),t.hide(),s.toast("Dokumentet ble oppdatert")}):e.post(o.API_URL+"/documents",n.document).then(function(e){s.load(),t.hide(),s.toast("Oppretting av dokument var vellykket")})},this.delete=function(){confirm("Er du sikker på at du vil slette dette dokumentet?")&&e.delete(o.API_URL+"/documents/"+i).then(function(e){s.load(),t.hide(),s.toast("Velykket sletting")})}}],template:n(24)})}}])},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<md-dialog flex="90" style="min-height: 100%;">\n<md-toolbar>\n<div class="md-toolbar-tools">\n<h3>{{ctrl.document.id ? \'Rediger dokument\' : \'Opprett dokument\'}}</h3>\n<span flex></span>\n<md-button class="md-icon-button" ng-click="ctrl.cancel()">\nx\n</md-button>\n</div>\n</md-toolbar>\n<md-dialog-content style="flex:1; display:flex;">\n<form name="documentForm" class="document">\n<div class="steps-container">\n<div class="steps-nav">\n<div>\n<md-input-container class="md-block" style="margin-bottom:0;">\n<label>Dokument navn</label>\n<input ng-model="ctrl.document.name" required>\n</md-input-container>\n</div>\n<ul>\n<li>\n<h4 ng-click="ctrl.goStep(0, 0)" style="margin:0;" ng-class="{active: ctrl.active.mainStep == 0 && ctrl.active.step == 0}">\nIntroduksjon\n</h4>\n</li>\n<li ng-repeat="mainStep in ctrl.document.mainSteps | orderBy:\'sortOrder\'">\n<h4 ng-click="ctrl.goStep(mainStep.sortOrder, 0)" ng-class="{active: ctrl.active.mainStep == mainStep.sortOrder && !ctrl.active.step}">\n{{mainStep.sortOrder}}. {{mainStep.name}}\n</h4>\n<ul>\n<li ng-repeat="step in mainStep.steps | orderBy:\'sortOrder\'">\n<div ng-class="{active: ctrl.active.mainStep == mainStep.sortOrder && ctrl.active.step == step.sortOrder}" ng-click="ctrl.goStep(mainStep.sortOrder, step.sortOrder)">\n{{mainStep.sortOrder}}.{{step.sortOrder}} {{step.name}}\n</div>\n</li>\n</ul>\n<md-button class="md-primary" ng-click="ctrl.addStep(mainStep)">Legg til seksjon</md-button>\n</li>\n</ul>\n<md-button class="md-primary" ng-click="ctrl.addMainStep()">Legg til kapittel</md-button>\n</div>\n<div class="steps-content">\n<div ng-if="ctrl.active.mainStep == 0 && ctrl.active.step == 0">\n<div class="editor-container" flex>\n<label>Introduksjon</label>\n<summernote config="ctrl.editorOptions" ng-model="ctrl.document.introText"></summernote>\n</div>\n</div>\n<div class="main-steps">\n<ul>\n<li ng-repeat="mainStep in ctrl.document.mainSteps | orderBy:\'sortOrder\'">\n<div ng-show="!ctrl.active.step && ctrl.active.mainStep == mainStep.sortOrder">\n<div layout="row">\n<md-input-container class="md-block">\n<label>No.</label>\n<md-select ng-model="mainStep.sortOrder" ng-change="ctrl.changeSortOrder(ctrl.document.mainSteps, mainStep, {{mainStep.sortOrder}}, mainStep.sortOrder)">\n<md-option ng-repeat="number in ctrl.arrayFromNumber(ctrl.document.mainSteps.length)" ng-value="number">\n{{number}}\n</md-option>\n</md-select>\n</md-input-container>\n<md-input-container class="md-block" flex>\n<label>Kapittel navn</label>\n<input ng-model="mainStep.name" required>\n</md-input-container>\n<md-input-container class="md-block">\n<md-button class="md-icon-button md-primary md-hue-1" style="margin-top: -10px;" ng-click="ctrl.remove(ctrl.document.mainSteps, $index)" ng-disabled="mainStep.noDelete">\n<md-icon md-font-set="material-icons">close</md-icon>\n</md-button>\n</md-input-container>\n</div>\n<div class="editor-container" flex>\n<label>Beskrivelse</label>\n<summernote config="ctrl.editorOptions" ng-model="mainStep.description"></summernote>\n</div>\n</div>\n<div class="steps" ng-show="ctrl.active.step">\n<ul>\n<li ng-repeat="step in mainStep.steps | orderBy:\'sortOrder\'" ng-show="ctrl.active.mainStep == mainStep.sortOrder && ctrl.active.step == step.sortOrder">\n<div layout="row">\n<md-input-container class="md-block">\n<label>Nr.</label>\n<md-select ng-model="step.sortOrder" ng-change="ctrl.changeSortOrder(mainStep.steps, step, {{step.sortOrder}}, step.sortOrder)">\n<md-option ng-repeat="number in ctrl.arrayFromNumber(mainStep.steps.length)" ng-value="number">\n{{mainStep.sortOrder + \'.\' + number}}\n</md-option>\n</md-select>\n</md-input-container>\n<md-input-container class="md-block" flex>\n<label>Seksjon navn</label>\n<input ng-model="step.name" required>\n</md-input-container>\n<md-input-container class="md-block">\n<md-button class="md-icon-button" style="margin-top: -10px;" ng-click="ctrl.remove(mainStep.steps, $index)" ng-disabled="step.noDelete">\n<md-icon md-font-set="material-icons md-primary md-hue-1">close</md-icon>\n</md-button>\n</md-input-container>\n</div>\n<div class="editor-container" flex>\n<label>Beskrivelse</label>\n<summernote config="ctrl.editorOptions" ng-model="step.description"></summernote>\n</div>\n<br>\n<div class="questions">\n<ul>\n<li ng-repeat="question in step.questions | orderBy:\'sortOrder\'">\n<div>\n<div layout="row">\n<md-input-container class="md-block">\n<label>Nr.</label>\n<md-select ng-model="question.sortOrder" ng-change="ctrl.changeSortOrder(step.questions, question, {{question.sortOrder}}, question.sortOrder)">\n<md-option ng-repeat="number in ctrl.arrayFromNumber(step.questions.length)" ng-value="number">\n{{number}}\n</md-option>\n</md-select>\n</md-input-container>\n<div class="editor-container" flex>\n<label>{{question.type == 0 ? \'Text\' : \'Question\'}}</label>\n<summernote config="ctrl.editorOptions" ng-model="question.text" required></summernote>\n</div>\n<md-input-container class="md-block">\n<md-button class="md-icon-button md-primary md-hue-1" style="margin-top: -10px;" ng-click="ctrl.remove(step.questions, $index)">\n<md-icon md-font-set="material-icons">close</md-icon>\n</md-button>\n</md-input-container>\n</div>\n<div class="choices" ng-if="question.type == 1">\n<ul>\n<li ng-repeat="choice in question.choices | orderBy:\'sortOrder\'">\n<div layout="row">\n<md-input-container class="md-block">\n<label>Nr.</label>\n<md-select ng-model="choice.sortOrder" ng-change="ctrl.changeSortOrder(question.choices, choice, {{choice.sortOrder}}, choice.sortOrder)">\n<md-option ng-repeat="number in ctrl.arrayFromNumber(question.choices.length)" ng-value="number">\n{{number}}\n</md-option>\n</md-select>\n</md-input-container>\n<md-input-container class="md-block" flex>\n<label>Valg {{$index + 1}}</label>\n<input ng-model="choice.text" required>\n</md-input-container>\n<md-input-container class="md-block">\n<md-button class="md-icon-button md-primary md-hue-1" style="margin-top: -10px;" ng-click="ctrl.remove(question.choices, $index)">\n<md-icon md-font-set="material-icons">close</md-icon>\n</md-button>\n</md-input-container>\n</div>\n<div class="sub-questions">\n<ul>\n<li ng-repeat="subQuestion in choice.subQuestions | orderBy:\'sortOrder\'">\n<div>\n<div layout="row">\n<md-input-container class="md-block">\n<label>Nr.</label>\n<md-select ng-model="subQuestion.sortOrder" ng-change="ctrl.changeSortOrder(choice.subQuestions, subQuestion, {{subQuestion.sortOrder}}, subQuestion.sortOrder)">\n<md-option ng-repeat="number in ctrl.arrayFromNumber(choice.subQuestions.length)" ng-value="number">\n{{number}}\n</md-option>\n</md-select>\n</md-input-container>\n<div class="editor-container" flex>\n<label>{{subQuestion.type == 0 ? \'Sub text\' : \'Sub question\'}}</label>\n<summernote config="ctrl.editorOptions" ng-model="subQuestion.text" required>\n</summernote>\n</div>\n<md-input-container class="md-block">\n<md-button class="md-icon-button md-primary md-hue-1" style="margin-top: -10px;" ng-click="ctrl.remove(choice.subQuestions, $index)">\n<md-icon md-font-set="material-icons">close</md-icon>\n</md-button>\n</md-input-container>\n</div>\n<div class="sub-choices" ng-if="subQuestion.type == 1">\n<ul>\n<li ng-repeat="subChoice in subQuestion.subChoices | orderBy:\'sortOrder\'">\n<div layout="row">\n<md-input-container class="md-block">\n<label>Nr.</label>\n<md-select ng-model="subChoice.sortOrder" ng-change="ctrl.changeSortOrder(subQuestion.subChoices, subChoice, {{subChoice.sortOrder}}, subChoice.sortOrder)">\n<md-option ng-repeat="number in ctrl.arrayFromNumber(subQuestion.subChoices.length)" ng-value="number">\n{{number}}\n</md-option>\n</md-select>\n</md-input-container>\n<md-input-container class="md-block" flex>\n<label>Undervalg {{$index + 1}}</label>\n<input ng-model="subChoice.text" required>\n</md-input-container>\n<md-input-container class="md-block">\n<md-button class="md-icon-button md-primary md-hue-1" style="margin-top: -10px;" ng-click="ctrl.remove(subQuestion.subChoices, $index)">\n<md-icon md-font-set="material-icons">close</md-icon>\n</md-button>\n</md-input-container>\n</div>\n</li>\n</ul>\n<md-button class="md-primary" ng-click="ctrl.addSubChoice(subQuestion)">Legg til undervalg</md-button>\n</div>\n</div>\n</li>\n</ul>\n<md-button class="md-primary" ng-click="ctrl.addSubQuestion(choice, 0)">Legg til undertekst</md-button>\n<md-button class="md-primary" ng-click="ctrl.addSubQuestion(choice, 1)">Legg til underspørsmål</md-button>\n</div>\n</li>\n</ul>\n<md-button class="md-primary" ng-click="ctrl.addChoice(question)">Legg til valg</md-button>\n</div>\n</div>\n</li>\n</ul>\n<md-button class="md-primary" ng-click="ctrl.addQuestion(step, 0)">Legg til tekst</md-button>\n<md-button class="md-primary" ng-click="ctrl.addQuestion(step, 1)">Legg til spørsmål</md-button>\n</div>\n</li>\n</ul>\n</div>\n</li>\n</ul>\n</div>\n</div>\n</div>\n</form>\n</md-dialog-content>\n<md-dialog-actions layout="row">\n<md-button class="md-warn md-raised" ng-click="ctrl.delete()" ng-disabled="ctrl.document.noDelete" ng-if="ctrl.document.id">\nSlett\n</md-button>\n<div flex></div>\n<md-button class="md-primary md-raised" ng-disabled="!documentForm.$valid || !ctrl.validDocument()" ng-click="ctrl.update()">\n{{ctrl.document.id ? \'Oppdater\' : \'Opprett\'}}\n</md-button>\n</md-dialog-actions>\n</md-dialog>',r="/partials/ui.admin.documents.edit.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("ProfileCtrl",["$mdDialog","$http","$mdToast","Config",function(t,e,n,i){var r=this,s=this;this.toast=function(t){return n.show(n.simple().textContent(t).position("bottom right"))},i.getUser().then(function(t){return r.user=t.data}),this.update=function(){e.put(o.API_URL+"/users/"+r.user.id,r.user).then(function(e){e.data.duplicatedEmail?t.show(t.alert().clickOutsideToClose(!1).title("Denne eposten er allerede brukt av en annen bruker.").textContent("Vennligst velg en annen e-post adresse.").ok("Skjønner!")).then(function(t){return location.reload()}):e.data.changedEmail?t.show(t.alert().clickOutsideToClose(!1).title("Vennligst sjekk e-posten din for å bekrefte din e-post adresse.").textContent("Når du bekrefter din epost, så trenger du å bruke denne som brukernavn når du logger inn.").ok("Skjønner!")).then(function(t){return location.reload()}):(r.toast("Vellykket oppdatering"),setTimeout(function(){location.reload()},3e3))})},this.delete=function(){t.show(t.confirm().title("Er du sikker på at du vil slette din konto?").textContent("Du kan ikke gå tilbake på denne handlingen når den først er utført.").ok("Ja").cancel("Nei")).then(function(){e.delete(o.API_URL+"/users/"+r.user.id).then(function(t){r.toast("Sletting vellykket"),setTimeout(function(){location.href="/"},3e3)})})},this.editPassword=function(){t.show({clickOutsideToClose:!0,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){var n=this;this.user={id:s.user.id},this.errors=[],this.cancel=function(){return t.cancel()},this.updatePassword=function(){e.put(o.API_URL+"/users/change-password/"+n.user.id,n.user).then(function(e){e.data.succeeded?(n.errors=[],t.hide(),s.toast("Oppdatering av passord er velykket.")):n.errors=e.data.errors})}}],template:'\n                    <md-dialog flex="90" flex-gt-md="30">\n                        <md-toolbar>\n                            <div class="md-toolbar-tools">\n                                <h3>Bytt passord</h3>\n                                <span flex></span>\n                                <md-button class="md-icon-button" ng-click="ctrl.cancel()">\n                                    x\n                                </md-button>\n                            </div>\n                        </md-toolbar>\n                        <md-dialog-content>\n                            <div class="md-dialog-content">\n                                <form name="passwordForm">\n                                    <md-input-container class="md-block">\n                                        <label>Nåværende passord</label>\n                                        <input type="password" ng-model="ctrl.user.currentPassword" required>\n                                    </md-input-container>\n                                    <md-input-container class="md-block">\n                                        <label>Nytt passord</label>\n                                        <input type="password" ng-model="ctrl.user.newPassword" required>\n                                    </md-input-container>\n                                    <md-input-container class="md-block">\n                                        <label>Bekreft nytt passord</label>\n                                        <input type="password" ng-model="ctrl.user.confirmPassword" required>\n                                    </md-input-container>\n                                </form>\n                                <ul class="error" ng-repeat="error in ctrl.errors" ng-if="ctrl.errors.length">\n                                    <li>{{error.description}}</li>\n                                </ul>\n                            </div>\n                        </md-dialog-content>\n                        <md-dialog-actions layout="row">\n                            <md-button class="md-primary md-raised"\n                                ng-disabled="!passwordForm.$valid || ctrl.user.newPassword != ctrl.user.confirmPassword"\n                                ng-click="ctrl.updatePassword()">\n                                Oppdater    \n                            </md-button>\n                        </md-dialog-actions>\n                    </md-dialog>\n                '})}}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("WizardCtrl",["$mdDialog","$http","$mdToast","Config","$stateParams","$interval",function(t,e,n,i,r,s){var a=this,l=this,c=[];this.editorOptions={height:200,tooltip:!1,toolbar:["bold","italic","link","ul"]},this.toast=function(t){return n.show(n.simple().textContent(t).position("bottom right"))},this.active={mainStep:0,step:0},this.reach={mainStep:1/0,step:1/0},this.stepInputRevisions=function(t){return c.filter(function(e){return e.stepId==t})},this.load=function(){e.get(o.API_URL+"/user-documents/"+r.documentId+"/"+a.user.id).then(function(t){if(a.userDocument=t.data,a.userDocument.document.mainSteps.forEach(function(t){t.steps.forEach(function(t){t.questions.filter(function(t){return 1==t.type}).forEach(function(t){t.hide=!!t.userAnswers.length,t.choices.forEach(function(t){t.subQuestions.filter(function(t){return 1==t.type}).forEach(function(t){t.hide=!!t.userSubAnswers.length})})})})}),null!=a.userDocument.lastStepId){var e=a.userDocument.document.mainSteps.filter(function(t){return t.id==a.userDocument.lastStep.mainStepId})[0];a.active={mainStep:e.sortOrder,step:a.userDocument.lastStep.sortOrder}}var n=!0;a.userDocument.document.mainSteps.forEach(function(t){t.steps.forEach(function(e){n&&(a.checkValidStep(e)||(a.reach={mainStep:t.sortOrder,step:e.sortOrder},n=!1))})}),u(),s(function(){u()},1e4)})},i.getUser().then(function(t){a.user=t.data,a.load()});var d=function(){return e.put(o.API_URL+"/user-documents/"+r.documentId+"/"+a.user.id,a.userDocument).then(function(t){console.log("saved")})},u=function(){a.userDocument.document.mainSteps.forEach(function(t){t.steps.forEach(function(t){m(t)})})},m=function(t){if(t.userInputs&&t.userInputs.length&&t.userInputs[0].inputText.length){var e=a.stepInputRevisions(t.id);e.length>0&&e[e.length-1].inputText==t.userInputs[0].inputText.trim()||c.push({stepId:t.id,inputText:t.userInputs[0].inputText.trim(),createdTime:Date.now()})}};this.revertInputRevision=function(t,e){return t.userInputs[0].inputText=e},this.viewInputRevision=function(e,n){t.show({clickOutsideToClose:!0,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){this.revision=n,this.cancel=function(){return t.cancel()},this.revert=function(){l.revertInputRevision(e,n.inputText),t.hide()}}],template:'\n                    <md-dialog flex="90" flex-gt-md="50">\n                        <md-toolbar>\n                            <div class="md-toolbar-tools">\n                                <h3>Revisjon: {{ctrl.revision.createdTime | date:\'dd-MM-yyyy HH:mm:ss\'}}</h3>\n                                <span flex></span>\n                                <md-button class="md-icon-button" ng-click="ctrl.cancel()">\n                                    x\n                                </md-button>\n                            </div>\n                        </md-toolbar>\n                        <md-dialog-content>\n                            <div class="md-dialog-content" ng-bind-html="ctrl.revision.inputText"></div>\n                        </md-dialog-content>\n                        <md-dialog-actions layout="row">\n                            <md-button class="md-primary md-raised" ng-click="ctrl.revert()">Endre til</md-button>\n                        </md-dialog-actions>\n                    </md-dialog>\n                '})},this.next=function(t,e){e?e.sortOrder==t.steps.length?a.active={mainStep:t.sortOrder+1,step:0}:a.active.step=e.sortOrder+1:a.active={mainStep:t.sortOrder,step:1},(a.active.mainStep>a.reach.mainStep||a.active.mainStep==a.reach.mainStep&&a.active.step>a.reach.step)&&(a.reach={mainStep:a.active.mainStep,step:a.active.step}),e&&(a.userDocument.lastStepId=a.userDocument.document.mainSteps[a.active.mainStep-1].steps[0==a.active.step?0:a.active.step-1].id,d(),m(e))},this.back=function(t,e){e?1==e.sortOrder?a.active={mainStep:t.sortOrder,step:0}:a.active.step=e.sortOrder-1:a.active={mainStep:t.sortOrder-1,step:a.userDocument.document.mainSteps[t.sortOrder-2].steps.length},e&&(a.userDocument.lastStepId=a.userDocument.document.mainSteps[a.active.mainStep-1].steps[0==a.active.step?0:a.active.step-1].id,d(),m(e))},this.go=function(t,e){e&&(t.sortOrder>a.reach.mainStep||t.sortOrder==a.reach.mainStep&&e.sortOrder>a.reach.step)||t.sortOrder>a.reach.mainStep||(a.active={mainStep:t.sortOrder,step:e?e.sortOrder:0})},this.checkValidStep=function(t){if(!t.userInputs.length||!t.userInputs[0].inputText.length)return!1;for(var e=0;e<t.questions.length;e++){var n=t.questions[e];if(1==n.type&&n.choices.length>0&&(0==n.userAnswers.length||0==n.userAnswers[0].choiceId.length))return!1;if(n.userAnswers.length&&n.userAnswers[0].choiceId.length)for(var i=0;i<n.choices.length;i++){var o=n.choices[i];if(o.id==n.userAnswers[0].choiceId)for(var r=0;r<o.subQuestions.length;r++){var s=o.subQuestions[r];if(1==s.type&&s.subChoices.length>0&&(0==s.userSubAnswers.length||0==s.userSubAnswers[0].subChoiceId.length))return!1}}}return!0},this.collapseAnswer=function(t,e){0==t.type||!e&&!t.choices.length||e&&!t.subChoices.length||(t.hide=!t.hide)},this.goIntro=function(){a.active={mainStep:0,step:0}},this.download=function(t){d().then(function(i){n.show({hideDelay:0,position:"bottom right",controllerAs:"ctrl",controller:["$mdToast",function(n){e.post(o.API_URL+"/user-documents/"+t+"/generate-pdf",{}).then(function(e){if(e.data){n.hide();var i=o.API_URL+"/user-documents/"+t+"/download";window.location.href=i}}).catch(function(t){return l.toast("Det oppstår en feil når PDF blir generert.")})}],template:'\n                        <md-toast>\n                            <span class="md-toast-text" flex>Lager PDF...</span>\n                            <md-progress-circular md-mode="indeterminate" class="md-accent" md-diameter="20px"></md-progress-circular>\n                        </md-toast>'})})},$(function(){$("html,body").on("click","a",function(){var t=$(this).attr("href"),e=document.body.clientWidth>1200?1200:document.body.clientWidth,n=document.body.clientHeight-200,i=(document.body.clientWidth-e)/2;if($(this).parents(".question").length||$(this).parents(".step-description").length)return window.open(t,"popup","width="+e+",height="+n+",top=200, left="+i),!1}),navigator.userAgent.search("Firefox")>=0&&setTimeout(function(){var t=$("#progress").height();$(".proWrapper").height()>t&&$(".proWrapper").css("left","-14px")},1e3)})}])},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("InvoiceCtrl",["$mdDialog","$http","$mdToast",function(t,e,i){var r=this;this.toast=function(t){return i.show(i.simple().textContent(t).position("bottom right"))},this.load=function(){e.get(o.API_URL+"/payments").then(function(t){r.payments=t.data})},this.load(),this.detail=function(i){return t.show({clickOutsideToClose:!0,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){var n=this;this.cancel=function(){return t.cancel()},this.load=function(){e.get(o.API_URL+"/payments/"+i).then(function(t){n.payment=t.data})},this.load()}],template:n(28)})}}])},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<md-dialog flex="90" flex-gt-md="50">\n<md-toolbar>\n<div class="md-toolbar-tools">\n<h3>Faktura detaljer</h3>\n<span flex></span>\n<md-button class="md-icon-button" ng-click="ctrl.cancel()">\nx\n</md-button>\n</div>\n</md-toolbar>\n<md-dialog-content class="md-dialog-content">\n<ul class="detail-list">\n<li>\n<b>Fornavn:</b> {{ctrl.payment.firstName}}\n</li>\n<li>\n<b>Etternavn:</b> {{ctrl.payment.lastName}}\n</li>\n<li>\n<b>Land:</b> {{ctrl.payment.country}}\n</li>\n<li>\n<b>Addresse:</b> {{ctrl.payment.addressLine1}}\n<div>{{ctrl.payment.addressLine2}}</div>\n</li>\n<li>\n<b>By:</b> {{ctrl.payment.city}}\n</li>\n<li>\n<b>Postnummer:</b> {{ctrl.payment.postalCode}}\n</li>\n<li>\n<b>Epost:</b> {{ctrl.payment.email}}\n</li>\n<li>\n<b>Telefonnummer:</b> {{ctrl.payment.phoneNumber}}\n</li>\n<li>\n<b>Opprettet:</b> {{ctrl.payment.createdTime | date:\'dd-MM-yyyy HH:mm:ss\'}}\n</li>\n</ul>\n</md-dialog-content>\n</md-dialog>',r="/partials/ui.admin.invoices.detail.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1);i.module(o.APP_NAME).controller("NotificationCtrl",["$mdDialog","$http","$mdToast",function(t,e,i){var r=this,s=this;this.toast=function(t){return i.show(i.simple().textContent(t).position("bottom right"))},this.load=function(){e.get(o.API_URL+"/notifications").then(function(t){r.notifications=t.data})},this.load(),this.detail=function(i){return t.show({clickOutsideToClose:!0,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){var n=this;this.cancel=function(){return t.cancel()},e.get(o.API_URL+"/notifications/"+i).then(function(t){n.notification=t.data}),this.delete=function(){confirm("Are you sure want to delete?")&&e.delete(o.API_URL+"/notifications/"+n.notification.id,{}).then(function(e){t.hide(),s.load(),s.toast("Deleted successfully")})}}],template:n(30)})},this.send=function(){return t.show({clickOutsideToClose:!1,escapeToClose:!0,controllerAs:"ctrl",controller:[function(){var n=this;this.cancel=function(){return t.cancel()},this.editorOptions={height:400,tooltip:!1,toolbar:["bold","italic","link","ul","paragraph"]},this.save=function(){e.post(o.API_URL+"/notifications",n.notification).then(function(e){s.load(),t.hide(),s.toast("Sent successfully")})}}],template:n(31)})}}])},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<md-dialog flex="90" flex-gt-md="50">\n<md-toolbar>\n<div class="md-toolbar-tools">\n<h3>Notifikasjon detaljer</h3>\n<span flex></span>\n<md-button class="md-icon-button" ng-click="ctrl.cancel()">\nx\n</md-button>\n</div>\n</md-toolbar>\n<md-dialog-content class="md-dialog-content">\n<ul class="detail-list">\n<li>\n<b>Emne:</b> {{ctrl.notification.subject}}\n</li>\n<li>\n<b>Tidspunkt:</b> {{ctrl.notification.createdTime | date:\'dd-MM-yy HH:mm:ss\'}}\n</li>\n<li>\n<b>Innhold:</b>\n<br><br>\n<div ng-bind-html="ctrl.notification.body"></div>\n</li>\n</ul>\n</md-dialog-content>\n<md-dialog-actions layout="row">\n<md-button class="md-warn md-raised" ng-click="ctrl.delete()">\nSlett\n</md-button>\n</md-dialog-actions>\n</md-dialog>',r="/partials/ui.admin.notifications.detail.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){var n,i=window.angular;try{n=i.module(["ng"])}catch(t){n=i.module("ng",[])}var o='<md-dialog flex="90" flex-gt-md="50">\n<md-toolbar>\n<div class="md-toolbar-tools">\n<h3>Send notifikasjon</h3>\n<span flex></span>\n<md-button class="md-icon-button" ng-click="ctrl.cancel()">\nx\n</md-button>\n</div>\n</md-toolbar>\n<md-dialog-content class="md-dialog-content">\n<form name="notificationForm">\n<md-input-container class="md-block">\n<label>Emne</label>\n<input ng-model="ctrl.notification.subject" required>\n</md-input-container>\n<summernote config="ctrl.editorOptions" ng-model="ctrl.notification.body"></summernote>\n</form>\n</md-dialog-content>\n<md-dialog-actions layout="row">\n<md-button class="md-primary md-raised" ng-disabled="!notificationForm.$valid" ng-click="ctrl.save()">\nSend\n</md-button>\n</md-dialog-actions>\n</md-dialog>',r="/partials/ui.admin.notifications.send.html",s=i.element(window.document).injector();s?s.get("$templateCache").put(r,o):n.run(["$templateCache",function(t){t.put(r,o)}]),t.exports=o},function(t,e){}]);