function OpenArtiklarDialog(n=false){const t=getAvailablePlaceholder("Artiklar");var i=null,r=null;n||(i=$("#ArtikelNr").val(),r=$("#ArtikelMatPrisHuv_Id").val());$.ajax({cache:!1,url:"/Artikel/Index",type:"GET",data:{matnr:i,matprishuv_id:r},"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(i){t.html(i);initSelectPickers(t);ArtiklarModalDialogInitAfterLoad(t,n);t.on("hidden.bs.modal",()=>{console.debug("(cleanup) Splitter "),window.destroySplitter(".artiklar-splitter")})},error:function(n){displayAjaxErrorMessage(n,"OpenArtiklarDialog")},complete:function(){showLoadingAjax(!1)}});t.modal({backdrop:"static"})}function ArtiklarModalDialogInitAfterLoad(n,t){function y(n){pvf.table.setModified(n);n.addClass("row-modified")}let i=!1,u=null,f=null,e=null,r=null,w=null,b=null,h=null;const s=function(o,s,c,l){u=s;f=c;e=l;w=$("#Dim1").val();b=$("#Material").val();h=$("#MatPrisHuv_Id").val();r!=null&&($("#matnodetxt_"+r).removeClass("artiklar-highlight-treenode"),$("#matnode_"+r).removeClass("artiklar-highlight-treenode"));o!=null&&($("#matnodetxt_"+o).addClass("artiklar-highlight-treenode"),$("#matnode_"+o).addClass("artiklar-highlight-treenode"));r=o;$("#artiklarList").html("");$("#artiklarList").html('
<\/div><\/div>
Hämtar data...<\/div><\/div>');var v=null;t||(v=$("#ArtikelNr").val());let a={mattyp_id:s,mathuvudgrupp_id:c,matgrupp_id:l,matnr:v,matprishuv_id:h};a=AddAppSpecificLoadArtiklarData(a);_url=`/Artikel/Artiklar${i==!0?"Edit":""}`;$.ajax({cache:!1,url:_url,type:"GET",data:a,"async":!0,success:function(u){if($("#artiklarList").html(u),!t){$("#artiklarList>table>tbody>tr.mat_selected").each(function(n,t){t.scrollIntoView()});$("#artiklarList table tbody tr").toggleClass("pvf-highlight-row",!(i||t));$("#artiklarList").on("click","tbody > tr",function(){if(!i){const t=$(this);r!=null&&($("#matnodetxt_"+r).removeClass("artiklar-highlight-treenode"),$("#matnode_"+r).removeClass("artiklar-highlight-treenode"));let u=pvf.table.getText(t,"namn");u=modifyMatNamn(u);$("#ArtikelNr").val(pvf.table.getText(t,"matnr"));$("#ArtikelNamn").val(u);$("#ArtikelPris").val(pvf.table.getText(t,"pris"));$("#ArtikelMatPrisHuv_Id").val(t.data("matprishuv_id"));n.modal("hide")}})}},error:function(n){displayAjaxErrorMessage(n)}})},c=function(n){s(n.dataset.id,n.dataset.mattyp_id,n.dataset.mathuvudgrupp_id,n.dataset.matgrupp_id)};$("#artiklarList").on("input change","input[type=text], input[type=checkbox]",function(){var n=$(this).closest("tr");y(n);$(this).addClass("field-modified")});console.debug("Init: artiklarList. dblclick");$("#artiklarList").on("dblclick","table tbody > tr",function(n){if(i&&!$(n.target).is("input, textarea, select")){const t=$(this),r=t.find('input[type=hidden][name$=".FirstChoice"]');if(r.length){const i=t.find(".firstchoice-cell span"),n=r.val()==="true";r.val(!n);i.toggleClass("invisible",n);y(t)}}});$("#buArtiklarRefresh").off("click").on("click",function(n){n.preventDefault();s(r,u,f,e)});$("#buArtiklarEditMode").removeClass("pvf-button-selected");$("#buArtiklarTopClose").css("display",t==!1?"inline-block":"none");const o=$("#buArtiklarEditMode");if(o.length){o.removeClass("pvf-button-selected");o.off("click").on("click",function(){const o=$("#MatPrisHuv_Id").val();let n=!0;i=!i;o!=="0"&&(doAjaxMsg2({status:"error",msg:"Det går endast att editera på Default prislistan,\n välj Default (PVF) och tryck på pennan igen."}),i=!1,n=!1);$("#buArtiklarEditMode").toggleClass("pvf-button-selected",i);$("#MatPrisHuv_Id").prop("disabled",i);$("#buArtiklarSave").css("display",i?"inline-block":"none");$("#buArtiklarReset").css("display",i?"inline-block":"none");$("#artiklarList table tbody tr").toggleClass("pvf-highlight-row",!(i||t));n&&s(r,u,f,e)})}const l=$("#buArtiklarSave");if(l.length&&(l.css("display",i?"inline-block":"none"),o.length))l.off("click").on("click",function(){function n(){$("#artiklarList tr.row-modified").each(function(){var n=$(this);pvf.table.setModified(n,"false");n.find("input.field-modified").removeClass("field-modified");n.removeClass("row-modified")})}$.ajax({url:"/Artikel/ArtiklarPost/",cache:!1,type:"POST",data:$("#frmArtiklarEdit").serialize(),beforeSend:function(){showLoadingAjax(!0)},success:function(t){typeof t=="object"?(doAjaxMsg(t,null),n()):alert("FIXA FAIL I buArtiklarSave click")},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})});const a=$("#buArtiklarReset");if(a.length&&(a.css("display",i?"inline-block":"none"),o.length))a.off("click").on("click",function(){const n=getAvailablePlaceholder("ResetPriceList");$.ajax({cache:!1,url:"/Artikel/ResetPriceList",type:"GET",data:{},"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(t){n.html(t);$("#buArtiklarResetPriceListOk").off("click").on("click",function(){const t=$("input[name=artresetmode]:checked").val();let i={mattyp_id:t==0?null:u,mathuvudgrupp_id:t==0?null:f,matgrupp_id:t==0?null:e,matprishuv_id:h};i=AddAppSpecificLoadArtiklarData(i,t==0);$.ajax({cache:!1,url:"/Artikel/ResetPriceList",type:"POST",data:i,"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(t){typeof t=="object"?doAjaxMsg2(t,function(){n.modal("hide");s(r,u,f,e)}):n.html(t)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}});n.modal()});const v=$("#buArtiklarClose");if(v.length&&(v.off("click"),t))v.on("click",function(){window.history.back()});$("#mattree_body .trvcollapsible").off("click").on("click",function(n){n.preventDefault();$(this).toggleClass("trvcollapse trvexpand");$(this).closest("li").children("ul").slideToggle()});const p=document.querySelectorAll("#mattree_body a");if(p&&p.forEach(n=>{n.addEventListener("click",function(n){n.preventDefault();c(this)})}),console.debug("(Init) Splitter "),window.initSplitter(".artiklar-splitter",{adjustHeightSelector:"#mattree_body, #artiklarList",heightOffset:250,standAlone:!0,standAloneOffset:70}),t){const n=document.querySelector("#mattree_body a");c(n)}else{const n=document.querySelector("#mattree_body a[data-vald='True']");if(n){const t=function(n){const i=n.dataset.parent_id,u=n.dataset.id,r=document.querySelector(`#matnodetxt_${u}`);if(r&&!r.offsetParent){const n=document.querySelector(`#li_${i} > span.trvcollapsible`);n&&n.click();const r=document.querySelector(`#matnode_${i}`);r&&t(r)}};t(n);n.scrollIntoView();c(n)}}}function doSelectWizard(n,t,i){showHideProjectTreeMomentList(!1);currentProjectWizard_Id=i;wizard=new Wizard(n,t);showHideWizard(!0);$("#wizard_title").html("Räknemall: "+$("#wizard_"+n).html());$("#wizardkindcombos_body").html("
Laddar...<\/center>");$("#wizard_rows").html("");loadKindCombo(n,$("#wizardkindcombos_body"),"","");$("html, body").animate({scrollTop:0},"slow")}function showDefaultKinds(){const n=getAvailablePlaceholder("DefaultKinds"),t=function(){$("#defaultKindsOk").off("click").on("click",function(){r()})},i=function(){return Array.from($("select.defkinds option:selected")).map(n=>n.value).filter(n=>n.length).join(";")},r=function(){currentDefKinds=i();$.ajax({cache:!1,url:"/Wizard/DefaultKindsSave",type:"POST","async":!0,data:{project_Id:currentProject_Id,defKinds:currentDefKinds},beforeSend:function(){showLoadingAjax(!0)},success:function(t){doAjaxMsg2(t,function(){n.modal("hide");n.html("")})},error:function(n){displayAjaxErrorMessage(n,"showDefaultKinds.Save")},complete:function(){showLoadingAjax(!1)}})};n.html("");$.ajax({cache:!1,url:"/Wizard/DefaultKinds",type:"GET","async":!0,data:{project_Id:currentProject_Id,defKinds:currentDefKinds},beforeSend:function(){showLoadingAjax(!0)},success:function(i){n.html(i);initSelectPickers(n);t();n.modal({backdrop:"static"})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function loadWizardRows(n,t=$("#wizard_rows")){if(!t.data("loading")){t.data("loading",!0);let i="";t.html('
Laddar...
<\/div><\/div><\/div>');wizard&&wizard.Id==n&&(i=wizard.getSelectedKinds());let r=wizard&&wizard.Id===n&&wizard.Rows||null;$.ajax({cache:!1,url:"/Wizard/WizardRows",type:"JSON",data:{wizGrupp_Id:n,mykinds:i,wizrows:r,ProjectWizard_Id:currentProjectWizard_Id,Project_Id:currentProject_Id},"async":!0,success:function(n){if(typeof n=="object")return showHideWizard(!1),doAjaxMsg2(n),!1;t.html(n);initSelectPickers(t);$("#wizardsave").off("click").on("click",function(){wizard.Save()});$("#wizardsaveandclose").off("click").on("click",function(){wizard.Save().then(function(n){n&&showHideWizard(!1)}).catch(function(n){console.error("Fel vid AJAX-anrop:",n)})});$("#wizardclose").off("click").on("click",function(){showHideWizard(!1)});currentProjectWizard_Id==null&&setWizardMomTillValues();$("input[id$=__L]").each(function(){var n=$(this).data("index"),t=$(this).prop("id");wizard.spreadValues(n,"L");wizard.updateEdits(n)})},error:function(n){displayAjaxErrorMessage(n);t.html("")},complete:function(){t.data("loading",!1)}})}}function showProjectTreeCopyFromMall(){const n=getAvailablePlaceholder("ProjectTreeCopyFromMall");if(currentProjectTree_Id==null)return doAjaxMsg2({status:"error",msg:"Du måste markera en trädnod som mallen skall infogas i."}),!1;const t=function(r=false){n.find("tr.pvf-highlight-row").off("click").on("click",function(){const n=$(this).data("recid");i(n)});r!=!0&&document.getElementById("treeMallarShowGlobal").addEventListener("click",function(i){currentShowGlobalMallar=i.target.checked;$.ajax({cache:!1,url:"/Project/Mallar",type:"GET","async":!0,data:{project_Id:currentProject_Id,showGlobalMallar:currentShowGlobalMallar,refreshOnly:!0},beforeSend:function(){showLoadingAjax(!0)},success:function(i){n.find(".modal-body").html(i);t(!0)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})})},i=function(t){$.ajax({cache:!1,url:"/Project/Mallar",type:"POST","async":!0,data:{project_Id:currentProject_Id,projectTree_id:currentProjectTree_Id,fromProject_Id:t},beforeSend:function(){showLoadingAjax(!0)},success:function(t){doAjaxMsg2(t,function(){n.modal("hide");n.html("");loadProjectTree(currentProject_Id,currentProjectTree_Id)})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})};n.html("");$.ajax({cache:!1,url:"/Project/Mallar",type:"GET","async":!0,data:{project_Id:currentProject_Id,showGlobalMallar:currentShowGlobalMallar},beforeSend:function(){showLoadingAjax(!0)},success:function(i){n.html(i);t();n.modal({backdrop:"static"})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function showProjectWizardConfirmDelete(n){doConfirmJS("Radera","Ta bort inmatad räknemall?",function(){$.ajax({cache:!1,url:"/ProjectWizard/Delete",type:"POST",dataType:"json",data:{id:n},"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(n){doAjaxMsg2(n,function(){loadProjectWizardList();showHideWizard(!1)})},error:function(n){displayAjaxErrorMessage(n,"showProjectWizardConfirmDelete");$("#wizard_rows").html("")},complete:function(){showLoadingAjax(!1)}})})}function doClearKolor(){return $("#Kulor").val(""),0}function showHideWizard(n){$(".inmatning-bilder").css("display",n==!0?"none":"block");$(".inmatning-wizard").css("display",n!=!0?"none":"block");n||(isModified=!1)}function showHideProjectTreeMomentList(n){const t=$(".inmatning-momentrader");t.length?($(".inmatning-momentrader").css("display",n==!0?"block":"none"),$(".inmatning-bilder").css("display",n==!0?"none":"block"),$(".inmatning-wizard").css("display","none"),n&&loadProjectTreeMomentList()):alert("Det finns ingen ProjektTreeMomentList kod, bör aldrig inträffa")}function isProjectTreeMomentListVisible(){const n=$(".inmatning-momentrader");return n.length&&n.is(":visible")}function loadProjectTreeMomentList(n=null){const t=$(".inmatning-momentrader");t.length&&t.is(":visible")&&$.ajax({cache:!1,url:"/ProjectTreeMoment/Index",type:"GET","async":!0,data:{projectTree_Id:currentProjectTree_Id,projectWizard_Id:n},beforeSend:function(){showLoadingAjax(!0)},success:function(n){$("#momentrader_body").html(n)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function IsValidNumbers(n){if(n.length==0)return!1;if(!/^[0-9+\-*/().\s]+$/.test(n))throw new Error("Uttrycket innehåller otillåtna tecken");let t=n.match(/(?:\d*\.\d+|\d+)/g);if(t==null||t.length==0)throw new Error("Inte ett gilltigt värde");let i=t.filter(n=>/^0[0-9]+$/.test(n)?!0:/^0[0-9]+\.\d+$/.test(n)?!0:!1);return i.length==0}function doOnExit(n,t,i){var u="#WizardRows_"+t+"__"+i,o=wizard.Rows[t][i],r=$(u).val().replace(/,/g,"."),f=o!=r,e;if(f&&["L","B","H","V"].includes(i))try{if(r!="")if(IsValidNumbers(r))/^[0-9+\-*./()\s]*$/.test(r)&&(e=eval(r),isNaN(e)||$(u).val(e));else{alert("Talet innehåller ett heltalsvärde som börjar på 0, ej tillåtet.");setTimeout(function(){n.target.focus()},0);return}}catch(t){alert(t.message);setTimeout(function(){n.target.focus()},0)}if(isModified||(isModified=f),f){let n=wizard.Rows[t];i=="L"&&n.hasOwnProperty("ModMatNamn")&&n.ModMatNamn==1&&o==0&&(n.MatNamn=modifyMatNamn(n.MatNamn),wizard.setEditorValue(t,"MatNamn",n.MatNamn));wizard.setProperty(t,i,$(u).val());["L","B","H","V"].includes(i)&&(wizard.spreadValues(t,i),wizard.updateEdits(t),wizard.pushChanges(t))}return 0}function modifyMatNamn(n,t=null){if(t===null){let n=$("#frmWizardEdit input[id='B']").val(),i=$("#frmWizardEdit input[id='H']").val();t=n!=undefined&&i!=undefined?` (${n}x${i})`:"";t.length==4&&(t="")}return oldHeaderBxH.length>0&&n.includes(oldHeaderBxH)?n.replace(oldHeaderBxH,t):n+t}function doSetMatNamnBxHAddon(){let n=modifyMatNamn("");$("#frmWizardEdit input[id*='MatNamn']").each(function(){var t=$(this),i;if(t.data("modmatnamn")==1){i=t.val();t.val(modifyMatNamn(i,n));let r=t.data("index");doWizardRowMatNamnChanged(r)}});oldHeaderBxH=n}function doClearArt(n){wizard.setEditorValue(n,"MatNr",null);wizard.setEditorValue(n,"MatNamn",null);wizard.setProperty(n,"MatNr",null);wizard.setProperty(n,"MatNamn",null);wizard.setProperty(n,"MatAPris",null);wizard.setProperty(n,"MatPrisHuv_Id",null);initSelectPicker($("#WizardRows_"+n+"__MatNr"))}function doInmatningOnKeyDown(n){n.code==="NumpadEnter"&&handleEnterNavigation(n)}function handleEnterNavigation(n){const t=$("#frmWizardEdit").find('input[type="text"]:visible:not(:disabled):not([readonly])').toArray(),i=t.indexOf(n.target);if(i!==-1){const r=(i+1)%t.length,u=t[r];focusInput(u);r===0&&scrollToInput(u,100)}}function focusInput(n){n.focus();n.select()}function scrollToInput(n,t=0){const i=$(n).offset();$("html, body").animate({scrollTop:i.top-t,scrollLeft:i.left})}function showProjectMomTill(n,t){const i=getAvailablePlaceholder("ProjectMomTill");i.on("hidden.bs.modal",function(){busyEnd(t)});const r=function(){$.ajax({url:"/Tillagg/EditPost",cache:!1,type:"POST",data:$("#frmProjectMomTillEdit").serialize()+"&project_Id="+n,success:function(n){typeof n=="object"?doAjaxMsg2(n,function(){i.modal("hide")}):alert("FIXA FAIL i ProjectMomTill->localSave")},error:function(n){displayAjaxErrorMessage(n)}})},u=function(){const n=$(this).prop("id"),t=n.indexOf("__")+2,i=n.substr(0,t),r=n.substring(t);r!=="Vald"||$(this).is(":checked")?r==="IsAuto"&&$("#"+i+"Vald").prop({checked:$(this).is(":checked")}):$("#"+i+"IsAuto").prop({checked:!1})},f=function(){$("#buprojectmomtillsave").off("click").on("click",r);i.find(".modal-body input[type='text'], .modal-body input[type='checkbox']").off("change").on("change",u)};$.ajax({cache:!1,url:"/Tillagg/Index",type:"GET",data:{Project_Id:n},"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(n){i.html(n);f()},error:function(n){displayAjaxErrorMessage(n,"showProjectMomTill")},complete:function(){showLoadingAjax(!1)}});i.modal()}function loadProjectTree(n,t=null,i=null){$.ajax({url:"/ProjectTree/Tree",type:"GET",data:{project_Id:n},cache:!1,beforeSend:function(){showLoadingAjax(!0)},success:function(n){const f=buildTree(n),u=document.getElementById("projecttree_body");u.innerHTML="";u.appendChild(renderTree(f,!0));const r=document.createElement("div");r.className="drop-indicator";document.body.appendChild(r);document.addEventListener("drop",async n=>{clearChildHighlights();const t=document.querySelector(".dragging");if(t){const i=document.querySelector(`.tree-node[data-recid="${r.dataset.targetRecId}"]`);if(i&&(r.style.display="none",!isDescendant(t,i))){const o=t.dataset.recid,s=r.dataset.targetRecId,u=r.dataset.position,h=i.dataset.isRoot==="true";if(!h||u!=="before"&&u!=="after"){const f={sourceRecId:o,targetRecId:s,position:u},e=await validateMoveOnServer(f);if(!e.allowed){alert(e.message||"Flytten är inte tillåten.");return}n.preventDefault();applyMoveInDom(f,t)}}}});document.addEventListener("dragstart",n=>{const t=n.target.closest(".label");if(t){const i=t.closest(".tree-node");i.classList.add("dragging");n.dataTransfer.effectAllowed="move"}});document.addEventListener("dragend",()=>{const n=document.querySelector(".dragging");n&&n.classList.remove("dragging");clearChildHighlights()});document.addEventListener("dragover",n=>{clearChildHighlights();r.classList.remove("same-parent","same-level","different-level");const i=n.target.closest(".tree-node");if(i){const f=document.querySelector(".dragging");if(f){if(f===i){r.style.display="none";return}let t="";const o=i.querySelector(".label"),e=o.getBoundingClientRect(),u=i.getBoundingClientRect(),s=!i.classList.contains("collapsed");if(s){const i=n.clientY-u.top,r=u.height;t=i<6?"before":ir-6?"after":"";console.debug(`Expanded: Y:${i}, H:${r}, Position:${t} `)}else{const i=n.clientY-e.top,r=e.height;t=ir*.7?"after":"child";console.debug(`NOT Expanded: Y:${i}, H:${r}, Position:${t} `)}if(t==="child")r.style.display="none",i.querySelector(".label").classList.add("drop-child-highlight"),r.dataset.position="child",r.dataset.targetRecId=i.dataset.recid,console.debug(`Möjlig Child drop på ${i.querySelector(".label").textContent} `);else if(t==="before"||t==="after"){const n=getMoveType(f,i);n==="same-parent"?r.classList.add("same-parent"):n==="same-level"?r.classList.add("same-level"):r.classList.add("different-level");console.debug(`MoveType: ${n}`)}else{console.debug("Vi fick position blank här!");return}if(isNoOpMove(f,i,t)){console.debug('dragover-EXIT "IsNoOpMove".');r.style.display="none";return}const h=i.dataset.isRoot==="true";if(h&&(t==="before"||t==="after")){r.style.display="none";return}if(isDescendant(f,i)){r.style.display="none";return}t!="child"&&(r.style.display="block",r.style.top=(t==="before"?u.top:u.bottom)+"px",r.style.left=u.left+"px",r.style.width=u.width+"px");r.dataset.position=t;r.dataset.targetRecId=i.dataset.recid;n.preventDefault()}}});document.addEventListener("dragleave",()=>{r.style.display="none"});t!=null&&selectTreeNode(t);typeof i=="function"&&i()},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function isNoOpMove(n,t,i){return n.parentElement!==t.parentElement?!1:i==="before"&&n.nextElementSibling===t?!0:i==="after"&&n.previousElementSibling===t?!0:!1}function selectTreeNode(n){projectTreeNodePressed(n,!1);const t=document.querySelector(`.tree-node[data-recid="${n}"]`);t&&t.scrollIntoView({behavior:"smooth",block:"center"})}function projectTreeNodePressed(n,t=true){document.querySelectorAll(".tree-node .label.selected").forEach(n=>n.classList.remove("selected"));const i=document.querySelector(`.tree-node[data-recid="${n}"]`);if(i){currentProjectTree_Id=n;const t=i.querySelector(".label");t&&t.classList.add("selected")}t&&(loadProjectWizardList(),loadProjectTreeMomentList())}function projectTreeNodeShowNotes(n,t){const r=n.target,i=getAvailablePlaceholder("ProjectTreeNodeNote");$.ajax({cache:!1,url:"/ProjectTree/Note",type:"GET","async":!0,data:{project_Id:currentProject_Id,projectTree_Id:t},beforeSend:function(){showLoadingAjax(!0)},success:function(n){i.html(n);enableDynamicModalResize(i);i.off("shown.bs.modal.ProjectTreeNodeNote").on("shown.bs.modal.ProjectTreeNodeNote",function(){i.setFocusOnFirstInput("button")});$("#buProjectTreeNodeNoteSave").off("click").on("click",function(){var n=$("#frmProjectTreeNodeNote").serialize();$.ajax({url:"/ProjectTree/Note",cache:!1,type:"POST",data:n,success:function(n){typeof n=="object"?(r.className=n.hasNote?"ptnotes glyphicon glyphicon-comment":"ptnotes empty glyphicon glyphicon-comment",i.modal("hide")):alert(n)},error:function(n){displayAjaxErrorMessage(n)}})});i.modal({backdrop:"static"})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function buildTree(n){const t={},i=[];return n.forEach(n=>{t[n.RecId]={...n,children:[]}}),n.forEach(n=>{const r=t[n.RecId];if(n.Parent_Id==null)i.push(r);else{const u=t[n.Parent_Id];u?u.children.push(r):i.push(r)}}),i}function renderTree(n,t=false){const i=document.createElement("ul");return i.className="project-tree",n.forEach((n,r)=>{const u=document.createElement("li");u.className="tree-node";u.dataset.recid=n.RecId;t&&r===0&&(u.dataset.isRoot="true");const s=n.children&&n.children.length>0,e=document.createElement("span");e.className=s?"toggle":"toggle empty";e.addEventListener("click",()=>u.classList.toggle("collapsed"));u.appendChild(e);const f=document.createElement("span");f.className="label";f.textContent=n.Namn;n.IsActive===!1?f.classList.add("disabled"):f.classList.remove("disabled");f.draggable=!0;f.addEventListener("click",()=>projectTreeNodePressed(n.RecId));u.appendChild(f);const o=document.createElement("i");o.className=n.HasNote?"ptnotes glyphicon glyphicon-comment":"ptnotes empty glyphicon glyphicon-comment";o.addEventListener("click",t=>projectTreeNodeShowNotes(t,n.RecId));u.appendChild(o);s&&u.appendChild(renderTree(n.children,!1));i.appendChild(u)}),i}function getLevel(n){let i=0,t=n.parentElement.closest(".tree-node");while(t)i++,t=t.parentElement.closest(".tree-node");return i}function getMoveType(n,t){const i=n.parentElement,r=t.parentElement,u=getLevel(n),f=getLevel(t);return i===r?"same-parent":u===f?"same-level":"different-level"}function selectFirstProjectTreeNode(){const n=document.querySelector(".project-tree .tree-node");if(n){const t=n.querySelector(".label");t&&(t.click(),n.scrollIntoView({behavior:"smooth",block:"center"}))}}function showProjectTreeEdit(n){function u(n){const r=document.getElementById("projecttree_body");if(r){const i=r.querySelector(`.tree-node[data-recid="${n.RecId}"]`);if(i){const t=i.querySelector(".label");if(t){t.textContent=n.Namn;n.IsActive===!1?t.classList.add("disabled"):t.classList.remove("disabled");const u=i.querySelectorAll("li .label");u.forEach(t=>{n.IsActive===!1?t.classList.add("disabled"):t.classList.remove("disabled")})}}}}if(currentProjectTree_Id==null&&selectFirstProjectTreeNode(),n=currentProjectTree_Id,n==null)return!1;const t=getAvailablePlaceholder("ProjectTreeEdit"),r=function(r){var u=$("#frmProjectTreeEdit").serialize()+"&action="+r;$.ajax({url:"/ProjectTree/New/"+n,cache:!1,type:"POST",data:u,success:function(n){typeof n=="object"?(loadProjectTree(currentProject_Id,n.recid),t.modal("hide")):(t.html(n),i())},error:function(n){displayAjaxErrorMessage(n)}})};const f=function(){$.ajax({url:"/ProjectTree/Edit/"+n,cache:!1,type:"POST",data:$("#frmProjectTreeEdit").serialize(),success:function(n){typeof n=="object"?(u(n),t.modal("hide")):(t.html(n),i())},error:function(n){displayAjaxErrorMessage(n)}})},i=function(){$("#buModalProjectTreeDelete").off("click").on("click",function(){showProjectTreeConfirmDelete(this,n)});$("#buModalProjectTreeNew").off("click").on("click",function(){r(32)});$("#buModalProjectTreeNewSub").off("click").on("click",function(){r(42)});$("#buModalProjectTreeSave").off("click").on("click",f);$("#frmProjectTreeEdit").on("submit",function(n){n.preventDefault()})};currentProjectTree_Id!==n&&(console.debug(`currentProjectTree_Id != projectTree_Id (${currentProjectTree_Id} != ${n})`),currentProjectTree_Id=n);$.ajax({url:"/ProjectTree/Edit",cache:!1,type:"GET","async":!0,data:{projectTree_Id:n,project_Id:currentProject_Id},beforeSend:function(){showLoadingAjax(!0)},success:function(n){typeof n=="object"?doAjaxMsg2(n):(t.html(n),i(),t.modal())},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function doProjectWizardsMode(n=false){currentProjectWizardMode=n;loadProjectWizardList()}function loadProjectWizardList(){var n=null;currentProjectWizardMode||(n=currentProjectTree_Id);$.ajax({url:"/ProjectWizard/Index",cache:!1,type:"GET",data:{project_Id:currentProject_Id,projectTree_Id:n},"async":!0,success:function(n){$("#projectwizardlist_body").html(n)},error:function(n){displayAjaxErrorMessage(n)}})}function showProjectTreeConfirmDelete(n,t){const i=$("#confirmJSModal");if(t==null)return doAjaxMsg2({status:"error",msg:"Ingen trädnod vald"}),!1;const r=function(){if(isInModal(n)){const t=$(n).closest(".modal");t.length&&t.modal("hide")}},u=function(n=false){$.ajax({url:"/ProjectTree/Delete",cache:!1,type:"POST","async":!0,data:{projectTree_Id:t,project_Id:currentProject_Id,force:n},beforeSend:function(){showLoadingAjax(!0)},success:function(n){if(typeof n=="object"){if(n.status=="ok")i.modal("hide"),r(),currentProjectTree_Id=null,loadProjectTree(currentProject_Id);else if(n.status=="error"&&($("#confirmJSMsg").html(n.msg),n.returncode==-3||n.returncode==-6))$("#confirmJSForceDelete").removeClass("d-none").off("click").on("click",function(){u(!0)})}else alert(n),i.modal("hide"),r()},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})},f=getProjectTreeNodeLabelByRecId(t);$("#confirmJSModal .modal-title").html("Radera");$("#confirmJSBody").html(f);$("#confirmJSMsg").html("");$("#confirmJSOk").off("click").on("click",function(){u(!1)});i.modal()}function showProjectTreeCopyNode(){const n=getAvailablePlaceholder("projectTreeCopyNode");if(currentProjectTree_Id==null)return doAjaxMsg2({status:"error",msg:"Du måste markera en trädnod att kopiera."}),!1;const t=function(){const n=getProjectTreeNodeLabelByRecId(currentProjectTree_Id);$("#treeCopyNamn").val(n+" (kopia)");$("#treeCopyOk").off("click").on("click",i)},i=function(){let t=$("#treeCopyNamn").val(),i=$("#treeCopyMoment").prop("checked");$.ajax({cache:!1,url:"/ProjectTree/Copy",type:"POST","async":!0,data:{project_Id:currentProject_Id,projectTree_id:currentProjectTree_Id,namn:t,doCopyMoment:i},beforeSend:function(){showLoadingAjax(!0)},success:function(t){doAjaxMsg2(t,function(){n.modal("hide");loadProjectTree(currentProject_Id,currentProjectTree_Id)})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})};$.ajax({cache:!1,url:"/ProjectTree/Copy",type:"GET","async":!0,data:{},beforeSend:function(){showLoadingAjax(!0)},success:function(i){n.html(i);t();n.modal({backdrop:"static"})},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function isDescendant(n,t){let i=t.parentElement;while(i){if(i===n)return!0;i=i.parentElement.closest(".tree-node")}return!1}async function validateMoveOnServer(n){n.project_Id=currentProject_Id;const t=await fetch("/ProjectTree/ValidateMove",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return await t.json()}function fixParentAfterChildRemoval(n){if(n){const t=n.parentElement.closest(".tree-node");if(t&&n.children.length===0){n.remove();const i=t.querySelector(".toggle");i&&i.classList.add("empty")}}}function isFirstSibling(n){return n.previousElementSibling===null}function isLastSibling(n){return n.nextElementSibling===null}function applyMoveInDom(n,t){const r=t,i=document.querySelector(`.tree-node[data-recid="${n.targetRecId}"]`);if(i){const u=r.parentElement;if(u.removeChild(r),fixParentAfterChildRemoval(u),n.position==="before"){i.parentElement.insertBefore(r,i);return}if(n.position==="after"){i.parentElement.insertBefore(r,i.nextElementSibling);return}if(n.position==="child"){let n=i.querySelector("ul");const t=!!n;if(n||(n=document.createElement("ul"),n.className="project-tree",i.appendChild(n)),n.appendChild(r),!t){const n=i.querySelector(".toggle");n.classList.remove("empty");i.classList.remove("collapsed")}return}}}function clearChildHighlights(){document.querySelectorAll(".drop-child-highlight").forEach(n=>{n.classList.remove("drop-child-highlight")})}function getProjectTreeNodeLabelByRecId(n){const t=document.getElementById("projecttree_body");if(!t)return null;const i=t.querySelector(`.tree-node[data-recid="${n}"]`);if(!i)return null;const r=i.querySelector(".label");return r?r.textContent.trim():null}function showProjectTreeNew(){if(currentProjectTree_Id==null&&selectFirstProjectTreeNode(),currentProjectTree_Id==null)return!1;const n=getAvailablePlaceholder("ProjectTreeNew"),t=function(n){var i=$('input[name="'+n+'"]'),r=i.filter(":checked"),t;if(r.length===0){t=i.filter(":not(:disabled)").first();t.length>0&&t.prop("checked",!0);return}r.is(":disabled")&&(t=i.filter(":not(:disabled)").first(),t.length>0&&t.prop("checked",!0))},i=function(){var n={projectTree_Id:currentProjectTree_Id,project_Id:currentProject_Id};$.ajax({url:"/ProjectTree/ProjectTreeNewOptions",cache:!1,type:"GET","async":!0,data:n,beforeSend:function(){showLoadingAjax(!0)},success:function(n){typeof n=="object"&&n.IsTopNode!==undefined?($("#ProjectTreeNewNivaOptionSame").prop("disabled",n.IsTopNode),$("#ProjectTreeNewNivaOptionUnder").prop("disabled",n.HasMoment),t("ProjectTreeNewNivaOption"),t("ProjectTreeNewInsertOption")):alert("Något gick fel, Options svaret ifrån servern är felaktigt.")},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})},r=function(t=false){var r={Project_Id:$("#Project_Id").val(),ProjectTree_Id:$("#ProjectTree_Id").val(),Namn:$("#Namn").val(),NivaOption:$("input[name=ProjectTreeNewNivaOption]:checked").val(),InsertOption:$("input[name=ProjectTreeNewInsertOption]:checked").val()};$.ajax({url:"/ProjectTree/ProjectTreeNew",cache:!1,type:"POST",data:r,success:function(r){typeof r=="object"?t?(loadProjectTree(currentProject_Id,r.recid),n.modal("hide")):loadProjectTree(currentProject_Id,r.recid,function(){$("#ProjectTree_Id").val(r.recid);$("#Namn").val("");n.setFocusOnFirstInput("button");i()}):(n.html(r),n.setFocusOnFirstInput("button"),u())},error:function(n){displayAjaxErrorMessage(n)}})},u=function(){n.off("shown.bs.modal.projectTreeNew").on("shown.bs.modal.projectTreeNew",function(){n.setFocusOnFirstInput("button")});i();$("#buModalProjectTreeNewSaveAndRepeat").off("click").on("click",function(){r(!1)});$("#buModalProjectTreeNewSaveAndClose").off("click").on("click",function(){r(!0)});$("#frmProjectTreeNew").on("submit",function(n){n.preventDefault()})};$.ajax({url:"/ProjectTree/ProjectTreeNew",cache:!1,type:"GET","async":!0,data:{projectTree_Id:currentProjectTree_Id,project_Id:currentProject_Id},beforeSend:function(){showLoadingAjax(!0)},success:function(t){typeof t=="object"?doAjaxMsg2(t):(n.html(t),u(),n.modal())},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function doProjectTreeMomentDelete(n=-1){$.ajax({url:"/ProjectTreeMoment/Delete",cache:!1,type:"POST",data:{ProjectTreeMoment_Id:n},beforeSend:function(){showLoadingAjax(!0)},success:function(t){typeof t=="object"?(doAjaxMsg2(t),t.status=="ok"&&$("#ptmr"+n).remove()):alert(t)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function showProjectTreeMomentDialog(n=null){const t=getAvailablePlaceholder("ProjectTreeMomentDialog");if(n==null)return alert("Ny momentrad ej implementerat."),!1;const i=function(){$("#frmProjectTreeMoment").on("submit",function(n){n.preventDefault()});$("#buProjectTreeMomentMomTill").off("click").on("click",async()=>{const i=getValueOrDefault("MomTill",""),n=await modalService.openAndWaitForResultDirect("momTill",{mode:"momentrad",selectedMomTill:i,project_Id:currentProject_Id},this);n&&(t.find(".wr_momtill").text(n.selectedMomTill),t.find("#MomTill").val(n.selectedMomTill));console.debug("RESULT: -%o",n)});$("#buProjectTreeMomentSave").off("click").on("click",function(){const n=$("#frmProjectTreeMoment").serialize();$.ajax({url:"/ProjectTreeMoment/Edit/",cache:!1,type:"POST",data:n,beforeSend:function(){showLoadingAjax(!0)},success:function(n){if(typeof n=="object"){if(doAjaxMsg(n),n.status=="ok"){var u="#ptmr"+n.recid,r=$(u);r.length&&pvf.table.updateRow(r,n);t.modal("hide")}}else t.html(n),t.modal({backdrop:"static"}),i()},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})})};$.ajax({url:"/ProjectTreeMoment/Edit",cache:!1,type:"GET",data:{ProjectTreeMoment_Id:n},"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(n){typeof n=="object"?(doAjaxMsg(n),t.modal("hide")):(t.html(n),t.modal({backdrop:"static"}),i())},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function showUtskrift(n,t,i,r){let u=getAvailablePlaceholder("Utskrift");u.on("hidden.bs.modal",function(){busyEnd(r)});t==null?selectFirstProjectTreeNode():currentProjectTree_Id=t;const e=function(){$("#changeUtskView").off("click").on("click",function(){i=$(this).data("utskview");f()});$("#utskrifttabs a").off("click").on("click",function(){$(this).tab("show");var n=$(this).data("xtab");doUtskriftLoadTab(n,!1)});$("#utskriftMsg").html("")},f=function(){const f=function(){let n=$("#frmUtskriftPage0");if(n.length){let t=n.find("[name='UtskView']").val();i=t}};$.ajax({url:"/Utskrift/Index",cache:!1,type:"GET","async":!0,data:{project_Id:n,projectTree_Id:t,utskview:i},beforeSend:function(){showLoadingAjax(!0)},success:function(n){if(typeof n=="object")doAjaxMsg(n,null),busyEnd(r);else{u.html(n);let t=i==0;f();utskriftInitPage0();e();t&&u.modal({backdrop:"static"});f()}},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})};f()}function utskriftInitPage0(){function t(n){if(!n)return 0;const i=n.replace(/[\s\u00A0]/g,""),t=parseFloat(i);return isFinite(t)?t:0}function c(n){return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g," ")}function s(){if(!n){n=!0;const f=t(i.value),h=t(e.value)+t(o.value),s=f-h,l=f>0?s/f*100:0;r.value=l.toFixed(2);u.value=c(s);n=!1}}function h(){if(!n){n=!0;const f=t(e.value)+t(o.value),s=t(r.value)/100;if(s>=1){i.value="0.00";u.value=(-f).toFixed(0);n=!1;return}const h=f/(1-s),c=h-f;i.value=h.toFixed(0);u.value=c.toFixed(0);n=!1}}console.debug("Init Page 0");$.validator.unobtrusive.parse("#frmUtskriftPage0");const i=document.getElementById("LamnatPris"),e=document.getElementById("SarKostnad"),o=document.getElementById("FastKostnad"),r=document.getElementById("TgProcEdit"),u=document.getElementById("TbEdit"),f=($("#hasNollRader").val()||"").toLowerCase()==="true";let n=!1;i.removeEventListener("change",s);r.removeEventListener("change",h);i.addEventListener("change",s);r.addEventListener("change",h);$("#buUtskriftUpdatePage0").off("click").on("click",function(){var n;if(doRemoveSpaces("LamnatPris"),n=$("#frmUtskriftPage0"),$.validator.unobtrusive.parse(n),!n.valid()){var i=n.validate(),u=i.errorList,t=n.find(".input-validation-error").first();t.length&&t[0].focus();doAjaxMsg2({msg:"Det finns felaktiga värden, kan inte spara.",status:"error"});return}let r=n.serialize()+"";$.ajax({url:"/Utskrift/Index",cache:!1,type:"POST","async":!0,data:r,success:function(n){typeof n=="object"?doAjaxMsg(n,null):($("#utskmenu0").html(n),utskriftInitPage0())},error:function(n){displayAjaxErrorMessage(n)}})});$("#buUtskriftAnbud").off("click").on("click",function(){const n=()=>{let n="X";document.querySelectorAll(".treeoptions").forEach(t=>{t.checked&&!t.disabled&&(n+=t.value)});const t=currentProjectTree_Id??-1,i=`/Utskrift/Anbud?id=${encodeURIComponent(currentProject_Id)}`+`&nodeid=${encodeURIComponent(t)}`+`&treeoptions=${encodeURIComponent(n)}`;window.location.href=i};f?doConfirmJS("Skapa anbud","Det finns materialposter med 0kr, vill du fortsätta?",n):n()});$("#buUtskriftSkapaKalkyl").off("click").on("click",function(){const n=function(){const n=currentProjectTree_Id!==null&¤tProjectTree_Id!==undefined?currentProjectTree_Id:-1,t=`/Utskrift/PDF?id=${encodeURIComponent(currentProject_Id)}&nodeid=${encodeURIComponent(n)}`;window.location.href=t};f?doConfirmJS("Skapa kalkyl","Det finns materialposter med 0kr, vill du fortsätta?",n):n()});$("#buUtskriftSendToPP").off("click").on("click",function(){const n=function(){$.ajax({url:"/ProjektPortalen/SendAnbud",cache:!1,type:"POST","async":!0,data:{id:currentProject_Id},beforeSend:function(){showLoadingAjax(!0)},success:function(n){typeof n=="object"?doAjaxMsg(n,function(){}):alert(n)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})};f?doConfirmJS("Skicka till Projektportalen","Det finns materialposter med 0kr, vill du fortsätta?",n):doConfirmJS("Skicka till Projektportalen","Vill du skicka denna?",n)});$("#treeOptionsT").off("click").on("click",function(){const n=$("#treeOptionsT").prop("checked");$("#treeOptionsV").prop({disabled:!n});$("#treeOptionsK").prop({disabled:!n})});$(".treeoptions-item").off("click").on("click",function(n){n.stopPropagation()})}function doRemoveSpaces(n){const t=document.getElementById(n);t?t.value=t.value.replace(/\s+/g,""):console.warn(`Element med id '${n}' hittades inte.`)}function doUtskCalcBelopp(n){var t="#"+$(n).attr("id");t=t.substring(0,t.indexOf("__")+2);var r=t+"Antal",u=t+"APris",i=t+"Belopp";lmIsNumeric($(r).val())&&lmIsNumeric($(u).val())&&($(i).val($(r).val()*$(u).val()),$(i+"_span").html($(i).val()))}function doToggleUtskEditMode(){const n=$("#buUtskEditMode");n.length&&(n.toggleClass("pvf-button-selected"),n[0].blur());doUtskriftLoadTab(currentUtskPageIndex,!0)}function doUtskriftLoadTab(n){$("#utskmenu"+n).html('
<\/div><\/div>
Hämtar data...<\/div>');$("#utskmenu"+currentUtskPageIndex).html("");currentUtskPageIndex=n;showHideUtskEditModeButton(n);$.ajax({url:"/Utskrift/page",cache:!1,type:"GET","async":!0,data:{project_Id:currentProject_Id,projectTree_Id:currentProjectTree_Id,pageIndex:n,editmode:isUtskEditMode()},success:function(t){typeof t=="object"?doAjaxMsg(t,null):doSetupUtskPageOnChange(n,t)},error:function(n){displayAjaxErrorMessage(n)}})}function doSetupUtskPageOnChange(n,t){$("#utskmenu"+n).html("");$("#utskmenu"+n).html(t);n==0&&utskriftInitPage0();var i="#utskmenu"+n+' INPUT[type="text"]';$(i).off("change").on("change",function(){var t="#"+$(this).attr("id");t=t.substring(0,t.indexOf("__")+2)+"Modified";$(t).val("true");$.inArray(n,[2,3])>-1&&doUtskCalcBelopp(this)})}function doUtskPageNew(){var t="#frmUtskEdit"+currentUtskPageIndex,n="";n+="&pageIndex="+currentUtskPageIndex;n+="&project_Id="+currentProject_Id;n+="&projectTree_Id="+currentProjectTree_Id;n+="&editMode="+isUtskEditMode();$.ajax({url:"/Utskrift/AddRow",cache:!1,type:"POST","async":!0,data:$(t).serialize()+n,beforeSend:function(){showLoadingAjax(!0)},success:function(n){typeof n=="object"?doAjaxMsg2(n,function(){doUtskriftLoadTab(currentUtskPageIndex,!0)}):doSetupUtskPageOnChange(currentUtskPageIndex,n)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function doUtskPageSave(){var t="#frmUtskEdit"+currentUtskPageIndex,n="";n+="&pageIndex="+currentUtskPageIndex;n+="&project_Id="+currentProject_Id;n+="&projectTree_Id="+currentProjectTree_Id;n+="&editMode="+isUtskEditMode();$.ajax({url:"/Utskrift/Page",cache:!1,type:"POST","async":!0,data:$(t).serialize()+n,success:function(n){typeof n=="object"?doAjaxMsg2(n,function(){doUtskriftLoadTab(currentUtskPageIndex,!0)}):doSetupUtskPageOnChange(currentUtskPageIndex,n)},error:function(n){displayAjaxErrorMessage(n)}})}function doProjectSendToPP_DEBUG(){var n=window.open("/mldebug.html?dummy="+Date.now(),"_blank");if(!n){alert("Popup blockerades av webbläsaren. Tillåt popup-fönster för denna sida.");return}showLoadingAjax(!0);$.ajax({url:"/ProjektPortalen/SendAnbud_DEBUG",cache:!1,type:"POST","async":!0,data:{id:currentProject_Id},success:function(t){function i(){try{var i=n.document.getElementById("debugdiv");i?i.innerHTML=t:n.document.body.innerHTML="
"+t+"<\/pre>"}catch(r){console.error("Kunde inte skriva till popup:",r)}}if(typeof t=="object"){doAjaxMsg2(t,function(){window.location.href="../Edit/"+currentProject_Id});return}n.document.readyState==="complete"?i():n.onload=i},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function isUtskEditMode(){const n=$("#buUtskEditMode");return n.length?n.hasClass("pvf-button-selected"):!1}function showHideUtskEditModeButton(n){const t=$("#buUtskEditMode");t.length&&t.toggleClass("d-none",$.inArray(n,c_PagesWithUtskEditModeButton)===-1)}function doUtskPageDelete(n){Number.isInteger(n)||(n=-1);var i="#frmUtskEdit"+currentUtskPageIndex,t="";t+="&pageIndex="+currentUtskPageIndex;t+="&project_Id="+currentProject_Id;t+="&projectTree_Id="+currentProjectTree_Id;t+="&editMode="+isUtskEditMode();t+="&recId="+n;typeof currentUtskResetFlags!="undefined"&&(t+="&resetFlags="+currentUtskResetFlags);$.ajax({url:"/Utskrift/Delete",cache:!1,type:"POST","async":!0,data:$(i).serialize()+t,beforeSend:function(){showLoadingAjax(!0)},success:function(n){typeof n=="object"?doAjaxMsg2(n,function(){doUtskriftLoadTab(currentUtskPageIndex,!0)}):doSetupUtskPageOnChange(currentUtskPageIndex,n)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}function doUtskPageUeOvrSetModified(n){const t=$(n.target).closest("tr");t.length&&(pvf.table.setModified(t),$(n.target).closest("button").remove())}function loadKindCombo(n,t,i,r){t.data("loading")||(i===""&¤tDefKinds.length>=3&&(r=currentDefKinds),t.data("loading",!0),$.ajax({cache:!1,url:"/Wizard/KindCombos",type:"GET",data:{WizGrupp_Id:n,MyKinds:i,SelKinds:r,ProjectWizard_Id:currentProjectWizard_Id,Project_Id:currentProject_Id},"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(i){t.html(i);initSelectPickers(t);loadWizardRows(n);$("select.kindcombo").off("change").on("change",function(){const t=$(this),u=t.data("kindid"),f=t.data("ksortnr");initSelectPicker(t);let i="",r="";$("select.kindcombo option:selected").each(function(){const t=$(this).data("kindid"),u=$(this).data("ksortnr"),e=$(this).data("shortid"),n=`${t},${e}`;u<=f?i+=(i.length>0?";":"")+n:r+=(r.length>0?";":"")+n});loadKindCombo(n,$("#wkc_"+u+"_subs"),i,r)})},error:function(n){displayAjaxErrorMessage(n);$("#kindcombo_selection").html("")},complete:function(){t.data("loading",!1);showLoadingAjax(!1)}}))}function initWizardMomTill(){const n=function(n=""){$.ajax({cache:!1,url:"/Tillagg/MomTillAuto",type:"GET","async":!0,data:{project_id:currentProject_Id,autoMode:n},beforeSend:function(){showLoadingAjax(!0)},success:function(n){n.status=="init"?(autoMomTillChars=n.autoChars,autoMomTillLongString=n.autoLongString):doAjaxMsg2(n)},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})},t=function(){const t=$("#buToggleWizardMomTillAuto").toggleClass("pvf-button-selected").hasClass("pvf-button-selected");t?console.debug("Toggle Auto MomTill ON"):console.debug("Toggle Auto MomTill OFF");n("T");setWizardMomTillValues()};$("#buToggleWizardMomTillAuto").off("click").on("click",function(){t()});n("I")}function setWizardMomTillValues(){const r=$("#buToggleWizardMomTillAuto"),t=r.hasClass("pvf-button-selected"),n=t?autoMomTillChars:"",u=t?autoMomTillLongString:"",i=$("#StoraMomTill"),f=$("#StoraMomTillText");if(i.length&&(i.val(n),f.html(u)),wizard?.Rows?.length){for(let t of wizard.Rows)t.MomTill=n;$("span.wr_momtill").html(n)}}async function showWizardMomTill(n,t=-1){const u=t==null||t===-1?-1:t,f=u===-1?$("#StoraMomTill").val():wizard.Rows[u].MomTill,r=await modalService.openAndWaitForResultDirect("momTill",{selectedMomTill:f,project_Id:currentProject_Id},this);if(r)if(u!=-1)wizard.setProperty(u,"MomTill",r.selectedMomTill),$("#momtilltext_"+u).html(r.selectedMomTill);else if($("#StoraMomTill")&&($("#StoraMomTill").val(r.selectedMomTill),$("#StoraMomTillText").html(r.selectedMomTillLongText),wizard&&wizard.Rows)){for(i=0;iul>li>ul").css("display","none");$("#wizardtree_body li>ul>li>span.trvcollapsible").toggleClass("trvexpand trvcollapse");eval($("#wizardtree_body a").first().attr("href"))},error:function(n){displayAjaxErrorMessage(n,"loadWizardTree")}})}function loadWizardList(n){currentWizardTree_Id!=-1&&($("#wiznodetxt_"+currentWizardTree_Id).toggleClass("wiz_selected"),$("#wiznodetxt_"+n).is(":visible")||$("#li_"+currentWizardTree_Id+">span.trvcollapsible").trigger("click"));currentWizardTree_Id=n;doLoadWizardBilder(n);$("#wiznodetxt_"+n).toggleClass("wiz_selected");$("#wizardlist_body").is(":visible")&&$.ajax({url:"/Wizard/List/"+currentWizardTree_Id,type:"GET","async":!0,success:function(n){$("#wizardlist_body").html(n)},error:function(n){displayAjaxErrorMessage(n,"loadWizardList")}})}function doClickWizardBild(n,t){t!=-1?doSelectWizard(t,"",null):loadWizardList(n)}function doWizardBilderBackButton(){if(currentWizardTree_Id!=-1){var n=$("#wiznodetxt_"+currentWizardTree_Id).parents("li").eq(1).find("a").first();eval(n.attr("href"))}}function displayAjaxErrorMessage(n){function f(n){switch(n.status){case 0:return"Ingen anslutning. Kontrollera nätverket.";case 400:return"Felaktig begäran (400).";case 401:return"Du är inte inloggad (401).";case 403:return"Åtkomst nekad (403).";case 404:return"Sidan hittades inte (404).";case 500:return"Internt serverfel (500).";case 503:return"Tjänsten är inte tillgänglig (503).";default:return`Ett okänt fel inträffade (${n.status}).`}}const i=document.createElement("div");i.className="modal-overlay";const t=document.createElement("div");t.className="ajaxerrormessage";const r=document.createElement("span");r.innerText="×";r.className="close-button";r.onclick=function(){document.body.removeChild(i)};const u=document.createElement("div"),e=f(n);if(u.innerText=e,t.appendChild(r),t.appendChild(u),n.responseText){const r=document.createElement("button");r.innerHTML="Visa mer ⓘ";r.className="show-more-button";const i=document.createElement("pre");i.className="response-details";i.innerHTML=n.responseText||"Ingen ytterligare information.";i.style.display="none";r.onclick=function(){const n=i.style.display==="block";i.style.display=n?"none":"block";r.innerHTML=n?"Visa mer ⓘ":"Dölj ⓘ"};t.appendChild(i);t.appendChild(r)}i.appendChild(t);document.body.appendChild(i)}function doAjaxMsgNew(n,t,i=null,r=3e3){let u;if(n.status=="ok"?u="bg-success":n.status=="info"?u="bg-info":n.status=="error"?(u="bg-danger",r<3e3&&(r=3e3)):u="bg-info",n.msg!=""){const t=document.createElement("div");t.innerText=n.msg;t.className=`ajaxmsgnew ${u}`;document.body.appendChild(t);setTimeout(()=>{t.remove()},r)}typeof t=="function"&&setTimeout(function(){t.apply(this,i||[])},100)}function doAjaxMsg2(n,t,i,r){doAjaxMsgNew(n,t,i,r);return}function doAjaxMsg(n,t,i){doAjaxMsgNew(n,t,n,i);return}function doConfirmJS(n,t,i,r=[]){if(n=="")confirm(t)&&i.call(null,...r);else{$("#confirmJSModal .modal-title").html(n);$("#confirmJSBody").html(t);$("#confirmJSOk").off("click").on("click",function(){i.call(null,...r);$("#confirmJSOk").off("click");$("#confirmJSModal").modal("hide")});$("#confirmJSModal").modal("show")}}function doOnLoad(){isModified=!1}function doOnBeforeUnload(){if(isModified)return"Du har osparade ändringar"}function lmRound(n,t){var i=Math.pow(10,t||0);return Math.round(n*i)/i}function lmIsNumeric(n){return typeof n=="number"||typeof n=="string"&&n.trim()!==""&&!isNaN(n)}function isInModal(n){return n.closest(".modal")!==null}function getModalByChild(n){return n.closest(".modal")}function sortSelectOptions(n){const t=document.getElementById(n),r=t.value,i=Array.from(t.options);i.sort((n,t)=>n.text.localeCompare(t.text,"sv"));t.innerHTML="";i.forEach(n=>{t.appendChild(n)});t.value=r}function getAvailablePlaceholder(n){const i=document.getElementById("modalPlaceholderArea"),r=`modal${n}_${Date.now()}`;let t=i.querySelector('.modal[data-modal-type="'+n+'"]:not(.in)');if(t===null){const u=document.createElement("div");u.className="modal fade";u.id=r;u.setAttribute("role","dialog");u.setAttribute("data-keyboard","false");u.setAttribute("data-model-type",`${n}`);i.appendChild(u);t=u;$(t).off("hidden.bs.modal").on("hidden.bs.modal",function(){console.debug(`hidden.bs.modal triggered for #${t.id}`);this.remove()});const f=Math.max(...$(".modal.in").map(function(){return parseInt($(this).css("z-index"),10)||1050}).get());t.style.zIndex=f+10}return $(t)}function showLoadingAjax(n){document.getElementById("loadingAjax").style.display=n?"block":"none"}function makeClearClone(n){const t=document.getElementById(n);if(t){const n=t.cloneNode(!0);return t.replaceWith(n),n}return null}function toggleCheckboxesByFormAndSelector(n,t){let r=document.getElementById(n),i=r.querySelectorAll(t);if(i.length!==0){let u=!i[0].checked;i.forEach(function(n){n.checked=u})}}function getValueOrDefault(n,t=null){const i=document.getElementById(n);return i?i.value:t}function getObjectFromElement(n){let i=null;const t=document.getElementById(n);if(t){try{const n=t.getAttribute("data-object");n&&(i=JSON.parse(n))}catch(r){console.error(`Kunde inte parsa data-object för #${n}:`,r)}t.remove()}return i}function getDataFromElement(n){const i=[],t=document.getElementById(n);if(t){try{const n=t.getAttribute("data-object");n&&i.push(...JSON.parse(n))}catch(r){console.error(`Kunde inte parsa data-object för #${n}:`,r)}t.remove()}return i}function enableDynamicModalResize(n){const t=n.find(".modal-dialog");t.css({width:"auto",maxWidth:"none",minWidth:"500px",display:"inline-block",marginLeft:"auto",marginRight:"auto"});const i=n.find("textarea")[0];if(i){$(i).css({minWidth:"480px",minHeight:"50px"});const r=new MutationObserver(function(){t.css("width","auto");t.css("margin-left","auto");t.css("margin-right","auto");t[0].offsetHeight});r.observe(i,{attributes:!0,attributeFilter:["style"]})}}function copyToClipboard(n){function t(n){return downloadTextFile(n,"anteckningar.txt"),!1}return navigator.clipboard&&navigator.clipboard.writeText?(navigator.clipboard.writeText(n).catch(()=>t(n)),!0):(t(n),!1)}function downloadTextFile(n,t="export.txt"){const u=new Blob([n],{type:"text/plain;charset=utf-8;"}),r=URL.createObjectURL(u),i=document.createElement("a");i.href=r;i.download=t;document.body.appendChild(i);i.click();document.body.removeChild(i);URL.revokeObjectURL(r)}function dumpJsonToConsole(n,t){console.debug("=== "+n+" ===");console.debug(JSON.stringify(t,null,4));console.debug("=== END "+n+" ===")}function deepFreezeClone(n){const t=structuredClone(n);return deepFreeze(t)}function deepFreeze(n){Object.freeze(n);for(const t of Object.keys(n)){const i=n[t];i&&typeof i=="object"&&!Object.isFrozen(i)&&deepFreeze(i)}return n}function debugSnapshot(n){const t={};for(const i in n){const r=n[i];if(r instanceof HTMLElement){t[i]="DOM element";continue}if(r&&r.jquery){t[i]="jQuery object";continue}if(typeof r=="function"){t[i]="function";continue}try{t[i]=structuredClone(r)}catch{t[i]=r}}return t}function busyStart(n){n.addClass("spinner-busy");n.prop("disabled",!0)}function busyEnd(n){n.removeClass("spinner-busy");n.prop("disabled",!1)}function initSelectPickers(n){$(n).find(".selectpicker").each(function(){var n=$(this);n.data("selectpicker")?n.selectpicker("refresh"):n.selectpicker({width:"100%",container:"body",noneSelectedText:" "})})}function initSelectPicker(n){var t=$(n);t.data("selectpicker")?t.selectpicker("refresh"):t.selectpicker({container:"body",noneSelectedText:" "})}function parseDecimal(n){if(n===null||n==="")return null;n=n.replace(/\s+/g,"");n=n.replace(",",".");var t=parseFloat(n);return isNaN(t)?null:t}var currentUtskPageIndex,currentUtskResetFlags,doLoadWizardBilder,isModified;(function(){function i(i){const r=function(){$("#artikelOk").off("click").on("click",function(){if(n){const t={matPrisHuv_Id:$("#ArtikelMatPrisHuv_Id").val(),matNr:$("#ArtikelNr").val(),matNamn:$("#ArtikelNamn").val(),matAPris:Number($("#ArtikelPris").val().replace(",","."))};n(t)}$("#artikelModal").modal("hide")});$("#artikelCancel").off("click").on("click",function(){$("#artikelModal").modal("hide")})};if($("#artikelModal").length>0){t||(r(),t=!0);i();return}$.ajax({url:"/Artikel/ArtikelModalPartial",type:"GET",beforeSend:function(){showLoadingAjax(!0)},success:function(n){$("body").append(n);r();t=!0;i()},error:function(n){displayAjaxErrorMessage(n)},complete:function(){showLoadingAjax(!1)}})}console.debug("KalkylShared-ArtikelModal.js initieras...");let n=null,t=!1;window.openArtikelModal=function(t,r){n=r;i(function(){if(t){let n=parseFloat(t.matAPris&&t.matAPris.toString().replace(",",".")||"0");$("#ArtikelMatPrisHuv_Id").val(t.matPrisHuv_Id||"0");$("#ArtikelNr").val(t.matNr||"");$("#ArtikelNamn").val(t.matNamn||"");$("#ArtikelPris").val(n.toFixed(2))}else $("#ArtikelMatPrisHuv_Id, #ArtikelNr, #ArtikelNamn, #ArtikelPris").val("");$("#artikelModal").modal()})}})();var currentDefKinds="",currentProject_Id=null,currentProjectTree_Id=null,currentProjectWizard_Id=null,currentProjectWizardMode=!1,currentWizardTree_Id=-1,wizard=null,oldHeaderBxH="",autoMomTillChars="",autoMomTillLongString="",currentShowGlobalMallar=null;(function(){console.debug("KalkylShared-Splitter.js initieras...");const n={};window.initSplitter=function(t,i={}){function h(n){const i=document.querySelector(t);if(i){const u=i.parentElement,f=i.previousElementSibling,e=i.nextElementSibling,r=u.getBoundingClientRect(),o=n-r.left,s=r.right-n;f.style.width=`${o}px`;e.style.width=`${s}px`}}function u(n){r&&h(n.clientX)}function f(){r=!1;document.removeEventListener("mousemove",u);document.removeEventListener("mouseup",f)}function e(n){h(n.touches[0].clientX)}function o(){document.removeEventListener("touchmove",e);document.removeEventListener("touchend",o)}let r=!1;if(i.adjustHeightSelector){let n=window.innerHeight-(i.heightOffset||250);i.standAlone&&(n-=i.standAloneOffset||70);document.querySelectorAll(i.adjustHeightSelector).forEach(t=>{t.style.maxHeight=`${n}px`,t.style.minHeight=`${n}px`})}const s=document.querySelector(t);s&&(n[t]={onMouseMove:u,onMouseUp:f,onTouchMove:e,onTouchEnd:o},s.addEventListener("mousedown",()=>{r=!0,document.addEventListener("mousemove",u),document.addEventListener("mouseup",f)}),s.addEventListener("touchstart",()=>{document.addEventListener("touchmove",e,{passive:!0}),document.addEventListener("touchend",o,{passive:!0})},{passive:!0}))};window.destroySplitter=function(t){const i=n[t];i&&(document.removeEventListener("mousemove",i.onMouseMove),document.removeEventListener("mouseup",i.onMouseUp),document.removeEventListener("touchmove",i.onTouchMove),document.removeEventListener("touchend",i.onTouchEnd),delete n[t])}})();currentUtskPageIndex=0;currentUtskResetFlags=0;class Wizard{constructor(n,t,i,r){this.Id=n;this.NeedValidCode=t;this.Rows=i;$("#wizard_title").html("Räknemall: "+r);$("#wizardinfolink").attr("href","/wizard/info/"+n)}getSelectedKinds(){return $("select.kindcombo option:selected").map(function(){return $(this).data("kindid")+","+$(this).data("shortid")}).get().join(";")}Save(){return new Promise((n,t)=>{let i=this.validate();if(i.status!="ok")return doAjaxMsg(i),n(!1);const r=this.getFilteredWizardRowsWithValues();var u={__RequestVerificationToken:$('input[name="__RequestVerificationToken"]').val(),Project_Id:currentProject_Id,ProjectTree_Id:currentProjectTree_Id,WizGrupp_Id:$("#WizGrupp_Id").val(),ProjectWizard_Id:$("#ProjectWizard_Id").val(),StoraMomTill:$("#StoraMomTill").val(),StoraAntal:$("#StoraAntal").val(),SaveNamn:$("#SaveNamn").val(),Kulor:$("#Kulor").val(),B:$("#B").val(),H:$("#H").val(),IsoMatris_Nr:$("#IsoMatris_Nr").val(),SelectedKinds:wizard.getSelectedKinds(),WizardRows:r};$.ajax({cache:!1,url:"/Wizard/Inmatning",type:"POST",data:u,"async":!0,beforeSend:function(){showLoadingAjax(!0)},success:function(t){typeof t=="object"?(doAjaxMsg(t),t.status=="ok"?(isModified=!1,currentProjectWizard_Id!=null&&showHideWizard(!1),loadProjectWizardList(),n(!0)):n(!1)):(alert(t),n(!1))},error:function(n,i,r){displayAjaxErrorMessage(n);t(r)},complete:function(){showLoadingAjax(!1)}})})}spreadValues(n,t){var i=this.Rows[n];if(t=="L")switch(i.PanelType){case 1:i.V=i.L*(i.B/1e3);break;case 3:i.V=i.L}else if(t=="B")switch(i.PanelType){case 1:i.V=i.L*(i.B/1e3)}else if(t=="H")switch(i.PanelType){case 1:i.V=i.L*(i.H/1e3)}}pushChanges(n){var f=-1,e=-1,r="",u=this.Rows[n],c,t,l,i,h,a,o,s;if(u.RadKod!=""&&u.RadKod!=null)for(c=";"+u.RadKod+";",f=0;f-1)){i=0;switch(t.ArvRadKodMetod){case 1:i=0;break;case 2:i=1;break;default:alert("ERROR: Ingen arvradkodmetod angiven.\n\nWizardRow.RecId = "+t.RecId)}for(h=t.ArvFromRadKod.split(";"),e=0;e0?i=Math.round(i+.49):t.VolymCalcMethod==3&&i>0&&(i=lmRound(i,1)):t.ArvMetod==2?i=Math.floor(i):alert("Error: pushValues->Fixa ArvMetod!!!\n\nWizardrow.RecId = "+t.RecId+" ArvMethod = "+t.ArvMetod)}}t.L!=i&&(wizard.setProperty(f,"L",""+i),this.spreadValues(t.RadIndex,"L"),this.updateEdits(t.RadIndex),this.pushChanges(t.RadIndex))}}}setProperty(n,t,i){const r=["L","B","H","V"].includes(t);this.Rows[n][t]=r?i.replace(",","."):i}validate(){var r,t,i;let n={status:"ok",msg:"Validated Ok!"};if($("#StoraAntal").length&&(r=$("#StoraAntal").val(),!/^\d+$/.test(r)||r<1))return n.status="error",n.msg="Ange antal kopior",$("#StoraAntal")[0].focus(),n;if($("#B").length&&(t=$("#B").val(),!/^\d+$/.test(t)||t<1||t>4e3))return n.status="error",n.msg="Bredd är inte ett gilltigt värde (1 - 4000)",$("#B")[0].focus(),n;if($("#H").length&&(i=$("#H").val(),!/^\d+$/.test(i)||i<1||i>4e3))return n.status="error",n.msg="Höjd är inte ett gilltigt värde (1 - 4000)",$("#H")[0].focus(),n;const u=this.getFilteredWizardRowsWithValues();return u.length?n:{status:"error",msg:"Post ej sparad, det finns inga rader att spara."}}getFilteredWizardRowsWithValues(){return this.Rows.filter(n=>n.L!==0&&n.L!==null&&n.L!==undefined&&n.L!=="")}getWizardRowByRadKod(n){return this.Rows.find(t=>t.RadKod===n)}updateEdits(n){let t=this.Rows[n];this.setEditorValue(n,"L",t.L);[1,6,7,8].includes(t.PanelType)&&this.setEditorValue(n,"B",t.B);[7,8].includes(t.PanelType)&&this.setEditorValue(n,"H",t.H);[2].includes(t.PanelType)&&this.setEditorValue(n,"V",t.V)}setEditorValue(n,t,i){try{if(!this.Rows||typeof n!="number"||!Number.isInteger(n)||n<0||n>=this.Rows.length){console.warn(`WARN: wizard.setEditorValue-> Ogiltigt parIndex (${n}) eller saknade Rows.`);return}const r=document.querySelector(`#WizardRows_${n}__${t}`);if(r)r.value=i;else{const i=this.Rows[n],r=i&&i.PanelType?i.PanelType:"okänd";console.debug(`DEBUG: wizard.setEditorValue hittar inte kontrollen. ${t} (PanelType: ${r})`)}}catch(r){console.debug(`ERROR: wizard.setEditorValue misslyckades – ${r.message}`)}}getEditorValue(n,t){const i=$(`#WizardRows_${n}__${t}`);return i.length?i.val():(console.debug(`DEBUG: wizard.getEditorValue hittar inte kontrollen. ${t}`),undefined)}}doLoadWizardBilder=function(n){$.ajax({url:"/Wizard/Bilder",type:"GET","async":!0,data:{wizSelection_Id:n},success:function(n){$("#wizardbilder_body").html(n)},error:function(n){displayAjaxErrorMessage(n,"doLoadWizardBilder")}})};window.pvf=window.pvf||{};pvf.modal=pvf.modal||{};pvf.modal.syncBackdrop=function(n){const i=n instanceof Element?n:n&&n.jquery?n[0]:document.querySelector(n);if(i){const t=parseInt(window.getComputedStyle(i).zIndex,10);if(t&&!isNaN(t)){const r=document.querySelector(".modal-backdrop:last-of-type");r&&(r.style.zIndex=t-1)}}};pvf.modal.getTopmostModal=function(){const i=document.querySelectorAll(".modal.in");let n=null,t=-1;return i.forEach(i=>{const r=parseInt(window.getComputedStyle(i).zIndex,10);r>t&&(t=r,n=i)}),n};pvf.modal.getField=function(n,t){return n.find(`[name="${t}"]`)};pvf.modal.getFieldValue=function(n,t){const i=n.find(`[name="${t}"]`);return i.length?i.is(":checkbox")?i.is(":checked"):i.is(":radio")?i.filter(":checked").val()||null:i.val():null};pvf.modal.setFieldValue=function(n,t,i){const r=n.find(`[name="${t}"]`);if(r.length){if(r.is(":checkbox")){r.prop("checked",Boolean(i));return}if(r.is(":radio")){r.filter(`[value="${i}"]`).prop("checked",!0);return}r.val(i)}};pvf.modal.extractForm=function(n){const t={};return n.find("[name]").each(function(){const n=$(this),r=n.attr("name");let i;if(n.is(":checkbox"))i=n.is(":checked");else if(n.is(":radio"))if(n.is(":checked"))i=n.val();else return;else i=n.val();t[r]=i}),t};pvf.modal.createModelFromForm=function(n){function u(n){return n!==""&&!isNaN(n)}function f(n){return u(n)?Number(n):n}let r=n.serializeArray(),i={},t={};return r.forEach(n=>{let u=n.name,e=f(n.value),r=u.match(/^(\w+)\[(\d+)\]\.(.+)$/);if(r){let n=r[1],i=r[2],u=r[3];t[n]||(t[n]={});t[n][i]||(t[n][i]={});t[n][i][u]=e}else i[u]=e}),Object.keys(t).forEach(n=>{let r=Object.values(t[n]);r.some(n=>n.Modified!==undefined)&&(r=r.filter(n=>n.Modified===!0||n.Modified==="true"));i[n]=r}),i};pvf.modal.promptValue=function({caption:n,label:i,defaultValue:t,validate:r}){return new Promise(u=>{function h(){if(!Array.isArray(r)||r.length===0){e.prop("disabled",!1);s.hide();return}const t=o.val();let n=null;for(const i of r){const r=i(t);if(r!==!0){n=r;break}}n?(e.prop("disabled",!0),s.text(n.message).show()):(e.prop("disabled",!1),s.hide())}const f=getAvailablePlaceholder("promptValue"),c=`
            
        `;f.html(c);const o=f.find(".pvf-prompt-input"),e=f.find(".pvf-prompt-ok"),l=f.find(".pvf-prompt-cancel"),s=f.find(".pvf-prompt-error");o.on("input",h);h();const a=()=>{const n=o.val();f.modal("hide");u(n)},v=()=>{f.modal("hide"),u(null)};e.one("click",a);l.one("click",v);f.on("shown.bs.modal",function(){const n=$(this).find(".pvf-prompt-input").first();n.length&&n.trigger("focus").select()});f.modal("show")})};pvf.modal.confirm=function(n,t,i={}){return new Promise(r=>{const e="confirmDialog_"+Date.now(),s=i.default==="cancel"?"cancel":"ok",f=i.icon||null,h=i.iconPosition||"header",o=f==="info"?"ℹ️":f==="warning"?"⚠️":f==="error"?"❌":f==="question"?"❓":f==="delete"?"🗑️":f==="success"?"✔️":"",p=f?`${o}`:"",l=f?`
${o}
`:"",a=h==="header"?``:``,v=h==="body"?` `:` `,y=` `,u=$(y).appendTo("body");u.css("z-index",99999);u.on("shown.bs.modal",function(){s==="cancel"?$(`#${e}_cancelbtn`).focus():$(`#${e}_okbtn`).focus()});const c=n=>{if(n.key==="Enter"){const n=document.activeElement;if(n&&n.hasAttribute("data-result")){n.click();return}s==="cancel"?u.find('[data-result="false"]').click():u.find('[data-result="true"]').click()}n.key==="Escape"&&u.find('[data-result="false"]').click()};$(document).on("keydown",c);u.on("click","[data-result]",function(){const n=$(this).data("result")===!0;u.modal("hide");r(n)});u.on("hidden.bs.modal",function(){$(document).off("keydown",c);u.remove()});u.modal("show")})};pvf.modal.applyFocusTrap=function(n){const i=n.jquery?n:$(n),t=i[0];console.debug(`(init) FocusTrap for #${t.id} in pvf.modal.applyFocusTrap`);const r=n=>{if(n.key==="Tab"&&t.classList.contains("in")&&t.contains(document.activeElement)){const r=i.find(` a[href], area[href], input:not([disabled]):not([readonly]), select:not([disabled]):not([readonly]), textarea:not([disabled]):not([readonly]), button:not([disabled]):not([tabindex="-1"]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable] `).filter(":visible");if(r.length!==0){console.debug(`(trap) FocusTrap for #${t.id} in pvf.modal.applyFocusTrap`);const u=r[0],f=r[r.length-1];n.shiftKey?document.activeElement===u&&(n.preventDefault(),f.focus()):document.activeElement===f&&(n.preventDefault(),u.focus())}}};$(document).on("keydown",r);i.on("hidden.bs.modal",()=>{console.debug(`(remove) FocusTrap for #${t.id} in pvf.modal.applyFocusTrap`),$(document).off("keydown",r)})};pvf.modal.openTab=function(n,t){var r=n.attr("id"),u,i;r&&(u="[data-target=\"[data-name='"+r+"-"+t+"']\"]",i=n.find(u),i.length&&i.tab("show"))};pvf.modal.getActiveTab=function(n){var i=n.attr("id"),t,r,u;return i?(t=n.find(".tab-pane.active"),!t.length)?null:(r=t.attr("data-name"),u=r.replace(i+"-",""),u):null};isModified=!1;$.fn.setFocusOnFirstInput=function(n){const i=n?`input:not([type=${n}]), select, textarea`:"input, select, textarea, button",t=this.find(i).filter(":visible").first();t.length&&t[0].focus()};const ClipboardHelper=function(){function r(){n=document.createElement("textarea");n.style.position="fixed";n.style.top="-1000px";n.style.left="-1000px";document.body.appendChild(n);n.focus();n.select();t=!0}function u(n){return!t&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"?navigator.clipboard.writeText(n).then(()=>!0).catch(()=>i(n)):i(n)}function i(t){if(!n)return!1;n.value=t;n.select();let i=!1;try{i=document.execCommand("copy")}catch(r){i=!1}return f(),i}function f(){n&&(document.body.removeChild(n),n=null);t=!1}let n=null,t=!1;return{begin:r,copy:u}}();$.validator.addMethod("notzero",function(n){if(n===null||n==="")return!0;var t=parseFloat(n.replace(",","."));return t!==0});$.validator.unobtrusive.adapters.add("notzero",[],function(n){n.rules.notzero=!0;n.messages.notzero=n.message});$.validator.methods.number=function(n){return n===null||n===""?!0:(n=n.replace(/\s+/g,""),n=n.replace(",","."),!isNaN(n)&&/^-?\d+(\.\d+)?$/.test(n))};$.validator.addMethod("conditionalnotzero",function(n,t,i){var u=$(t).closest("form"),f=u.find("[name='"+i.dependentproperty+"']").val(),r;return f!=i.requiredvalue?!0:(r=parseDecimal(n),r===null)?!1:r>0});$.validator.unobtrusive.adapters.add("conditionalnotzero",["dependentproperty","requiredvalue"],function(n){n.rules.conditionalnotzero={dependentproperty:n.params.dependentproperty,requiredvalue:n.params.requiredvalue};n.messages.conditionalnotzero=n.message});window.pvf=window.pvf||{};pvf.table=pvf.table||{};pvf.table.formatters=pvf.table.formatters||{};pvf.table.getColumnIndexFromRow=function(n,t){if(!t)return-1;t=t.toLowerCase();const r=n.closest("table")[0];if(!r)return-1;const i=r.querySelectorAll("thead th[data-col]");if(!i.length)return-1;for(let n=0;n=0)return $.trim(n.find("td").eq(i).text())};pvf.table.setText=function(n,t,i){const r=pvf.table.getColumnIndexFromRow(n,t);if(!(r<0)){const u=n.find("td").eq(r);u.text(i==null?"":i)}};pvf.table.setHtml=function(n,t,i){const r=pvf.table.getColumnIndexFromRow(n,t);if(!(r<0)){const u=n.find("td").eq(r);u.html(i)}};pvf.table.setModified=function(n,t="true"){const i=n.find(".modified-flag");i.length&&i.val(t)};pvf.table.getNextRowIndex=function(n){let t=-1,i=null;if(n.find("[name]").each(function(){const t=$(this).attr("name"),n=t.match(/([A-Za-z_]+)\[(\d+)\]\./);if(n)return i=n[1],!1}),!i)return 0;const r=new RegExp(`${i}\\[(\\d+)\\]\\.`);return n.find("[name]").each(function(){const i=$(this).attr("name"),n=i.match(r);if(n){const i=parseInt(n[1],10);i>t&&(t=i)}}),t+1};pvf.table.reindexRow=function(n,t){n.find("[name]").each(function(){const n=$(this).attr("name"),i=n.replace(/([A-Za-z_]+)\[\d+\]\./,`$1[${t}].`);$(this).attr("name",i)})};pvf.table.normalizeKeys=function(n){const t={};for(const i in n)t[i.toLowerCase()]=n[i];return t};pvf.table.getValue=function(n,t){if(!t)return null;let f=t.toString().trim().replace(/\[[^\]]*\]/g,"").split(".").pop().toLowerCase();const e=n.closest("table"),o=e.find("thead th[data-col]");let i=-1;if(o.each(function(n){const t=($(this).data("col")||"").toString().trim().toLowerCase();if(t===f)return i=n,!1}),i===-1)return null;const r=n.children("td").eq(i),u=r.find("input, select, textarea");return u.length?u.val():r.text().trim()};pvf.table.setValue=function(n,t,i){t=t.toLowerCase();const f=n.closest("table"),r=f.find("thead th[data-col]"),u=r.index(r.filter(`[data-col="${t}"]`));if(u!==-1){const t=n.children("td").eq(u),r=t.find("input, select, textarea");r.length?r.val(i).trigger("change"):t.text(i);return}n.find("input[type='hidden']").each(function(){const n=$(this).attr("name");if(n){const r=n.split(".").pop();r.toLowerCase()===t&&$(this).val(i)}})};pvf.table.getRowModel=function(n){const i=n.closest("table"),r=i.find("thead th[data-col]"),t={};return r.each(function(i){const f=$(this).data("col").toLowerCase(),r=n.children("td").eq(i),u=r.find("input, select, textarea");t[f]=u.length?u.val():r.text().trim()}),n.find("input[type='hidden']").each(function(){const n=$(this).attr("name");if(n){const i=n.split(".").pop().toLowerCase();t[i]=$(this).val()}}),t};pvf.table.setRowModel=function(n,t){const i=pvf.table.normalizeKeys(t);for(const t in i)pvf.table.setValue(n,t,i[t])};pvf.table.updateRow=function(n,t){if(n&&n.length){const i=pvf.table.normalizeKeys(t),u=n.closest("table")[0];if(u){const r=u.querySelectorAll("thead th[data-col]");if(r.length){const f=Array.from(r).map(n=>n.dataset.col.toLowerCase());r.forEach(t=>{const f=t.dataset.col;if(f){const u=f.toLowerCase();let r=i[u];if(r!==undefined){const e=pvf.table.formatters&&pvf.table.formatters[u];e&&(r=e(r,i,n));typeof r=="string"&&r.trim().startsWith("<")?pvf.table.setHtml(n,u,r):pvf.table.setText(n,u,r)}}});for(const t in i)f.includes(t)||pvf.table.setValue(n,t,i[t])}}}};pvf.table.bindAutoCalc=function(n,t){if(n&&n.length)n.on("input change","input, select, textarea",function(){const n=$(this).closest("tr");if(n.length){const i=pvf.table.getRowModel(n);for(const r in t){const u=t[r];if(typeof u=="function"){const f=u(i,n);f!==undefined&&pvf.table.setValue(n,r,f)}}}})};pvf.table.validateRow=function(n,t){const i=pvf.table.getRowModel(n),r={};for(const u in t){const f=t[u];if(typeof f=="function"){const o=i[u],e=f(o,i,n);e!==!0&&(r[u]=e)}}return{ok:Object.keys(r).length===0,errors:r,model:i}};pvf.table.highlightErrors=function(n,t){const r=n.closest("table"),i=r.find("thead th[data-col]");n.children("td").removeClass("has-error");for(const r in t){const t=i.index(i.filter(`[data-col="${r}"]`));t!==-1&&n.children("td").eq(t).addClass("has-error")}};pvf.table.isRowEmpty=function(n,t){for(const i of t){const t=pvf.table.getValue(n,i);if(t!==""&&t!==null&&t!==undefined&&t!==0)return!1}return!0};pvf.table.isRowModelEmpty=function(n,t){const i={};for(const t in n){const r=t.trim().toLowerCase();i[r]=n[t]}const r=t.map(n=>n.trim().toLowerCase()),u=n=>{if(n===null||n===undefined)return!0;if(typeof n=="string"){const t=n.trim();return t===""?!0:t==="0"?!0:t==="0.0"||t==="0.00"?!0:t==="0,0"||t==="0,00"?!0:!1}return typeof n=="number"&&n===0?!0:!1};for(const n of r){const t=i[n];if(!u(t))return!1}return!0};window.pvf=window.pvf||{};pvf.validators=pvf.validators||{};pvf.validators={required(n="Detta fält är obligatoriskt."){return t=>t==null||t.trim()===""?{message:n}:!0},numeric(n="Du måste ange ett numeriskt värde."){return t=>{if(t==null||t.trim()==="")return{message:"Värdet får inte vara tomt."};const i=t.replace(",",".");return isNaN(Number(i))?{message:n}:!0}},integer(n="Värdet måste vara ett heltal."){return t=>/^-?\d+$/.test(t)?!0:{message:n}},notZero(n="Värdet får inte vara 0."){return t=>{const i=t.replace(",",".");return Number(i)===0?{message:n}:!0}},min(n,t=null){return i=>{const u=i.replace(",","."),r=Number(u);return isNaN(r)||r{const u=i.replace(",","."),r=Number(u);return isNaN(r)||r>n?{message:t||`Värdet får inte vara större än ${n}.`}:!0}},between(n,t,i=null){return r=>{const f=r.replace(",","."),u=Number(f);return isNaN(u)||ut?{message:i||`Värdet måste vara mellan ${n} och ${t}.`}:!0}},regex(n,t="Värdet matchar inte det förväntade formatet."){return i=>n.test(i)?!0:{message:t}}};class EventEmitter{constructor(){this.events={}}on(n,t){this.events[n]||(this.events[n]=[]);this.events[n].push(t)}off(n,t){this.events[n]&&(this.events[n]=this.events[n].filter(n=>n!==t))}emit(n,t){this.events[n]&&this.events[n].forEach(n=>n(t))}async emitAsync(n,t){const r=this.events[n];if(!r||r.length===0)return[];const i=[];for(const n of r)try{const r=n(t);r instanceof Promise?i.push(await r):i.push(r)}catch(u){console.error("Event handler error:",u);i.push(undefined)}return i}once(n,t){const i=r=>{this.off(n,i),t(r)};this.on(n,i)}}const MLDropDownHandler=function(){function i(t){if(n){const i=document.getElementById(n);i&&(i.contains(t.target)||MLDropDownHandler.close())}}function r(n){n.key==="Escape"&&MLDropDownHandler.close()}function f(){t||(document.addEventListener("click",i),document.addEventListener("keydown",r),t=!0)}function e(){t&&(document.removeEventListener("click",i),document.removeEventListener("keydown",r),t=!1)}function o(n){const t=n.parents().filter(function(){const n=$(this).css("overflow-y");return n==="auto"||n==="scroll"}).first();if(!t.length){const n=$(window).scrollTop();if(n>0)return $(window)}return t.length?t:null}function u(n,t){let i=o(t);const r=$(window).scrollTop();if(i&&i.length&&i[0]instanceof HTMLElement){const r=i.offset(),e=i.outerHeight(),s=i.scrollTop(),u=r.top+e-(t.offset().top+t.outerHeight()),f=t.offset().top-r.top;dropdownLeft=i.outerWidth()-10-(t.offset().left+n.outerWidth());const o=-(t.offset().left-r.left-5);dropdownLeft=Math.max(dropdownLeft,o);u>f?(dropdownTop=t.outerHeight(),maxHeight=Math.min(n.outerHeight(),u-10)):(maxHeight=Math.min(n.outerHeight(),f-10),dropdownTop=-Math.min(maxHeight,n.outerHeight()))}else{const u=t.offset(),e=t.outerHeight(),i=n.outerHeight(),s=$(window).height(),h=$(window).width();dropdownLeft=h-10-(u.left+n.outerWidth());const f=s-(u.top+e)+r,o=u.top-50-r;f>=i||f>o?(maxHeight=Math.min(i,f-10),dropdownTop=Math.min(e,maxHeight)):(maxHeight=Math.min(i,o-10),dropdownTop=Math.max(-i,-maxHeight))}n.css({top:dropdownTop,left:Math.min(dropdownLeft,0),maxHeight:maxHeight+"px",overflowY:"auto"})}let n=null,t=!1;return{open:function(t,i={}){const r=$("#"+t),e=r.closest(".input-group").find(".PVFDropDown-Input");n&&n!==t&&MLDropDownHandler.close();i.ajaxUrl&&(r.html().includes("NOT_LOADED")||i.forceReload)?$.get(i.ajaxUrl,i.ajaxData,function(n){if(r.html(n),i.onRowClick)r.find("tbody tr").on("click",n=>{try{i.onRowClick(n)}finally{MLDropDownHandler.close()}});u(r,e);r.show()}):(u(r,e),r.show());n=t;f()},close:function(){if(n){const t=document.getElementById(n);t&&(t.style.display="none");n=null;e()}}}}();class ModalService{static registryQueue=[];static instance=null;constructor(){this.registry={};this.initialized=!1;this.bus=new EventEmitter;this._asyncWaiters={};this.defaultActions={close:async n=>{const{$modal:t}=n;t.modal("hide")}};this.defaultHooks={"api:start":()=>{showLoadingAjax(!0)},"api:end":({result:n})=>{showLoadingAjax(!1),n?.status&&n?.msg&&doAjaxMsg2(n)}};this.bindActions();ModalService.instance=this}static register(n,t){const i=ModalService.instance;i&&i.initialized?i.register(n,t):ModalService.registryQueue.push({name:n,config:t})}async init(){this.initialized=!0;ModalService.registryQueue.forEach(n=>{this.register(n.name,n.config)});ModalService.registryQueue=[]}async register(n,t){const i=Object.assign({},t);i.modalService=this;i.urls=i.urls||{};i.bus=this.bus;i.behavior=i.behavior||{backdrop:"static",keyboard:!1,focus:!0};for(const t in i.urls){const r=i.urls[t];if(typeof r!="string")throw new Error(`URL '${n}.${t}' måste vara en sträng`);r.startsWith("/")||(i.urls[t]="/"+r)}if(i.api)for(const n in i.api){const t=i.api[n];i.api[n]=async function(n){i.bus.emit(`${i.modalType}:api:start`,{model:n});let r;try{return await t.call(i,n)}finally{i.bus.emit(`${i.modalType}:api:end`,{result:r})}}}if(i.hooks)for(const n in i.hooks){const t=i.hooks[n];this.bus.on(`${i.modalType}:${n}`,t)}for(const n in this.defaultHooks)if(!i.hooks||!i.hooks[n]){const t=this.defaultHooks[n];this.bus.on(`${i.modalType}:${n}`,t)}if(i.actions)for(const n in i.actions)this.bus.on(`${i.modalType}:${n}`,t=>{this.runAction({...t,action:n})});return this.registry[n]=i,i}async getOpenParams(n){const{$modal:r,modalConfig:i}=n;let t={...n.payload};const u=i.openParams||[];for(const n of u){const i=pvf.modal.getFieldValue(r,n);i!==null&&i!==undefined&&(t[n]=i)}if(typeof i.getOpenParams=="function"){const r=await i.getOpenParams({...n,payload:t});r!==undefined&&r!==null&&(t=r)}return n.payload=t,t}async getActionParams(n){const{$modal:r,modalConfig:i,action:u}=n;let t={...n.payload};const f=i.params?.[u]||[];for(const n of f){const i=pvf.modal.getFieldValue(r,n);i!==null&&i!==undefined&&(t[n]=i)}if(typeof i.getActionParams=="function"){const r=await i.getActionParams({...n,payload:t});r!==undefined&&r!==null&&(t=r)}return n.payload=t,t}_resolveAsync(n,t){const i=this._asyncWaiters[n];if(i){if(i.resolve(t),!i.direct){const r=i.opener;if(r){const i=r.closest(".modal"),u=i.data("modal-type");if(u){const r=i.data("basecontext");if(r){const i=this.createWorkingContext(r,{action:`${n}:result`});i.childResult=t;i.childModalType=n;this.bus.emit(`${u}:${n}:result`,i)}}}}delete this._asyncWaiters[n]}}async openAndWaitForResult(n,t={},i){return new Promise(r=>{const u=this.registry[n];this._asyncWaiters[u.modalType]={resolve:r,opener:i};this.open(n,t,i)})}async openAndWaitForResultDirect(n,t={},i){return new Promise(r=>{const u=this.registry[n];this._asyncWaiters[u.modalType]={resolve:r,opener:i,direct:!0};this.open(n,t,i)})}async open(n,t={},i){const r=this.registry[n];if(r){const f=this.getAvailablePlaceholder(r.modalType,r.modalClassExtra),u={$modal:f,modalConfig:r,payload:t,action:"open",$opener:i};u.call=n=>r.modalService.callAction(n,u);await this.getOpenParams(u);u.live={};const o=this.createContextSnapshot(u);f.data("basecontext",o);const e=f.find(".modal-content");if(r.urls.open){e.html("");const n=$.param(u.payload),t=n?`${r.urls.open}?${n}`:r.urls.open;$.ajax({url:t,method:"GET",beforeSend:()=>showLoadingAjax(!0),success:async n=>{let i=$(n);const t=i.filter(".modal-dialog");if(t.length){const n=t.find(".modal-content").first();e.html(n.html())}else e.html(n);r.onContentLoaded&&(u.action="onContentLoaded",this.getActionParams(u),await r.onContentLoaded(u))},error:n=>displayAjaxErrorMessage(n),complete:()=>showLoadingAjax(!1)})}else r.template&&(e.html(r.template),r.onContentLoaded&&(u.action="onContentLoaded",this.getActionParams(u),await r.onContentLoaded(u)));const s={backdrop:r.behavior?.backdrop??!0,keyboard:r.behavior?.keyboard??!0,focus:r.behavior?.focus??!0};f.modal(s);f.on("shown.bs.modal",function(){f.trigger("focus")})}}async bindActions(){$(document).on("click","[data-action]",async n=>{const t=$(n.currentTarget),u=t.data("action"),f=t.closest(".modal"),i=f.data("basecontext");if(i){const r=this.createWorkingContext(i,{action:u,$trigger:t}),e=t.data("payload")||{};Object.assign(r.payload,e);await this.runAction(r)}})}async callAction(n,t,i=null){const f=i||t.modalConfig.modalType,r=t.$modal.data("basecontext");if(!r){console.error("Ingen basecontext hittades i modalen.");return}const u=this.createWorkingContext(r,{action:n});return await this.runAction(u),u}async runAction(n){let{modalConfig:i,action:t}=n;const r=i.actions?.[t]||this.defaultActions[t]||null;if(r){await this.getActionParams(n);const f=await this.bus.emitAsync(`${i.modalType}:before:${t}`,n);if(!f.some(n=>n?.stop)){const u=await r(n);u?.stop||(Object.assign(n,u),await this.bus.emitAsync(`${i.modalType}:after:${t}`,n),t==="save"&&this._resolveAsync(i.modalType,n.lastActionResult||null),t==="close"&&this._resolveAsync(i.modalType,null))}}}getAvailablePlaceholder(n,t=""){const r=document.getElementById("modalPlaceholderArea"),u=`modal_${n}_${Date.now()}`;let i=r.querySelector(`.modal[data-modal-type="${n}"]:not(.in)`);if(!i){const f=document.createElement("div");f.className=`modal fade ${t==="modal-auto"?"modal-auto":""}`;f.id=u;f.setAttribute("role","dialog");f.setAttribute("tabindex","-1");f.setAttribute("data-modal-type",n);f.innerHTML=` `;r.appendChild(f);this.initModalCleanup(f);this.adjustZIndex(f);i=f}return $(i)}initModalCleanup(n){const t=`#${n.id}`;$(document).off("hidden.bs.modal",t).on("hidden.bs.modal",t,()=>{$(n).remove();const t=this.getTopmostModal();t&&t.focus()})}adjustZIndex(n){const t=Math.max(...$(".modal.in").map(function(){return parseInt($(this).css("z-index"),10)||1050}).get());$(n).css("z-index",t+10)}getTopmostModal(){const i=document.querySelectorAll(".modal.in");let n=null,t=-1;return i.forEach(i=>{const r=parseInt(window.getComputedStyle(i).zIndex,10);r>t&&(t=r,n=i)}),n}createContextSnapshot(n){const t={};for(const i in n){const r=n[i];if(i==="live"){t[i]=r;continue}if(r instanceof HTMLElement||r&&r.jquery){t[i]=r;continue}if(typeof r=="function"){t[i]=r;continue}try{t[i]=structuredClone(r)}catch{t[i]=r}}return Object.freeze(t),t.payload&&typeof t.payload=="object"&&Object.freeze(t.payload),t}createWorkingContext(n,t={}){const i={};for(const t in n){const r=n[t];if(t==="live"){i[t]=r;continue}if(r instanceof HTMLElement||r&&r.jquery){i[t]=r;continue}if(typeof r=="function"){i[t]=r;continue}try{i[t]=structuredClone(r)}catch{i[t]=r}}return Object.assign(i,t),i.call=n=>i.modalConfig.modalService.callAction(n,i),i}}window.modalService=new ModalService;$(function(){modalService.init()});ModalService.register("momentSetup",{modalType:"momentSetup",urls:{open:"/Moment/Setup",save:"/Moment/SetupSave",loadRows:"/Moment/SetupRows",reset:"/Moment/SetupReset",updproc:"/Moment/SetupUpdProc"},params:{loadRows:["SetupIndex","Kategori"],updproc:["SetupIndex","Kategori"],reset:["SetupIndex","Kategori"],save:[],onContentLoaded:["SetupIndex","Kategori"]},hooks:{"after:loadRows":async({$modal:n,html:t})=>{n.find(".rows-placeholder").html(t)},"before:reset":async n=>{if(n.payload.Kategori<0)return doAjaxMsg2({status:"error",msg:"Du måste välja en kategori."}),{stop:!0};const t=await pvf.modal.confirm("Återställ","Vill du återställa värdena till grundvärden på visade rader?",{icon:"warning",iconPosition:"header","default":"cancel"});if(!t)return{stop:!0}},"after:reset":async n=>{await n.call("loadRows")},"after:save":async n=>{await n.call("loadRows")},"before:updproc":async n=>{if(n?.payload?.Kategori<0)return doAjaxMsg2({status:"error",msg:"Du måste välja en kategori."}),{stop:!0}},"after:updproc":async n=>{await n.call("loadRows")}},actions:{async loadRows(n){const t=await n.modalConfig.api.loadRows(n.payload);return typeof t=="object"?{stop:!0,result:t}:{stop:!1,html:t}},async reset(n){const t=await n.modalConfig.api.reset(n.payload);return{stop:t.status!=="ok",result:t}},async save(n){const i=pvf.modal.createModelFromForm(n.$modal.find("form")),t=await n.modalConfig.api.save(i);return{stop:t.status!=="ok",result:t}},async updproc(n){const t=await pvf.modal.promptValue({caption:"Uppdatera med procent +/-",label:"Procent",defaultValue:"",validate:[pvf.validators.numeric(),pvf.validators.notZero()]});if(t===null)return{stop:!0};n.payload.updproc=t;const i=await n.modalConfig.api.updproc(n.payload);return{stop:i.status!=="ok",result:i}}},api:{async updproc(n){return $.ajax({url:this.urls.updproc,type:"POST",contentType:"application/json; charset=utf-8",data:JSON.stringify(n)})},async loadRows(n){return $.get(this.urls.loadRows,n)},async reset(n){return $.ajax({url:this.urls.reset,type:"POST",contentType:"application/json; charset=utf-8",data:JSON.stringify(n)})},async save(n){return $.ajax({url:this.urls.save,type:"POST",contentType:"application/json; charset=utf-8",data:JSON.stringify(n)})}},async bindInternalEvents(n){n.$modal.on("change input","input, select, textarea",function(){const n=$(this).closest("tr");if(n.length){const t=n.find(".modified-flag");t.length&&t.val("true")}});n.$modal.on("change",'[name="Kategori"]',async t=>{n.payload.Kategori=t.target.value,await n.call("loadRows")})},async onContentLoaded(n){await this.bindInternalEvents(n);initSelectPickers(n.$modal);n.payload.Kategori!=-1&&await n.call("loadRows")}});ModalService.register("momTill",{modalType:"momTill",modalClassExtra:"modal-auto",behavior:{backdrop:"static",keyboard:!0,focus:!0},urls:{open:"/Wizard/MomTill"},params:{save:[],open:["SelectedMomTill,Project_Id"],onContentLoaded:["Project_Id"]},hooks:{"after:save":n=>{doAjaxMsg2(n.result),n.call("close")}},actions:{async save(n){const r=n.$modal.find("#momTillChooseList > li.checked"),i=r.map((n,t)=>{const i=$(t);return{tabb:i.data("tabb"),text:i.html()}}).get(),u=i.map(n=>n.tabb).join(""),f=i.map(n=>`${n.tabb}=${n.text}`).join(", "),t={status:"ok",msg:"",selectedMomTill:u,selectedMomTillLongText:f};return n.lastActionResult=t,{stop:t.status!=="ok",result:t}}},api:{},helpers:{},bindInternalEvents(n){const{}=n;$("#momTillChooseList > li").off("click").on("click",function(){$(this).toggleClass("checked")})},onContentLoaded(n){this.bindInternalEvents(n)}});ModalService.register("projectAnteckningar",{modalType:"projectAnteckningar",modalClassExtra:"modal-lg",behavior:{backdrop:"static",keyboard:!0,focus:!0},urls:{open:"/Project/Anteckningar",save:"/Project/Anteckningar","export":"/Project/ExportAnteckningar"},params:{save:[],onContentLoaded:["Project_Id"],"export":["Project_Id"]},hooks:{"after:export":n=>{const t=copyToClipboard(n.text);t?doAjaxMsg2({status:"ok",msg:"Anteckningar kopierade till urklipp. (inkl. trädnods anteckningar)"}):doAjaxMsg2({status:"warning",msg:"Kunde inte kopiera till urklipp. En textfil laddades ner istället."})},"after:save":n=>{doAjaxMsg2(n.result),n.call("close")}},actions:{async export(n){const t=await n.modalConfig.api.export(n.payload);return{stop:!1,text:t}},async save(n){const i=pvf.modal.createModelFromForm(n.$modal.find("form")),t=await n.modalConfig.api.save(i);return{stop:t.status!=="ok",result:t}}},api:{async export(n){const t=$.param(n),i=t?`${this.urls.export}?${t}`:this.urls.export;return $.ajax({url:i,type:"GET",contentType:"application/text; charset=utf-8",data:JSON.stringify(n)})},async save(n){return $.ajax({url:this.urls.save,type:"POST",contentType:"application/json; charset=utf-8",data:JSON.stringify(n)})}},helpers:{},bindInternalEvents(n){const{$modal:t}=n;t.on("shown.bs.modal",function(){const n=t.attr("id");t.find("[data-pane]").each(function(){var t=$(this).attr("data-pane");$(this).attr("data-name",n+"-"+t)});t.find("[data-toggle='tab']").each(function(){var t=$(this).attr("data-tab");$(this).attr("data-target","[data-name='"+n+"-"+t+"']")});t.setFocusOnFirstInput("input")});t.on("change input","input, select, textarea",function(){})},onContentLoaded(n){this.bindInternalEvents(n)}});ModalService.register("ueovrSetup",{modalType:"ueovrSetup",modalClassExtra:"modal-lg",urls:{open:"/UeOvr/Setup",save:"/UeOvr/SetupSave",loadRows:"/UeOvr/SetupRows",deleteRow:"/UeOvr/SetupDeleteRow"},params:{loadRows:["SetupIndex"],save:[],onContentLoaded:["SetupIndex"],deleteRow:["SetupIndex","RecId"]},hooks:{"before:deleteRow":async n=>{const{$trigger:u}=n,i=u.closest("tr"),t=pvf.table.getRowModel(i);if(pvf.table.isRowModelEmpty(t,["RecId","Namn","Antal","APris","Belopp"]))return i.remove(),{stop:!0};if(t.recid==-1)return{stop:!0};let r=t.namn??"";r===""&&(r="(Tom)");const f=await pvf.modal.confirm("Ta bort",`Vill du ta bort raden
"${r}" ?`,{icon:"warning",iconPosition:"header","default":"cancel"});return f?t.recid==0?(i.remove(),{stop:!0}):void 0:{stop:!0}},"after:deleteRow":function(n){const t=n.$trigger.closest("tr");t.remove()},"after:save":n=>{n.call("loadRows")},"after:loadRows":({$modal:n,html:t})=>{n.find(".rows-placeholder").html(t)}},actions:{deleteRow:async function(n){const t=await n.modalConfig.api.deleteRow(n.payload);return{stop:t.status!=="ok",result:t}},addRow(n){n.modalConfig.helpers.addNewRow(n.$modal,n.modalConfig)},async loadRows(n){const t=await n.modalConfig.api.loadRows(n.payload);return typeof t=="object"?{stop:!0,result:t}:{stop:!1,html:t}},async save(n){const i=pvf.modal.createModelFromForm(n.$modal.find("form")),t=await n.modalConfig.api.save(i);return{stop:t.status!=="ok",result:t}},close(n){n.modal("hide")}},api:{async deleteRow(n){const t=$.param(n),i=`${this.urls.deleteRow}?${t}`;return $.ajax({url:i,method:"DELETE",dataType:"json"})},async loadRows(n){return $.get(this.urls.loadRows,n)},async save(n){return $.ajax({url:this.urls.save,type:"POST",contentType:"application/json; charset=utf-8",data:JSON.stringify(n)})}},helpers:{createEmptyRow:function(n){const t=` `;return $(t)},ensureDeleteButton:function(n,t){const r=n.find("td.delete-cell");let i=r.find("[data-action='deleteRow']");i.length?i.data("payload",{RecId:t}):(i=$(` `),r.append(i))},addNewRow:function(n,t){const i=n.find("table"),u=pvf.table.getNextRowIndex(i),r=t.helpers.createEmptyRow(u);i.find("tbody").append(r);r.find("input[type=text],input[type=number]").first().focus()},updateRow(n){const i=parseFloat(n.find('input[name$=".Antal"]').val())||0,r=parseFloat(n.find('input[name$=".APris"]').val())||0,t=i*r;n.find('input[name$=".Belopp"]').val(t===0?"":t.toString())}},bindInternalEvents(n){n.$modal.on("change input","input, select, textarea",function(){const t=$(this).closest("tr");t.length&&(pvf.table.setModified(t),typeof n.modalConfig.helpers.updateRow=="function"&&n.modalConfig.helpers.updateRow(t))})},onContentLoaded(n){this.bindInternalEvents(n);n.call("loadRows")}})