function haveCapability(n,t){return n.indexOf(t)>=0}function haveCapabilityComputed(n,t){return ko.computed(function(){return n.indexOf(t)>=0})}function isArray(n){return Object.prototype.toString.call(n)==="[object Array]"}function pad(n,t){for(var i=n+"";i.length<t;)i="0"+i;return i}function FormatSubscription(n,t){return((n?"SMS":"")+" "+(t?"Email":"")).trim()||"None"}function FormatSubscriptionChange(n,t,i,r){return n===i&&t===r?FormatSubscription(i,r):FormatSubscription(n,t)+" -> "+FormatSubscription(i,r)}function FormatOverdueBy(n){return n.years()>0?n.years()+" year"+(n.years()>1?"s":"")+" "+n.months()+" month"+(n.months()!==1?"s":"")+" "+n.days()+" day"+(n.days()!==1?"s":""):n.months()>0?n.months()+" month"+(n.months()>1?"s":"")+" "+n.days()+" day"+(n.days()!==1?"s":""):n.days()>0?n.days()+" day"+(n.days()>1?"s":"")+" "+n.hours()+" hour"+(n.hours()!==1?"s":""):n.hours()+" hour"+(n.hours()!==1?"s":"")+" "+pad(n.minutes(),2)+" minute"+(n.minutes()!==1?"s":"")}function FormatDuration(n){return n.days()>0?n.days()+" days "+pad(n.hours(),2)+":"+pad(n.minutes(),2)+":"+pad(n.seconds(),2):n.hours()+":"+pad(n.minutes(),2)+":"+pad(n.seconds(),2)}function FormatLastUpdate(n){return null==n?"Never":moment.utc().add("hours",-12)>n?n.local().format("YYYY-MM-DD HH:mm"):n.local().format("HH:mm")}function FormatLastUpdateWithSeconds(n){return null==n?"Never":moment.utc().add("hours",-12)>n?n.local().format("YYYY-MM-DD HH:mm:ss"):n.local().format("HH:mm:ss")}function FormatDateTimeFromCs(n){return FormatDateTime(n?moment.utc(n).local():null)}function FormatDateTime(n){return null==n?"Unknown":moment.utc().add("hours",-12)>n||moment.utc().add("hours",1)<n?n.local().format("YYYY-MM-DD HH:mm:ss"):n.local().format("HH:mm:ss")}function FormatDate(n){return null==n?"Unknown":n.local().format("YYYY-MM-DD HH:mm:ss")}function FormatDateOnly(n){return null==n?"Unknown":n.local().format("YYYY-MM-DD")}function FormatDueDateFromCs(n){return FormatDueDate(n?moment.utc(n):null)}function FormatDueDate(n){return null==n?"Not Set":n.local().format("YYYY-MM-DD")}function FormatDateRange(n,t){return n.isSame(t,"day")?n.local().format("YYYY-MM-DD HH:mm:ss")+" -> "+t.local().format("HH:mm:ss"):n.local().format("YYYY-MM-DD HH:mm:ss")+" -> "+t.local().format("YYYY-MM-DD HH:mm:ss")}function FormatDateOnlyRange(n,t){return n.local().format("YYYY-MM-DD")+" -> "+t.local().format("YYYY-MM-DD")}function FormatOverdueUpdate(n,t){var r="<strong>Last Updated:<\/strong> "+FormatLastUpdate(n),i;return n!=null&&(i=moment.utc(new Date).diff(n)/1e3,i>t&&(r="<strong>Overdue:<\/stong> "+FormatOverdueBy(moment.duration(i,"seconds")))),r}function FormatNodeAddress(n){return n==null?undefined:("000"+(n||0).toString(16)).slice(-4).toUpperCase()}function ComputedFormatNodeAddress(n){return ko.computed(function(){return FormatNodeAddress(ko.unwrap(n))})}function ComputedLastUpdate(n){return ko.computed(function(){return FormatLastUpdate(moment.utc(ko.unwrap(n)))})}function ComputedDateTime(n){return ko.computed(function(){return FormatDateTime(moment.utc(ko.unwrap(n)))})}function EventIcon(n){switch(n){case"LoginFailed":return"warning";case"Logout":return"logout";case"LoginSucceeded":return"profile";case"PasswordChanged":case"PasswordReset":case"RequestPasswordReset":return"password";default:return"config"}}function FromJson(n){return n}function CheckDiallingPrefix(n){return new RegExp("642|614|615").test(n.substr(0,3))?null:"Invalid phone number format"}function FormatPhoneNumber(n){return(n=$.trim(n),""===n)?"":(n.substr(0,1)==="+"&&(n=n.substr(1)),n.substr(0,1)==="+"&&(n=n.substr(1)),n.substr(0,3)==="642"?n.substr(0,2)+" "+n.substr(2,2)+" "+n.substr(4,3)+" "+n.substr(7):n.substr(0,3)==="614"||n.substr(0,3)==="615"?n.substr(0,2)+" "+n.substr(2,3)+" "+n.substr(5,3)+" "+n.substr(8):n.length>=9?n.substr(0,3)+" "+n.substr(3,3)+" "+n.substr(6):n.length>=6?n.substr(0,3)+" "+n.substr(3):n)}function FormatCurrency(n){return n!=null?"$"+n.toFixed(2):"-"}function FormatBytes(n){for(var t=0;n>1024;)n/=1024,++t;return n.toFixed(2)+" "+Unit[t]}function FormatPercentage(n,t){var i=n*100;return(t!=null?i.toFixed(t):i)+"%"}function ComputedFormatPhoneNumber(n){return ko.computed(function(){return FormatPhoneNumber(ko.unwrap(n))})}function CalculateFontSize(n,t,i,r){return n=n||"",n.length<=r?t+"px":Math.max(Math.ceil(t*r/n.length),i)+"px"}function CalculateFontSizeComputed(n,t,i,r){return ko.computed(function(){return CalculateFontSize(ko.unwrap(n),t,i,r)})}function ComparePasswords(n,t){return n===t?!0:!1}function CheckPassStrength(n){var t=ScorePassword(n);return t>95?"Very Strong":t>80?"Strong":t>60?"Good":t>50?"Moderate":t>=30?"Weak":"Bad"}function ScorePassword(n){var u=0,r,t,i;if(!n)return u;for(r={},t=0;t<n.length;t++)r[n[t]]=(r[n[t]]||0)+1,u+=5/r[n[t]];return i=0,n.search("[0-9]")>=0&&++i,n.search("[a-z]")>=0&&++i,n.search("[A-Z]")>=0&&++i,n.search("[^0-9a-zA-Z]")>=0&&++i,u+(i-1)*10}function ModuleCommand(n){return function(){var u={},r=new DialogViewModelBuilder(route.forControllerItemAction("Module",n.ModuleId(),"Command",{command:n.Command()}),n.Description(),"Send Command",u),e,f,t,i;for(r.MessageField("Are you sure you want to send the "+n.Name()+" command? Please ensure that the equipment in question is correctly configured for the operation and that all necessary safety precautions have been taken."),e=n.Parameters(),f=0;f<e.length;++f)t=e[f],i="Parameter$"+t.Name(),"Seconds"===t.Type()?(u[i]=t.DefaultValue(),r.TimeSpanField(i,t.Name(),!1)):"Boolean"===t.Type()?(u[i]=t.DefaultValue(),r.DropDownListField(i,t.Name(),function(n){return n},function(n){return n},[t.Values()[0],t.Values()[1]])):"Percent"===t.Type()?(u[i]=t.DefaultValue(),r.NumberField(i,t.Name(),0,100,!1)):"Permille"===t.Type()?(u[i]=t.DefaultValue(),r.NumberField(i,t.Name(),0,100,!1)):"Number"===t.Type()&&(u[i]=t.DefaultValue(),r.NumberField(i,t.Name(),t.Values()[0],t.Values()[1],!1));r.Done(function(){return setTimeout(function(){return page.Update?page.Update():null},3e3)});r.SubmitData(function(n){return n});page.OpenFormDialog(r.Create())}}function FormatUnits(n,t){return null==n?"":t?"("+n+")":n}function ConfigureModuleForm(n,t,i,r){return r==null&&(r=5e3),function(){var f={},u=new DialogViewModelBuilder(i,"Configuration","Save",f);u.MessageField("Please provide a reason for making this configuration change");u.MultilineTextField("reason","Reason",null,!1,null);ConfigBuilder(f,u,t,n);u.Done(function(){return setTimeout(function(){return page.Update?page.Update():null},r)});u.SubmitData(function(n){return ko.mapping.toJS(n)});page.OpenFormDialog(u.Create())}}function ConfigureModuleTemplateForm(n,t,i,r,u,f){return function(){var e=new DialogViewModelBuilder(i,r,u,n);e.MessageField("Please provide the values for this config template");ConfigBuilder(n,e,t,null);e.SubmitData(function(n){return ko.mapping.toJS(n)});e.Done(f);page.OpenFormDialog(e.Create())}}function ConfigBuilder(n,t,i,r){for(var l,a,e=0;e<i.length;++e){var u=i[e].Description,o=i[e].CurrentValue,f="Config$"+u.Name();if(n[f]=o,!u.IsChild())if("TimeControl"===u.Type()){t.SectionField("Clock");t.MessageField("Select the clock period, clock start delay, and runtime on period");var s="Config$"+u.ClockStart.Name(),h="Config$"+u.ClockPeriod.Name(),c="Config$"+u.OnPeriod.Name();t.TimeClockField(n[s],n[h],n[c]);t.TimeSpanSecondsField(h,u.ClockPeriod.Name(),!1,null);t.TimeSpanSecondsField(s,u.ClockStart.Name(),!1,null);t.TimeSpanSecondsField(c,u.OnPeriod.Name(),!1,null)}else t.SectionField(u.Name()),t.MessageField(u.Description()),"Boolean"===u.Type()?t.DropDownListField(f,null,function(n){return n},function(n){return n},[u.TrueValue(),u.FalseValue()]):"Number"===u.Type()?t.NumberField(f,"Units: "+FormatUnits(u.Units(),!1),u.Minimum(),u.Maximum(),!1):"NodeAddress"===u.Type()?r==null?t.NumberField(f,"Network Node",u.Minimum(),u.Maximum(),!1):t.AjaxCompactFilterDropDownListField(f,"Network Node",function(n){return FormatNodeAddress(n.NodeAddress)+" "+n.Name},function(n){return n.NodeAddress},route.forControllerItemAction("Module",r,"GetSiblingNetworkNodes"),!1,{Name:"",NodeAddress:Number(ko.unwrap(o))},"Name",1,1):"ModuleIndex"===u.Type()?r==null?t.NumberField(f,"Module",u.Minimum(),u.Maximum(),!1):(l=ko.unwrap(u.Node),a=ko.computed(function(){var t=ko.unwrap(n["Config$"+l]);return t===undefined?null:route.forControllerItemAction("Module",r,"GetNodeModuleNameIndexes",{nodeAddress:t})}),t.AjaxCompactFilterDropDownListField(f,"Module",function(n){return"("+FormatNodeAddress(n.NodeAddress)+"."+pad(n.ModuleIndex,3)+") "+n.Name},function(n){return n.ModuleIndex},a,!1,{Name:"",ModuleIndex:Number(ko.unwrap(o))},"Name",1,1)):"Milliseconds"===u.Type()?t.TimeSpanField(f,u.Name(),!1):"Seconds"===u.Type()&&("Log Interval"===u.Name()?t.TimeSpanSecondsField(f,u.Name(),!1,["00:05:00","00:15:00","01:00:00"]):t.TimeSpanSecondsField(f,u.Name(),!1,null))}}function ConfigureMultipleModulesForm(n,t,i,r,u){return u==null&&(u=5e3),function(){var h={selectedIds:i,configItemsSelection:t},e=new DialogViewModelBuilder(r,"Multiple Module Configuration","Save All",h),s;for(e.MessageField("Please provide a reason for making this configuration change"),e.MultilineTextField("reason","Reason",null,!1,null),s=0;s<n.length;++s)if(t[s].Value!==!1){var f=n[s].Description,v=n[s].CurrentValue,o="Config$"+f.Name();if(h[o]=v,!f.IsChild())if("TimeControl"===f.Type()){e.SectionField("Clock");e.MessageField("Select the clock period, clock start delay, and runtime on period");var c="Config$"+f.ClockStart.Name(),l="Config$"+f.ClockPeriod.Name(),a="Config$"+f.OnPeriod.Name();e.TimeClockField(h[c],h[l],h[a]);e.TimeSpanSecondsField(l,f.ClockPeriod.Name(),!1,null);e.TimeSpanSecondsField(c,f.ClockStart.Name(),!1,null);e.TimeSpanSecondsField(a,f.OnPeriod.Name(),!1,null)}else e.SectionField(f.Name()),e.MessageField(f.Description()),"Boolean"===f.Type()?e.DropDownListField(o,null,function(n){return n},function(n){return n},[f.TrueValue(),f.FalseValue()]):"Number"===f.Type()?e.NumberField(o,"Units: "+FormatUnits(f.Units(),!1),f.Minimum(),f.Maximum(),!1):"Milliseconds"===f.Type()?e.TimeSpanField(o,f.Name(),!1):"Seconds"===f.Type()?"Log Interval"===f.Name()?e.TimeSpanSecondsField(o,f.Name(),!1,["00:05:00","00:15:00","01:00:00"]):e.TimeSpanSecondsField(o,f.Name(),!1,null):"NodeAddress"===f.Type()?e.NumberField(o,"Network Node",0,65535,!1):"ModuleIndex"===f.Type()&&e.NumberField(o,"Module Index",0,255,!1)}e.Done(function(){return setTimeout(function(){return page.Update?page.Update():null},u)});e.SubmitData(function(n){return ko.mapping.toJS(n)});page.OpenFormDialog(e.Create())}}function ViewModuleConfigForm(n){return function(){for(var t,u,i=new DialogViewModelBuilder(undefined,"Configuration","Close",{}),r=0;r<n.length;++r)(t=n[r].Description,u=n[r].CurrentValue,"TimeControl"!==t.Type())&&(i.SectionField(t.Name()),i.MessageField(t.Description()),"Number"===t.Type()?i.MessageField(u()+FormatUnits(t.Units(),!1)):"NodeAddress"===t.Type()?i.MessageField(FormatNodeAddress(Number(u()))):i.MessageField(u()));page.OpenFormDialog(i.Create())}}function GetTileBlocks(n){return ko.computed(function(){for(var u,f=ko.unwrap(n),i=ko.unwrap(f.blocks),r=[],t=0;t<i.length;++t)u=ko.unwrap(i[t]),r.push(u);return Array.prototype.concat.apply([],r)})}function GetSecondsInSpan(n){var t=new RegExp("(?:([0-9]+).)?([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})").exec(n);return t==null?0:(t[1]==null&&(t[1]="0"),+t[1]*86400+ +t[2]*3600+ +t[3]*60+ +t[4]*1)}function GetQueryParam(n){var r=window.location.search.substring(1),i=r.split("&"),t;return i.length===0?undefined:(t=undefined,i.forEach(function(i){var r=i.split("=");r[0]===n&&(t=r.length>1?r[1]:null)}),t)}function debounce(n,t,i){var r;return function(){var f=this,e=this,u=arguments,o=function(){r=null;i||n.apply(f,u)},s=i&&!r;clearTimeout(r);r=setTimeout(o,t);s&&n.apply(e,u)}}function SessionExpiryRedirect(n){var i,t;n!=null&&n.responseText!=null&&(i=JSON.parse(n.responseText),i.Redirect&&(t=window.location.href.toString().split(window.location.host)[1],(t==null||t==="")&&(t="/"),window.location.href="/Account/Login?sessionUrl="+encodeURIComponent(t)))}function handleLocationError(n,t,i){t.setPosition(i.getCenter());t.setContent(n?"Error: The Geolocation service failed.":"Error: Your browser doesn't support geolocation.");t.open(i)}function animatePath(n){var i=75,r=3e4/i,t=0;window.setInterval(function(){var i=n.get("icons");i&&i.length>=1&&(t=(t+1)%r,i[0].offset=t/(r/100)+"%",n.set("icons",i))},i)}function createLozengeArea(n,t){var u=google.maps.geometry.spherical,f,r,i;if(null==n||null==t)return[];for(f=u.computeHeading(n,t),r=[],i=0;i<=pointCount;++i)r.push(u.computeOffset(t,radius,f+90-i*15));for(i=0;i<=pointCount;++i)r.push(u.computeOffset(n,radius,f-90-i*15));return r}var n8s={disposable:[],persistentComputed:ko.computed},Capability,BaseMapLocation,TileState,Severity,DeviceStatus,InstallationStatus,FormatNodeAddressAndName,Unit,Device,CopyToClipboard,log,pointCount,radius;ko.computed=function(n,t,i){var r=n8s.persistentComputed(n,t,i);return n8s.disposable.push(r),r},function(n){n[n.Group_ViewMembers=1]="Group_ViewMembers";n[n.Module_ConfigureUser=2]="Module_ConfigureUser";n[n.Module_ConfigureSystem=3]="Module_ConfigureSystem";n[n.Module_Command=4]="Module_Command";n[n.Network_Edit=5]="Network_Edit";n[n.Network_ManageDevices=6]="Network_ManageDevices";n[n.Device_Firmware=7]="Device_Firmware";n[n.ManageLogicApplication=8]="ManageLogicApplication";n[n.User_ManageContact=9]="User_ManageContact";n[n.User_ManageDetails=10]="User_ManageDetails";n[n.User_ViewEvent=11]="User_ViewEvent";n[n.User_Create=12]="User_Create";n[n.User_Add=13]="User_Add";n[n.Group_ViewEvent=14]="Group_ViewEvent";n[n.User_Remove=15]="User_Remove";n[n.User_Impersonate=16]="User_Impersonate";n[n.Group_Add=17]="Group_Add";n[n.Group_Create=18]="Group_Create";n[n.Group_Remove=19]="Group_Remove";n[n.Group_Rename=20]="Group_Rename";n[n.Group_Delete=21]="Group_Delete";n[n.User_ChangeActive=22]="User_ChangeActive";n[n.User_SetPassword=23]="User_SetPassword";n[n.Role_Rename=24]="Role_Rename";n[n.Role_Delete=25]="Role_Delete";n[n.AddUserGroup=26]="AddUserGroup";n[n.CreateUserGroup=27]="CreateUserGroup";n[n.RemoveUserGroup=28]="RemoveUserGroup";n[n.RenameUserGroup=29]="RenameUserGroup";n[n.DeleteUserGroup=30]="DeleteUserGroup";n[n.ManageUserGroupUsers=31]="ManageUserGroupUsers";n[n.RemoveUserGroupRole=32]="RemoveUserGroupRole";n[n.AddUserGroupRole=33]="AddUserGroupRole";n[n.Network_Add=34]="Network_Add";n[n.Network_Remove=35]="Network_Remove";n[n.Module_Add=36]="Module_Add";n[n.Module_Remove=37]="Module_Remove";n[n.ManageEscalationGroupMembers=38]="ManageEscalationGroupMembers";n[n.ConfigureEscalationGroup=39]="ConfigureEscalationGroup";n[n.DeleteEscalationGroup=40]="DeleteEscalationGroup";n[n.CreateEscalationGroup=41]="CreateEscalationGroup";n[n.EditEscalationUser=42]="EditEscalationUser";n[n.DeleteEscalationUser=43]="DeleteEscalationUser";n[n.CreateEscalationUser=44]="CreateEscalationUser";n[n.Device_Add=45]="Device_Add";n[n.Device_Remove=46]="Device_Remove";n[n.Device_Create=47]="Device_Create";n[n.RemoveLogicApplication=48]="RemoveLogicApplication";n[n.AddLogicApplication=49]="AddLogicApplication";n[n.UploadLogicApplication=50]="UploadLogicApplication";n[n.CumulativeMeter_CreateAlarm=51]="CumulativeMeter_CreateAlarm";n[n.Role_RevokeFromGroup=52]="Role_RevokeFromGroup";n[n.Role_GrantToGroup=53]="Role_GrantToGroup";n[n.EscalationList_Rename=54]="EscalationList_Rename";n[n.EscalationList_Delete=55]="EscalationList_Delete";n[n.EscalationList_Configure=56]="EscalationList_Configure";n[n.EscalationList_CreateUser=57]="EscalationList_CreateUser";n[n.EscalationList_ManageUser=58]="EscalationList_ManageUser";n[n.EscalationList_Add=59]="EscalationList_Add";n[n.EscalationList_Create=60]="EscalationList_Create";n[n.EscalationList_Remove=61]="EscalationList_Remove";n[n.CumulativeMeter_ConfigureAlarm=62]="CumulativeMeter_ConfigureAlarm";n[n.CumulativeMeter_Manage=63]="CumulativeMeter_Manage";n[n.CumulativeMeter_Reset=64]="CumulativeMeter_Reset";n[n.Note_Create=65]="Note_Create";n[n.DataStream_Add=66]="DataStream_Add";n[n.DataStream_Remove=67]="DataStream_Remove";n[n.DataStream_Configure=68]="DataStream_Configure";n[n.DataStream_Create=69]="DataStream_Create";n[n.CumulativeMeter_ManageEscalation=70]="CumulativeMeter_ManageEscalation";n[n.Module_ScaleData=71]="Module_ScaleData";n[n.Module_ConfigureInstaller=72]="Module_ConfigureInstaller";n[n.Module_CreateAttribute=73]="Module_CreateAttribute";n[n.Module_UpdateAttribute=74]="Module_UpdateAttribute";n[n.Module_DeleteAttribute=75]="Module_DeleteAttribute";n[n.Group_CreateTag=76]="Group_CreateTag";n[n.Group_UpdateTag=77]="Group_UpdateTag";n[n.Group_DeleteTag=78]="Group_DeleteTag";n[n.Network_Create=79]="Network_Create";n[n.Network_Delete=80]="Network_Delete";n[n.Network_CreateNode=81]="Network_CreateNode";n[n.Network_DeleteNode=82]="Network_DeleteNode";n[n.Module_Create=83]="Module_Create";n[n.Module_Delete=84]="Module_Delete";n[n.Role_Create=85]="Role_Create";n[n.Branding_Add=86]="Branding_Add";n[n.Branding_Remove=87]="Branding_Remove";n[n.Network_Diagnostics=88]="Network_Diagnostics";n[n.Network_RemoteReboot=89]="Network_RemoteReboot";n[n.GisDataset_Create=90]="GisDataset_Create";n[n.GisDataset_Delete=91]="GisDataset_Delete";n[n.GisDataset_Assign=92]="GisDataset_Assign";n[n.GisDataset_Update=93]="GisDataset_Update";n[n.GisDataset_Add=94]="GisDataset_Add";n[n.GisDataset_Remove=95]="GisDataset_Remove";n[n.Network_ViewLocation=96]="Network_ViewLocation";n[n.Module_SetIcon=97]="Module_SetIcon";n[n.Module_SetType=98]="Module_SetType";n[n.LegalTerms_Create=99]="LegalTerms_Create";n[n.LegalTerms_Delete=100]="LegalTerms_Delete";n[n.LegalTerms_Add=101]="LegalTerms_Add";n[n.LegalTerms_Remove=102]="LegalTerms_Remove";n[n.LegalTerms_Assign=103]="LegalTerms_Assign";n[n.Role_Edit=104]="Role_Edit";n[n.Sim_Create=105]="Sim_Create";n[n.Sim_Update=106]="Sim_Update";n[n.Sim_Delete=107]="Sim_Delete";n[n.Sim_Add=108]="Sim_Add";n[n.Sim_Remove=109]="Sim_Remove";n[n.ApplicationTemplate_Manage=110]="ApplicationTemplate_Manage";n[n.Module_ManageExports=111]="Module_ManageExports";n[n.ExportTarget_Add=112]="ExportTarget_Add";n[n.ExportTarget_Remove=113]="ExportTarget_Remove";n[n.SharedChart_Create=114]="SharedChart_Create";n[n.SharedChart_Delete=115]="SharedChart_Delete";n[n.SharedChart_Edit=116]="SharedChart_Edit";n[n.SharedChart_Add=117]="SharedChart_Add";n[n.SharedChart_Remove=118]="SharedChart_Remove";n[n.RfidTag_Create=119]="RfidTag_Create";n[n.RfidTag_Delete=120]="RfidTag_Delete";n[n.RfidTag_Edit=121]="RfidTag_Edit";n[n.RfidTag_Add=122]="RfidTag_Add";n[n.RfidTag_Remove=123]="RfidTag_Remove";n[n.Role_Add=124]="Role_Add";n[n.Role_Remove=125]="Role_Remove";n[n.Icon_Add=126]="Icon_Add";n[n.Icon_Remove=127]="Icon_Remove";n[n.Network_RemoteAccess=128]="Network_RemoteAccess";n[n.Module_ManageAlertSubscription=129]="Module_ManageAlertSubscription";n[n.Network_CancelUpdate=130]="Network_CancelUpdate";n[n.Branding_Edit=131]="Branding_Edit";n[n.Device_ViewTestReport=132]="Device_ViewTestReport";n[n.Device_ViewCalibration=133]="Device_ViewCalibration";n[n.User_CreateSsoToken=134]="User_CreateSsoToken";n[n.Module_SetIndex=135]="Module_SetIndex";n[n.Module_Move=136]="Module_Move";n[n.Network_PingNode=137]="Network_PingNode";n[n.Network_SetNodeStatus=138]="Network_SetNodeStatus";n[n.Report_Rename=139]="Report_Rename";n[n.Report_Add=140]="Report_Add";n[n.Report_Create=141]="Report_Create";n[n.Report_Remove=142]="Report_Remove";n[n.Report_Delete=143]="Report_Delete";n[n.Report_Edit=144]="Report_Edit";n[n.User_SendTestMessage=145]="User_SendTestMessage";n[n.App_Add=146]="App_Add";n[n.App_Create=147]="App_Create";n[n.App_Remove=148]="App_Remove";n[n.App_Delete=149]="App_Delete";n[n.App_Edit=150]="App_Edit";n[n.AppModuleSource_Add=151]="AppModuleSource_Add";n[n.AppModuleSource_Create=152]="AppModuleSource_Create";n[n.AppModuleSource_Remove=153]="AppModuleSource_Remove";n[n.AppModuleSource_Delete=154]="AppModuleSource_Delete";n[n.AppModuleSource_Edit=155]="AppModuleSource_Edit";n[n.PurchaseOrder_Edit=156]="PurchaseOrder_Edit";n[n.PurchaseOrder_Create=157]="PurchaseOrder_Create";n[n.PurchaseOrder_Delete=158]="PurchaseOrder_Delete";n[n.PurchaseOrder_Authorise=159]="PurchaseOrder_Authorise";n[n.DeviceType_Create=160]="DeviceType_Create";n[n.DeviceType_Edit=161]="DeviceType_Edit";n[n.DeviceType_Add=162]="DeviceType_Add";n[n.DeviceType_Remove=163]="DeviceType_Remove";n[n.DeviceType_Delete=164]="DeviceType_Delete";n[n.DeviceType_SetPrice=165]="DeviceType_SetPrice";n[n.Module_SuppressAlerts=166]="Module_SuppressAlerts";n[n.Network_SetLocation=172]="Network_SetLocation";n[n.Module_SetLocation=173]="Module_SetLocation";n[n.BillingEntity_Create=174]="BillingEntity_Create";n[n.BillingEntity_Edit=175]="BillingEntity_Edit";n[n.BillingEntity_Add=176]="BillingEntity_Add";n[n.BillingEntity_Remove=177]="BillingEntity_Remove";n[n.BillingEntity_Delete=178]="BillingEntity_Delete";n[n.PurchaseOrder_CreatePackingSlip=179]="PurchaseOrder_CreatePackingSlip";n[n.PurchaseOrder_EditPackingSlip=180]="PurchaseOrder_EditPackingSlip";n[n.PurchaseOrder_DeletePackingSlip=181]="PurchaseOrder_DeletePackingSlip";n[n.PurchaseOrder_Acknowledge=182]="PurchaseOrder_Acknowledge";n[n.PurchaseOrder_CreateInvoice=183]="PurchaseOrder_CreateInvoice";n[n.PurchaseOrder_RevokeCompletion=184]="PurchaseOrder_RevokeCompletion";n[n.PurchaseOrder_ViewInvoice=185]="PurchaseOrder_ViewInvoice";n[n.PurchaseOrder_CanPickStockItems=186]="PurchaseOrder_CanPickStockItems";n[n.ModuleConfigTemplate_Create=187]="ModuleConfigTemplate_Create";n[n.ModuleConfigTemplate_Edit=188]="ModuleConfigTemplate_Edit";n[n.ModuleConfigTemplate_Add=189]="ModuleConfigTemplate_Add";n[n.ModuleConfigTemplate_Remove=190]="ModuleConfigTemplate_Remove";n[n.ModuleConfigTemplate_Delete=191]="ModuleConfigTemplate_Delete";n[n.ModuleConfigTemplate_Clone=192]="ModuleConfigTemplate_Clone";n[n.System_Admin=193]="System_Admin";n[n.Device_Delete=194]="Device_Delete";n[n.System_Tester=195]="System_Tester";n[n.PurchaseOrder_EditAddress=196]="PurchaseOrder_EditAddress";n[n.Inventory_View=197]="Inventory_View";n[n.PurchaseOrder_OrderFrom=198]="PurchaseOrder_OrderFrom";n[n.Inventory_DeleteCostItem=199]="Inventory_DeleteCostItem";n[n.Inventory_EditCostItem=200]="Inventory_EditCostItem";n[n.Inventory_CreateCostItem=201]="Inventory_CreateCostItem";n[n.BillingEntity_ManageCostItems=202]="BillingEntity_ManageCostItems";n[n.GisDataset_AddPolygon=203]="GisDataset_AddPolygon";n[n.GisDataset_RemovePolygon=204]="GisDataset_RemovePolygon";n[n.GisDataset_EditPolygon=205]="GisDataset_EditPolygon";n[n.GisDataset_AddItemDescription=206]="GisDataset_AddItemDescription";n[n.GisDataset_RemoveItemDescription=207]="GisDataset_RemoveItemDescription";n[n.GisDataset_EditItemDescription=208]="GisDataset_EditItemDescription";n[n.GisDataset_Clone=209]="GisDataset_Clone";n[n.Network_QueryNode=210]="Network_QueryNode";n[n.Network_ViewSubscription=211]="Network_ViewSubscription";n[n.NetworkSubscriptions_Create=212]="NetworkSubscriptions_Create";n[n.NetworkSubscriptions_Renew=213]="NetworkSubscriptions_Renew";n[n.NetworkSubscriptions_Cancel=214]="NetworkSubscriptions_Cancel";n[n.NetworkSubscriptions_View=215]="NetworkSubscriptions_View";n[n.NetworkSubscriptions_Reinstate=216]="NetworkSubscriptions_Reinstate";n[n.MessagePlan_Add=217]="MessagePlan_Add";n[n.MessagePlan_Create=218]="MessagePlan_Create";n[n.MessagePlan_Remove=219]="MessagePlan_Remove";n[n.MessagePlan_Delete=220]="MessagePlan_Delete";n[n.MessagePlan_Edit=221]="MessagePlan_Edit";n[n.MessagePlan_Clone=222]="MessagePlan_Clone";n[n.MessageAccount_ManageNetwork=223]="MessageAccount_ManageNetwork";n[n.MessageAccount_ManageUser=224]="MessageAccount_ManageUser";n[n.User_CreateWithLegalTerms=225]="User_CreateWithLegalTerms";n[n.Network_QueryTemperatureProbe=228]="Network_QueryTemperatureProbe";n[n.Network_EnrolTemperatureProbe=229]="Network_EnrolTemperatureProbe";n[n.Network_ManageSim=230]="Network_ManageSim";n[n.User_ViewActions=231]="User_ViewActions";n[n.Device_Edit=232]="Device_Edit";n[n.Device_LegacyUpgrade=233]="Device_LegacyUpgrade";n[n.Group_AddFrom=234]="Group_AddFrom";n[n.Module_QueryModuleState=235]="Module_QueryModuleState";n[n.NetworkSubscriptions_EditBillingEntity=236]="NetworkSubscriptions_EditBillingEntity";n[n.BillingEntity_AssignNetworkSubscriptions=237]="BillingEntity_AssignNetworkSubscriptions";n[n.Network_PortConfigure=238]="Network_PortConfigure";n[n.BillingEntity_CreatePurchaseOrder=239]="BillingEntity_CreatePurchaseOrder";n[n.Device_Developer=240]="Device_Developer";n[n.PurchaseOrder_AcknowledgeReceipt=241]="PurchaseOrder_AcknowledgeReceipt";n[n.Network_ViewServiceProvider=244]="Network_ViewServiceProvider";n[n.Network_AddManagerUser=245]="Network_AddManagerUser";n[n.Network_RemoveManagerUser=246]="Network_RemoveManagerUser";n[n.Network_ViewManagerUsers=247]="Network_ViewManagerUsers";n[n.Network_ViewStatusSubscribers=249]="Network_ViewStatusSubscribers";n[n.Network_AddStatusSubscribers=250]="Network_AddStatusSubscribers";n[n.Network_RemoveStatusSubscribers=251]="Network_RemoveStatusSubscribers";n[n.Network_AcknowledgeOverdue=252]="Network_AcknowledgeOverdue";n[n.Network_ChangeApplication=258]="Network_ChangeApplication";n[n.Network_UpgradeApplication=259]="Network_UpgradeApplication";n[n.Icon_Create=261]="Icon_Create";n[n.Network_AttachLinkDevice=262]="Network_AttachLinkDevice";n[n.Module_PreviewExportData=263]="Module_PreviewExportData";n[n.MessageAccount_Create=264]="MessageAccount_Create";n[n.MessageAccount_Edit=265]="MessageAccount_Edit";n[n.MessageAccount_Add=266]="MessageAccount_Add";n[n.MessageAccount_Remove=267]="MessageAccount_Remove";n[n.MessageAccount_Delete=268]="MessageAccount_Delete";n[n.SmsProvider_ReceiveSms=269]="SmsProvider_ReceiveSms";n[n.SmsProvider_ViewOutboundMessages=270]="SmsProvider_ViewOutboundMessages";n[n.SmsProvider_UpdateOutboundMessages=271]="SmsProvider_UpdateOutboundMessages";n[n.SmsProvider_UpdateAndroidProviderApp=272]="SmsProvider_UpdateAndroidProviderApp";n[n.SmsProvider_Add=273]="SmsProvider_Add";n[n.SmsProvider_Create=274]="SmsProvider_Create";n[n.SmsProvider_Remove=275]="SmsProvider_Remove";n[n.SmsProvider_Delete=276]="SmsProvider_Delete";n[n.SmsProvider_Edit=277]="SmsProvider_Edit";n[n.EmailProvider_Add=278]="EmailProvider_Add";n[n.EmailProvider_Create=279]="EmailProvider_Create";n[n.EmailProvider_Remove=280]="EmailProvider_Remove";n[n.EmailProvider_Delete=281]="EmailProvider_Delete";n[n.EmailProvider_Edit=282]="EmailProvider_Edit";n[n.MessageAccount_ViewMessages=283]="MessageAccount_ViewMessages";n[n.Tag_Create=284]="Tag_Create";n[n.Tag_Update=285]="Tag_Update";n[n.Tag_Delete=286]="Tag_Delete";n[n.Tag_Add=287]="Tag_Add";n[n.Tag_Remove=288]="Tag_Remove";n[n.Tag_View=289]="Tag_View";n[n.Tag_Attach=290]="Tag_Attach";n[n.Network_SetupApplication=293]="Network_SetupApplication";n[n.User_UnlockUserAccount=303]="User_UnlockUserAccount"}(Capability||(Capability={}));Date.now=Date.now||function(){return+new Date};BaseMapLocation=function(){function n(){}return n.Latitude=-37.20063,n.Longitude=174.903626,n}(),function(n){n[n.Disabled=1]="Disabled";n[n.Idle=2]="Idle";n[n.Active=3]="Active";n[n.Faulted=4]="Faulted";n[n.Warning=5]="Warning"}(TileState||(TileState={})),function(n){n[n.Info=1]="Info";n[n.Warning=2]="Warning";n[n.Error=3]="Error"}(Severity||(Severity={})),function(n){n[n.OK=1]="OK";n[n.Offline=2]="Offline";n[n.Overdue=3]="Overdue"}(DeviceStatus||(DeviceStatus={})),function(n){n[n.OnTheShelf=0]="OnTheShelf";n[n.Testing=1]="Testing";n[n.Maintenance=2]="Maintenance";n[n.Complete=3]="Complete"}(InstallationStatus||(InstallationStatus={}));var TargetTypes=function(){function n(){}return n.Unknown="Unknown",n.AlertAndStatus="AlertAndStatus",n.App="App",n.Group="Group",n.Network="Network",n.NetworkNode="NetworkNode",n.Module="Module",n.LogicApplication="LogicApplication",n.Role="Role",n.User="User",n.UserGroup="UserGroup",n.EscalationGroup="EscalationGroup",n.Device="Device",n.EscalationList="EscalationList",n.CumulativeMeter="CumulativeMeter",n.CumulativeMeterTotalAlarm="CumulativeMeterTotalAlarm",n.CumulativeMeterTimeAlarm="CumulativeMeterTimeAlarm",n.Note="Note",n.DataStream="DataStream",n.GisDataset="GisDataset",n.LegalTerms="LegalTerms",n.Sim="Sim",n.ApplicationTemplate="ApplicationTemplate",n.SharedCollection="SharedCollection",n.ReportTemplate="ReportTemplate",n.AppModuleSource="AppModuleSource",n.BillingEntity="BillingEntity",n.DeviceType="DeviceType",n.PurchaseOrder="PurchaseOrder",n.ModuleConfigTemplate="ModuleConfigTemplate",n.Firmware="Firmware",n.ExportTarget="ExportTarget",n}(),TagAttachmentTypes=function(){function n(){}return n.Module={Type:"Module",Icon:"firmware",Action:function(n){return views.Module_Details.Load(n.ModuleId)}},n.Network={Type:"Network",Icon:"network",Action:function(n){return views.Network_Details.Load(n.NetworkId)}},n.NetworkNode={Type:"NetworkNode",Icon:"node",Action:function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)}},n.Application={Type:"Application",Icon:"logic-application",Action:function(n){return views.Application_Details.Load(n.AppId,null)}},n}(),NetworkStatusTypes=function(){function n(){}return n.UnknownStatus=0,n.OnTheShelf=1,n.Assembling=2,n.Commissioning=3,n.Installed=4,n.Maintenance=5,n.Decommissioned=6,n}();Date.prototype.toISOString||(Date.prototype.toISOString=function(){function n(n){return n<10?"0"+n:n}return this.getUTCFullYear()+"-"+n(this.getUTCMonth()+1)+"-"+n(this.getUTCDate())+"T"+n(this.getUTCHours())+":"+n(this.getUTCMinutes())+":"+n(this.getUTCSeconds())+"Z"});Array.prototype.indexOf||(Array.prototype.indexOf=function(n){var i=this.length>>>0,t=Number(arguments[1])||0;for(t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=i);t<i;t++)if(t in this&&this[t]===n)return t;return-1});Array.isArray||(Array.isArray=isArray);FormatNodeAddressAndName=function(n){return n.NodeAddress==null?"":"("+FormatNodeAddress(n.NodeAddress)+") "+n.NodeName},function(n){n[n.B=0]="B";n[n.KB=1]="KB";n[n.MB=2]="MB";n[n.GB=3]="GB";n[n.TB=4]="TB";n[n.PB=5]="PB";n[n.EB=6]="EB";n[n.ZB=7]="ZB";n[n.YB=8]="YB"}(Unit||(Unit={})),function(n){function t(n,t){return ko.computed(function(){return ko.unwrap(t)===InstallationStatus[InstallationStatus.Complete]?ko.unwrap(n)?TileState.Faulted:TileState.Idle:TileState.Disabled})}function i(n){return ko.computed(function(){switch(DeviceStatus[ko.unwrap(n)]){case DeviceStatus.OK:return"ok";case DeviceStatus.Offline:return"warning";case DeviceStatus.Overdue:default:return"error"}})}function r(n){return ko.computed(function(){switch(InstallationStatus[ko.unwrap(n)]){case InstallationStatus.Complete:return"ok";default:return""}})}function u(n){return ko.computed(function(){return DeviceStatus[ko.unwrap(n)]===DeviceStatus.Overdue})}n.GetTileStateComputed=t;n.GetStatusIconComputed=i;n.GetInstallationStatusIconComputed=r;n.IsDeviceStatusFaultComputed=u}(Device||(Device={}));CopyToClipboard=function(n,t){var i,r;return t===void 0&&(t=!0),i=document.createElement("textarea"),i.value=ko.unwrap(n),document.body.appendChild(i),i.select(),r=document.execCommand("copy"),document.body.removeChild(i),t&&r&&page.SetMessage("Copied to clipboard"),r};ko.observable.fn.poke=function(n){this.notifySubscribers=function(){};this(n);this.notifySubscribers=function(){ko.subscribable.fn.notifySubscribers.apply(this,arguments)}};log=function(n){typeof n=="function"?(n=ko.unwrap(n),n!=null?console.log("ko",JSON.parse(JSON.stringify(n))):console.log("ko",n)):n!=null?console.log("obj",JSON.parse(JSON.stringify(n))):console.log("obj",n)};ko.observableArray.fn.setAt=function(n,t){this.valueWillMutate();this()[n]=t;this.valueHasMutated()};Object.size=function(n){var t=0;for(var i in n)n.hasOwnProperty(i)&&t++;return t};var toast=function(n){page.SetMessage(n)},DevicesSupportingTemperatureProbes=["GCM782","WCM782","WG388R-782IO","DRC802-IOT1","DRC802-IOT2"],DeviceSupportsTemperatureProbes=function(n){return DevicesSupportingTemperatureProbes.indexOf(n)!==-1},GetStateClass=function(n){return"state-"+(TileState[n]||"idle").toLowerCase()},NoteInfoBuilder=function(n,t){return n.NetworkId?{action:function(){return t!=="Network"?views.Network_Details.Load(n.NetworkId):null},icon:function(){return"network"},tooltip:function(){return"Network Note"},actionEnabled:function(){return!0},type:function(){return"Network"}}:n.ModuleId?{action:function(){return t!=="Module"?views.Module_Details.Load(n.ModuleId):null},icon:function(){return"firmware"},tooltip:function(){return"Module Note"},actionEnabled:function(){return!0},type:function(){return"Module"}}:n.CumulativeMeterId?{action:function(){return t!=="CumulativeMeter"?views.CumulativeMeter_Details.Load(n.CumulativeMeterId):null},icon:function(){return"dashboard"},tooltip:function(){return"Cumulative Meter Note"},actionEnabled:function(){return!0},type:function(){return"Meter"}}:n.UserId?{action:function(){return t!=="User"?views.User_Details.Load(n.UserId):null},icon:function(){return"profile"},tooltip:function(){return"User Note"},actionEnabled:function(){return!0},type:function(){return"User"}}:{action:function(){return null},icon:function(){return""},tooltip:function(){return""},actionEnabled:function(){return!1},type:function(){return""}}},TaskTypeFormatter={User:{Icon:"profile",Action:function(n){return views.User_Details.Load(n.Parameters.UserId)},DisplayName:"User"},Network:{Icon:"network",Action:function(n){return views.Network_Details.Load(n.Parameters.NetworkId)},DisplayName:"Network"},Node:{Icon:"node",Action:function(n){return views.Network_Node.Load(n.Parameters.NetworkId,n.Parameters.NodeAddress)},DisplayName:"Node"},MessageAccount:{Icon:"email",Action:function(n,t){return views.MessageAccount_Details.Load(n.Parameters.MessageAccountId,t)},DisplayName:"Message Account"},Device:{Icon:"device",Action:function(n){return views.Device_Details.Load(n.Parameters.DeviceExtAddress)},DisplayName:"Device"},Module:{Icon:"module",Action:function(n){return views.Module_Details.Load(n.Parameters.ModuleId)},DisplayName:"Module"}};var CreateTaskOptions=function(){function n(){}return n}(),callDesc=function(n,t){return typeof n=="string"?n:n(t)},CreateTask=function(n){return{Desc:function(t,i){return t&&n.DescComplete?callDesc(n.DescComplete,i):callDesc(n.DescIncomplete,i)},Fixes:n.Fixes.map(CreateFix)}},CreateFixOptions=function(){function n(){}return n}(),CreateFix=function(n){return{Text:n.Text,Action:n.Action,HasCapability:function(){return n.Capability==null?function(){return!0}:page.HasCapabilityComputed(n.Capability)}}},TaskLevel;(function(n){n[n.Problem=0]="Problem";n[n.Task=1]="Task";n[n.Optional=2]="Optional"})(TaskLevel||(TaskLevel={}));var TaskTypes=function(){function n(){}return n.User_NoContactDetails=CreateTask({DescIncomplete:"User contact details not set",DescComplete:"User contact details set",Fixes:[CreateFix({Text:"Add contact details",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.AddContactsForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact})]}),n.User_DisabledUserModuleAlerts=CreateTask({DescIncomplete:"Disabled user has module alerts set",Fixes:[CreateFix({Text:"Enable user",Action:function(n){return page.OpenFormDialog(views.User_Details.EnableForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ChangeActive}),CreateFix({Text:"Remove from module alerts",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.RemoveModuleAlertsForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact})]}),n.User_DisabledUserSyncAlerts=CreateTask({DescIncomplete:"Disabled user subscribed to sync alerts",Fixes:[CreateFix({Text:"Enable user",Action:function(n){return page.OpenFormDialog(views.User_Details.EnableForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ChangeActive}),CreateFix({Text:"Remove from sync alerts",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.RemoveUserSyncAlertsForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact})]}),n.User_EmailAlertsNoEmail=CreateTask({DescIncomplete:"Email alerts set up with no email provided",Fixes:[CreateFix({Text:"Add email address",Action:function(n){return page.OpenFormDialog(views.User_Details.AddEmailAddressForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact}),CreateFix({Text:"Goto page: manage alerts",Action:function(n){return views.User_Subscriptions.Load(ko.unwrap(n.UserId))},Capability:Capability.Module_ManageAlertSubscription})]}),n.User_SMSAlertsNoPhone=CreateTask({DescIncomplete:"SMS alerts set up with no phone number provided",Fixes:[CreateFix({Text:"Add phone number",Action:function(n){return page.OpenFormDialog(views.User_Details.AddPhoneNumberForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact}),CreateFix({Text:"Goto page: manage alerts",Action:function(n){return views.User_Subscriptions.Load(ko.unwrap(n.UserId))},Capability:Capability.Module_ManageAlertSubscription})]}),n.User_NoPrimaryEmail=CreateTask({DescIncomplete:"No primary email address",DescComplete:"Primary email address set",Fixes:[CreateFix({Text:"Set primary email address",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.SetPrimaryEmailAddressForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact})]}),n.User_NoPrimaryPhone=CreateTask({DescIncomplete:"No primary phone number",DescComplete:"Primary phone number set",Fixes:[CreateFix({Text:"Set primary phone number",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.SetPrimaryPhoneNumberForm(ko.unwrap(n.UserId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.User_ManageContact})]}),n.User_InvalidPhoneNumber=CreateTask({DescIncomplete:function(n){return"Phone number "+ko.unwrap(n.PhoneNumber)+" is not SMS capable"},DescComplete:"Phone number valid",Fixes:[CreateFix({Text:"Update phone number",Action:function(n){return page.OpenFormDialog(views.User_Details.EditPhoneNumberForm(ko.unwrap(n.UserId),ko.unwrap(n.PhoneNumber),function(){return page.Update()}))},Capability:Capability.User_ManageContact})]}),n.User_NoUserAccount=CreateTask({DescIncomplete:"No account for user",DescComplete:"User has account",Fixes:[CreateFix({Text:"Create an account for user",Action:function(n){return page.OpenFormDialog(views.User_Details.CreateAccountForm(ko.unwrap(n.UserId),function(){return page.Update()}))},Capability:Capability.User_Create})]}),n.Network_NoMax=CreateTask({DescIncomplete:"Max sync interval not configured",DescComplete:"Max sync interval configured",Fixes:[CreateFix({Text:"Set max interval",Action:function(n){return page.OpenFormDialog(views.Network_Details.SetMaxSyncIntervalForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.Network_ManageDevices}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_NoLocation=CreateTask({DescIncomplete:"Gateway location unknown",DescComplete:"Gateway location assigned",Fixes:[CreateFix({Text:"Set location",Action:function(n){return page.OpenFormDialog(views.Network_Node.SetLocationMapForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),null,null,!1,function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.Network_SetLocation}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_MaxSetNoSubscribers=CreateTask({DescIncomplete:"Max interval set, but no users subscribed to overdue alerts",Fixes:[CreateFix({Text:"Clear max sync interval",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ClearMaxIntervalForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ManageDevices}),CreateFix({Text:"Add subscribers",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.AddSubscribersToOverdueAlertForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_AddStatusSubscribers}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_Overdue=CreateTask({DescIncomplete:"Overdue for Dashboard connection",Fixes:[CreateFix({Text:"Acknowledge",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.AcknowledgeForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_AcknowledgeOverdue}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus}),CreateFix({Text:"Clear max sync interval",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ClearMaxIntervalForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ManageDevices})]}),n.Network_OverdueAck=CreateTask({DescIncomplete:"Overdue and acknowledged",Fixes:[CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus}),CreateFix({Text:"Clear max sync interval",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ClearMaxIntervalForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ManageDevices})]}),n.Network_StatusUnknown=CreateTask({DescIncomplete:"Network status has not been set",Fixes:[CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_StatusDecommissionedButOnline=CreateTask({DescIncomplete:"Status decommissioned but is online",Fixes:[CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_StatusOnTheShelfButOnline=CreateTask({DescIncomplete:"Status on the shelf but is online",Fixes:[CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_UsersSubscribed=CreateTask({DescIncomplete:"Max sync interval not set, but users subscribed",Fixes:[CreateFix({Text:"Goto page: subscribers",Action:function(n){return views.Network_OverdueSubscribers.Load(ko.unwrap(n.NetworkId))},Capability:Capability.Network_RemoveStatusSubscribers}),CreateFix({Text:"Set max interval",Action:function(n){return page.OpenFormDialog(views.Network_Details.SetMaxSyncIntervalForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ManageDevices}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_Uninstalled=CreateTask({DescIncomplete:function(n){return"Sync alert subscribers on "+ko.unwrap(n.NetworkStatus)+" network"},Fixes:[CreateFix({Text:"Goto page: subscribers",Action:function(n){return views.Network_OverdueSubscribers.Load(ko.unwrap(n.NetworkId))},Capability:Capability.Network_RemoveStatusSubscribers}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_NoGatewayNode=CreateTask({DescIncomplete:"No gateway node present on network",DescComplete:"Gateway node created",Fixes:[CreateFix({Text:"Create gateway node",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.AddGatewayNodeForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_CreateNode}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus}),CreateFix({Text:"Goto Page: network",Action:function(n){return views.Network_Details.Load(ko.unwrap(n.NetworkId))}})]}),n.Network_NoDevice=CreateTask({DescIncomplete:"No device attached to gateway node",DescComplete:"Device attached to gateway node",Fixes:[CreateFix({Text:"Attach device",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.AttachDeviceForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ManageDevices}),CreateFix({Text:"Goto page: network node",Action:function(n){return views.Network_Node.Load(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress))}})]}),n.Network_SimNotAttached=CreateTask({DescIncomplete:"Network installed but no SIM attached",DescComplete:"SIM attached",Fixes:[CreateFix({Text:"Attach SIM",Action:function(n){return page.OpenFormDialog(views.Network_Details.AssignSimForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.Sim_Add}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_NoManagerUsers=CreateTask({DescIncomplete:"No manager users assigned to network",DescComplete:"Manager users assigned",Fixes:[CreateFix({Text:"Add network managers",Action:function(n){return page.OpenFormDialog(views.Network_Managers.AddExistingUserForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.tasksTable.LoadData():page.Update()}))},Capability:Capability.Network_AddManagerUser})]}),n.Network_DecommissionedWithPendingUpdates=CreateTask({DescIncomplete:"Decommissioned network has pending updates",Fixes:[CreateFix({Text:"Cancel pending updates",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.CancelUpdatesForm(ko.unwrap(n.NetworkId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_CancelUpdate}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Network_NoMessageAccount=CreateTask({DescIncomplete:"Network does not have a message account assigned",Fixes:[CreateFix({Text:"Assign message account to network",Action:function(n){return page.OpenFormDialog(views.Network_Details.SetMessageAccountForm(ko.unwrap(n.NetworkId),null,function(){return page.Update()}))},Capability:Capability.Network_CancelUpdate}),CreateFix({Text:"Change network status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Node_IncompatibleApplication=CreateTask({DescIncomplete:"Application not compatible with device",Fixes:[CreateFix({Text:"Apply application template",Action:function(n){return page.OpenFormDialog(views.Network_Node.ApplyApplicationTemplateForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.ApplicationTemplate_Manage}),CreateFix({Text:"Assign application",Action:function(n){return page.OpenFormDialog(views.Network_Node.ChangeAssignedApplicationForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ChangeApplication})]}),n.Node_NoApplicationAssigned=CreateTask({DescIncomplete:"No application assigned",DescComplete:"Application assigned",Fixes:[CreateFix({Text:"Apply application template",Action:function(n){return page.OpenFormDialog(views.Network_Node.ApplyApplicationTemplateForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.ApplicationTemplate_Manage}),CreateFix({Text:"Assign application",Action:function(n){return page.OpenFormDialog(views.Network_Node.ChangeAssignedApplicationForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ChangeApplication})]}),n.Node_NewerFirmwareAvailable=CreateTask({DescIncomplete:"Newer firmware version available",DescComplete:"Firmware up to date",Fixes:[CreateFix({Text:"Update firmware",Action:function(n){return page.OpenFormDialog(n.IsLiveNetwork?views.Network_Node.UpdateNetworkNodeLiveFirmwareForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}):views.Network_Node.UpdateNetworkNodeFirmwareForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Device_Firmware})]}),n.Node_NoDevice=CreateTask({DescIncomplete:"No device attached to node",DescComplete:"Device attached to node",Fixes:[CreateFix({Text:"Attach device",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.AttachDeviceForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_ManageDevices})]}),n.Node_StatusUnknown=CreateTask({DescIncomplete:"Node status has not been set",Fixes:[CreateFix({Text:"Change node status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeStatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Node_NoLocation=CreateTask({DescIncomplete:"No location set on node",DescComplete:"Node location assigned",Fixes:[CreateFix({Text:function(n){return"Set location on node "+FormatNodeAddress(ko.unwrap(n.Parameters.NodeAddress))},Action:function(n){return page.OpenFormDialog(views.Network_Node.SetLocationMapForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),null,null,!1,function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetLocation}),CreateFix({Text:"Change node status",Action:function(n){return page.OpenFormDialog(views.Group_Tasks.ChangeNetworkStatusForm(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeStatusId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():page.Update()}))},Capability:Capability.Network_SetNodeStatus})]}),n.Module_NoLocation=CreateTask({DescIncomplete:"No location set on module",DescComplete:"Module location assigned",Fixes:[CreateFix({Text:function(n){return"Set location on module "+ko.unwrap(n.Parameters.ModuleName)},Action:function(n){return page.OpenFormDialog(views.Module_Map.SetModuleLocationForm(ko.unwrap(n.ModuleId),ko.unwrap(n.Latitude),ko.unwrap(n.Longitude),!1,function(){return page.Update()}))},Capability:Capability.Module_SetLocation})]}),n.MessageAccount_NoManager=CreateTask({DescIncomplete:"Message account does not have a manager assigned",Fixes:[CreateFix({Text:"Assign manager to message account",Action:function(n){return page.OpenFormDialog(views.MessageAccount_Details.AddManagerForm(ko.unwrap(n.MessageAccountId),function(){return page.view()===views.Group_Tasks?views.Group_Tasks.UpdateTable():views.MessageAccount_Details.managersTable.LoadData()}))},Capability:Capability.MessageAccount_Create})]}),n}(),Route=function(){function n(){}return n.prototype.forControllerIndex=function(n){var t=ko.unwrap(n);return"Home"===t?window.urlBase:window.urlBase+t},n.prototype.forControllerAction=function(n,t){var i=ko.unwrap(t),r=ko.unwrap(n);return"Index"===i?window.urlBase+r:window.urlBase+r+"/"+i},n.prototype.forControllerActionParams=function(n,t,i){var f=ko.unwrap(t),e=ko.unwrap(n),u="",r;if(i)for(r in i)i.hasOwnProperty(r)&&(u?u+="&"+r+"="+ko.unwrap(i[r]):u="?"+r+"="+ko.unwrap(i[r]));return"Details"===f?window.urlBase+e+u:window.urlBase+e+"/"+f+u},n.prototype.forControllerItemAction=function(n,t,i,r){var e=ko.unwrap(i),o=ko.unwrap(n),s=ko.unwrap(t),f="",u;if(r)for(u in r)r.hasOwnProperty(u)&&(f?f+="&"+u+"="+ko.unwrap(r[u]):f="?"+u+"="+ko.unwrap(r[u]));return"Details"===e?window.urlBase+o+"/"+s+f:window.urlBase+o+"/"+s+"/"+e+f},n}(),route=new Route,__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),DialogFieldViewModel=function(){function n(n){this.templateName="dialog-"+n+"-field-template"}return n}(),DialogMessageFieldViewModel=function(n){function t(t){var i=n.call(this,"message")||this;return i.message=KnockoutExtensions.MakeObservable(t),i}return __extends(t,n),t}(DialogFieldViewModel),DialogHtmlFieldViewModel=function(n){function t(t){var i=n.call(this,"html-message")||this;return i.message=t,i}return __extends(t,n),t}(DialogFieldViewModel),DialogSectionFieldViewModel=function(n){function t(t){var i=n.call(this,"section")||this;return i.title=t,i}return __extends(t,n),t}(DialogFieldViewModel),DialogTextFieldViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"text")||this;return o.fieldName=t,o.displayName=i,o.maxLength=r,o.optional=u||!1,o.visible=KnockoutExtensions.MakeObservableOrDefault(f,!0),o.hasFocus=KnockoutExtensions.MakeObservableOrDefault(e,!1),o}return __extends(t,n),t}(DialogFieldViewModel),DialogDisplayFieldViewModel=function(n){function t(t,i){var r=n.call(this,"display")||this;return r.fieldName=t,r.displayMessage=KnockoutExtensions.MakeObservable(i),r}return __extends(t,n),t}(DialogFieldViewModel),DialogDisplayFieldWithHeadingViewModel=function(n){function t(t,i,r){var u=n.call(this,"display-with-heading")||this;return u.fieldName=t,u.displayHeading=KnockoutExtensions.MakeObservable(i),u.displayMessage=KnockoutExtensions.MakeObservable(r),u}return __extends(t,n),t}(DialogFieldViewModel),DialogPasswordStrengthFieldViewModel=function(n){function t(t,i,r){var u=n.call(this,"password-strength")||this;return u.fieldName=t,u.displayMessage=KnockoutExtensions.MakeObservable(i),u.textColor=KnockoutExtensions.MakeObservable(r),u}return __extends(t,n),t}(DialogFieldViewModel),DialogColorFieldViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"colour")||this;return o.fieldName=t,o.displayName=i,o.maxLength=r,o.optional=u||!1,o.colorOffset=KnockoutExtensions.MakeObservable(f),o.colors=e,o}return __extends(t,n),t}(DialogFieldViewModel),DialogMultilineTextFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"multiline-text")||this;return e.fieldName=t,e.displayName=i,e.maxLength=r,e.optional=u||!1,e.visible=f||!0,e}return __extends(t,n),t}(DialogFieldViewModel),DialogNumberFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"number")||this;return e.fieldName=t,e.displayName=i,e.minValue=r,e.maxValue=u,e.optional=f||!1,e}return __extends(t,n),t}(DialogFieldViewModel),DialogNumberPresetFieldViewModel=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"number-preset")||this;return s.dialogModel=t,s.fieldName=i,s.displayName=r,s.optional=o||!1,s.quickSet=KnockoutExtensions.MakeObservable(0),s.optionList=KnockoutExtensions.MakeObservableArray(u),s.minValue=f,s.maxValue=e,ko.computed(function(){s.quickSet()&&!ko.computedContext.isInitial()&&s.dialogModel.model[i](s.quickSet())}),ko.computed(function(){s.quickSet(s.dialogModel.model[i]())}),s}return __extends(t,n),t}(DialogFieldViewModel),DialogIntNumberFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"int-number")||this;return e.fieldName=t,e.displayName=i,e.minValue=r,e.maxValue=u,e.optional=f||!1,e}return __extends(t,n),t}(DialogFieldViewModel),DialogDynamicNumberFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"dynamic-number")||this;return e.fieldName=t,e.displayName=KnockoutExtensions.MakeObservable(i),e.minValue=KnockoutExtensions.MakeObservable(r),e.maxValue=KnockoutExtensions.MakeObservable(u),e.optional=f||!1,e}return __extends(t,n),t}(DialogFieldViewModel),DialogPasswordFieldViewModel=function(n){function t(t,i){var r=n.call(this,"password")||this;return r.fieldName=t,r.displayName=i,r}return __extends(t,n),t}(DialogFieldViewModel),DialogNewPasswordFieldViewModel=function(n){function t(t,i,r,u){var f=n.call(this,"new-password")||this;return f.fieldName=t,f.displayName=i,f.fieldNameConfirm=r,f.displayNameConfirm=u,f}return __extends(t,n),t}(DialogFieldViewModel),DialogDropDownListFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"drop-down-list")||this;return e.fieldName=t,e.displayName=i,e.optionText=r,e.optionValue=u,e.options=KnockoutExtensions.MakeObservableArray(f),e}return __extends(t,n),t}(DialogFieldViewModel),DialogTimeSpanFieldViewModel=function(n){function t(t,i,r){var u=n.call(this,"time-span")||this;return u.fieldName=t,u.displayName=i,u.optional=r||!1,u}return __extends(t,n),t}(DialogFieldViewModel),DialogTimeSpanSecondsFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"time-span-seconds")||this;return e.dialogModel=t,e.fieldName=i,e.displayName=r,e.optional=u||!1,e.quickSet=KnockoutExtensions.MakeObservable(""),e.optionList=f!=null?f:["00:00:00","00:05:00","00:15:00","00:30:00","01:00:00","06:00:00","12:00:00","1.00:00:00","7.00:00:00"],ko.computed(function(){e.quickSet()&&!ko.computedContext.isInitial()&&e.dialogModel.model[i](e.quickSet())}),ko.computed(function(){e.quickSet(e.dialogModel.model[i]())}),e}return __extends(t,n),t}(DialogFieldViewModel),DialogTimeClockFieldViewModel=function(n){function t(t,i,r){var u=n.call(this,"time-clock")||this;return u.clockStart=KnockoutExtensions.MakeObservable(t),u.clockPeriod=KnockoutExtensions.MakeObservable(i),u.onPeriod=KnockoutExtensions.MakeObservable(r),u.epoch=Math.floor(new Date(2e3,0,1).getTime()/1e3),u.scaleL=d3.scaleLinear().rangeRound([0,1]),u.areaL=d3.area().x(function(n){return isNaN(u.scaleX(n.date))?0:u.scaleX(n.date)}).y1(function(n){return isNaN(u.scaleL(n.value))?0:u.scaleL(n.value)}),u}return __extends(t,n),t.prototype.RenderSvg=function(){return this.svg=d3.select("#svg-control").select("svg"),this.xaxis=this.svg.select("g"),this.xaxis.empty()&&(this.xaxis=this.svg.append("g").attr("transform","translate(0,15)")),this.scaleX=d3.scaleTime().rangeRound([15,374]),this.axisX=d3.axisBottom(this.scaleX),this.UpdateSvg(),!0},t.prototype.UpdateSvg=function(){var r,n,i,t;if(this.svg!=null&&!this.svg.empty()){r=3;n=GetSecondsInSpan(this.clockPeriod());n>86400&&(r=1);var e=(this.epoch+Math.floor((Math.floor((new Date).getTime()/1e3)-this.epoch)/n)*n)*1e3,f=new Date(e),l=new Date(e+n*1e3*r);this.scaleX.domain([f,l]);this.xaxis.call(this.axisX.ticks(6));var o=GetSecondsInSpan(this.clockStart())%n,a=GetSecondsInSpan(this.onPeriod()),s=new Date(f.getTime()+o*1e3),h=new Date(f.getTime()+o*1e3+a*1e3),u=this.svg.select("#time-period"),c=this.svg.select("#path-runtime"),v=this.svg.select("#path-startdelay");for(u.empty()&&(u=this.svg.append("g").attr("id","time-period"),c=u.append("path").attr("id","path-runtime"),v=u.append("path").attr("id","path-startdelay")),i=[],t=0;t<r;t++)i.push({date:new Date(s.getTime()+n*1e3*t),value:0}),i.push({date:new Date(s.getTime()+n*1e3*t),value:14}),i.push({date:new Date(h.getTime()+n*1e3*t),value:14}),i.push({date:new Date(h.getTime()+n*1e3*t),value:0});c.datum(i).attr("fill","#4caf50").attr("d",this.areaL)}},t}(DialogFieldViewModel),DialogDateFieldViewModel=function(n){function t(t,i,r){var u=n.call(this,"date")||this;return u.fieldName=t,u.displayName=i,u.optional=r||!1,u}return __extends(t,n),t}(DialogFieldViewModel),DialogDateTimeFieldViewModel=function(n){function t(t,i){var r=n.call(this,"date-time")||this;return r.fieldName=t,r.displayName=i,r}return __extends(t,n),t}(DialogFieldViewModel),DialogSingleFileUploadFieldViewModel=function(n){function t(t,i){var r=n.call(this,"single-file-upload")||this;return r.fieldName=t,r.displayName=i,r}return __extends(t,n),t}(DialogFieldViewModel),DialogMapFieldViewModel=function(n){function t(t,i,r){var u=n.call(this,"map")||this,f;return u.markersUrl=route.forControllerAction("Images","markers-v3.png"),u.icons={moduleMarker:{url:u.markersUrl,size:new google.maps.Size(20,20),origin:new google.maps.Point(4,60),anchor:new google.maps.Point(10,10)},nodeMarker:{url:u.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(14,14)},dragMarker:{url:u.markersUrl,size:new google.maps.Size(28,32),origin:new google.maps.Point(0,84)}},u.getCurrentLocation=function(n,t,i){navigator.geolocation?(n.locationMessage("Searching for your current location... "),navigator.geolocation.getCurrentPosition(function(r){n.latitude(r.coords.latitude.toFixed(6));n.longitude(r.coords.longitude.toFixed(6));n.locationMessage("Your current location is: "+r.coords.latitude.toFixed(6)+", "+r.coords.longitude.toFixed(6));t&&i.zoomTo(new google.maps.LatLng(r.coords.latitude,r.coords.longitude))},function(t){switch(t.code){case 1:n.locationMessage("You have denied location services for this site in the past.  To use this feature you need to re-enable location services for this site.");break;default:n.locationMessage(t.message)}},{enableHighAccuracy:!0,timeout:5e3,maximumAge:12e4})):n.locationMessage("Location services are not supported on this device")},u.markerDrag=function(){u.dragging(!0);u.dependsOnMarkerState(!u.dependsOnMarkerState());u.model.latitude(u.mapMarker.getPosition().lat().toFixed(6));u.model.longitude(u.mapMarker.getPosition().lng().toFixed(6));u.model.distance(u.distanceBetweenMarkerAndNode())},u.markerDragEnd=function(){u.dependsOnMarkerState(!u.dependsOnMarkerState());u.model.latitude(u.mapMarker.getPosition().lat().toFixed(6));u.model.longitude(u.mapMarker.getPosition().lng().toFixed(6));u.model.distance(u.distanceBetweenMarkerAndNode());u.dragging(!1)},u.distanceBetweenMarkerAndNode=function(){var n=google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(u.mapMarker.getPosition().lat(),u.mapMarker.getPosition().lng()),new google.maps.LatLng(u.originalLat,u.originalLng));return n>999.99?(n/1e3).toFixed(2)+"km":n.toFixed(2)+"m"},u.dragging=ko.observable(!1),u.dependsOnMarkerState=ko.observable(!1),u.followMarker=KnockoutExtensions.MakeObservable(!1),u.model=t,u.originalLat=t.latitude()!=null?t.latitude():BaseMapLocation.Latitude,u.originalLng=t.longitude()!=null?t.longitude():BaseMapLocation.Longitude,u.mapModel=new MapPageItem(!1,!1,!1),f=new MapItemsInfo,f.items=ko.observableArray([{Latitude:t.latitude(),Longitude:t.longitude()}]),f.getLatLng=function(n){return n.Latitude&&n.Longitude?new google.maps.LatLng(n.Latitude,n.Longitude):null},f.getText=function(n){if(n.Latitude==null||n.Longitude==null)return"";var t="lat:"+n.Latitude.toFixed(6)+", lng:"+n.Longitude.toFixed(6);return n.Name!=null?n.Name+" - "+t:t},f.getInfo=function(n){if(n.Latitude==null||n.Longitude==null)return"";var t="lat:"+n.Latitude.toFixed(6)+", lng:"+n.Longitude.toFixed(6);return n.Name!=null?n.Name+" - "+t:t},f.getIcon=function(){return u.icons[i]},f.getZIndex=function(){return 1},(r==undefined||r)&&u.mapModel.AddItems(f),setTimeout(function(){var n,i,r;u.mapMarker=new google.maps.Marker({icon:u.icons.dragMarker,position:t.latitude()==null||t.longitude()==null?u.mapModel.map.getCenter():{lat:t.latitude(),lng:t.longitude()},title:"Drag the marker to move the location",draggable:!0,zIndex:1e3});u.mapMarker.setMap(u.mapModel.map);u.dependsOnMarkerState.notifySubscribers();u.mapMarker.addListener("drag",u.markerDrag);u.mapMarker.addListener("dragend",u.markerDragEnd);u.mapModel.zoomTo(u.mapMarker.getPosition());n=document.createElement("div");n.index=0;i=function(t,i,r,u){var f=document.createElement("div"),e;return f.style.backgroundColor="#fff",f.style.border="2px solid #fff",f.style.borderRadius="2px",f.style.cursor="pointer",f.style.margin="10px",f.style.textAlign="center",f.title=i,f.id="mapControlBtn_"+r,n.appendChild(f),e=document.createElement("div"),e.style.color="rgb(25,25,25)",e.style.fontFamily="Roboto,Arial,sans-serif",e.style.fontSize="11px",e.style.padding="6px",e.innerHTML=t,f.appendChild(e),google.maps.event.addDomListener(f,"click",u),f};i("Get Current Location","Get current gps location","currentLocation",function(){return u.getCurrentLocation(t,u.followMarker(),u.mapModel)});r=i(u.followMarker()?"Unfollow Marker":"Follow Marker","Click to toggle","followMarker",function(){return u.followMarker(!u.followMarker())});ko.computed(function(){u.followMarker();r.style.margin="10px";r.style.padding="6px";r.innerHTML=u.followMarker()?"Unfollow Marker":"Follow Marker"});i("Zoom to marker","Click to zoom","zoomMarker",function(){return u.mapModel.zoomTo(u.mapMarker.getPosition())});u.mapModel.map.controls[google.maps.ControlPosition.LEFT_TOP].push(n)},1),u}return __extends(t,n),t}(DialogFieldViewModel),DialogAjaxDropDownListFieldViewModel=function(n){function t(t,i,r,u,f,e,o,s,h,c){var l=this;return l=h!=null&&h!=="ajax-drop-down-list"?n.call(this,h)||this:n.call(this,"ajax-drop-down-list")||this,l.dialogModel=t,l.fieldName=i,l.displayName=r,l.optionText=u,l.optionValue=f,l.sourceUrl=KnockoutExtensions.MakeObservable(e),l.options=ko.observableArray(s!=null?[s]:[]),l.originalOptions=ko.observableArray(s!=null?[s]:[]),l.loaded=ko.observable(!1),l.failed=ko.observable(!1),l.allowEmptySelection=o,l.visible=KnockoutExtensions.MakeObservableOrDefault(c,!0),l.optionsCaption=ko.computed(function(){return l.failed()?"Failed to load items":l.loaded()?l.options().length>0?l.allowEmptySelection&&l.options().length===l.originalOptions().length?"None":"Select an item from the list":"No items found":"Loading items..."},l).extend({throttle:100}),ko.computed(function(){h!=="ajax-drop-down-address-list"&&(l.loaded(!1),l.failed(!1),l.sourceUrl()?$.ajax(l.sourceUrl(),{data:{},type:"POST"}).done(function(n){var r,u,t,i;for(l.originalOptions.removeAll(),r=l.originalOptions(),u=n.length,t=0;t<u;++t)r.push(n[t]);l.originalOptions.valueHasMutated();l.options(r);l.loaded(!0);l.failed(!1);i=ko.unwrap(s);i&&l.originalOptions().some(function(n){return l.optionValue(n)===l.optionValue(i)})&&l.dialogModel.model[l.fieldName](f(i))}).fail(function(n){SessionExpiryRedirect(n);l.loaded(!1);l.failed(!0)}):(l.options([]),l.originalOptions([]),l.loaded(!0),l.failed(!1)))},l).extend({throttle:300}),l}return __extends(t,n),t}(DialogFieldViewModel),DialogAjaxDropDownAddressListFieldViewModel=function(n){function t(t,i,r,u,f,e,o,s,h){var c=n.call(this,t,i,r,u,f,e,o,s,"ajax-drop-down-address-list")||this;return c.dialogModel=t,c.fieldName=i,c.displayName=r,c.optionText=u,c.optionValue=f,c.sourceUrl=KnockoutExtensions.MakeObservable(e),c.options=ko.observableArray(s!=null?[s]:[]),c.originalOptions=ko.observableArray(s!=null?[s]:[]),c.loaded=ko.observable(!1),c.failed=ko.observable(!1),c.allowEmptySelection=o,c.showAddressInputs=ko.observable(!1),c.address=c.dialogModel.model.address,c.city=c.dialogModel.model.city,c.stateProvince=c.dialogModel.model.stateProvince,c.code=c.dialogModel.model.code,c.country=c.dialogModel.model.country,c.isDDLSelectable=c.dialogModel.model.isDDLSelectable,c.showSaveOption=KnockoutExtensions.MakeObservableOrDefault(h,!0),c.optionsCaption=ko.computed(function(){return c.failed()?"Failed to load items":c.loaded()?c.options().length>0?c.allowEmptySelection&&c.options().length===c.originalOptions().length?"None":"Select an item from the list":"No items found":"Loading items..."},c).extend({throttle:100}),ko.computed(function(){c.showAddressInputs(c.dialogModel.model[c.fieldName]()===-1)},c).extend({throttle:100}),ko.computed(function(){c.loaded(!1);c.failed(!1);c.sourceUrl()?$.ajax(c.sourceUrl(),{data:{},type:"POST"}).done(function(n){var r,u,t,i;for(c.originalOptions.removeAll(),r=c.originalOptions(),u=n.length,t=0;t<u;++t)r.push(n[t]);c.originalOptions.valueHasMutated();c.options(r);c.options.push({AddressId:-1,FullAddress:"Create New"});c.loaded(!0);c.failed(!1);i=ko.unwrap(s);i&&c.originalOptions().some(function(n){return c.optionValue(n)===c.optionValue(i)})&&c.dialogModel.model[c.fieldName](f(i))}).fail(function(n){SessionExpiryRedirect(n);c.loaded(!1);c.failed(!0)}):(c.options([]),c.originalOptions([]),c.loaded(!0),c.failed(!1))},c).extend({throttle:300}),c}return __extends(t,n),t}(DialogAjaxDropDownListFieldViewModel),DialogFilterAjaxDropDownListFieldViewModel=function(n){function t(t,i,r,u,f,e,o,s,h,c,l,a,v){var y=n.call(this,t,i,r,u,f,e,o,s,a,v)||this;return y.DoesOptionMatchFilter=function(n){return!y.filterString()||y.ValueOf(n).toLowerCase().indexOf(y.filterString().toLowerCase())>-1},y.IsOptionInitialValue=function(n){if(y.initialValue==null)return!1;if(typeof y.initialValue!="object")return y.initialValue&&n===y.initialValue;for(var t in y.initialValue)if(y.initialValue.hasOwnProperty(t)&&(!n.hasOwnProperty(t)||y.initialValue[t]!==n[t]))return!1;return!0},y.IncludeOption=function(n){return y.IsOptionInitialValue(n)||y.DoesOptionMatchFilter(n)},y.initialValue=s,y.filterString=ko.observable(""),y.filterField=ko.observable(h),y.displayThreshold=ko.observable(c),y.size=ko.observable(l),y.visible=KnockoutExtensions.MakeObservableOrDefault(v,!0),ko.computed(function(){var t,n,i;y.options();t=document.getElementById(y.fieldName+"_filter");t&&t.getAttribute("data-threshold")!==""&&(n=document.getElementById(y.fieldName+"_filter_input"),i=n.value,i.length>0||+t.getAttribute("data-threshold")<=y.options().length?(n.removeAttribute("disabled"),a==="ajax-filter-drop-down-list"&&(n.style.display="block")):(n.setAttribute("disabled","true"),a==="ajax-filter-drop-down-list"&&(n.style.display="none")))}),ko.computed(function(){var n=y.filterString();y.FilterOptions(JSON.parse(JSON.stringify(y.originalOptions())),n)},y).extend({throttle:100}),y}return __extends(t,n),t.prototype.ValueOf=function(n){return n?this.filterField()?""+n[this.filterField()]:""+n:""},t.prototype.FilterOptions=function(n){var t=this,i;this.initialValue!=null&&!n.some(function(n){return t.optionValue(n)===t.optionValue(t.initialValue)})&&this.originalOptions().some(function(n){return t.optionValue(n)===t.optionValue(t.initialValue)})?this.options([this.initialValue].concat(n.filter(this.IncludeOption,this))):this.options(n.filter(this.IncludeOption,this));i=function(){return t.SetValue()};typeof this.SetValue=="function"&&ko.ignoreDependencies(i)},t.prototype.SetValue=function(){var n=this.options().filter(this.DoesOptionMatchFilter,this);n.length===1&&this.dialogModel.model[this.fieldName](this.optionValue(n[0]))},t}(DialogAjaxDropDownListFieldViewModel),DialogCompactFilterAjaxDropDownListFieldViewModel=function(n){function t(t,i,r,u,f,e,o,s,h,c,l,a){return n.call(this,t,i,r,u,f,e,o,s,h,c,l,a)||this}return __extends(t,n),t}(DialogFilterAjaxDropDownListFieldViewModel),DialogAjaxModuleUpgradeFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"ajax-module-upgrade-list")||this;return e.fieldName=t,e.displayName=i,e.templateUrl=KnockoutExtensions.MakeObservable(r),e.selectedTemplateId=KnockoutExtensions.MakeObservable(f),e.sourceModules=KnockoutExtensions.MakeObservableArray([]),e.templateModules=KnockoutExtensions.MakeObservableArray([]),e.currentModules=KnockoutExtensions.MakeObservableArray([]),e.mappedModules=KnockoutExtensions.MakeObservableArray([]),e.matchedModules=KnockoutExtensions.MakeObservableArray([]),e.unmappedTemplates=ko.computed(e.Unmapped,e).extend({throttle:50}),e.indexMap=ko.computed(e.GetIndexMap,e).extend({throttle:50}),e.indexDel=ko.computed(e.GetIndexDel,e),e.allModules=ko.computed(e.AllModules,e).extend({throttle:50}),$.ajax(u,{data:{},type:"POST"}).done(function(n){e.sourceModules(n)}).fail(function(n){SessionExpiryRedirect(n)}),ko.computed(function(){if(e.sourceModules(),e.templateUrl()&&e.selectedTemplateId())$.ajax(e.templateUrl(),{data:{},type:"POST"}).done(function(n){return e.ParseTemplates(n)}).fail(function(n){return SessionExpiryRedirect(n)});else{var n=function(){return e.ResetFromSource()};typeof e.ResetFromSource=="function"&&ko.ignoreDependencies(n)}},e).extend({throttle:300}),e}return __extends(t,n),t.prototype.MatchSourceModule=function(n){var t=null,i,r;return n.TargetIndex()!=null?(this.currentModules().forEach(function(i){i.ModuleIndex()===n.TargetIndex()&&(t=i)}),t!=null&&this.matchedModules.peek().indexOf(t.ModuleIndex())===-1&&(n.UpgradeType("Match"),n.TargetIndex(t.ModuleIndex()),this.matchedModules.peek().push(t.ModuleIndex())),t):(i=0,r=this.matchedModules.peek(),this.currentModules().forEach(function(u){r.indexOf(u.ModuleIndex())===-1&&u.CompatibleTypes().forEach(function(r){n.Type===r&&(i===0?t=u:n.ModuleIndex===u.ModuleIndex()&&(t=u),i+=1)})}),t!=null)?(r.push(t.ModuleIndex()),n.UpgradeType("Match"),n.TargetIndex(t.ModuleIndex()),t.ActionType.poke("assign"),t.AutoMethod.poke("auto"),t.TargetIndex.poke(n.ModuleIndex),t):null},t.prototype.TemplatedModule=function(n){return this.templateModules()[n]},t.prototype.FilteredIndexes=function(n){var t=[];return this.templateModules().forEach(function(i){n.CompatibleTypes().forEach(function(n){i.Type===n&&t.push(i.ModuleIndex)})}),t},t.prototype.GetIndexMap=function(){var i=[],n=this.templateModules();for(var t in n)n.hasOwnProperty(t)&&n[t]!=null&&i.push({Key:n[t].ModuleIndex,Value:this.mappedModules()[n[t].ModuleIndex]!=null?this.mappedModules()[n[t].ModuleIndex].TargetIndex():null});return i},t.prototype.GetIndexDel=function(){var t=this,n;return this.indexMap(),n=[],this.currentModules.peek().forEach(function(i){i!=null&&i.ActionType.peek()==="delete"&&t.indexMap().filter(function(n){return n.Value===i.ModuleIndex()}).length===0&&n.push(i.ModuleId())}),n},t.prototype.Unmapped=function(){var n=[];return this.templateModules().forEach(function(t){t.TargetIndex()==null&&n.push(t)}),n},t.prototype.AllModules=function(){var n=[];return this.currentModules().forEach(function(t){n.push(t)}),n.sort(function(n,t){return n.ModuleIndex()-t.ModuleIndex()}),n},t.prototype.ParseTemplates=function(n){var i=this,t;for(this.ResetFromSource(),t=0;t<n.length;++t)n[t].UpgradeType=ko.observable("New"),n[t].TargetIndex=ko.observable(null),this.templateModules.peek()[n[t].ModuleIndex]=n[t],this.mappedModules.peek()[n[t].ModuleIndex]=n[t];this.templateModules().forEach(function(n){i.MatchSourceModule(n)});this.templateModules.valueHasMutated();this.mappedModules.valueHasMutated();this.matchedModules.valueHasMutated()},t.prototype.ResetFromSource=function(){var n=this;this.currentModules.removeAll();ko.mapping.fromJS(this.sourceModules(),{},this.currentModules);this.templateModules.removeAll();this.mappedModules.removeAll();this.matchedModules.removeAll();this.currentModules().forEach(function(t){t.AutoMethod=ko.observable(null);t.ActionType=t.LastUpdateUtc()==null?ko.observable("delete"):ko.observable("orphan");t.TargetIndex=ko.observable(null);t.ActionType.subscribe(function(i){return n.ActionChanged(i,n,t)});t.TargetIndex.subscribe(n.BeforeTargetChanged,t,"beforeChange");t.TargetIndex.subscribe(function(i){return n.TargetChanged(i,t)})})},t.prototype.BeforeTargetChanged=function(n){this.PrevTarget=n},t.prototype.TargetChanged=function(n,t){if(this.currentModules().forEach(function(n){n.TargetIndex()===t.TargetIndex()&&n.ModuleIndex()!==t.ModuleIndex()&&n.TargetIndex(null)}),t.PrevTarget!=null&&this.templateModules()[t.PrevTarget]!=null&&(this.templateModules()[t.PrevTarget].TargetIndex(null),this.templateModules()[t.PrevTarget].UpgradeType("New"),t.PrevTarget=null),this.matchedModules.removeAll(),n!=null){var i=this.templateModules()[n];i.TargetIndex(t.ModuleIndex());i.UpgradeType("Manual")}},t.prototype.ActionChanged=function(n,t,i){var r;i.TargetIndex()!=null&&(r=t.templateModules()[i.TargetIndex()]);t.matchedModules.removeAll();i.ActionType(n);n!=="assign"&&(i.TargetIndex(null),i.AutoMethod("manual"),r!=null&&(r.TargetIndex(null),r.UpgradeType("New")));t.currentModules().forEach(function(t){t.ModuleIndex()===i.ModuleIndex()&&t.ActionType(n)})},t}(DialogFieldViewModel),DialogAjaxMultiSelectListFieldViewModel=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"ajax-multi-select-list")||this;return s.DoesOptionMatchFilter=function(n){return!s.filterString()||s.ValueOf(n).toLowerCase().indexOf(s.filterString().toLowerCase())>-1},s.IncludeOption=function(n){return s.DoesOptionMatchFilter(n)},s.filterString=ko.observable(""),s.fieldName=t,s.displayName=i,s.optionText=r,s.optionValue=u,s.sourceUrl=KnockoutExtensions.MakeObservable(f),s.options=ko.observableArray([]),s.originalOptions=ko.observableArray([]),s.loaded=ko.observable(!1),s.failed=ko.observable(!1),s.size=e,s.searchable=ko.observable(o||!1),ko.computed(function(){s.loaded(!1);s.failed(!1);s.sourceUrl()?$.ajax(s.sourceUrl(),{data:{},type:"POST"}).done(function(n){var t;s.options.removeAll();s.originalOptions.removeAll();var i=s.options(),r=s.originalOptions(),u=n.length;for(t=0;t<u;++t)i.push(n[t]),r.push(n[t]);s.options.valueHasMutated();s.originalOptions.valueHasMutated();s.loaded(!0);s.failed(!1)}).fail(function(n){SessionExpiryRedirect(n);s.loaded(!1);s.failed(!0)}):(s.options([]),s.loaded(!0),s.failed(!1))},s).extend({throttle:300}),ko.computed(function(){var n=s.filterString();s.FilterOptions(JSON.parse(JSON.stringify(s.originalOptions())),n)},s).extend({throttle:100}),s}return __extends(t,n),t.prototype.ValueOf=function(n){return n?""+this.optionText(n):""},t.prototype.FilterOptions=function(n){this.options(n.filter(this.IncludeOption,this))},t}(DialogFieldViewModel),DialogMultiSelectListFieldViewModel=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"ajax-multi-select-list")||this,h;s.DoesOptionMatchFilter=function(n){return!s.filterString()||s.ValueOf(n).toLowerCase().indexOf(s.filterString().toLowerCase())>-1};s.IncludeOption=function(n){return s.DoesOptionMatchFilter(n)};s.filterString=ko.observable("");s.fieldName=t;s.displayName=i;s.optionText=r;s.optionValue=u;s.sourceData=KnockoutExtensions.MakeObservableArray(f);s.options=ko.observableArray([]);s.originalOptions=ko.observableArray([]);s.size=e;s.searchable=ko.observable(o||!1);s.options.removeAll();s.originalOptions.removeAll();var c=s.options(),l=s.originalOptions(),a=f.length;for(h=0;h<a;++h)c.push(f[h]),l.push(f[h]);return s.options.valueHasMutated(),s.originalOptions.valueHasMutated(),ko.computed(function(){var n=s.filterString();s.FilterOptions(JSON.parse(JSON.stringify(s.originalOptions())),n)},s).extend({throttle:100}),s}return __extends(t,n),t.prototype.ValueOf=function(n){return n?""+this.optionText(n):""},t.prototype.FilterOptions=function(n){this.options(n.filter(this.IncludeOption,this))},t}(DialogFieldViewModel),DialogCheckBoxFieldViewModel=function(n){function t(t,i,r){var u=n.call(this,"check-box")||this;return u.fieldName=t,u.displayName=i,u.visible=KnockoutExtensions.MakeObservableOrDefault(r,!0),u}return __extends(t,n),t}(DialogFieldViewModel),DialogCommandButtonFieldViewModel=function(n){function t(t,i,r,u){var f=n.call(this,"command-button")||this;return f.fieldName=t,f.displayName=KnockoutExtensions.MakeObservable(i),f.command=r,f.visible=KnockoutExtensions.MakeObservableOrDefault(u,!0),f}return __extends(t,n),t}(DialogFieldViewModel),DialogCheckBoxCommandFieldViewModel=function(n){function t(t,i,r,u){var f=n.call(this,"check-box-command")||this;return f.fieldName=t,f.displayName=i,f.command=r,f.visible=KnockoutExtensions.MakeObservableOrDefault(u,!0),f}return __extends(t,n),t}(DialogFieldViewModel),DialogOptionalCheckBoxFieldViewModel=function(n){function t(t,i){var r=n.call(this,"optional-check-box")||this;return r.fieldName=t,r.displayName=i,r}return __extends(t,n),t}(DialogFieldViewModel),DialogCheckBoxListFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"check-box-list")||this;return e.fieldName=t,e.displayName=i,e.availableOptions=KnockoutExtensions.MakeObservableArray(r),e.optionText=u,e.optionValue=f,e}return __extends(t,n),t}(DialogFieldViewModel),DialogAjaxCheckBoxListFieldViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"ajax-check-box-list")||this;return e.fieldName=t,e.displayName=i,e.optionText=r,e.optionValue=u,e.sourceUrl=f,e.availableOptions=ko.observableArray(),e.selectedOptions=ko.observableArray(),e.loaded=ko.observable(!1),e.failed=ko.observable(!1),setTimeout(function(){$.ajax(f,{data:{},type:"POST"}).done(function(n){var i,t;for(e.availableOptions.removeAll(),e.selectedOptions.removeAll(),i=n.length,t=0;t<i;++t)e.availableOptions.push(n[t]);e.loaded(!0);e.failed(!1)}).fail(function(n){SessionExpiryRedirect(n);e.loaded(!1);e.failed(!0)})},1),e}return __extends(t,n),t}(DialogFieldViewModel),DialogListFieldViewModel=function(n){function t(t,i,r,u){var f=n.call(this,"list")||this;return f.displayName=t,f.list=KnockoutExtensions.MakeObservableArray(i),f.itemText=r,f.visible=u||function(){return!0},f}return __extends(t,n),t}(DialogFieldViewModel),DialogPackingListViewModel=function(n){function t(t,i){var r=n.call(this,"packing-list")||this;return r.displayName=t,r.sourceData=KnockoutExtensions.MakeObservableArray(i),r}return __extends(t,n),t}(DialogFieldViewModel),DialogChildDeviceListViewModel=function(n){function t(t,i){var r=n.call(this,"child-device-list")||this;return r.displayName=t,r.sourceData=KnockoutExtensions.MakeObservableArray(i),r}return __extends(t,n),t}(DialogFieldViewModel),DialogIndexValueDescriptionListViewModel=function(n){function t(t,i,r){var u=n.call(this,"index-value-description-list")||this;return u.displayName=t,u.sourceData=KnockoutExtensions.MakeObservableArray(i),u.itemDescription=r,u}return __extends(t,n),t}(DialogFieldViewModel),DialogKeyValuePairListViewModel=function(n){function t(t,i,r,u){var f=n.call(this,"key-value-pair-list")||this;return f.displayName=t,f.sourceData=KnockoutExtensions.MakeObservableArray(i),f.key=r,f.value=u,f}return __extends(t,n),t}(DialogFieldViewModel),DialogViewModel=function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a){this.formUrl=ko.isComputed(n)?n:ko.computed(function(){return n});this.formTitle=t;this.formSubmit=i;this.model=r;this.getSubmitData=u;this.validate=f;this.done=e;this.error=o;this.fields=KnockoutExtensions.MakeObservableArray(s);this.downloadForm=h;this.multiSubmit=l;this.submitFunc=c;this.showOptionalCheckbox=ko.observable(!1);this.visible=KnockoutExtensions.MakeObservableOrDefault(a,!0)}return n.prototype.GetSubmitData=function(){return this.getSubmitData(this.model)},n.prototype.Done=function(n){this.done&&this.done(this.model,n)},n.prototype.Error=function(n,t){this.error&&this.error(n,t)},n.prototype.FieldTemplate=function(n){return n.templateName},n}(),DialogViewModelBuilder=function(){function n(n,t,i,r){this.dialogModel=new DialogViewModel(n,t,i,r,null,null,null,null,null,null,null,null)}return n.prototype.SubmitData=function(n){return this.dialogModel.getSubmitData=n,this},n.prototype.Done=function(n){return this.dialogModel.done=n,this},n.prototype.Error=function(n){return this.dialogModel.error=n,this},n.prototype.SectionField=function(n){return this.dialogModel.fields.push(new DialogSectionFieldViewModel(n)),this},n.prototype.MessageField=function(n){return this.dialogModel.fields.push(new DialogMessageFieldViewModel(n)),this},n.prototype.HtmlField=function(n){return this.dialogModel.fields.push(new DialogHtmlFieldViewModel(n)),this},n.prototype.TextField=function(n,t,i,r,u,f){return this.dialogModel.fields.push(new DialogTextFieldViewModel(n,t,i,r,u,f)),this},n.prototype.DisplayField=function(n,t){return this.dialogModel.fields.push(new DialogDisplayFieldViewModel(n,t)),this},n.prototype.DisplayFieldWithHeading=function(n,t,i){return this.dialogModel.fields.push(new DialogDisplayFieldWithHeadingViewModel(n,t,i)),this},n.prototype.PasswordStrenghtField=function(n,t,i){return this.dialogModel.fields.push(new DialogPasswordStrengthFieldViewModel(n,t,i)),this},n.prototype.ColorField=function(n,t,i,r,u,f){return this.dialogModel.fields.push(new DialogColorFieldViewModel(n,t,i,r,u,f)),this},n.prototype.MultilineTextField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogMultilineTextFieldViewModel(n,t,i,r,u)),this},n.prototype.NumberField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogNumberFieldViewModel(n,t,i,r,u)),this},n.prototype.NumberPresetField=function(n,t,i,r,u,f){return this.dialogModel.fields.push(new DialogNumberPresetFieldViewModel(this.dialogModel,n,t,i,r,u,f)),this},n.prototype.IntNumberField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogIntNumberFieldViewModel(n,t,i,r,u)),this},n.prototype.DynamicNumberField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogDynamicNumberFieldViewModel(n,t,i,r,u)),this},n.prototype.PasswordField=function(n,t){return this.dialogModel.fields.push(new DialogPasswordFieldViewModel(n,t)),this},n.prototype.NewPasswordField=function(n,t,i,r){return this.dialogModel.fields.push(new DialogNewPasswordFieldViewModel(n,t,i,r)),this},n.prototype.DropDownListField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogDropDownListFieldViewModel(n,t,i,r,u)),this},n.prototype.TimeSpanField=function(n,t,i){return this.dialogModel.fields.push(new DialogTimeSpanFieldViewModel(n,t,i)),this},n.prototype.TimeSpanSecondsField=function(n,t,i,r){return this.dialogModel.fields.push(new DialogTimeSpanSecondsFieldViewModel(this.dialogModel,n,t,i,r)),this},n.prototype.TimeClockField=function(n,t,i){return this.dialogModel.fields.push(new DialogTimeClockFieldViewModel(n,t,i)),this},n.prototype.DateField=function(n,t,i){return this.dialogModel.fields.push(new DialogDateFieldViewModel(n,t,i)),this},n.prototype.DateTimeField=function(n,t){return this.dialogModel.fields.push(new DialogDateTimeFieldViewModel(n,t)),this},n.prototype.SingleFileUploadField=function(n,t){return this.dialogModel.fields.push(new DialogSingleFileUploadFieldViewModel(n,t)),this},n.prototype.MapField=function(n,t,i){return this.dialogModel.fields.push(new DialogMapFieldViewModel(n,t,i)),this},n.prototype.AjaxDropDownListField=function(n,t,i,r,u,f,e,o){return this.dialogModel.fields.push(new DialogAjaxDropDownListFieldViewModel(this.dialogModel,n,t,i,r,u,f,e,o)),this},n.prototype.AjaxDropDownAddressListField=function(n,t,i,r,u,f,e,o){return this.dialogModel.fields.push(new DialogAjaxDropDownAddressListFieldViewModel(this.dialogModel,n,t,i,r,u,f,e,o)),this},n.prototype.AjaxFilterDropDownListField=function(n,t,i,r,u,f,e,o,s,h,c){return this.dialogModel.fields.push(new DialogFilterAjaxDropDownListFieldViewModel(this.dialogModel,n,t,i,r,u,f,e,o,s,h,"ajax-filter-drop-down-list",c)),this},n.prototype.AjaxCompactFilterDropDownListField=function(n,t,i,r,u,f,e,o,s,h){return this.dialogModel.fields.push(new DialogCompactFilterAjaxDropDownListFieldViewModel(this.dialogModel,n,t,i,r,u,f,e,o,s,h,"ajax-compactfilter-drop-down-list")),this},n.prototype.AjaxModuleUpgradeField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogAjaxModuleUpgradeFieldViewModel(n,t,i,r,u)),this},n.prototype.AjaxMultiSelectListField=function(n,t,i,r,u,f,e){return this.dialogModel.fields.push(new DialogAjaxMultiSelectListFieldViewModel(n,t,i,r,u,f,e)),this},n.prototype.MultiSelectListField=function(n,t,i,r,u,f,e){return this.dialogModel.fields.push(new DialogMultiSelectListFieldViewModel(n,t,i,r,u,f,e)),this},n.prototype.CheckBoxField=function(n,t,i){return this.dialogModel.fields.push(new DialogCheckBoxFieldViewModel(n,t,i)),this},n.prototype.CommandButtonField=function(n,t,i,r){return this.dialogModel.fields.push(new DialogCommandButtonFieldViewModel(n,t,i,r)),this},n.prototype.CheckBoxCommandField=function(n,t,i,r){return this.dialogModel.fields.push(new DialogCheckBoxCommandFieldViewModel(n,t,i,r)),this},n.prototype.OptionalCheckBoxField=function(n,t){return this.dialogModel.fields.push(new DialogOptionalCheckBoxFieldViewModel(n,t)),this},n.prototype.CheckBoxListField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogCheckBoxListFieldViewModel(n,t,i,r,u)),this},n.prototype.AjaxCheckBoxListField=function(n,t,i,r,u){return this.dialogModel.fields.push(new DialogAjaxCheckBoxListFieldViewModel(n,t,i,r,u)),this},n.prototype.ListField=function(n,t,i,r){return this.dialogModel.fields.push(new DialogListFieldViewModel(n,t,i,r)),this},n.prototype.PackingListField=function(n,t){return this.dialogModel.fields.push(new DialogPackingListViewModel(n,t)),this},n.prototype.IndexValueDescriptionListField=function(n,t,i){return this.dialogModel.fields.push(new DialogIndexValueDescriptionListViewModel(n,t,i)),this},n.prototype.KeyValuePairListField=function(n,t,i,r){return this.dialogModel.fields.push(new DialogKeyValuePairListViewModel(n,t,i,r)),this},n.prototype.Validate=function(n){return this.dialogModel.validate=n,this},n.prototype.Submit=function(n){return this.dialogModel.submitFunc=n,this},n.prototype.Create=function(){return this.dialogModel.downloadForm=!1,this.dialogModel.multiSubmit=!1,this.dialogModel},n.prototype.CreateDownload=function(){return this.dialogModel.downloadForm=!0,this.dialogModel.multiSubmit=!1,this.dialogModel},n.prototype.CreateMulti=function(){return this.dialogModel.downloadForm=!1,this.dialogModel.multiSubmit=!0,this.dialogModel},n}(),FormDialog=function(){function n(n,t){this.showMessage=n;this.model=t;this.errorMessage=ko.observable(null);this.noticeMessage=ko.observable(null);this.submitting=ko.observable(!1)}return n.prototype.Validate=function(n){if(!$(n).valid())return!1;if(this.model.validate){var t=this.model.validate(this.model.model);if(null!=t)return this.errorMessage(t),!1}return!0},n.prototype.Submit=function(n){var e=this,r,u,t,i,o,f;if(this.model.submitFunc)this.Validate(n)&&this.model.submitFunc(this.model.model);else if(this.model.formUrl()){if(this.Validate(n))if(this.model.downloadForm){this.showMessage("Downloading file");this.Close();$("#hiddenForm").remove();r=$("<form>").attr({id:"hiddenForm",action:this.model.formUrl(),method:"post",style:"display: none;"}).appendTo("body");u=this.model.GetSubmitData();for(t in u)if(u.hasOwnProperty(t))if(i=u[t],Array.isArray(i))for(o=i.length,f=0;f<o;++f)$("<input>").attr({name:t,value:i[f],type:"hidden"}).appendTo(r);else $("<input>").attr({name:t,value:i,type:"hidden"}).appendTo(r);r.submit()}else this.submitting(!0),$.ajax(this.model.formUrl(),{contentType:"application/json",data:JSON.stringify(this.model.GetSubmitData()),type:"POST"}).done(function(n){return e.SubmitSucceeded(n)}).fail(function(n){SessionExpiryRedirect(n);e.SubmitFailed()}).always(function(){return e.submitting(!1)})}else this.Close()},n.prototype.SubmitSucceeded=function(n){this.errorMessage(null);this.noticeMessage(null);n.Success?(this.model.showOptionalCheckbox(!1),this.showMessage(n.Message),this.model.multiSubmit?this.noticeMessage(n.Message||""):this.Close(),this.model.Done(n.Response)):(this.errorMessage(n.Message||"An error occurred while submitting your request - please try again later."),n.Response&&n.Response.code==="showOptionalCheckbox"&&(this.model.showOptionalCheckbox(!0),$(".overlay form :input").filter(":not([disabled]):visible:first").focus()),this.model.Error(n.Message,n.Response))},n.prototype.SubmitFailed=function(){this.errorMessage("An error occured while submitting your request - please try again later.")},n.prototype.Close=function(){page.CloseFormDialog()},n}(),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),PageItem=function(){function n(n){var t=this;this.addTileSet=function(n){return t.tileSets.push(n),t};this.type=n;this.tileSets=ko.observableArray([]);this.hasEnabledTiles=ko.computed(function(){for(var n,e,i,f,r=ko.unwrap(t.tileSets),o=r?r.length:0,u=0;u<o;++u)for(n=ko.unwrap(r[u]),e=n?n.length:0,i=0;i<e;++i)if(f=ko.unwrap(n[i]),f&&f.hasEnabledBlocks())return!0;return!1})}return n}(),DashboardActionButton=function(){function n(n,t,i,r,u){this.buttonIcon=KnockoutExtensions.MakeObservable(t);this.buttonTitle=KnockoutExtensions.MakeObservable(i);this.buttonAction=r;this.buttonEnable=KnockoutExtensions.MakeObservable(u)}return n}(),DashboardHeaderPageItem=function(n){function t(t,i,r,u){var f=n.call(this,"dashboardheader")||this;return f.id=KnockoutExtensions.MakeObservable(t||""),f.title=KnockoutExtensions.MakeObservable(i||""),f.buttons=KnockoutExtensions.MakeObservableArray([]),f.state=KnockoutExtensions.MakeObservableOrDefault(r,TileState.Idle),f.action=u,f.stateClass=ko.computed(function(){var n=f.state();return typeof n=="number"&&(n=TileState[n]),"state-"+(n||"Idle").toLowerCase()+(u?" clickable":"")},f),f.hasButtons=ko.computed(function(){return f.buttons().length>0},f),f}return __extends(t,n),t.prototype.addButton=function(n){this.buttons.push(n)},t.prototype.addButtons=function(n){var t=this;n.forEach(function(n){return t.buttons.push(n)})},t}(PageItem),HeaderPageItem=function(n){function t(t,i,r,u,f,e,o,s){var h=n.call(this,"header")||this;return h.title=KnockoutExtensions.MakeObservable(t),h.buttonIcon=KnockoutExtensions.MakeObservable(i),h.buttonTitle=KnockoutExtensions.MakeObservable(r),h.buttonAction=u,h.buttonEnable=KnockoutExtensions.MakeObservable(f),h.state=KnockoutExtensions.MakeObservableOrDefault(e,TileState.Idle),h.enabled=KnockoutExtensions.MakeObservableOrDefault(s,!0),h.action=o,h.stateClass=ko.computed(function(){var n=h.state();return typeof n=="number"&&(n=TileState[n]),"state-"+(n||"Idle").toLowerCase()+(o?" clickable":"")},h),h}return __extends(t,n),t}(PageItem),MessagePageItem=function(n){function t(t,i){var r=n.call(this,"message")||this;return r.text=KnockoutExtensions.MakeObservable(t),r.visible=KnockoutExtensions.MakeObservableOrDefault(i,!0),r}return __extends(t,n),t}(PageItem),HtmlBlockPageItem=function(n){function t(t){var i=n.call(this,"html-block")||this;return i.html=KnockoutExtensions.MakeObservable(t),i}return __extends(t,n),t}(PageItem),HtmlMessagePageItem=function(n){function t(t){var i=n.call(this,"html-message")||this;return i.html=KnockoutExtensions.MakeObservable(t),i}return __extends(t,n),t}(PageItem),SearchFormPageItem=function(n){function t(t,i,r){var u=n.call(this,"search-form")||this;return u.searchTerm=KnockoutExtensions.MakeObservable(""),u.searchTerm2=KnockoutExtensions.MakeObservable(""),u.searchTerm3=KnockoutExtensions.MakeObservable(""),u.searchType=KnockoutExtensions.MakeObservable(""),u.searchStatus=KnockoutExtensions.MakeObservable(""),u.searchTemplate=KnockoutExtensions.MakeObservable(r||""),u.formSubmit=i,u.searchModel=t,u}return __extends(t,n),t.prototype.ClearFields=function(){this.searchTerm("");this.searchTerm2("");this.searchTerm3("")},t}(PageItem),LoadingPageItem=function(n){function t(t){var i=n.call(this,"loading")||this;return i.loading=KnockoutExtensions.MakeObservableOrDefault(t,!1),i}return __extends(t,n),t}(PageItem),MapItemsInfo=function(){function n(){}return n}(),MapPolygonsInfo=function(){function n(){}return n}(),MapPolylinesInfo=function(){function n(){}return n}(),MapTrailsInfo=function(){function n(){}return n}(),MapFilterPageItem=function(n){function t(t,i,r){var u=n.call(this,"mapfilter")||this;return u.statusAll="all",u.statusOnline="online",u.statusOverdue="overdue",u.statusNoDeviceType="nodevicetype",u.noTypeText="*NONE*",u.map=r,u.filteredList=t,u.sourceList=i,u.status=ko.observable(u.statusAll),u.doZoom=ko.observable(!0),u.deviceType=ko.observable(""),u.typeOptions=ko.computed(function(){var n={},t,i;u.sourceList().forEach(function(t){var i=t.Type();i==null&&(i=u.noTypeText);isNaN(n[i])&&(n[i]=0);n[i]++});t=[];for(i in n)n.hasOwnProperty(i)&&t.push({Type:i,Count:n[i]});return t.sort(function(n,t){return n.Type===u.noTypeText?-1:t.Type===u.noTypeText?1:n.Type<t.Type?-1:n.Type>t.Type?1:0}),t}).extend({throttle:10}),ko.computed(function(){u.status();u.deviceType();u.StatusFilter();u.TypeFilter();var n=function(){return u.map.zoomToBounds()};u.doZoom()&&typeof u.map.zoomToBounds=="function"&&ko.ignoreDependencies(n)}).extend({throttle:100}),u.ToggleZoomHandler=function(){return u.ToggleZoom()},u}return __extends(t,n),t.prototype.StatusFilter=function(){switch(this.status()){case this.statusOverdue:this.filteredList(this.sourceList().filter(function(n){return n.IsOverdue()}));break;case this.statusOnline:this.filteredList(this.sourceList().filter(function(n){return!n.IsOverdue()}));break;case this.statusNoDeviceType:this.filteredList(this.sourceList().filter(function(n){return n.Type()==null}));break;default:this.filteredList(this.sourceList())}},t.prototype.TypeFilter=function(){var n=this;this.deviceType()===this.noTypeText?this.filteredList(this.filteredList.peek().filter(function(n){return n.Type()==null})):this.deviceType()!=null&&this.filteredList(this.filteredList.peek().filter(function(t){return t.Type()===n.deviceType()}))},t.prototype.TextFilter=function(){},t.prototype.FaultFilter=function(){},t.prototype.HasStatusAll=function(){return this.status()===this.statusAll},t.prototype.HasStatusOnline=function(){return this.status()===this.statusOnline},t.prototype.HasStatusOverdue=function(){return this.status()===this.statusOverdue},t.prototype.HasStatusNoDeviceType=function(){return this.status()===this.statusNoDeviceType},t.prototype.ToggleZoom=function(){this.doZoom(!this.doZoom())},t}(PageItem),MapPageItem=function(n){function t(t,i,r){var u=n.call(this,"map")||this;return u.itemSets=[],u.polygonSets=[],u.trailSets=[],u.polylineSets=[],u.expand=ko.observable(t),u.showAllNodesButton=KnockoutExtensions.MakeObservableOrDefault(i,!0),u.showAllPolygonsButton=KnockoutExtensions.MakeObservableOrDefault(r,!0),u}return __extends(t,n),t.prototype.zoomToBounds=function(){},t.prototype.zoomToPolygons=function(){},t.prototype.zoomTo=function(){},t.prototype.AddItems=function(n){var t={items:ko.isComputed(n.items)?n.items:KnockoutExtensions.MakeObservableArray(n.items),getLatLng:n.getLatLng,getText:n.getText,getInfo:n.getInfo,getIcon:n.getIcon||function(){return null},getZIndex:n.getZIndex||function(){return null}};return this.itemSets.push(t),t},t.prototype.AddPolygons=function(n){this.polygonSets.push(n)},t.prototype.AddTrails=function(n){this.trailSets.push(n)},t.prototype.AddPolylines=function(n){this.polylineSets.push(n)},t}(PageItem);ko.bindingHandlers.map={init:function(n,t,i,r){var h,b,u,c,k,l,d,f,a,g,v,nt,e,y,tt,o,p,it,s,w;if(r.mapModel!=null&&(r=r.mapModel),r.map=new google.maps.Map(n,{center:new google.maps.LatLng(BaseMapLocation.Latitude,BaseMapLocation.Longitude),zoom:14,mapTypeId:google.maps.MapTypeId.HYBRID,maxZoom:19}),r.infoWindow=new google.maps.InfoWindow,r.markers=[],r.map.updateSize=function(){var n=r.map.getCenter();google.maps.event.trigger(r.map,"resize");r.map.setCenter(n)},google.maps.event.addDomListener(window,"resize",function(){return r.map.updateSize()}),google.maps.event.addListener(r.map,"zoom_changed",function(){for(var e,n,i,u,o=r.map.getZoom()>=17,t=0,f=r.trailSets;t<f.length;t++)for(e=f[t],n=0,i=e.trails();n<i.length;n++)u=i[n],o?u.map.line.setOptions({icons:[{icon:rt,offset:"50%"}]}):u.map.line.setOptions({icons:[]})}),google.maps.event.addListener(r.map,"click",function(){return r.infoWindow.close()}),h=function(n,t){var i=new google.maps.Marker({position:null,map:r.map,draggable:!1});ko.computed(function(){i.setTitle(t.getText(n));i.setPosition(t.getLatLng(n));i.setZIndex(t.getZIndex(n));i.setIcon(t.getIcon(n))});google.maps.event.addListener(i,"click",function(){r.infoWindow.setContent("<div>"+t.getInfo(n)+"<\/div>");r.infoWindow.open(r.map,i)});n.map={marker:i,deleted:function(){i.setMap(null)}}},b=function(n){for(var r,t=0,i=n.items();t<i.length;t++)r=i[t],h(r,n);n.items.subscribe(function(t){for(var r=t.length,i=0;i<r;++i)switch(t[i].status){case"added":h(t[i].value,n);break;case"deleted":t[i].value.map&&t[i].value.map.deleted()}},null,"arrayChange")},r.zoomToBounds=function(){var n,a=function(t,i){t&&(n?(n.extend(t),i&&n.extend(i)):n=new google.maps.LatLngBounds(t||i,i))},t,o,v,i,s,h,u,c,y,f,l,e;if(r.itemSets!=null)for(t=0,o=r.itemSets;t<o.length;t++)for(v=o[t],i=0,s=v.items();i<s.length;i++)h=s[i],h.map.marker&&a(h.map.marker.getPosition());if(r.trailSets!=null)for(u=0,c=r.trailSets;u<c.length;u++)for(y=c[u],f=0,l=y.trails();f<l.length;f++)e=l[f],e.SouthWest&&a(e.SouthWest,e.NorthEast);n&&r.map.fitBounds(n)},r.zoomTo=function(n){r.map.fitBounds(new google.maps.LatLngBounds(n,n))},r.zoomToPolygons=function(){for(var f,t,e,h,i,o,c,n,l=function(t){t&&(n?n.extend({lat:ko.unwrap(t.Latitude),lng:ko.unwrap(t.Longitude)}):n=new google.maps.LatLngBounds({lat:ko.unwrap(t.Latitude),lng:ko.unwrap(t.Longitude)},{lat:ko.unwrap(t.Latitude),lng:ko.unwrap(t.Longitude)}))},u=0,s=r.polygonSets;u<s.length;u++)if(f=s[u],f.polygons!=null)for(t=0,e=f.polygons();t<e.length;t++)for(h=e[t],i=0,o=ko.unwrap(h.Coordinates);i<o.length;i++)c=o[i],l(c);n&&r.map.fitBounds(n)},r.itemSets!=null)for(u=0,c=r.itemSets;u<c.length;u++)k=c[u],b(k);if(l=function(n,t){var i=new google.maps.Polyline({strokeOpacity:0,icons:[{icon:{path:"M 0,-1 0,1",strokeOpacity:1,scale:2},offset:"0",repeat:"10px"}]});i.setPath(t.getLatLng(n));n.SetVisible=function(n){return i.setVisible(n)};n.map={polyline:i,deleted:function(){i.setMap(null)}};i.setMap(r.map)},d=function(n){var t,i,r;if(ko.unwrap(n.polylines)){for(t=0,i=n.polylines();t<i.length;t++)r=i[t],l(r,n);n.polylines.subscribe(function(t){for(var r=t.length,i=0;i<r;++i)switch(t[i].status){case"added":l(t[i].value,n);break;case"deleted":t[i].value.map&&t[i].value.map.deleted()}},null,"arrayChange")}},r.polylineSets!=null)for(f=0,a=r.polylineSets;f<a.length;f++)g=a[f],d(g);if(v=function(n,t){var i=new google.maps.Polygon({strokeColor:"#2faf11",strokeOpacity:.6,strokeWeight:2,fillColor:"#2faf11",fillOpacity:.3});google.maps.event.addListener(i,"click",function(i){var u=t.getInfo(n);u!=null&&(r.infoWindow.setContent("<div>"+u+"<\/div>"),r.infoWindow.setPosition(i.latLng),r.infoWindow.open(r.map))});ko.computed(function(){i.setPaths(t.getLatLng(n))});n.map={polygon:i,deleted:function(){i.setMap(null)}};i.setMap(r.map)},nt=function(n){var t,i,r;if(ko.unwrap(n.polygons)){for(t=0,i=n.polygons();t<i.length;t++)r=i[t],v(r,n);n.polygons.subscribe(function(t){for(var r=t.length,i=0;i<r;++i)switch(t[i].status){case"added":v(t[i].value,n);break;case"deleted":t[i].value.map&&t[i].value.map.deleted()}},null,"arrayChange")}},r.polygonSets!=null)for(e=0,y=r.polygonSets;e<y.length;e++)tt=y[e],nt(tt);var rt={path:google.maps.SymbolPath.FORWARD_CLOSED_ARROW,strokeWeight:3,strokeColor:"#ff0000"},ut=function(n){var t=new google.maps.Polyline({strokeColor:"#000000",strokeOpacity:1,strokeWeight:2,zIndex:5}),i=new google.maps.Polygon({strokeColor:"#1d3dc6",strokeWeight:0,fillColor:"#1d3dc6",fillOpacity:.3,zIndex:10}),u;google.maps.event.addListener(i,"click",function(t){var i=moment(n.StartUtc),u=moment(n.EndUtc);i.isSame(u,"day")?r.infoWindow.setContent("<div>"+i.local().format("YYYY-MM-DD")+"<br/>"+i.local().format("HH:mm:ss")+" to "+u.local().format("HH:mm:ss")+"<\/div>"):r.infoWindow.setContent("<div>"+i.local().format("YYYY-MM-DD HH:mm:ss")+"<br/>"+u.local().format("YYYY-MM-DD HH:mm:ss")+"<\/div>");r.infoWindow.setPosition(t.latLng);r.infoWindow.open(r.map)});u=t.getPath();ko.computed(function(){var r,f,i,e;for(u.clear(),r=ko.unwrap(n.Points),f=r.length,i=0;i<f;++i)e=r[i],u.setAt(i,new google.maps.LatLng(e.lat,e.lng));f>5&&animatePath(t)});i.setPaths(createLozengeArea(u.getAt(0),u.getAt(1)));i.setMap(r.map);n.SetAreaVisible=function(n){return i.setVisible(n)};t.setMap(r.map);n.map={line:t,deleted:function(){t.setMap(null);i.setMap(null)}}},ft=function(n){n.trails.subscribe(function(n){for(var t,i=0,r=n;i<r.length;i++)t=r[i],t.status==="added"?ut(t.value):t.status==="deleted"&&t.value.map&&t.value.map.deleted()},null,"arrayChange")};if(r.trailSets!=null)for(o=0,p=r.trailSets;o<p.length;o++)it=p[o],ft(it);r.polygonSets!=null&&r.polygonSets.length>0&&r.polygonSets[0].polygons!=null?r.zoomToPolygons():r.zoomToBounds();s=document.createElement("div");s.index=0;w=function(n,t,i,r){var u=document.createElement("div"),f;u.style.backgroundColor="#fff";u.style.border="2px solid #fff";u.style.borderRadius="2px";u.style.cursor="pointer";u.style.margin="10px";u.style.textAlign="center";u.title=t;u.id="mapControlBtn_"+i;s.appendChild(u);f=document.createElement("div");f.style.color="rgb(25,25,25)";f.style.fontFamily="Roboto,Arial,sans-serif";f.style.fontSize="11px";f.style.padding="6px";f.innerHTML=n;u.appendChild(f);google.maps.event.addDomListener(u,"click",r)};r.showAllNodesButton()&&w("All Nodes","Show all nodes","zoomNodes",r.zoomToBounds);r.showAllPolygonsButton()&&w("All Polygons","Show all polygons","zoomPolygons",r.zoomToPolygons);r.map.controls[google.maps.ControlPosition.LEFT_TOP].push(s)}};pointCount=12;radius=5;var __extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),TableColumnViewModel=function(){function n(n,t,i,r,u,f,e){var o=this;this.templateName=n+"-table-column-template";this.type=n;this.name=t;this.title=i;this.hideMobile=r;this.sortable=u;this.filterable=!1;this.GetValue=f||function(n){return ko.unwrap(n[o.name])};this.visible=KnockoutExtensions.MakeObservable(typeof e!="undefined"?e:!0);this.filterInput=ko.observable("");this.filterOption=ko.observable("");this.filterInputFocus=ko.observable(!1);this.filterToggle=ko.observable(!1)}return n}(),FilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"text",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),CurrencyFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"currency",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),NumberFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"text",t,i,r,u,f,e)||this;return o.type="number",o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),TextTableColumnViewModel=function(n){function t(t,i,r,u,f,e){return n.call(this,"text",t,i,r,u,f,e)||this}return __extends(t,n),t}(TableColumnViewModel),DateFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"date",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),DateOnlyFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"date-only",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),DueByDateFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"due-by-date",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),TimeagoFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"timeago",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),SyncTimespanFilterTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"sync-timespan",t,i,r,u,f,e)||this;return o.filterable=!0,o}return __extends(t,n),t}(TableColumnViewModel),DateTableColumnViewModel=function(n){function t(t,i,r,u,f,e){return n.call(this,"date",t,i,r,u,f,e)||this}return __extends(t,n),t}(TableColumnViewModel),IconTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"icon",t,"",r,u,f,e)||this;return o.tooltip=i,o}return __extends(t,n),t}(TableColumnViewModel),ImageTableColumnViewModel=function(n){function t(t,i,r,u,f,e){return n.call(this,"image",t,i,r,u,f,e)||this}return __extends(t,n),t}(TableColumnViewModel),CommandTableColumnViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"command",t,"",!1,!1,null,u)||this;return e.icon=i,e.action=r,e.enabled=f||function(){return!0},e}return __extends(t,n),t}(TableColumnViewModel),CommandWithDynamicIconTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"command-dynamic-icon",t,"",!1,!1,null,f)||this;return o.icon=i,o.action=u,o.enabled=e||function(){return!0},o.tooltip=r,o}return __extends(t,n),t}(TableColumnViewModel),HyperlinkTableColumnViewModel=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"hyperlink",t,"",o||!1,!1,null,f)||this;return s.icon=i,s.url=r,s.clickAction=u,s.enabled=e||function(){return!0},s}return __extends(t,n),t}(TableColumnViewModel),HyperlinkTextTableColumnViewModel=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"hyperlinktext",t,i,o||!1,!1,null,f)||this;return s.text=r,s.url=u,s.enabled=e||function(){return!0},s.filterable=!0,s.sortable=!0,s}return __extends(t,n),t}(TableColumnViewModel),MultipleFixHyperlinkTextTableColumnViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"multifixhyperlinktext",t,i,f||!1,!0)||this;return e.rowData=r||function(n){return n},e.enabled=u||function(){return!0},e.filterable=!1,e.taskFunction=function(n){return TaskTypes[ko.unwrap(n.Description)]},e}return __extends(t,n),t}(TableColumnViewModel),MultipleHyperlinkTextTableColumnViewModel=function(n){function t(t,i,r,u,f){var e=n.call(this,"multihyperlinktext",t,i,f||!1,!0)||this;return e.values=r,e.enabled=u||function(){return!0},e.filterable=!0,e.GetValue=function(n){return n.TargetInfo.reduce(function(n,t){return n+e.GetTargetText(t)},"")},e}return __extends(t,n),t.prototype.GetTargetText=function(n){var t=ko.unwrap(n);switch(t.TargetType){case TargetTypes.AlertAndStatus:return t.TargetType+":"+ko.unwrap(t.AlertAndStatus);case TargetTypes.App:return t.TargetType+":"+ko.unwrap(t.AppId);case TargetTypes.ApplicationTemplate:return t.TargetType+":"+ko.unwrap(t.ApplicationTemplateId);case TargetTypes.AppModuleSource:return t.TargetType+":"+ko.unwrap(t.AppModuleSourceId);case TargetTypes.BillingEntity:return t.TargetType+":"+ko.unwrap(t.BillingEntityId);case TargetTypes.CumulativeMeter:case TargetTypes.CumulativeMeterTotalAlarm:case TargetTypes.CumulativeMeterTimeAlarm:return t.TargetType+":"+ko.unwrap(t.CumulativeMeterId);case TargetTypes.DataStream:return t.TargetType+":"+ko.unwrap(t.DatastreamId);case TargetTypes.Device:return t.TargetType+":"+ko.unwrap(t.DeviceExtAddress);case TargetTypes.DeviceType:return t.TargetType+":"+ko.unwrap(t.DeviceTypeId);case TargetTypes.EscalationList:return t.TargetType+":"+ko.unwrap(t.EscalationListId);case TargetTypes.EscalationGroup:return t.TargetType+":"+ko.unwrap(t.EscalationGroupId);case TargetTypes.GisDataset:return t.TargetType+":"+ko.unwrap(t.GisDatasetId);case TargetTypes.Group:return t.TargetType+":"+ko.unwrap(t.GroupId);case TargetTypes.LegalTerms:return t.TargetType+":"+ko.unwrap(t.LegalTermsId);case TargetTypes.LogicApplication:return t.TargetType+":"+ko.unwrap(t.LogicApplicationId);case TargetTypes.ModuleConfigTemplate:return t.TargetType+":"+ko.unwrap(t.ModuleConfigTemplateId);case TargetTypes.Module:return t.TargetType+":"+ko.unwrap(t.ModuleId);case TargetTypes.Network:return t.TargetType+":"+ko.unwrap(t.NetworkId);case TargetTypes.NetworkNode:return t.TargetType+":"+FormatNodeAddress(ko.unwrap(t.NodeAddress));case TargetTypes.Note:return t.TargetType+":"+ko.unwrap(t.NoteId);case TargetTypes.PurchaseOrder:return t.TargetType+":"+ko.unwrap(t.PurchaseOrderId);case TargetTypes.ReportTemplate:return t.TargetType+":"+ko.unwrap(t.ReportTemplateId);case TargetTypes.Role:return t.TargetType+":"+ko.unwrap(t.RoleId);case TargetTypes.SharedCollection:return t.TargetType+":"+ko.unwrap(t.SharedCollectionId);case TargetTypes.Sim:return t.TargetType+":"+ko.unwrap(t.SimId);case TargetTypes.User:return t.TargetType+":"+ko.unwrap(t.UserId);case TargetTypes.UserGroup:return t.TargetType+":"+ko.unwrap(t.UserGroupId);case TargetTypes.Firmware:return t.TargetType+":"+ko.unwrap(t.FirmwareId);case TargetTypes.ExportTarget:return t.TargetType+":"+ko.unwrap(t.ExportTargetId);case TargetTypes.Unknown:return t.TargetType;default:return""}},t.prototype.PerformTargetAction=function(n){var t=ko.unwrap(n);switch(t.TargetType){case TargetTypes.AlertAndStatus:return views.Module_AlertDetails.Load(t.ModuleId,t.AlertAndStatus);case TargetTypes.App:return views.Application_Details.Load(t.AppId,null);case TargetTypes.ApplicationTemplate:return views.ApplicationTemplate_Details.Load(t.ApplicationTemplateId);case TargetTypes.AppModuleSource:return views.AppModuleSource_Details.Load(t.AppModuleSourceId,null);case TargetTypes.BillingEntity:return views.BillingEntity_Details.Load(t.BillingEntityId,null);case TargetTypes.CumulativeMeter:return views.CumulativeMeter_Details.Load(t.CumulativeMeterId);case TargetTypes.CumulativeMeterTimeAlarm:case TargetTypes.CumulativeMeterTotalAlarm:return ko.unwrap(t.CumulativeMeterId)>0?views.CumulativeMeter_Details.Load(t.CumulativeMeterId):null;case TargetTypes.DataStream:return views.DataStream_Details.Load(t.DatastreamId);case TargetTypes.Device:return views.Device_Details.Load(t.DeviceExtAddress);case TargetTypes.DeviceType:return views.DeviceType_Details.Load(t.DeviceTypeId,null);case TargetTypes.EscalationList:return views.EscalationList_Details.Load(t.EscalationListId);case TargetTypes.GisDataset:return views.GisDataset_Details.Load(t.GisDatasetId);case TargetTypes.Group:return views.Group_Details.Load(t.GroupId);case TargetTypes.LegalTerms:return views.LegalTerms_Details.Load(t.LegalTermsId);case TargetTypes.ModuleConfigTemplate:return views.Module_ConfigTemplates.Load(t.ModuleConfigTemplateId);case TargetTypes.Module:return views.Module_Details.Load(t.ModuleId);case TargetTypes.Network:return views.Network_Details.Load(t.NetworkId);case TargetTypes.NetworkNode:return views.Network_Node.Load(t.NetworkId,t.NodeAddress);case TargetTypes.Note:return views.Note_Details.Load(t.NoteId);case TargetTypes.PurchaseOrder:return views.PurchaseOrder_Details.Load(t.PurchaseOrderId,null);case TargetTypes.ReportTemplate:return views.Report_Details.Load(t.ReportTemplateId);case TargetTypes.Role:return views.Role_Details.Load(t.RoleId);case TargetTypes.SharedCollection:return views.SharedCollection_Details.Load(t.SharedCollectionId);case TargetTypes.Sim:return views.Sim_Details.Load(t.SimId);case TargetTypes.User:return views.User_Details.Load(t.UserId);case TargetTypes.Firmware:return null;case TargetTypes.ExportTarget:return null}return null},t}(TableColumnViewModel),ToggleTableColumnViewModel=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"toggle",t,"",!1,!1,null,f)||this;return o.selectedKeys=KnockoutExtensions.MakeObservableArray([]),o.enabled=e||function(){return!0},typeof i=="string"&&(i=[i]),o.getKey=function(n){for(var r,u={},f=i.length,t=0;t<f;++t)r=i[t],u[r]=ko.unwrap(n[r]);return u},o.keyEquals=function(n,t){for(var u,f=i.length,r=0;r<f;++r)if(u=i[r],n[u]!==t[u])return!1;return!0},o.isRowSelected=function(n){var t=o.getKey(n);return o.selectedKeys().some(function(n){return o.keyEquals(t,n)})},o.unselectRow=function(n){for(var i=o.getKey(n),r=o.selectedKeys().length,t=0;t<r;++t)if(o.keyEquals(i,o.selectedKeys()[t]))return o.selectedKeys.splice(t,1),!0;return!1},o.selectRow=function(n){o.isRowSelected(n)||o.selectedKeys.push(o.getKey(n))},o.icon=function(n){return ko.computed(function(){return o.isRowSelected(n)?r:u})},o.action=function(n){o.unselectRow(n)||o.selectedKeys.push(o.getKey(n))},o}return __extends(t,n),t.prototype.SelectAll=function(n){n.forEach(this.selectRow)},t.prototype.UnselectAll=function(){this.selectedKeys.removeAll()},t.prototype.Invert=function(n){n.forEach(this.action)},t}(TableColumnViewModel),FilterViewModel=function(){function n(n,t,i,r){this.column=ko.observable(n);this.type=ko.observable(t);this.input=ko.observable(i);this.option=ko.observable(r)}return n}(),TableViewModel=function(n){function t(t,i,r,u){var f=this;return f=u==null?n.call(this,"table")||this:n.call(this,u)||this,f.columns=KnockoutExtensions.MakeObservableArray([]),f.data=KnockoutExtensions.MakeObservableArray(t),f.rowClick=i,f.initialLoadComplete=ko.observable(!0),f.loadFailed=ko.observable(!1),f.enabled=KnockoutExtensions.MakeObservableOrDefault(r,!0),f.emptyMessage="No items to display",f.filters=KnockoutExtensions.MakeObservableArray([]),f.title=ko.observable(""),f}return __extends(t,n),t.prototype.RowsClickable=function(){return this.rowClick?!0:!1},t.prototype.RowClick=function(n){if(this.rowClick){var t=this.rowClick(n);t&&typeof t=="string"&&(window.location.href=t)}},t.prototype.AddColumn=function(n){return this.columns.push(n),n.filterable&&this.filters.push(new FilterViewModel(n.name,n.type,n.filterInput,n.filterOption)),this},t.prototype.AddTitle=function(n){return this.title(n),this},t.prototype.ColumnTemplate=function(n){return n.templateName},t.prototype.EmptyMessage=function(n){return this.emptyMessage=n,this},t}(PageItem),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AjaxPageRequest=function(){function n(n,t,i,r){this.Page=n;this.PageSize=t;this.SortColumn=i;this.SortAscending=r}return n}(),AjaxPageResponse=function(){function n(){}return n}(),AjaxFilterTableViewModel=function(n){function t(t,i,r,u,f,e,o,s,h){var c=n.call(this,h,u,e,"filtertable")||this;return c.minify=KnockoutExtensions.MakeObservableOrDefault(o,!1),c.hideRefresh=KnockoutExtensions.MakeObservableOrDefault(s,!1),c.supportsPaging=!0,c.url=KnockoutExtensions.MakeObservable(t),c.page=ko.observable(1),c.pageSize=ko.observable(f||10),c.sortColumn=ko.observable(i),c.sortAscending=ko.observable(r),c.filterToggle=ko.observable(!$("html").hasClass("mobile")),c.loading=ko.observable(!1),c.failedMessage=ko.observable(""),c.filteredData=ko.computed(function(){var t=c.data().filter(function(n){var t=!0;return c.filters().forEach(function(i){var a=ko.unwrap(i.column),f="",u=n[i.column()],r,e,o,s,h,l;c.columns().forEach(function(t){t.name===a&&t.GetValue(n)!==null&&(f=t.GetValue(n))});r=!0;switch(i.type()){case"text":case"sync-timespan":i.input()().length!==0&&(r=c.FuzzySearch(i.input()().toString().toLowerCase(),f.toString().toLowerCase()));break;case"multihyperlinktext":i.input()().length!==0&&(r=c.SequenceSearch(i.input()().toString().toLowerCase(),f.toString().toLowerCase()));break;case"number":if(i.input()().length===0)r=!0;else switch(i.option()()){case"text":r=c.FuzzySearch(i.input()().toString().toLowerCase(),f.toString().toLowerCase());break;case"equal":r=Number(u)===Number(i.input()());break;case"gequal":r=Number(u)>=Number(i.input()());break;case"lequal":r=Number(u)<=Number(i.input()());break;case"range":e=i.input()().split("-");r=Number(e[0])<=Number(u)&&Number(u)<=Number(e[1])}break;case"date":case"date-only":case"timeago":i.input()().toString().indexOf(" - ")>-1?(h=i.input()().split(" - "),o=h[0],s=h[1]):o=s=i.input()().toString();u!=null?(l=moment.utc(u.toString()).local().format("YYYY-MM-DD"),r=i.input()().length===0||o<=l&&l<=s):r=i.input()().length===0}t=t&&r}),t}),n;return c.sortColumn()!=null&&(n=c.sortAscending()?1:-1,t.sort(function(t,i){var r=ko.unwrap(t[c.sortColumn()]),u=ko.unwrap(i[c.sortColumn()]),f,e;return r==null||u==null?u!=null?-1*n:r!=null?1*n:0:(f=isNaN(r)||isNaN(u)?r.toString().toLowerCase():r,e=isNaN(r)||isNaN(u)?u.toString().toLowerCase():u,f<e?-1*n:f>e?1*n:0)})),t}).extend({throttle:250}),c.isFiltered=ko.computed(function(){return c.filteredData().length!==c.data().length||c.filters().some(function(n){return n.input()()!==""})}),c.pagedData=ko.computed(function(){return c.filteredData().slice((c.page()-1)*c.pageSize(),(c.page()-1)*c.pageSize()+c.pageSize())}),c.pageBegin=ko.computed(function(){return(c.page()-1)*c.pageSize()+1}),c.pageEnd=ko.computed(function(){return c.pageBegin()+c.pagedData().length-1}),c.pageCount=ko.computed(function(){var n=Math.ceil(c.filteredData().length/c.pageSize());return c.page()-1>n&&c.page(n),c.page()<1&&c.page(1),n}),c.pages=ko.computed(function(){for(var t=[],n=1;n<=c.pageCount();n++)t.push(n);return t}),c.initialLoadComplete(!1),c.SortHandler=function(n){return c.SetSort(n)},c.FilterHandler=function(){return null},c.FilterOptionsHandler=function(n){return c.SetFilterOptions(n)},c.FilterResetAllHandler=function(){return c.FilterResetAll()},ko.computed(function(){if(c.enabled()){var n=function(){return c.DataLoader()};typeof c.DataLoader=="function"&&ko.ignoreDependencies(n)}}).extend({throttle:100}),c}return __extends(t,n),t.prototype.FuzzySearch=function(n,t){for(var r,i=0;i<n.length;i++)if(r=t.indexOf(n.charAt(i)),r>-1)t=t.substr(r+1);else return!1;return!0},t.prototype.SequenceSearch=function(n,t){return t.indexOf(n)>-1},t.prototype.LoadData=function(){this.loading()||this.DataLoader()},t.prototype.DataLoader=function(){var n=this;if(this.loading(!0),ko.unwrap(this.url)==null){this.loading(!1);this.loadFailed(!1);this.initialLoadComplete(!0);this.sortColumn(this.sortColumn());this.sortAscending(this.sortAscending());return}$.ajax(ko.unwrap(this.url),{data:new AjaxPageRequest(this.page(),this.pageSize(),this.sortColumn(),this.sortAscending()),type:"POST"}).done(function(t){return n.SetData(t)}).fail(function(t){SessionExpiryRedirect(t);n.failedMessage("Failed to load data");n.SetFailed()}).always(function(){n.loading(!1);n.initialLoadComplete(!0)})},t.prototype.SetData=function(n){if(!n||!n.Success){this.data.removeAll();this.SetFailed();this.failedMessage(n?n.Message:"Failed to load data");return}this.loadFailed(!1);this.failedMessage("");this.sortColumn(this.sortColumn());this.sortAscending(this.sortAscending());this.data(n.Items)},t.prototype.SetFailed=function(){this.loadFailed(!0)},t.prototype.IsColumnCurrentSort=function(n){return n.sortable&&n.name===this.sortColumn()},t.prototype.IsColumnFilterable=function(n){return n.filterable},t.prototype.SetSort=function(n){n.sortable&&(this.sortColumn()===n.name?this.sortAscending(!this.sortAscending()):this.sortColumn(n.name))},t.prototype.SetFilterOptions=function(n){n.filterable&&(n.filterInput(""),n.filterInputFocus(!0))},t.prototype.FilterResetAll=function(){if(!this.isFiltered()){this.filterToggle(!this.filterToggle());return}this.filters().forEach(function(n){n.input()("");n.type()==="number"&&n.option()("equal")})},t.prototype.Pager=function(n){var t=this.page()-1,i=this.page()+1;return t<=1?n+1:i>=this.pageCount()?this.pageCount()+n-4:this.page()+n-2},t}(TableViewModel);ko.bindingHandlers.datepicker={init:function(n,t){var i=-1,r=-1,u=$(n),f={numberOfMonths:1,changeMonth:!0,changeYear:!0,dateFormat:"yy-mm-dd",beforeShowDay:function(n){return t()()===""&&(i=-1,r=-1),[!0,n.getTime()>=Math.min(r,i)&&n.getTime()<=Math.max(r,i)?"date-range-selected":""]},onClose:function(){u.data("datepicker").inline=!1},onSelect:function(n,f){u.data("datepicker").inline=!0;var e,o;r=i;i=new Date(f.selectedYear,f.selectedMonth,f.selectedDay).getTime();r===-1||r===i?(r=i,t()(n)):(e=$.datepicker.formatDate("yy-mm-dd",new Date(Math.min(r,i)),{}),o=$.datepicker.formatDate("yy-mm-dd",new Date(Math.max(r,i)),{}),t()(e+" - "+o))}};u.datepicker(f)}};var Page=function(){function n(){var n=this;this.defaultIntervalDelay=3e4;this.messageTimer=null;this.pageMessage=ko.observable(null);this.formDialog=ko.observable(null);this.items=KnockoutExtensions.MakeObservableArray([]);this.menuVisible=ko.observable(!1);this.capabilities=KnockoutExtensions.MakeObservableArray([]);this.currentTimeSeconds=ko.observable(Math.round(Date.now()/1e3));this.title=ko.observable("");this.parentTitle=ko.observable("");this.parentUrl=ko.observable("");this.powerGeniusBranding=ko.observable(!1);this.parentAction=null;this.Update=null;this.ViewRequests=ko.observableArray([]);this.view=ko.observable(null);this.tabHidden=ko.observable(!1);this.updateIntervalDelay=this.defaultIntervalDelay;this.currentUser={EffectiveUserId:ko.observable(0),IsImpersonating:ko.observable(!1),TimeZoneName:ko.observable(""),UtcOffsetHours:ko.observable(0)};ko.applyBindings(this,document.getElementsByTagName("html")[0]);$(document).click(function(){return n.HideMenu()});$(".page-menu-button").click(function(){return!1});$(document).keydown(function(n){n.keyCode===27&&$(".dialog .close").click()});n8s.persistentComputed(function(){n.tabHidden()?(clearInterval(n.updateInterval),clearInterval(n.currentTimeInterval)):(page&&page.Update&&!ko.computedContext.isInitial()&&n.minNextUpdateTime<Date.now()&&page.Update(),n.minNextUpdateTime=Date.now()+n.updateIntervalDelay/2,n.SetUpdateInterval(n.updateIntervalDelay),n.currentTimeInterval=setInterval(function(){n.currentTimeSeconds(Math.round(Date.now()/1e3))},1e3))}).extend({throttle:2e3})}return n.prototype.ClearItems=function(){this.CloseFormDialog();for(var n=0;n<n8s.disposable.length;n++)n8s.disposable[n].dispose();n8s.disposable=[];this.items([])},n.prototype.ClearUpdate=function(){clearInterval(this.updateInterval);page.Update=null},n.prototype.SetUpdate=function(n,t){page.Update=n;this.SetUpdateInterval(t||this.defaultIntervalDelay)},n.prototype.SetUpdateInterval=function(n){clearInterval(this.updateInterval);this.updateIntervalDelay=n;this.updateInterval=setInterval(function(){page.Update&&page.Update()},this.updateIntervalDelay)},n.prototype.ItemTemplate=function(n){return n.type+"-page-item-template"},n.prototype.Add=function(n){return n.stateClass||(n.stateClass=ko.computed(function(){var t=ko.unwrap(n.state);return typeof t=="number"&&(t=TileState[t]),"state-"+(t||"Idle").toLowerCase()+(n.action?" clickable":"")})),this.items.push(n),n},n.prototype.IsMenuVisible=function(){return this.menuVisible()},n.prototype.HideMenu=function(){this.menuVisible(!1)},n.prototype.ToggleMenu=function(){this.menuVisible(!this.menuVisible())},n.prototype.OpenFormDialog=function(n){var t=this;this.formDialog(new FormDialog(function(n){return t.SetMessage(n)},n));jQuery.validator.unobtrusive.parse($("form"));$(".overlay form :input").filter(":not([disabled]):visible:first").focus();$(".overlay .dialog .editor-fields").css("max-height",document.documentElement.clientHeight*.6)},n.prototype.CloseFormDialog=function(){this.formDialog(null)},n.prototype.SetMessage=function(n){var t=this;this.pageMessage(n);this.messageTimer&&clearTimeout(this.messageTimer);this.messageTimer=setTimeout(function(){return t.ClearMessage()},1e4)},n.prototype.ClearMessage=function(){this.pageMessage(null);this.messageTimer&&clearTimeout(this.messageTimer);this.messageTimer=null},n.prototype.HasCapability=function(n){return page.capabilities.indexOf(n)>-1},n.prototype.HasCapabilityComputed=function(n){var t=this;return ko.computed(function(){return t.HasCapability(n)})},n.prototype.HasCapabilitySetAnyComputed=function(n){var t=this;return ko.computed(function(){return n.filter(function(n){return t.HasCapability(n)}).length>0})},n.prototype.HasCapabilitySetAllComputed=function(n){var t=this;return ko.computed(function(){return n.filter(function(n){return t.HasCapability(n)}).length===n.length})},n.prototype.UpdateCapabilities=function(n){var r=page.capabilities()||[],t;n||(n=[]);var i=!1,u=n.length,f=r.length;if(u!==f&&(i=!0),!i)for(t=0;t<u;++t)if(r.indexOf(n[t])<=-1){i=!0;break}if(!i)for(t=0;t<f;++t)if(n.indexOf(r[t])<=-1){i=!0;break}i&&page.capabilities(n)},n.prototype.UpdateCurrentUser=function(n){if(n==null)throw"Current user is not set in the view model.";page.currentUser.EffectiveUserId(n.EffectiveUserId);page.currentUser.IsImpersonating(n.IsImpersonating);page.currentUser.TimeZoneName(n.TimeZoneName);page.currentUser.UtcOffsetHours(n.UtcOffsetHours)},n.prototype.GetPageItems=function(){for(var n,u,t,f=this.items(),i=[],r=0;r<f.length;++r)if(n=ko.unwrap(f[r]),isArray(n))for(u=Array.prototype.concat.apply([],n),t=0;t<u.length;++t)i.push(ko.unwrap(u[t]));else i.push(n);return i},n.prototype.SetTitle=function(n,t,i,r){var e=this,u=ko.unwrap(n),f=ko.unwrap(t);u&&(u=u.replace("&amp;","&"));f&&(f=f.replace("&amp;","&"));this.title(u);this.parentTitle(f);this.parentUrl(ko.unwrap(i));r||(r=function(){return window.location.href=e.parentUrl()});this.parentAction=r},n}(),page=new Page,__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}();ko.bindingHandlers.tiles={init:function(){}};var Tile=function(){function n(){var n=this;this.getBlockTemplate=function(n){return"tile-"+n.type+"-block-template"};this.hasEnabledBlocks=function(){for(var t,e,i,f,r=ko.unwrap(n.blockSets),o=r?r.length:0,u=0;u<o;++u)for(t=ko.unwrap(r[u]),e=t?t.length:0,i=0;i<e;++i)if(f=ko.unwrap(t[i]),!f.enabled||ko.unwrap(f.enabled))return!0;return!1};this.addBlockSet=function(t){return n.blockSets.push(t),n};this.getStateClass=function(){return ko.computed(function(){var t=ko.unwrap(n.state);return t&&!isNaN(t)&&(t=TileState[t]),"state-"+(t||"idle").toLowerCase()})};this.setState=function(t){return n.state=KnockoutExtensions.MakeObservable(t),n};this.setEnabled=function(t){return n.enabled=KnockoutExtensions.MakeObservable(t),n};this.blockSets=ko.observableArray([])}return n}(),Tiles=function(){function n(){var n=this;this.createTile=function(){return new Tile};this.makeTile=function(n){n.blockSets||(n.blockSets=ko.observableArray([]));n.getBlockTemplate=function(n){return"tile-"+n.type+"-block-template"};n.hasEnabledBlocks=function(){for(var t,e,i,f,r=ko.unwrap(n.blockSets),o=r?r.length:0,u=0;u<o;++u)for(t=ko.unwrap(r[u]),e=t?t.length:0,i=0;i<e;++i)if(f=ko.unwrap(t[i]),!f.enabled||ko.unwrap(f.enabled))return!0;return!1};n.addBlockSet=function(t){n.blockSets.push(t)};n.getStateClass=function(){return ko.computed(function(){var t=ko.unwrap(n.state);return t&&!isNaN(t)&&(t=TileState[t]),"state-"+(t||"idle").toLowerCase()})}};this.createPageItem=function(n){return n||(n=new PageItem("tiles")),n.type="tiles",n.tileSets||(n.tileSets=ko.observableArray([])),n};this.moduleTileMapping=function(t){return function(i){n.makeTile(i);i.enabled=ko.computed(function(){return t(i)});i.state=i.State;i.addBlockSet([new Header_Block(i.Icon,new Header_Text(i.Name,i.NetworkName,i.StatusText,i.StatusDescription,ko.computed(function(){return"Last update: "+FormatLastUpdateWithSeconds(moment.utc(i.LastUpdateUtc()))})),new Header_Actions(function(){return views.Module_Details.Load(i.ModuleId)}),null,null,i.SpecialIcon)]);i.addBlockSet(i.StatusValues);i.addBlockSet(i.Commands)}};this.moduleTileStatusValueMapping=function(n){return new SingleValue_Block(n.Name,n.Value,null,null,ko.computed(function(){return"state-"+ko.unwrap(n.State).toLowerCase()}))};this.moduleTileCommandMapping=function(n){return new Command_Block(n.Name,n.Description,null,ModuleCommand(n))};this.applyModuleTileMapping=function(t,i,r){t.extend||(t.extend={});t.arrayChildId||(t.arrayChildId={});r||(r=function(){return!0});t.arrayChildId[i]="ModuleId";t.extend[i+"[i]"]=n.moduleTileMapping(r);t.arrayChildId["StatusValues[i]"]="Name";t.extend["StatusValues[i]"]=n.moduleTileStatusValueMapping;t.arrayChildId["Commands[i]"]="Name";t.extend["Commands[i]"]=n.moduleTileCommandMapping};this.applyModuleTileMappingSingle=function(t,i,r){t.extend||(t.extend={});r||(r=function(){return!0});t.extend[i]=n.moduleTileMapping(r);t.arrayChildId["StatusValues[i]"]="Name";t.extend["StatusValues[i]"]=n.moduleTileStatusValueMapping;t.arrayChildId["Commands[i]"]="Name";t.extend["Commands[i]"]=n.moduleTileCommandMapping}}return n}(),tiles=new Tiles,Base_Block=function(){function n(n,t,i){this.type=n;this.action=i;this.enabled=KnockoutExtensions.MakeObservable(t||!0)}return n}(),Header_Text=function(){function n(n,t,i,r,u,f){this.Header=KnockoutExtensions.MakeObservable(n);this.SubHeader=KnockoutExtensions.MakeObservable(t);this.Value=KnockoutExtensions.MakeObservable(i);this.SubValue=KnockoutExtensions.MakeObservable(r);this.Footer=KnockoutExtensions.MakeObservable(u);this.Format=f}return n}(),Header_Actions=function(){function n(n,t,i,r,u,f,e,o){this.TileAction=n;this.HeaderAction=t;this.ValueAction=i;this.ActionEnable=KnockoutExtensions.MakeObservable(r||!0);this.HeaderTitle=KnockoutExtensions.MakeObservable(u);this.ValueTitle=KnockoutExtensions.MakeObservable(f);this.SubHeaderAction=e;this.SubValueAction=o}return n}(),Header_Block=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"header",u,r!=null?r.TileAction:null)||this;return o.icon=KnockoutExtensions.MakeObservable(t),o.mainHeader=i.Header,o.subHeader=i.SubHeader,o.mainValue=i.Value,o.subValue=i.SubValue,o.footer=i.Footer,o.mainFormat=i.Format,r&&(o.mainHeaderAction=r.HeaderAction,o.mainValueAction=r.ValueAction,o.subHeaderAction=r.SubHeaderAction,o.subValueAction=r.SubValueAction,o.actionEnable=KnockoutExtensions.MakeObservable(r.ActionEnable),o.mainHeaderTitle=r.HeaderTitle,o.mainValueTitle=r.ValueTitle),o.stateClass=KnockoutExtensions.MakeObservable(f),o.specialIcon=e,o}return __extends(t,n),t}(Base_Block),SingleValue_Block=function(n){function t(t,i,r,u,f){var e=n.call(this,"single-value",r,null)||this;return e.name=KnockoutExtensions.MakeObservable(t),e.value=KnockoutExtensions.MakeObservable(i),e.title=KnockoutExtensions.MakeObservable(u),e.stateClass=KnockoutExtensions.MakeObservable(f),e}return __extends(t,n),t}(Base_Block),PercentBar_Block=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"percent-bar",o,f)||this;return s.name=KnockoutExtensions.MakeObservable(t),s.value=KnockoutExtensions.MakeObservable(i),s.form=u,s.percent=KnockoutExtensions.MakeObservable(r),s.stateClass=KnockoutExtensions.MakeObservable(e),s}return __extends(t,n),t}(Base_Block),SmallHeader_Block=function(n){function t(t,i,r,u,f){var e=n.call(this,"small-header",i,r)||this;return e.text=KnockoutExtensions.MakeObservable(t),e.stateClass=KnockoutExtensions.MakeObservable(f),e.actionTitle=KnockoutExtensions.MakeObservable(u),e}return __extends(t,n),t}(Base_Block),Command_Block=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"command",f,u)||this;return s.name=KnockoutExtensions.MakeObservable(t),s.description=KnockoutExtensions.MakeObservable(i),s.form=r,s.title=KnockoutExtensions.MakeObservableOrDefault(e,s.name()&&s.name().length>12?s.name()+" : "+s.description():""),s.stateClass=KnockoutExtensions.MakeObservable(o),s}return __extends(t,n),t}(Base_Block),ExportValue_Block=function(n){function t(t,i,r,u,f,e,o,s){var h=n.call(this,"export-value",null,s)||this;return h.trendName=KnockoutExtensions.MakeObservable(t),h.target=KnockoutExtensions.MakeObservable(i),h.identifier=KnockoutExtensions.MakeObservable(r),h.scale=KnockoutExtensions.MakeObservable(u),h.lastExport=KnockoutExtensions.MakeObservable(f),h.startExport=KnockoutExtensions.MakeObservable(e),h.exportEnabled=KnockoutExtensions.MakeObservable(o),h}return __extends(t,n),t}(Base_Block),DataStream_Block=function(n){function t(t,i,r,u,f){var e=n.call(this,"data-stream",null,f)||this;return e.trend=KnockoutExtensions.MakeObservable(t),e.units=KnockoutExtensions.MakeObservable(i),e.id=KnockoutExtensions.MakeObservable(r),e.scale=KnockoutExtensions.MakeObservable(u),e}return __extends(t,n),t}(Base_Block),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),DataCollection=function(){function n(n,t){var i=this;(this.UpdateCollection=function(){var n=0,t=!1,r;i.collection.chartsModel().forEach(function(i,r){r===0&&(n=i.SortIndex());n>i.SortIndex()&&(t=!0)});t&&i.collection.chartsModel.sort(function(n,t){return n.SortIndex()-t.SortIndex()});i.collection.chartsModel().forEach(function(i){n=0;t=!1;i.ChartItems().forEach(function(i,r){r===0&&(n=i.SortIndex());n>i.SortIndex()&&(t=!0)});t&&i.ChartItems.sort(function(n,t){return n.SortIndex()-t.SortIndex()})});i.collection!=null&&(r="",i.collection.charts().forEach(function(n){r+=n.chartId()+",";var t="";n.chartItems().forEach(function(n){t+=n.chartItemId()+","});n.initialSort(t)}),i.collection.initialSort(r),i.collection.dataCollection.CheckForUpdates())},this.collection=n,this.data=[],this.numberIntervals=[],this.histogramIntervals=[],this.requestsNumber=[],this.parseUtc=d3.utcParse("%Y-%m-%dT%H:%M:%SZ"),this.refreshBuffer=60,t!=null)&&(this.numberIntervals=t.Number!=null?t.Number:[],this.histogramIntervals=t.Histogram!=null?t.Histogram:[])}return n.prototype.GetLod=function(n,t,i,r){var e=25+d3.utcHour.count(t,i),f="unknown",u;switch(n.itemType()){case"histogram":for(u in this.histogramIntervals)!this.histogramIntervals.hasOwnProperty(u)||+u>=e||(f=r?"h"+this.histogramIntervals[u]():this.histogramIntervals[u]());break;default:for(u in this.numberIntervals)!this.numberIntervals.hasOwnProperty(u)||+u>=e||(f=r?"n"+this.numberIntervals[u]():this.numberIntervals[u]())}return f},n.prototype.OffsetDate=function(n,t,i){if(t!==0)switch(i){case"D":n=d3.utcDay.offset(n,t);break;case"W":n=d3.utcDay.offset(n,t*7);break;case"Y":n=d3.utcDay.offset(n,t*365)}return n},n.prototype.AdjustByOffset=function(n,t,i,r){var o=""+d3.timeDay.floor(i).getTime(),u=this.data[n][t.chartItemId()][+o],e=0,f;(u!=null&&u.forEach(function(n){return e+=n.count}),f=0,d3.timeDay.floor(i).getTime()!==d3.timeDay.floor(new Date).getTime()&&(f=10),u!=null&&e+f>=86400/t.logInterval())||(r.required=!0,i=this.OffsetDate(i,-t.offsetValue(),t.offsetUnit()),r.changedDays.push(i.toISOString()))},n.prototype.AbortInFlightRequests=function(n){var r=[],t,i;for(this.collection.charts().forEach(function(n){n.chartItems().forEach(function(n){r[n.chartItemId()]=!0})}),t=this.requestsNumber.length-1;t>=0;t--)(i=this.requestsNumber[t],i.itemId!==n.chartItemId()&&r[i.itemId])||(this.requestsNumber.splice(t,1),n.isLoading(!1),i.request.abort())},n.prototype.RequestData=function(n){var e=this,t=this.GetLod(n,this.collection.datesUtc.zoomStart(),this.collection.datesUtc.zoomEnd(),!0),i,r,f,u;if(n.itemType()==="cumulative"||n.itemType()==="histogram"?(i=d3.timeDay.floor(this.collection.datesUtc.start()),r=d3.timeDay.ceil(d3.utcDay.offset(this.collection.datesUtc.end(),1))):(i=d3.timeDay.floor(this.collection.datesUtc.zoomStart()),r=d3.timeDay.ceil(d3.utcDay.offset(this.collection.datesUtc.zoomEnd(),1))),this.data[t]==null&&(this.data[t]={}),this.AbortInFlightRequests(n),this.data[t][n.chartItemId()]==null){this.Loader(n,i,r,t,null);return}f=d3.scaleTime().domain([i,d3.timeSecond.offset(r,-1)]).ticks(d3.timeDay);u={required:!1,changedDays:[]};f.forEach(function(i){return e.AdjustByOffset(t,n,i,u)});u.required?this.Loader(n,i,r,t,u.changedDays):this.Update(n,i,r,t)},n.prototype.Update=function(n,t,i,r){var u=[],c=this.data[r][n.chartItemId()],o=this.collection.datesUtc.zoomStart(),s=d3.utcDay.offset(this.collection.datesUtc.zoomEnd(),1),f={date:d3.utcDay.offset(o,-1),value:null},e={date:d3.utcDay.offset(s,1),value:null},h;(Object.keys(c).sort(function(n,t){return+n-+t}).forEach(function(n){c[n].forEach(function(n){o<=n.date&&n.date<=s?u.push(n):n.date<o&&n.date>f.date?f=n:n.date>s&&n.date<e.date&&(e=n)})}),u.length>0&&f.value!=null&&u.unshift(f),u.length>0&&e.value!=null&&u.push(e),h=!1,u.length>0&&n.data().length===u.length&&JSON.stringify(n.data())===JSON.stringify(u)&&(h=!0),h||(n.data(u),n.chart.chartSvg().Redraw()),n.itemType()==="cumulative")&&(this.data[r][n.chartItemId()]=null)},n.prototype.Loader=function(n,t,i,r,u){var f=this;if(n.itemType()==="tape"&&d3.timeDay.count(t,i)>35){n.data([]);n.chart.chartSvg().Redraw();return}var e=this.OffsetDate(t,-n.offsetValue(),n.offsetUnit()),o=this.OffsetDate(i,-n.offsetValue(),n.offsetUnit()),s={moduleid:ko.unwrap(n.moduleId),name:ko.unwrap(n.trend),startUtc:e.toISOString(),endUtc:o.toISOString(),daysRequired:u,totalIntervalHours:d3.timeHour.count(this.collection.datesUtc.zoomStart(),d3.timeDay.offset(this.collection.datesUtc.zoomEnd(),1))};n.itemType()!=null&&(n.isLoading(!0),this.requestsNumber.push({itemId:n.chartItemId(),request:d3.request(route.forControllerActionParams("Chart",n.itemType()==="line"?"D3NumberData":n.itemType()==="cumulative"?"D3CumulativeData":n.itemType()==="histogram"?"D3HistogramData":n.itemType()==="tape"?"D3BoolData":"")).mimeType("application/json").header("X-Requested-With","XMLHttpRequest").header("content-type","application/json").response(function(n){return JSON.parse(n.responseText)}).post(JSON.stringify(s),function(u){f.ProcessResponse(u,n,r,t,i)}).on("error",function(n){n&&SessionExpiryRedirect(n.target)})}))},n.prototype.ProcessResponse=function(n,t,i,r,u){var f=this,s=t.offsetValue(),e,o;if(n)n.forEach(function(n){n.value=+n.value;n.date=f.OffsetDate(f.parseUtc(n.date),s,t.offsetUnit())});else{t.isLoading(!1);return}e=d3.scaleTime().domain([r,u]).ticks(d3.timeDay);o=d3.nest().key(function(n){return""+d3.timeDay.floor(n.date).getTime()}).entries(n.filter(function(n){return!isNaN(n.value)}));this.data[i][t.chartItemId()]==null&&(this.data[i][t.chartItemId()]=[]);e.forEach(function(n){var u=""+d3.timeDay.floor(n).getTime(),r=o.filter(function(n){return n.key===u})[0];if(r!=null&&r.values!=null){var s=0,h=0,e=f.data[i][t.chartItemId()][+u];(e!=null&&(e.forEach(function(n){return s+=n.count}),r.values.forEach(function(n){return h+=n.count})),e!=null&&s>h)||(f.data[i][t.chartItemId()][+u]=r.values)}});this.Update(t,r,u,i);t.isLoading(!1)},n.prototype.CheckForUpdates=function(){var n=this,r=new Date,t=this.collection.datesUtc.zoomStart(),i=this.collection.datesUtc.zoomEnd();this.collection.charts().forEach(function(u){u.chartItemsNotHidden().forEach(function(u){var o=n.OffsetDate(r,u.offsetValue(),u.offsetUnit()).getTime(),e,s,f,h,c;if(!(t.getTime()>o)&&!(o>d3.utcDay.offset(i,1).getTime())){if(e=n.GetLod(u,t,i,!0),s=+n.GetLod(u,t,i,!1),n.data[e]==null||n.data[e][u.chartItemId()]==null){n.RequestData(u);return}if(f=n.data[e][u.chartItemId()][""+d3.timeDay.floor(t).getTime()],f==null||f.length===0){n.RequestData(u);return}(h=u.logInterval()!=null?u.logInterval()+n.refreshBuffer/f[f.length-1].count:s+n.refreshBuffer/f[f.length-1].count,c=(o-f[f.length-1].date.getTime())/1e3/(f[f.length-1].count+(s>=1440?1:0)),h>=c)||n.RequestData(u)}})})},n}(),ChartCollection=function(n){function t(t,i,r,u,f,e,o){var s=n.call(this,"chart-collection")||this,h,v;s.minZoomRange=36e5;s.hoverlineOpacity=.45;s.Resize=debounce(s.RedrawCharts,100,!1);s.isMobileView=KnockoutExtensions.MakeObservable(d3.select("html").classed("mobile"));s.dataCollection=new DataCollection(s,f);s.isFirstLoad=!0;s.parentClass=t;s.DropHandler=function(n,t){return s.Drop(n,t)};s.AllowDropHandler=function(n,t){return s.AllowDrop(n,t)};h={android:function(){return navigator.userAgent.match(/Android/i)},blackberry:function(){return navigator.userAgent.match(/BlackBerry/i)},ios:function(){return navigator.userAgent.match(/iPhone|iPad|iPod/i)},opera:function(){return navigator.userAgent.match(/Opera Mini/i)},windows:function(){return navigator.userAgent.match(/IEMobile/i)},any:function(){return h.android()||h.blackberry()||h.ios()||h.opera()||h.windows()}};s.supportsTouch=("ontouchstart"in window||navigator.msMaxTouchPoints)>0&&h.any()?!0:!1;var a=5,y=10,l=s.isMobileView()?35:50,c=s.isMobileView()?35:50;return s.defaultMargins={line:{top:a,right:c,bottom:y,left:l},histogram:{top:a,right:c,bottom:y,left:l},tape:{top:0,right:c,bottom:0,left:l},timescale:{top:a,right:c-40<0?27:c-40,bottom:0,left:l}},v=d3.timeDay.floor(new Date),s.chartCollectionId=KnockoutExtensions.MakeObservable(i),s.name=KnockoutExtensions.MakeObservable(r),s.isVirtual=KnockoutExtensions.MakeObservable(e),s.daysToDisplay=KnockoutExtensions.MakeObservable(u),s.datesUtc=new DatePicker(s,d3.timeDay.offset(v,-(s.daysToDisplay()-1)),v),s.chartsById=[],s.charts=KnockoutExtensions.MakeObservableArray([]),s.chartsModel=o,s.loadTrigger=KnockoutExtensions.MakeObservable(0),s.loadCounter=ko.computed(function(){s.loadTrigger();var n=0;return s.charts.peek().forEach(function(t){t.loadCount.peek()!==0&&(n+=t.loadCount.peek())}),n}),s.initialSort=KnockoutExtensions.MakeObservable(""),s.highestIndex=KnockoutExtensions.MakeObservable(-1),s.rolloverDate=KnockoutExtensions.MakeObservable(null),s.rolloverDateOnPoint=KnockoutExtensions.MakeObservable(null),s.pageBody=d3.select("#page-body").node(),s.pageContainer=d3.select("#page-container").node(),s.hasHiddenChartItems=KnockoutExtensions.MakeObservable(!1),ko.computed(function(){s.chartsModel();var n=function(){return s.SetCharts()};typeof s.SetCharts=="function"&&ko.ignoreDependencies(n)}).extend({throttle:100}),s.resizeDelay=!1,s.pageWidth=KnockoutExtensions.MakeObservable(0),s.bodyWidthPx=KnockoutExtensions.MakeObservable(""),window.addEventListener("resize",function(){s.WindowResize()},!0),setTimeout(function(){s.UpdateDates()},1),s}return __extends(t,n),t.prototype.ToggleAllChartsItemsDisplay=function(n){this.charts().forEach(function(t){t.hideChartItems(!n)});this.hasHiddenChartItems(!n)},t.prototype.SetCharts=function(){var n=this,t={};this.chartsModel().forEach(function(i){if(n.chartsById[i.ChartId()]==null){n.isVirtual()&&(i.DisplayHeight=n.parentClass.config.chartTypeOptions[i.Type()].Default);var r=new Chart(n,i.ChartId,i.Name,i.Type,i.SortIndex,i.LeftAxisTitle,i.RightAxisTitle,i.DisplayHeight,i.HideGridLines,i.HideLegends,i.HideFloatingLegend,i.OriginLZeroBased,i.OriginRZeroBased,i.HideBands,i.UseStackedAreas,i.ChartItems);n.charts.push(r);n.chartsById[i.ChartId()]=r;n.isFirstLoad===!1&&(i.ChartItems()==null||i.ChartItems().length===0)&&r.chartType()!=="timescale"&&page.OpenFormDialog(n.parentClass.AddItemToChartForm(r))}t[i.ChartId()]=!0});this.charts().forEach(function(i,r){t[i.chartId()]==null&&(n.chartsById[i.chartId()]=null,n.charts.splice(r,1))});this.Resequence(!1);this.isFirstLoad=!1},t.prototype.ReloadAll=function(){page.Update()},t.prototype.WindowResize=function(){var i=this,n,t;this.resizeDelay||(n=d3.select("div#page-container"),this.pageWidth(n.empty()?300:+n.style("width").split("px")[0]),t=d3.select(".chart-collection .drag-and-drop-zone"),this.bodyWidthPx(t.empty()?"300px":t.style("width")),this.isMobileView(d3.select("html").classed("mobile")),this.Resize(),this.resizeDelay=!0,setTimeout(function(){i.resizeDelay=!1},160))},t.prototype.RedrawCharts=function(){this.charts().forEach(function(n){typeof n.chartSvg=="function"&&n.chartSvg()!=null&&n.chartSvg().Redraw()})},t.prototype.AllowDrop=function(){},t.prototype.MoveChartUp=function(n){this.isVirtual()||(n.sortIndex(n.sortIndex()-1.5),this.Resequence())},t.prototype.MoveChartDown=function(n){this.isVirtual()||(n.sortIndex(n.sortIndex()+1.5),this.Resequence())},t.prototype.Drop=function(n,t){var u,o,f,r,s,i,e;if(!this.isVirtual())if(t.preventDefault(),u=t.originalEvent.dataTransfer.getData("text"),o=u.split("-")[0],o==="chart")f=n.type!=="chart-collection"?n.sortIndex():this.highestIndex(),this.charts().forEach(function(n){"chart-"+n.chartId()===u&&(n.sortIndex()>f?n.sortIndex(f-.5):n.sortIndex(f+.5))}),this.Resequence(),d3.selectAll(".drag-and-drop-zone").style("border","none"),d3.selectAll("#drop-div-null").style("display","none");else if(o==="item"){if(n.type!=="chart")return;if(r=n,r.chartType()==="timescale")return;if(s=u.split("-")[1],r.chartItemsById[s]!=null)return;if(i=null,e=null,this.charts().forEach(function(n){var t=n.chartItemsById[s];t!=null&&(i=n,e=t)}),r.chartType()==="tape"&&i.chartType()!=="tape"||r.chartType()!=="tape"&&i.chartType()==="tape"){toast("Incompatible trend type for destination");return}$.ajax(route.forControllerItemAction(this.parentClass.viewModel.SharedCollection!=null?"SharedCollection":"Chart",this.chartCollectionId(),"MoveItem"),{data:{sourceChartId:i.chartId(),sourceChartItemId:e.chartItemId(),targetChartId:n.chartId(),targetChartItemId:0,targetItemType:n.chartType()==="line"?e.itemType()==="cumulative"?"cumulative":"line":n.chartType()},type:"POST"}).done(function(n){n.Success?(i.chartItems().forEach(function(n){return n.data([])}),page.Update()):toast(n.Message)}).fail(function(n){return SessionExpiryRedirect(n)})}},t.prototype.Resequence=function(n){var u=this,t,r,i;(n===void 0&&(n=!0),this.isVirtual())||(t=this.charts,t().sort(function(n,t){return n.sortIndex()-t.sortIndex()}),r=[],t().forEach(function(n,t){n.sortIndex(t+1);r.push({Key:n.chartId(),Value:n.sortIndex()});u.highestIndex(t+1)}),t.valueHasMutated(),i="",t().forEach(function(n){i+=n.chartId()+","}),i!==this.initialSort())&&(this.initialSort(i),n)&&$.ajax(route.forControllerItemAction(this.parentClass.viewModel.SharedCollection!=null?"SharedCollection":"Chart",this.chartCollectionId(),"SetCollectionSortOrder"),{data:{newSortIndexList:r},type:"POST"}).done(function(n){toast(n.Message)}).fail(function(n){return SessionExpiryRedirect(n)})},t.prototype.UpdateDates=function(){var n=this;this.datesUtc!=null&&this.charts().forEach(function(t){typeof t.chartSvg=="function"&&t.chartSvg()!=null&&t.chartSvg().Update(n.datesUtc.zoomStart(),n.datesUtc.zoomEnd())})},t.prototype.ResetRollovers=function(){d3.selectAll(".chart-hover-marker-line").style("opacity",0);d3.selectAll(".legend-trend-values").style("opacity",0);d3.selectAll(".item-point-highlights").style("opacity",0);d3.selectAll(".item-point-texts").style("opacity",0);d3.selectAll("line.chart-hover-horizontal-lines").style("display","none");d3.select("#floating-legend").style("opacity",0);d3.selectAll(".path-container rect.bar").style("opacity",1);d3.selectAll(".path-container path.path-line").attr("opacity",1);d3.selectAll(".path-container path.path-line-band").attr("opacity",function(n){return n.chart.chartSvg().itemOpacity});d3.selectAll(".path-container g.barbin").attr("opacity",1)},t.prototype.RequestData=function(n){this.dataCollection.RequestData(n)},t}(PageItem),ChartOptions=function(){function n(n,t,i,r,u,f,e,o){var s=this;(this.hideGridLines=KnockoutExtensions.MakeObservable(t||!1),this.hideLegends=KnockoutExtensions.MakeObservable(i||!1),this.hideFloatingLegend=KnockoutExtensions.MakeObservable(r||!1),this.originLZeroBased=KnockoutExtensions.MakeObservable(u||!1),this.originRZeroBased=KnockoutExtensions.MakeObservable(f||!1),this.hideBands=KnockoutExtensions.MakeObservable(e||!1),this.useStackedAreas=KnockoutExtensions.MakeObservable(o||!1),n!=null)&&(this.chart=n,ko.computed(function(){s.hideLegends();typeof s.chart.hideLegend=="function"&&s.chart.hideLegend(s.hideLegends())}),ko.computed(function(){s.hideGridLines();s.originLZeroBased();s.originRZeroBased();s.hideBands();s.useStackedAreas();typeof s.chart.chartSvg=="function"&&s.chart.chartSvg().Redraw()}))}return n.prototype.List=function(){return[{Field:"hideGridLines",Name:"Hide Grid Lines",Value:this.hideGridLines()},{Field:"hideLegends",Name:"Hide Legends Section by Default",Value:this.hideLegends()},{Field:"hideFloatingLegend",Name:"Hide Floating Legend",Value:this.hideFloatingLegend()},{Field:"originLZeroBased",Name:"Left Origin Locked at Zero",Value:this.originLZeroBased()},{Field:"originRZeroBased",Name:"Right Origin Locked at Zero",Value:this.originRZeroBased()},{Field:"hideBands",Name:"Hide min/max Confidence Bands",Value:this.hideBands()},{Field:"useStackedAreas",Name:"Use Stacked Areas instead of Single Chart",Value:this.useStackedAreas()}]},n}(),Chart=function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){var w=this,b;this.type="chart";this.collection=n;this.DragHandler=function(n,t){return w.Drag(n.chart,t)};this.DragEndHandler=function(){return w.DragEnd()};this.HoverMoveHandler=function(n,t){return w.HoverMove(t)};this.HoverOffHandler=function(){return w.HoverOff()};this.ToggleCommandsHandler=function(){return w.ToggleCommands()};this.ToggleLegendsHandler=function(){return w.ToggleLegends()};this.ToggleChartItemsHandler=function(){return w.ToggleChartItemsDisplay()};this.DropHandler=function(n,t){return w.Drop(t)};this.AllowDropHandler=function(){return w.AllowDrop()};this.RenderSVG=function(){return w.Render()};this.options=KnockoutExtensions.MakeObservable(new ChartOptions(this,s,h,c,l,a,v,y));this.commandMode=KnockoutExtensions.MakeObservable(!1);this.hideLegend=KnockoutExtensions.MakeObservable(this.collection.isMobileView()||this.options().hideLegends());this.hideChartItems=KnockoutExtensions.MakeObservable(!1);this.dateFormatH=d3.timeFormat("%d-%b-%Y %H:%M");this.dateFormatD=d3.timeFormat("%d-%b-%Y");this.dateFormatM=d3.timeFormat("%b-%Y");this.mouseDelay=!1;this.holdDelay=250;this.chartItemsById=[];this.chartItems=KnockoutExtensions.MakeObservableArray([]);this.isSameNetwork=KnockoutExtensions.MakeObservable(!0);this.isSameNode=KnockoutExtensions.MakeObservable(!0);this.chartId=KnockoutExtensions.MakeObservable(t);this.chartName=KnockoutExtensions.MakeObservable(i);this.chartNetwork=KnockoutExtensions.MakeObservable("");this.chartNode=KnockoutExtensions.MakeObservable("");this.loadCount=KnockoutExtensions.MakeObservable(0);this.loadTrigger=KnockoutExtensions.MakeObservable(0);this.chartItemsModel=p;ko.computed(function(){w.chartItemsModel();var n=function(){return w.SetItems()};typeof w.SetItems=="function"&&ko.ignoreDependencies(n)}).extend({throttle:100});this.chartType=KnockoutExtensions.MakeObservable(r);this.sortIndex=KnockoutExtensions.MakeObservable(u);this.leftAxisTitle=KnockoutExtensions.MakeObservable(f);this.rightAxisTitle=KnockoutExtensions.MakeObservable(e);b=this.collection.defaultMargins[this.chartType()].top+this.collection.defaultMargins[this.chartType()].bottom;this.displayHeight=ko.computed(function(){return(ko.unwrap(o)+b*2)*(w.options().useStackedAreas()&&w.chartType()==="line"?p().length/2:1)});this.configHeight=KnockoutExtensions.MakeObservable(o);this.chartSvg=KnockoutExtensions.MakeObservable(null);this.heightPx=ko.computed(function(){return w.displayHeight()+"px"});ko.computed(function(){w.loadTrigger();w.loadCount(0);w.chartItems().forEach(function(n){n.isLoading()&&w.loadCount(w.loadCount()+1)});w.collection.loadTrigger(w.collection.loadTrigger.peek()+1)});this.chartItemsFiltered=ko.computed(function(){var n=[];return w.chartItems().forEach(function(t){t.data()==null||t.isHidden()||n.push(t)}),n});this.chartItemsNotHidden=ko.computed(function(){var n=[];return w.chartItems().forEach(function(t){t.isHidden()||n.push(t)}),n});this.chartItemsNotHiddenLength=ko.computed(function(){return w.chartItemsNotHidden().length});this.hasItemData=ko.computed(function(){return w.chartItems().filter(function(n){return n.data().length>0}).length>0});this.initialSort=KnockoutExtensions.MakeObservable("");this.highestIndex=KnockoutExtensions.MakeObservable(-1);this.chartItems().forEach(function(n){w.initialSort(w.initialSort()+n.chartItemId()+",");n.sortIndex()>w.highestIndex()&&w.highestIndex(n.sortIndex());w.chartItemsById[n.chartItemId()]=n});ko.computed(function(){w.chartName();w.chartType();w.leftAxisTitle();w.rightAxisTitle();w.displayHeight();var n=function(){w.Render();w.chartSvg()!=null&&w.chartSvg().Load()};typeof w.chartSvg=="function"&&ko.ignoreDependencies(n)}).extend({throttle:100});setInterval(function(){w.UpdateNow()},1e3)}return n.prototype.SetItems=function(){var n=this,e={},i="",r="",u,o,t,f;for(this.isSameNetwork(!0),this.isSameNode(!0),this.chartItemsModel().forEach(function(t){if(i===""&&(i=ko.unwrap(t.NetworkName)),r===""&&(r=ko.unwrap(t.NodeName)),n.isSameNetwork()&&i!==ko.unwrap(t.NetworkName)&&(n.isSameNetwork(!1),n.isSameNode(!1)),n.isSameNode()&&r!==ko.unwrap(t.NodeName)&&n.isSameNode(!1),n.chartNetwork(n.isSameNetwork()?i:""),n.chartNode(n.isSameNode()?r:""),n.chartItemsById[t.ChartItemId()]==null){t.AxisTitle()==null&&t.AxisTitle("");var u=new ChartItem(n.collection,n,t.ChartItemId,t.ChartId,t.NetworkName,t.NodeName,t.ModuleId,t.Trend,t.Name,t.SortIndex,t.OffsetValue,t.OffsetUnit,t.AxisTitle,t.Colour,t.ItemType,t.Precision,t.IsCumulative,t.MinScale,t.LogInterval);n.chartItems.push(u);n.chartItemsById[t.ChartItemId()]=u;u.Update()}e[t.ChartItemId()]=!0}),u=!1,o=this.chartItems().length,t=o-1;t>=0;t--)(f=this.chartItems()[t],e[f.chartItemId()]==null)&&(this.chartItemsById[f.chartItemId()]=null,this.chartItems.splice(t,1),u=!0);this.chartItems.sort(function(n,t){return n.sortIndex()-t.sortIndex()});this.chartItems.valueHasMutated();u&&(this.Render(),this.chartSvg().Update(this.collection.datesUtc.zoomStart(),this.collection.datesUtc.zoomEnd()));this.Resequence(!1)},n.prototype.Drop=function(n){var o,h,r,u,i,s,f,t,e;if(!this.collection.isVirtual()&&(n.preventDefault(),o=n.originalEvent.dataTransfer.getData("text"),h=o.split("-")[0],h==="item")&&(r=o.split("-")[1],u=d3.select(n.currentTarget).attr("data-chart-item-id"),u!=null&&r!==u))if(i=this.chartItemsById[r],s=this.chartItemsById[u],i!=null)f=s.sortIndex(),i.sortIndex()>f?i.sortIndex(f-.5):i.sortIndex(f+.5),this.Resequence();else{if(t=null,e=null,this.collection.charts().forEach(function(n){var i=n.chartItemsById[r];i!=null&&(t=n,e=i)}),this.chartType()==="tape"&&t.chartType()!=="tape"||this.chartType()!=="tape"&&t.chartType()==="tape"){toast("Incompatible trend type for destination");return}$.ajax(route.forControllerItemAction(this.collection.parentClass.viewModel.SharedCollection!=null?"SharedCollection":"Chart",this.collection.chartCollectionId(),"MoveItem"),{data:{sourceChartId:t.chartId(),sourceChartItemId:e.chartItemId(),targetChartId:this.chartId(),targetChartItemId:s.chartItemId(),targetItemType:this.chartType()==="line"?e.itemType()==="cumulative"?"cumulative":"line":this.chartType()},type:"POST"}).done(function(n){n.Success?(t.chartItems().forEach(function(n){return n.data([])}),page.Update()):toast(n.Message)}).fail(function(n){return SessionExpiryRedirect(n)})}},n.prototype.AllowDrop=function(){return!1},n.prototype.UpdateNow=function(){var n,f,e;if(!document.hidden&&(n=this.chartSvg(),f=new Date,n!=null&&n.scaleX!=null)){var t=n.scaleX(f),r=n.collection.defaultMargins[this.chartType()],o=+n.svg.style("width").split("px")[0]-r.left-r.right,i=n.svg.select(".chart-now-marker-line"),u=n.svg.select(".chart-now-marker-text");if(0<t&&t<o){if(i.empty()&&(e=n.svg.select("g").append("g").classed("now-container",!0),i=e.append("line").classed("chart-now-marker-line",!0),i.style("stroke","steelblue").style("stroke-width",1).attr("stroke-dasharray","3,1"),u=e.append("text").classed("chart-now-marker-text",!0).attr("fill","#000").attr("transform","rotate(-90)").attr("x",-this.displayHeight()/2).attr("y",t-2).attr("text-anchor","middle").style("font-size","11px")),i.attr("x1",t).attr("y1",-r.top).attr("x2",t).attr("y2",+n.svg.attr("height")-r.top).style("opacity",1),u.attr("y",t-2).style("opacity",1),this.chartType()==="timescale"||this.chartType()==="tape")return;u.text(d3.timeFormat("%d-%b %H: %M: %S")(f))}else i.style("opacity",0),u.style("opacity",0).text("")}},n.prototype.HoverMove=function(n){var u=this,t=this.chartSvg(),r,f,i;if(t!=null&&(r=t.svg.select("g").node(),r!=null)){if((d3.event==null||d3.event.type!=="zoom"&&d3.event.type!=="start")&&(d3.event=n),f=d3.mouse(r),i=f[0],i<0||t.width<i){t.collection.ResetRollovers();i<0?t.HoverLeft():i>t.width&&t.hasRightAxis()&&t.HoverRight();return}(this.collection.charts().forEach(function(n){n.hasItemData()&&n.chartItems().forEach(function(n){n.data().length!==0&&d3.select("#item-point-legend-"+n.chartItemId()+" .legend-trend-values").style("opacity",1)})}),d3.selectAll(".chart-hover-marker-line").style("opacity",1),d3.selectAll(".path-container path.path-line").each(function(n,t,i){return d3.select(i[t]).attr("opacity",1)}),d3.selectAll(".path-container path.path-line-band").attr("opacity",function(n){return n.chart.chartSvg().itemOpacity}),d3.selectAll(".path-container g.barbin").each(function(n,t,i){return d3.select(i[t]).attr("opacity",1)}),(t.GetType()==="Line Chart"||t.GetType()==="Histogram Chart")&&this.chartItemsNotHiddenLength()>0&&(this.hasItemData()&&!this.options().hideFloatingLegend()?d3.select("#floating-legend").style("opacity",1):d3.select("#floating-legend").style("opacity",0)),this.collection.rolloverDate(t.scaleX.invert(i)),this.mouseDelay)||(this.collection.charts().forEach(function(n){n.UpdateMove(i,n===u)}),d3.selectAll(".chart-hover-marker-line").attr("x1",i).attr("x2",i),this.mouseDelay=!0,setTimeout(function(){u.mouseDelay=!1},32))}},n.prototype.HoverOff=function(){this.chartSvg()!=null&&(this.collection.rolloverDate(null),typeof this.collection.ResetRollovers=="function")&&this.collection.ResetRollovers()},n.prototype.ToggleCommands=function(){this.commandMode(!this.commandMode())},n.prototype.ToggleLegends=function(){this.hideLegend(!this.hideLegend())},n.prototype.ToggleChartItemsDisplay=function(){this.hideChartItems(!this.hideChartItems())},n.prototype.UpdateMove=function(n,t){this.chartSvg()!=null&&this.chartSvg().scaleX!=null&&this.chartSvg().UpdateLegends(n,t)},n.prototype.FloatingLegend=function(n,t,i){var h=d3.mouse(this.collection.pageBody),c=d3.mouse(this.collection.pageContainer),o="",s;t.length>0&&(this.collection.rolloverDateOnPoint(i),t.forEach(function(n){o+='<tr class="nowrap"><td class="nowrap item-float-legend-value" style="color: #'+n.colour+'">'+n.name+'<\/td><td class="nowrap item-float-legend-value" style="">'+n.value+'<\/td><td class="nowrap item-float-legend-value-range" style="">'+n.range+"<\/td>";n.offset!==0&&(o+='<td class="nowrap item-float-legend-value-offset">-'+n.offset+" "+(n.offsetUnit==="D"?"day(s)":n.offsetUnit==="W"?"week(s)":n.offsetUnit==="M"?"month(s)":n.offsetUnit==="Y"?"year(s)":"")+"<\/td>");o+="<\/tr>"}));s=d3.select("#floating-legend");s.select(".item-float-legend-list").html(o);var u=+d3.select("#page-container").style("width").split("px")[0],r=+d3.select("#floating-legend").style("width").split("px")[0],l=+d3.select("#floating-legend").style("height").split("px")[0];r>u&&(r=u);var e=Math.floor(this.collection.isMobileView()?(u-r)/2:c[0]-r/2),a=Math.floor(h[1])-(l+20),f=25.5;e<f?(e=f,this.collection.isMobileView()&&r+f>u&&(r=u-f,s.style("width",r+"px"))):e+r+f>u&&(e=Math.floor(u-r-f));s.style("transform","translate("+e+"px,"+a+"px)")},n.prototype.Drag=function(n,t){return this.collection.isVirtual()?!1:(t!=null&&(t.originalEvent.dataTransfer.setData("text","chart-"+n.chartId()),setTimeout(function(){d3.selectAll(".drag-and-drop-zone").filter(function(t,i,r){return+d3.select(r[i]).attr("data-chart-id")!=+n.chartId()}).style("border","1px dashed blue");d3.selectAll("#drop-div-null").style("display",null)},1)),!0)},n.prototype.DragEnd=function(){d3.selectAll(".drag-and-drop-zone").style("border","1px solid #dddddd");d3.selectAll("#drop-div-null").style("display","none")},n.prototype.Brushing=function(){var r=this,n=this.chartSvg();if(n!=null&&n.svg!=null&&(this.chartType()!=="timescale"||this.collection.supportsTouch)){var t=this.collection.defaultMargins[this.chartType()],i=+n.svg.style("width").split("px")[0]-t.left-t.right,u=+n.svg.attr("height")-t.top-t.bottom;if(this.brush=d3.brushX().extent([[0,0],[i>0?i:0,u>0?u:0]]).on("end",function(){r.BrushEvent(n)}),this.zoom=d3.zoom().scaleExtent([0,Infinity]).duration(0).on("start zoom end",function(){r.TouchEvent(n,i,t)}),this.collection.supportsTouch)n.svg.call(this.zoom).on("dblclick.zoom",null);else n.svg.select("g").append("g").attr("class","brush").call(this.brush)}},n.prototype.TouchEvent=function(n,t,i){var o;if(d3.event!=null){if(d3.event.type==="start"){this.longPressTimer=performance.now();this.longPressTrigger=!0;d3.select("#d3-chart-svg-"+this.chartId()).select("div").dispatch("mousemove");return}if(this.longPressTrigger&&performance.now()-this.longPressTimer>this.holdDelay){d3.event.type!=="end"&&d3.select("#d3-chart-svg-"+this.chartId()).select("div").dispatch("mousemove");d3.event.transform.x=0;return}if(this.longPressTrigger=!1,d3.event.type==="zoom"){d3.event.transform.x=d3.event.transform.x+i.left*(d3.event.transform.k-1);var u=d3.event.transform.rescaleX(n.scaleX),f=u.invert(0),r=u.invert(t),e=r.getTime()-f.getTime();e<this.collection.minZoomRange&&(o=r.getTime()-e/2,f=new Date(o-this.collection.minZoomRange/2),r=new Date(o+this.collection.minZoomRange/2),d3.event.transform.k=d3.event.transform.k*(e/this.collection.minZoomRange),d3.event.transform.x=d3.event.transform.x*(d3.event.transform.k-1));r=d3.timeDay.offset(r,-1);this.collection.datesUtc.SetZoomRange(f,r);this.chartType()==="timescale"?n.svg.select("g.timescale-xaxis").call(n.axisX.scale(u)):n.svg.select("g.path-container").attr("transform","translate("+d3.event.transform.x+",0), scale("+d3.event.transform.k+",1)")}d3.event.type==="end"&&(d3.event.transform.k!==1||d3.event.transform.x!==0)&&(this.chartType()!=="timescale"&&n.svg.select("g.path-container").attr("transform","translate(0,0), scale(1)"),d3.event.transform.x=0,d3.event.transform.k=1,this.collection.UpdateDates(),this.collection.ResetRollovers())}},n.prototype.BrushEvent=function(n){var r,t,i;if(d3.event!=null)if(r=d3.event.selection,r)t=n.scaleX.invert(r[0],n.scaleX.invert),i=n.scaleX.invert(r[1],n.scaleX.invert),i.getTime()-t.getTime()<this.collection.minZoomRange&&(t=d3.timeHour.floor(t),i=d3.timeHour.ceil(i)),n.svg.select(".brush").call(d3.event.target.move,null),n.collection.datesUtc.SetZoomRange(t,d3.timeDay.offset(i,-1)),d3.selectAll(".item-point-highlights").style("opacity",0),d3.selectAll(".item-point-texts").style("opacity",0),n.collection.UpdateDates();else{if(!n.collection.datesUtc.IsZoomed()||d3.event.sourceEvent==null)return;n.collection.datesUtc.ResetZoom()}},n.prototype.Render=function(){var r=d3.select("#d3-chart-svg-"+this.chartId()).select("div"),t,i,n;if(!r.empty()){r.selectAll("*").remove();t=r.insert("svg",":first-child");i=this.displayHeight();this.chartType()==="tape"&&(i=i*this.chartItemsNotHiddenLength());t.attr("width","100%").attr("height",i).style("padding-right","16px").style("will-change","transform");n=null;switch(this.chartType()){case"line":n=new ChartSvgMultiLine(this.collection,this,t);break;case"histogram":n=new ChartSvgMultiHistogram(this.collection,this,t);break;case"tape":n=new ChartSvgMultiTape(this.collection,this,t);break;case"timescale":d3.select(".d3-axis.d3-axis-x").attr("clip-path","");n=new ChartSvgTimescale(this.collection,this,t)}n!=null&&this.chartSvg(n)}return this.Brushing(),!0},n.prototype.MoveItemUp=function(n){this.collection.isVirtual()||(n.sortIndex(n.sortIndex()-1.5),this.Resequence())},n.prototype.MoveItemDown=function(n){this.collection.isVirtual()||(n.sortIndex(n.sortIndex()+1.5),this.Resequence())},n.prototype.Resequence=function(n){var u=this,t,r,i;(n===void 0&&(n=!0),this.collection.isVirtual())||this.chartSvg!=null&&(t=this.chartItems,t().sort(function(n,t){return n.sortIndex()-t.sortIndex()}),r=[],t().forEach(function(n,t){n.sortIndex(t+1);r.push({Key:n.chartItemId(),Value:n.sortIndex()});n.data().forEach(function(i){i.chartItemId===n.chartItemId()&&(i.sortIndex=t+1)});u.highestIndex(t+1)}),t.valueHasMutated(),i="",t().forEach(function(n){i+=n.chartItemId()+","}),i!==this.initialSort())&&(this.initialSort(i),n)&&$.ajax(route.forControllerItemAction(this.collection.parentClass.viewModel.SharedCollection!=null?"SharedCollection":"Chart",this.chartId(),"SetChartSortOrder"),{data:{newSortIndexList:r},type:"POST"}).done(function(n){toast(n.Message)}).fail(function(n){return SessionExpiryRedirect(n)})},n}(),ChartItem=function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){var d=this;this.type="chart-item";this.collection=n;this.chart=t;this.data=KnockoutExtensions.MakeObservableArray([]);this.dataInRange=ko.computed(function(){return d.data().filter(function(n){return d.collection.datesUtc.zoomStart()<=n.date&&n.date<=d3.utcDay.offset(d.collection.datesUtc.zoomEnd(),1)})});this.HoverOnHandler=function(){return d.HoverOn()};this.HoverOffHandler=function(){return d.HoverOff()};this.DragHandler=function(n,t){return d.Drag(n,t)};this.DragEndHandler=function(){return d.DragEnd()};this.ToggleItemDisplayHandler=function(){return d.ToggleItemDisplay()};this.tLine=d3.transition("itemLegendRedraw").duration(50).ease(d3.easeLinear);this.tBand=d3.transition("bandLegendRedraw").duration(50).ease(d3.easeLinear);this.tTape=d3.transition("tapeLegendRedraw").duration(50).ease(d3.easeLinear);this.tHist=d3.transition("histLegendRedraw").duration(50).ease(d3.easeLinear);this.isCumulative=KnockoutExtensions.MakeObservable(w);this.isLoading=KnockoutExtensions.MakeObservable(!1);this.isHidden=KnockoutExtensions.MakeObservable(!1);this.chartItemId=KnockoutExtensions.MakeObservable(i);this.chartId=KnockoutExtensions.MakeObservable(r);this.networkName=KnockoutExtensions.MakeObservable(u);this.nodeName=KnockoutExtensions.MakeObservable(f);this.moduleId=KnockoutExtensions.MakeObservable(e);this.trend=KnockoutExtensions.MakeObservable(o);this.name=KnockoutExtensions.MakeObservable(s);this.sortIndex=KnockoutExtensions.MakeObservable(h);this.offsetValue=KnockoutExtensions.MakeObservable(c);this.offsetUnit=KnockoutExtensions.MakeObservable(l);this.axisTitle=KnockoutExtensions.MakeObservable(a);this.axisTitle()==null&&this.axisTitle("");this.colour=KnockoutExtensions.MakeObservable(v);this.itemType=KnockoutExtensions.MakeObservable(y);this.strokeWidth=KnockoutExtensions.MakeObservable(1.25);this.precision=KnockoutExtensions.MakeObservable(p);this.minScale=KnockoutExtensions.MakeObservable(b);this.logInterval=KnockoutExtensions.MakeObservable(k);ko.computed(function(){d.chartItemId();d.chartId();d.networkName();d.nodeName();d.moduleId();d.trend();d.name();d.sortIndex();d.offsetValue();d.offsetUnit();d.axisTitle();d.colour();d.itemType();d.strokeWidth();d.precision();d.minScale();d.logInterval();var n=function(){return d.Update()};typeof d.Update=="function"&&ko.ignoreDependencies(n)}).extend({throttle:100});ko.computed(function(){d.isLoading();var n;switch(d.itemType()){case"line":case"cumulative":n=d3.select("#path-line-"+d.chartId()+"-"+d.chartItemId());n.attr("stroke-dasharray",function(){return d.isLoading()?"10,5":"1"});n.attr("opacity",function(){return d.isLoading()?.5:1});break;case"histogram":n=d3.select("#barbin-"+d.chartId()+"-"+d.chartItemId());n.attr("opacity",function(){return d.isLoading()?.5:1});break;case"tape":n=d3.select("#path-tape-"+d.chartId()+"-"+d.chartItemId());n.attr("opacity",function(){return d.isLoading()?.5:1})}d.chart.loadTrigger(d.chart.loadTrigger.peek()+1)});this.legendText=ko.computed(function(){return(d.collection.isMobileView()?"":(d.chart!=null&&d.chart.isSameNetwork()?"":d.networkName()+" - ")+"\n          "+(d.chart!=null&&d.chart.isSameNode()?"":d.nodeName()+" - "))+"\n        "+(""+d.name()+(d.axisTitle()!=null&&d.axisTitle()!==""?" ("+d.axisTitle()+")":""))});this.legendDate=KnockoutExtensions.MakeObservable("");this.legendValue=KnockoutExtensions.MakeObservable("")}return n.prototype.Update=function(){var n=this.collection.chartsById[this.chartId()];n!=null&&n.chartSvg().Load()},n.prototype.Drag=function(n,t){return this.collection.isVirtual()?!1:(t!=null&&(t.originalEvent.dataTransfer.setData("text","item-"+n.chartItemId()),setTimeout(function(){d3.selectAll(".drag-and-drop-item-zone").filter(function(t,i,r){return+d3.select(r[i]).attr("data-chart-item-id")!=+n.chartItemId()}).style("border","1px dashed blue").style("margin","-1px 1px 1px -1px")},1)),!0)},n.prototype.DragEnd=function(){this.collection.isVirtual()||setTimeout(function(){d3.selectAll(".drag-and-drop-item-zone").style("border",null).style("margin",null)},1)},n.prototype.ToggleItemDisplay=function(){this.collection.isVirtual()&&(this.isHidden(!this.isHidden()),this.isHidden()?this.chart.chartSvg().Redraw():(this.collection.RequestData(this),this.chart.chartSvg().Redraw()))},n.prototype.HoverOn=function(){switch(this.itemType()){case"line":case"cumulative":this.LegendHoverLine();break;case"histogram":this.LegendHoverBar();break;case"tape":this.LegendHoverTape()}},n.prototype.HoverOff=function(){var r=d3.selectAll(".path-line-"+this.chartId()),n,t,i;r.interrupt("itemLegendRedraw");r.transition(this.tLine).attr("opacity",1).attr("stroke-width",this.strokeWidth()).attr("stroke",function(n){return n!=null?"#"+n.colour():null});n=d3.selectAll(".path-line-band-"+this.chartId());n.interrupt("bandLegendRedraw");n.transition(this.tBand).attr("fill",function(n){return n!=null?"#"+n.colour():null}).attr("opacity",this.chart.chartSvg().itemOpacity);t=d3.selectAll(".barbin-"+this.chartId());t.interrupt("histLegendRedraw");t.transition(this.tHist).attr("opacity",1);i=d3.selectAll(".path-container-tape-"+this.chartId());i.interrupt("tapeLegendRedraw");i.transition(this.tTape).attr("opacity",1)},n.prototype.LegendHoverLine=function(){var n=this,u=d3.selectAll(".path-line-"+n.chartId()).filter(function(t,i,r){return!("path-line-"+n.chartId()+"-"+n.chartItemId()===d3.select(r[i]).attr("id"))}),t,i,r;u.interrupt("itemLegendRedraw");u.transition(n.tLine).attr("opacity",.05);t=d3.select("#path-line-"+n.chartId()+"-"+n.chartItemId());t.interrupt("itemLegendRedraw");t.transition(n.tLine).attr("stroke-width",n.strokeWidth()*1.5).attr("opacity",1);i=d3.selectAll(".path-line-band-"+n.chartId()).filter(function(t,i,r){return!("path-line-band-"+n.chartId()+"-"+n.chartItemId()===d3.select(r[i]).attr("id"))});i.interrupt("bandLegendRedraw");i.transition(n.tBand).attr("opacity",.01);r=d3.select("#path-line-band-"+n.chartId()+"-"+n.chartItemId());r.interrupt("bandLegendRedraw");r.transition(n.tBand).attr("opacity",n.chart.chartSvg().itemOpacity)},n.prototype.LegendHoverBar=function(){var n=this,i=d3.selectAll(".barbin-"+n.chartId()).filter(function(t,i,r){return!("barbin-"+n.chartId()+"-"+n.chartItemId()===d3.select(r[i]).attr("id"))}),t;i.interrupt("histLegendRedraw");i.transition(n.tHist).attr("opacity",.05);t=d3.select("#barbin-"+n.chartId()+"-"+n.chartItemId());t.interrupt("histLegendRedraw");t.transition(n.tHist).attr("opacity",1)},n.prototype.LegendHoverTape=function(){var n=this,i=d3.selectAll(".path-container-tape-"+n.chartId()).filter(function(t,i,r){return!("path-tape-"+n.chartId()+"-"+n.chartItemId()===d3.select(r[i]).attr("id"))}),t;i.interrupt("tapeLegendRedraw");i.transition(n.tTape).attr("opacity",.05);t=d3.select("#path-tape-"+n.chartId()+"-"+n.chartItemId());t.interrupt("tapeLegendRedraw");t.transition(n.tTape).attr("opacity",1)},n}(),DatePicker=function(){function n(n,t,i){var r=this;this.collection=n;this.start=KnockoutExtensions.MakeObservable(t);this.end=KnockoutExtensions.MakeObservable(i);this.zoomStart=KnockoutExtensions.MakeObservable(t);this.zoomEnd=KnockoutExtensions.MakeObservable(i);this.startPicker=null;this.endPicker=null;this.PresetHandler=function(n,t){return r.Preset(t)};this.PrevHandler=function(){return r.Prev()};this.NextHandler=function(){return r.Next()};this.zoomStartDisplay=ko.computed(function(){return d3.timeFormat("%d-%b-%Y %H:%M")(r.zoomStart())});this.zoomEndDisplay=ko.computed(function(){var n=d3.timeDay.offset(r.zoomEnd(),1);return r.zoomStart().getFullYear()!==n.getFullYear()?d3.timeFormat("%d-%b-%Y %H:%M")(n):r.zoomStart().getMonth()!==n.getMonth()?d3.timeFormat("%d-%b %H:%M")(n):r.zoomStart().getDate()!==n.getDate()?d3.timeFormat("%d %H:%M")(n):d3.timeFormat("%H:%M")(n)});this.zoomMultiple=ko.computed(function(){var n=(d3.timeDay.offset(r.end(),1).getTime()-r.start().getTime())/(d3.timeDay.offset(r.zoomEnd(),1).getTime()-r.zoomStart().getTime());return(n<1?Math.floor(n*100)/100:Math.floor(n))+"x"})}return n.prototype.SetStart=function(n){this.start(n);this.ResetZoom()},n.prototype.SetEnd=function(n){this.end(n);this.ResetZoom()},n.prototype.SetZoomX2=function(n){var t=this.zoomStart().getTime(),i=d3.timeDay.offset(this.zoomEnd(),1).getTime(),r=i-t;t=t+r*(n-.25);i=this.zoomEnd().getTime()-r*(.75-n);d3.timeDay.offset(new Date(i),1).getTime()-t<=this.collection.minZoomRange&&(t=d3.timeMinute.offset(new Date(this.zoomStart().getTime()+r/2),60*(n-1)).getTime(),i=d3.timeMinute.offset(new Date(this.zoomEnd().getTime()-r/2),60*n).getTime());this.zoomStart(new Date(t));this.zoomEnd(new Date(i))},n.prototype.SetZoomRange=function(n,t){this.zoomStart(n);this.zoomEnd(t)},n.prototype.SetZoomStart=function(n){this.zoomStart(n)},n.prototype.SetZoomEnd=function(n){this.zoomEnd(n)},n.prototype.Preset=function(n){var r=d3.select(n.target),i=r.attr("date-preset-id"),t;i==="NOW"?(t=this.GetDays(),this.end(d3.timeDay.floor(new Date)),this.start(d3.timeDay.offset(this.end(),-(t-1)))):(t=+i,t<365?this.start(d3.timeDay.offset(this.end(),-(t-1))):this.start(d3.timeDay.offset(d3.timeYear.offset(this.end(),-(t/365)),1)));this.ResetZoom()},n.prototype.Prev=function(){var n,t;this.zoomEnd()!==this.end()||this.zoomStart()!==this.start()?(n=d3.timeDay.offset(this.zoomEnd(),1).getTime()-this.zoomStart().getTime(),this.zoomStart(d3.timeMillisecond.offset(this.zoomStart(),-n)),this.zoomEnd(d3.timeMillisecond.offset(this.zoomEnd(),-n)),this.zoomStart()<this.start()&&(t=this.GetDays(),this.start(d3.timeDay.floor(this.zoomStart())),this.end(d3.timeDay.offset(this.start(),t-1))),this.collection.UpdateDates()):(n=this.GetDays(),this.start(d3.timeDay.offset(this.start(),-n)),this.end(d3.timeDay.offset(this.end(),-n)),this.ResetZoom())},n.prototype.Next=function(){var n,t;this.zoomEnd()!==this.end()||this.zoomStart()!==this.start()?(n=d3.timeDay.offset(this.zoomEnd(),1).getTime()-this.zoomStart().getTime(),this.zoomStart(d3.timeMillisecond.offset(this.zoomStart(),n)),this.zoomEnd(d3.timeMillisecond.offset(this.zoomEnd(),n)),this.zoomEnd()>this.end()&&(t=this.GetDays(),this.end(d3.timeDay.ceil(this.zoomEnd())),this.start(d3.timeDay.offset(this.end(),-(t-1)))),this.collection.UpdateDates()):(n=this.GetDays(),this.start(d3.timeDay.offset(this.start(),n)),this.end(d3.timeDay.offset(this.end(),n)),this.ResetZoom())},n.prototype.ResetZoom=function(){this.zoomStart(this.start());this.zoomEnd(this.end());d3.selectAll(".item-point-highlights").style("opacity",0);d3.selectAll(".item-point-texts").style("opacity",0);this.collection.UpdateDates()},n.prototype.IsZoomed=function(){return this.zoomStart()!==this.start()||this.zoomEnd()!==this.end()},n.prototype.SetStartPicker=function(n){this.startPicker=n},n.prototype.SetEndPicker=function(n){this.endPicker=n},n.prototype.GetDays=function(){return 1+d3.utcDay.count(this.start(),this.end())},n}(),ChartSvgBase=function(){function n(n,t,i){var r=this,f,u;this.collection=n;this.chart=t;this.svg=i;n!=null&&(f=n.datesUtc.zoomStart(),u=n.datesUtc.zoomEnd());this.minDate=KnockoutExtensions.MakeObservable(f||new Date);this.maxDate=KnockoutExtensions.MakeObservable(u!=null?d3.timeDay.offset(u,1):new Date);this.hasLeftAxis=ko.computed(function(){return r.chart.leftAxisTitle()!==""&&r.chart.leftAxisTitle()!=null});this.hasRightAxis=ko.computed(function(){return r.chart.rightAxisTitle()!==""&&r.chart.rightAxisTitle()!=null});this.rendering=KnockoutExtensions.MakeObservable(!1);this.scaleX=null;this.width=0;this.height=0;this.itemOpacity=0;this.t=null;this.t2=null}return n.prototype.UpdateLegends=function(){},n.prototype.Load=function(){this.Redraw()},n.prototype.Redraw=function(){},n.prototype.HoverLeft=function(){},n.prototype.HoverRight=function(){},n.prototype.Update=function(n,t){this.minDate(n);this.maxDate(d3.timeDay.offset(t,1));this.Load()},n.prototype.GetType=function(){return"Base"},n}(),ChartSvgTimescale=function(n){function t(t,i,r){var u=n.call(this,t,i,r)||this,f=u.collection.defaultMargins.timescale;return u.margin={top:f.top,right:f.right,bottom:f.bottom,left:f.left},u.t=d3.transition("timeRedraw").duration(250).ease(d3.easeLinear),u.Redraw(),u}return __extends(t,n),t.prototype.Redraw=function(){this.width=+this.svg.style("width").split("px")[0]-this.margin.left-this.margin.right-8;this.height=+this.svg.attr("height")-this.margin.top-this.margin.bottom;var n,t,i;this.svg.select("g").empty()?(n=this.svg.append("g").attr("transform","translate("+this.margin.left+","+this.margin.top+")"),t=n.append("g").classed("timescale-xaxis",!0),i=n.append("g").classed("chart-hover-marker-container",!0).append("line").classed("chart-hover-marker-line",!0).attr("shape-rendering","crispEdges").style("opacity",0)):(n=this.svg.select("g"),t=n.select("g.timescale-xaxis"),i=n.select("g.chart-hover-marker-container").select("line.chart-hover-marker-line"));this.scaleX=d3.scaleTime().rangeRound([0,this.width]);this.scaleX.domain([this.minDate(),this.maxDate()]);this.axisX=d3.axisBottom(this.scaleX);this.t=d3.transition("timeRedraw").duration(250).ease(d3.easeLinear);t.transition(this.t).call(this.collection.isMobileView()?this.axisX.ticks(4):this.axisX);i.attr("x1",0).attr("y1",-this.margin.top).attr("x2",0).attr("y2",this.height+this.margin.bottom).style("stroke","steelblue")},t.prototype.GetType=function(){return"Timescale"},t}(ChartSvgBase),ChartSvgMultiLine=function(n){function t(t,i,r){var u=n.call(this,t,i,r)||this,f;return u.scaleL=null,u.scaleR=null,u.tension=.25,u.yBuffer=1.1,u.itemOpacity=.25,u.t=d3.transition("lineRedraw").duration(0).ease(d3.easeLinear),u.t2=d3.transition("bandRedraw").duration(0).ease(d3.easeLinear),u.lineL=d3.line().curve(d3.curveMonotoneX).x(function(n){return u.scaleX(n.date)}).y(function(n){return u.scaleL(n.value)}),u.lineR=d3.line().curve(d3.curveMonotoneX).x(function(n){return u.scaleX(n.date)}).y(function(n){return u.scaleR(n.value)}),u.areaL=d3.area().curve(d3.curveMonotoneX).x(function(n){return u.scaleX(n.date)}).y0(function(n){return u.scaleL(n.min)}).y1(function(n){return u.scaleL(n.max)}),u.areaR=d3.area().curve(d3.curveMonotoneX).x(function(n){return u.scaleX(n.date)}).y0(function(n){return u.scaleR(n.min)}).y1(function(n){return u.scaleR(n.max)}),f=u.collection.defaultMargins.line,u.margin={top:f.top,right:f.right,bottom:f.bottom,left:f.left},u.Redraw(),u}return __extends(t,n),t.prototype.Load=function(){var n=this;if(!document.hidden){if(this.chart.chartItems().length===0){this.Redraw();return}this.chart.chartItems().forEach(function(t){(t.data([]),t.isHidden())||n.collection.RequestData(t)})}},t.prototype.UpdateLegends=function(n,t){var r=this,s=[],h=this.collection.rolloverDate().getTime(),c=new Date(0),f=null,l,a,v,e;if(this.chart.chartItemsFiltered().forEach(function(n,t){(f=null,a=1e99,n.dataInRange().forEach(function(n){(l=Math.abs(n.date.getTime()-h),l>=a)||(a=l,f=n)}),f!=null)&&(s.push({v:f,chartItemId:n.chartItemId(),index:t}),Math.abs(c.getTime()-h)>Math.abs(f.date.getTime()-h)&&(c=f.date))}),v=[],e=this.chart.options().useStackedAreas()?this.height/this.chart.chartItemsNotHiddenLength():0,s.forEach(function(n){var t=r.chart.chartItemsById[n.chartItemId],i;if(t!=null&&0<=r.scaleX(n.v.date)&&r.scaleX(n.v.date)<=r.width){if(i=d3.select("#item-point-legend-"+n.chartItemId+" .item-loading-indicator"),!t.isLoading()&&!i.empty()&&i.text()===""){t.legendDate(r.chart.dateFormatH(r.collection.dataCollection.OffsetDate(n.v.date,-t.offsetValue(),t.offsetUnit())));var u=d3.format(",."+t.precision()+"f"),f=u(n.v.value)+" "+(t.axisTitle()!=="Cumulative"?t.axisTitle():""),o=n.v.count>1?(n.v.min!=null?" ("+u(n.v.min)+" to "+u(n.v.max)+")":"")+(" (x"+n.v.count+")"):"";t.legendValue(f+o);v.push({name:t.legendText(),value:f,range:o,colour:t.colour(),offset:t.offsetValue(),offsetUnit:t.offsetUnit()})}d3.select("#item-point-highlight-"+n.chartItemId).style("opacity",1).attr("transform","translate("+r.scaleX(n.v.date)+", "+((r.chart.rightAxisTitle()===t.axisTitle()?isNaN(r.scaleR(n.v.value))?0:r.scaleR(n.v.value):isNaN(r.scaleL(n.v.value))?0:r.scaleL(n.v.value))+n.index*e)+")")}else{if(d3.select("#item-point-highlight-"+n.chartItemId).style("opacity",0),t==null)return;t.legendDate("");t.legendValue("")}}),t){var u=this,i=this.chart,y=function(){this.attr("x1",function(n){return i.chartItemsById[n.chartItemId]==null?0:i.leftAxisTitle()===i.chartItemsById[n.chartItemId].axisTitle()?0:u.width}).attr("y1",function(n){return(i.chartItemsById[n.chartItemId]==null?0:i.leftAxisTitle()===i.chartItemsById[n.chartItemId].axisTitle()?isNaN(u.scaleL(n.v.value))?0:u.scaleL(n.v.value):isNaN(u.scaleR(n.v.value))?0:u.scaleR(n.v.value))+n.index*e}).attr("x2",function(n){return i.chartItemsById[n.chartItemId]==null?0:u.scaleX(n.v.date)}).attr("y2",function(n){return(i.chartItemsById[n.chartItemId]==null?0:i.leftAxisTitle()===i.chartItemsById[n.chartItemId].axisTitle()?isNaN(u.scaleL(n.v.value))?0:u.scaleL(n.v.value):isNaN(u.scaleR(n.v.value))?0:u.scaleR(n.v.value))+n.index*e}).attr("stroke",function(n){return i.chartItemsById[n.chartItemId]==null?null:"#"+i.chartItemsById[n.chartItemId].colour()}).attr("fill",function(n){return i.chartItemsById[n.chartItemId]==null?null:"#"+i.chartItemsById[n.chartItemId].colour()})},o=u.svg.selectAll(".chart-hover-horizontal-lines").data(s);o.style("display","inherit").style("opacity",this.collection.hoverlineOpacity);o.enter().append("line").classed("chart-hover-horizontal-lines",!0).attr("transform","translate("+this.margin.left+","+this.margin.top+")").style("display","inherit").attr("shape-rendering","crispEdges").attr("stroke-width",1);o.exit().remove();y.call(o);i.FloatingLegend(i,v,this.chart.dateFormatH(c))}},t.prototype.HoverLeft=function(){var n=this.chart,t=d3.selectAll(".path-line-"+n.chartId()+", .path-line-band-"+this.chart.chartId()).filter(function(t){return t!=null?t.axisTitle()===n.leftAxisTitle():!1}),i=d3.selectAll(".path-line-"+n.chartId()+", .path-line-band-"+this.chart.chartId()).filter(function(t){return t!=null?t.axisTitle()===n.rightAxisTitle():!1});t.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-"+n.chartId())}).attr("opacity",1);t.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-band-"+n.chartId())}).attr("opacity",this.itemOpacity);i.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-"+n.chartId())}).attr("opacity",.05);i.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-band-"+n.chartId())}).attr("opacity",.01)},t.prototype.HoverRight=function(){var n=this.chart,t=d3.selectAll(".path-line-"+n.chartId()+", .path-line-band-"+n.chartId()).filter(function(t){return t!=null?t.axisTitle()===n.leftAxisTitle():!1}),i=d3.selectAll(".path-line-"+n.chartId()+", .path-line-band-"+n.chartId()).filter(function(t){return t!=null?t.axisTitle()===n.rightAxisTitle():!1});i.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-"+n.chartId())}).attr("opacity",1);i.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-band-"+n.chartId())}).attr("opacity",this.itemOpacity);t.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-"+n.chartId())}).attr("opacity",.05);t.filter(function(t,i,r){return d3.select(r[i]).classed("path-line-band-"+n.chartId())}).attr("opacity",.01)},t.prototype.Redraw=function(){var r=this,h,c,n,o,l,u,s,a,v,y,d,g;this.rendering(!0);h=!0;this.width=+this.svg.style("width").split("px")[0]-this.margin.left-this.margin.right;isNaN(this.width)&&(this.width=+d3.select(this.collection.pageBody).style("width").split("px")[0]-this.margin.left-this.margin.right);this.height=+this.svg.attr("height");c=(this.chart.options().useStackedAreas()?this.height/this.chart.chartItemsNotHiddenLength():this.height)-this.margin.top-this.margin.bottom;this.scaleX=d3.scaleTime().rangeRound([0,this.width]);this.scaleL=d3.scaleLinear().rangeRound([c,0]);this.scaleR=d3.scaleLinear().rangeRound([c,0]);this.scaleX.domain([this.minDate(),this.maxDate()]);var p=[],w=[],b=[],k=[];this.chart.chartItemsNotHidden().forEach(function(n){var t,i,u;(r.chart.leftAxisTitle()===n.axisTitle()?(t=p,i=w):(t=b,i=k),t.push(+d3.min(n.data(),function(n){return r.minDate()<=n.date&&n.date<=r.maxDate()?n.min!=null&&h?n.min:n.value:null})),i.push(+d3.max(n.data(),function(n){return r.minDate()<=n.date&&n.date<=r.maxDate()?n.max!=null&&h?n.max:n.value:null})),n.minScale()!==0)&&((u=+d3.max(i)-+d3.min(t),u>=n.minScale())||(t.push(+d3.min(t)+u/2-n.minScale()/2),i.push(+d3.max(i)-u/2+n.minScale()/2)))});var t=+d3.min(p),i=+d3.min(b),f=+d3.max(w),e=+d3.max(k);this.chart.options().originLZeroBased()&&(isNaN(t)||t>0)&&(t=0);this.chart.options().originRZeroBased()&&(isNaN(i)||i>0)&&(i=0);this.scaleL.domain([isNaN(t)?0:t<0?t*this.yBuffer:t/this.yBuffer,isNaN(f)?1:f<0?f/this.yBuffer:f*this.yBuffer]);this.scaleR.domain([isNaN(i)?0:i<0?i*this.yBuffer:i/this.yBuffer,isNaN(e)?1:e<0?e/this.yBuffer:e*this.yBuffer]);d=this.scaleL.domain()[1]-this.scaleL.domain()[0]>1?"s":".3f";g=this.scaleR.domain()[1]-this.scaleR.domain()[0]>1?"s":".3f";this.svg.selectAll("*").empty()?(n=this.svg.append("g").attr("transform","translate("+this.margin.left+","+this.margin.top+")"),o=n.append("clipPath").attr("id","clip-"+this.chart.chartId()),o.append("rect"),l=n.append("g").classed("axis-left-container",!0),u=n.append("g").classed("axis-right-container",!0),y=n.append("g").attr("class","path-container").attr("clip-path","url(#clip-"+this.chart.chartId()+")"),s=n.append("g").classed("chart-hover-marker-container",!0),v=n.append("g").classed("chart-hover-point-container",!0),a=s.append("line").classed("chart-hover-marker-line",!0)):(n=this.svg.select("g"),o=this.svg.select("#clip-"+this.chart.chartId()),l=this.svg.select(".axis-left-container"),u=this.svg.select(".axis-right-container"),u.size()===0&&(u=n.append("g").classed("axis-right-container",!0)),y=this.svg.select("g.path-container"),s=this.svg.select(".chart-hover-marker-container"),a=s.select("line"),v=n.select("g.chart-hover-point-container"));this.ClipPath(o);this.AxisRight(u,g);this.AxisLeft(l,d);this.PathData(y,this.chart.chartItemsNotHidden());this.RolloverPoints(v,this.chart.chartItemsNotHidden());this.RolloverMarker(a);this.chart.UpdateNow();this.rendering(!1)},t.prototype.ClipPath=function(n){var t=this.height+(this.chart.options().useStackedAreas()?this.margin.top:0);(n.select("rect").attr("width",this.width>0?this.width:0).attr("height",t>0?t:0),this.chart.brush!=null)&&((this.chart.brush.extent([[0,0],[this.width>0?this.width:0,t>0?t:0]]),this.collection.supportsTouch)||this.chart.chartSvg().svg.select(".brush").call(this.chart.brush))},t.prototype.AxisRight=function(n,t){var e,o,r,s,i,u,f;if(n.attr("transform","translate("+this.width+" ,0)"),this.hasRightAxis()){if(e=this.chart.options().useStackedAreas()?this.height/this.chart.chartItemsNotHiddenLength():0,!this.chart.options().hideGridLines()&&(this.chart.options().useStackedAreas()||!this.hasLeftAxis()))for(o=!1,i=0;i<this.chart.chartItemsNotHiddenLength();i++){if(r=this.svg.select(".gridlines-right-"+this.chart.chartId()+"-"+i),this.chart.rightAxisTitle()!==this.chart.chartItemsNotHidden()[i].axisTitle()){r.remove();continue}(!o||this.chart.options().useStackedAreas())&&(o=!0,r.empty()&&(r=n.append("g").classed("gridlines gridlines-right-"+this.chart.chartId()+"-"+i,!0)),r.call(d3.axisRight(this.scaleR).ticks(t==="s"?8:12,t).tickSizeInner(-this.width)).attr("transform","translate(0,"+e*i+")"),r.selectAll("text").remove(),r.selectAll("path").remove())}for(s=!1,i=0;i<this.chart.chartItemsNotHiddenLength();i++){if(u=this.svg.select(".axis-right-"+this.chart.chartId()+"-"+i),this.chart.rightAxisTitle()!==this.chart.chartItemsNotHidden()[i].axisTitle()){u.remove();continue}(!s||this.chart.options().useStackedAreas())&&(s=!0,u.empty()&&(u=n.append("g").classed("axis-right-"+this.chart.chartId()+"-"+i,!0)),u.call(d3.axisRight(this.scaleR).ticks(t==="s"?8:12,t)).attr("transform","translate(0,"+e*i+")"),f=u.select(".axis-text-right-"+this.chart.chartId()+"-"+i),f.empty()&&(f=u.append("text").classed("unitlabel",!0).classed("axis-text-right-"+this.chart.chartId()+"-"+i,!0)),f.attr("transform","rotate(-90)").attr("fill","#000").attr("y",-12).attr("dy","0.71em").attr("text-anchor","end").text(this.chart.rightAxisTitle()))}}else{if(n==null)return;n.remove()}},t.prototype.AxisLeft=function(n,t){var s=this.chart.options().useStackedAreas()?this.height/this.chart.chartItemsNotHiddenLength():0,e,r,o,i,u,f;if(this.chart.options().hideGridLines())this.svg.selectAll(".gridlines").remove();else for(e=!1,i=0;i<this.chart.chartItemsNotHiddenLength();i++){if(r=this.svg.select(".gridlines-left-"+this.chart.chartId()+"-"+i),this.chart.rightAxisTitle()===this.chart.chartItemsNotHidden()[i].axisTitle()){r.remove();continue}(!e||this.chart.options().useStackedAreas())&&(e=!0,r.empty()&&(r=n.append("g").classed("gridlines gridlines-left-"+this.chart.chartId()+"-"+i,!0)),r.call(d3.axisLeft(this.scaleL).ticks(t==="s"?8:12,t).tickSizeInner(-this.width)).attr("transform","translate(0,"+s*i+")"),r.selectAll("text").remove(),r.selectAll("path").remove())}for(o=!1,i=0;i<this.chart.chartItemsNotHiddenLength();i++){if(u=this.svg.select(".axis-left-"+this.chart.chartId()+"-"+i),this.chart.rightAxisTitle()===this.chart.chartItemsNotHidden()[i].axisTitle()){u.remove();continue}(!o||this.chart.options().useStackedAreas())&&(o=!0,u.empty()&&(u=n.append("g").classed("axis-left-"+this.chart.chartId()+"-"+i,!0)),u.call(d3.axisLeft(this.scaleL).ticks(t==="s"?8:12,t)).attr("transform","translate(0,"+s*i+")"),f=u.select(".axis-text-left-"+this.chart.chartId()+"-"+i),f.empty()&&(f=u.append("text").classed("unitlabel",!0).classed("axis-text-left-"+this.chart.chartId()+"-"+i,!0)),f.attr("transform","rotate(-90)").attr("fill","#000").attr("y",6).attr("dy","0.71em").attr("text-anchor","end").text(this.chart.leftAxisTitle()))}},t.prototype.RolloverPoints=function(n,t){var i=n.selectAll("circle").data(t);i.enter().append("circle").classed("item-point-highlights",!0).style("opacity",0).merge(i).attr("stroke",function(n){return n==null?null:"#"+n.colour()}).attr("fill",function(n){return n==null?null:"#"+n.colour()}).attr("id",function(n){return n==null?null:"item-point-highlight-"+n.chartItemId()}).attr("r",function(n){return n==null?null:n.strokeWidth()*2});i.exit().remove()},t.prototype.RolloverMarker=function(n){n.attr("shape-rendering","crispEdges").style("opacity",0).attr("x1",0).attr("y1",-this.margin.top).attr("x2",0).attr("y2",this.height+this.margin.bottom).style("stroke","steelblue")},t.prototype.PathData=function(n,t){var i=this,e=n.selectAll("path.path-line-"+this.chart.chartId()).data(t),h,u,f,c,o,r,s;for(e.interrupt("lineRedraw"),h=this.chart.options().useStackedAreas()?this.height/this.chart.chartItemsNotHiddenLength():0,e.enter().append("path").attr("class",function(){return"path-line path-line-"+i.chart.chartId()}).attr("transform",function(n,t){return"translate(0,"+t*h+")"}).merge(e).attr("id",function(n){return n==null?null:"path-line-"+i.chart.chartId()+"-"+n.chartItemId()}).transition(this.t).attr("fill","none").attr("stroke-dasharray","1").attr("opacity",1).attr("stroke",function(n){return n==null?null:"#"+n.colour()}).attr("stroke-linejoin","round").attr("stroke-linecap","round").attr("stroke-width",function(n){return n==null?null:n.strokeWidth()}).attr("d",function(n){return n==null||i.chart.chartItemsById[n.chartItemId()]==null?null:i.chart.leftAxisTitle()===i.chart.chartItemsById[n.chartItemId()].axisTitle()?i.lineL(n.data()):i.lineR(n.data())}),e.exit().remove(),u=n.selectAll("path.path-line-band-"+this.chart.chartId()).data(this.chart.options().hideBands()?[]:t),u.interrupt("bandRedraw"),u.enter().append("path").attr("class",function(){return"path-line-band path-line-band-"+i.chart.chartId()}).attr("transform",function(n,t){return"translate(0,"+t*h+")"}).merge(u).attr("id",function(n){return n==null?null:"path-line-band-"+i.chart.chartId()+"-"+n.chartItemId()}).transition(this.t2).attr("fill",function(n){return n==null?null:"#"+n.colour()}).attr("opacity",this.itemOpacity).attr("d",function(n){return n==null||i.chart.chartItemsById[n.chartItemId()]==null||n.data().length>0&&n.data()[0].min==null?null:i.chart.leftAxisTitle()===i.chart.chartItemsById[n.chartItemId()].axisTitle()?i.areaL(n.data()):i.areaR(n.data())}),u.exit().remove(),this.svg.select(".zero-line-container").empty()&&this.svg.select("g").append("g").classed("zero-line-container",!0),f=this.height/this.chart.chartItemsNotHiddenLength(),c=this.chart.options().useStackedAreas()?this.chart.chartItemsNotHiddenLength():this.chart.chartItemsNotHiddenLength()>0?1:0,r=0;r<c;r++)this.chart.rightAxisTitle()!==this.chart.chartItemsNotHidden()[r].axisTitle()&&(o=this.svg.select("line.zero-line-left-"+r),o.empty()&&(o=this.svg.select(".zero-line-container").append("line").classed("zero-line-left-"+r,!0)),o.attr("shape-rendering","crispEdges").attr("x1",0).attr("y1",isNaN(this.scaleL(0))?0:this.scaleL(0)+r*f).attr("x2",this.width).attr("y2",isNaN(this.scaleL(0))?0:this.scaleL(0)+r*f).attr("stroke-dasharray",this.hasRightAxis()?"4,2,1,2,1,6":"3,3").style("stroke","black").style("opacity",function(){return isNaN(i.scaleL(0))?0:.35}));if(this.hasRightAxis())for(r=0;r<c;r++)this.chart.rightAxisTitle()===this.chart.chartItemsNotHidden()[r].axisTitle()&&(s=this.svg.select("line.zero-line-right-"+r),s.empty()&&(s=this.svg.select(".zero-line-container").append("line").classed("zero-line-right-"+r,!0)),s.attr("shape-rendering","crispEdges").attr("x1",0).attr("y1",isNaN(this.scaleR(0))?0:this.scaleR(0)+r*f).attr("x2",this.width).attr("y2",isNaN(this.scaleR(0))?0:this.scaleR(0)+r*f).attr("stroke-dasharray","1,2,1,2,4,6").style("stroke","black").style("opacity",function(){return isNaN(i.scaleR(0))?0:.35}))},t.prototype.GetType=function(){return"Line Chart"},t}(ChartSvgBase),ChartSvgMultiHistogram=function(n){function t(t,i,r){var u=n.call(this,t,i,r)||this,f;return u.bins=KnockoutExtensions.MakeObservableArray([]),u.scaleR=null,u.tension=.25,u.yBuffer=1.1,u.xGap=2,u.interval=null,u.itemOpacity=1,u.t=d3.transition("histoRedraw").duration(0).ease(d3.easeLinear),f=u.collection.defaultMargins.histogram,u.margin={top:f.top,right:f.right,bottom:f.bottom,left:f.left},u.Redraw(),u}return __extends(t,n),t.prototype.Load=function(){var n=this;if(!document.hidden){if(this.bins([]),this.chart.chartItems().length===0){this.Redraw();return}this.chart.chartItems().forEach(function(t){(t.data([]),t.isHidden())||n.collection.RequestData(t)})}},t.prototype.UpdateLegends=function(n,t){var o=this,s=[],h=this.collection.rolloverDate().getTime(),c=[],l,u,e;switch(this.interval){case"1h":u=this.chart.dateFormatH;break;case"1d":case"1w":u=this.chart.dateFormatD;break;default:u=this.chart.dateFormatM}if(e=d3.select("#d3-chart-"+this.chart.chartId()).selectAll(".path-container .barbin-"+this.chart.chartId()+" rect"),e.style("opacity",this.itemOpacity),this.bins().forEach(function(n,t){var r=0,f=0,v="",a="",y="",i=o.chart.chartItemsById[n.chartItemId];n.data.forEach(function(p){var d,k,w,b;if(p.x0<h&&h<p.x1&&(p.forEach(function(n){f+=+n.value;r+=+n.count}),s.push({date:p.x0+(p.x1-p.x0)/o.bins().length*(t+.5),chartItemId:n.chartItemId,value:f,index:t}),d=e.filter(function(n){return n.x0===p.x0?!0:!1}),d.style("opacity",.6),i!=null&&(k=d3.select("#item-point-legend-"+n.chartItemId+" .item-loading-indicator"),!i.isLoading()&&!k.empty()&&k.text()===""))){if(w=new Date(p.x0),i.offsetValue()>0){b=-i.offsetValue();switch(i.offsetUnit()){case"D":w=d3.timeDay.offset(w,b);break;case"W":w=d3.timeWeek.offset(w,b);break;case"Y":w=d3.timeYear.offset(w,b)}}v=u(w);a=d3.format(",."+p.precision+"f")(f)+" "+p.axisTitle;y=r>1?" (x"+r+")":"";l=u(p.x0);c.push({name:i.legendText(),value:a,range:y,colour:i.colour(),offset:i.offsetValue(),offsetUnit:i.offsetUnit()})}i.legendDate(v);i.legendValue(a)})}),t){var r=this,i=this.chart,a=function(){this.attr("x1",function(n){return i.chartItemsById[n.chartItemId]==null?0:i.leftAxisTitle()===i.chartItemsById[n.chartItemId].axisTitle()?0:r.width}).attr("y1",function(n){return i.chartItemsById[n.chartItemId]==null?0:i.leftAxisTitle()===i.chartItemsById[n.chartItemId].axisTitle()?isNaN(r.scaleL(n.value))?0:r.scaleL(n.value):isNaN(r.scaleR(n.value))?0:r.scaleR(n.value)}).attr("x2",function(n){return i.chartItemsById[n.chartItemId]==null?0:r.scaleX(n.date)}).attr("y2",function(n){return i.chartItemsById[n.chartItemId]==null?0:i.leftAxisTitle()===i.chartItemsById[n.chartItemId].axisTitle()?isNaN(r.scaleL(n.value))?0:r.scaleL(n.value):isNaN(r.scaleR(n.value))?0:r.scaleR(n.value)}).attr("stroke",function(n){return i.chartItemsById[n.chartItemId]==null?null:"#"+i.chartItemsById[n.chartItemId].colour()}).attr("fill",function(n){return i.chartItemsById[n.chartItemId]==null?null:"#"+i.chartItemsById[n.chartItemId].colour()})},f=r.svg.selectAll(".chart-hover-horizontal-lines").data(s);f.style("display","inherit").style("opacity",this.collection.hoverlineOpacity);f.enter().append("line").classed("chart-hover-horizontal-lines",!0).attr("transform","translate("+this.margin.left+","+this.margin.top+")").style("display","inherit").attr("shape-rendering","crispEdges").attr("stroke-width",1);f.exit().remove();a.call(f);i.FloatingLegend(i,c,l)}},t.prototype.HoverLeft=function(){var n=this.chart,t=d3.selectAll(".barbin-"+n.chartId()).filter(function(t){return t!=null&&t.data.length>0?t.data[0].axisTitle===n.leftAxisTitle():!1}),i=d3.selectAll(".barbin-"+n.chartId()).filter(function(t){return t!=null&&t.data.length>0?t.data[0].axisTitle===n.rightAxisTitle():!1});t.filter(function(t,i,r){return d3.select(r[i]).classed("barbin-"+n.chartId())}).attr("opacity",this.itemOpacity);i.filter(function(t,i,r){return d3.select(r[i]).classed("barbin-"+n.chartId())}).attr("opacity",.05)},t.prototype.HoverRight=function(){var n=this.chart,t=d3.selectAll(".barbin-"+n.chartId()).filter(function(t){return t!=null&&t.data.length>0?t.data[0].axisTitle===n.leftAxisTitle():!1}),i=d3.selectAll(".barbin-"+n.chartId()).filter(function(t){return t!=null&&t.data.length>0?t.data[0].axisTitle===n.rightAxisTitle():!1});i.filter(function(t,i,r){return d3.select(r[i]).classed("barbin-"+n.chartId())}).attr("opacity",this.itemOpacity);t.filter(function(t,i,r){return d3.select(r[i]).classed("barbin-"+n.chartId())}).attr("opacity",.05)},t.prototype.Redraw=function(){var d=this,s,h,n,c,y,e,p,l,o,w,a,b,k,g,f,v;this.rendering(!0);s=[];h=[];this.width=+this.svg.style("width").split("px")[0]-this.margin.left-this.margin.right;isNaN(this.width)&&(this.width=+d3.select(this.collection.pageBody).style("width").split("px")[0]-this.margin.left-this.margin.right);this.height=+this.svg.attr("height")-this.margin.top-this.margin.bottom;this.scaleX=d3.scaleTime().rangeRound([0,this.width]);this.scaleL=d3.scaleLinear().rangeRound([this.height,0]);this.scaleR=d3.scaleLinear().rangeRound([this.height,0]);this.scaleX.domain([this.minDate(),this.maxDate()]);this.bins([]);g=d3.histogram().value(function(n){return n.date}).domain([this.scaleX.domain()[0].getTime(),this.scaleX.domain()[1].getTime()]).thresholds(this.GetTicks());this.chart.chartItemsNotHidden().forEach(function(n){d.bins.push({chartItemId:n.chartItemId(),colour:n.colour(),axisTitle:n.axisTitle(),data:g(n.data())})});this.bins().forEach(function(n){n.data.forEach(function(t){var i=0;t.forEach(function(n){i+=n.value});n.axisTitle===d.chart.rightAxisTitle()?h.push(i):s.push(i)})});var t=+d3.min(s),i=+d3.min(h),r=+d3.max(s),u=+d3.max(h);isNaN(t)&&(t=0);isNaN(i)&&(i=0);isNaN(r)&&(r=1);isNaN(u)&&(u=1);this.chart.options().originLZeroBased()&&(t<0&&r<0?r=0:t>0&&r>0&&(t=0));this.chart.options().originRZeroBased()&&(i<0&&u<0?u=0:i>0&&u>0&&(i=0));this.scaleL.domain([t<0?t*this.yBuffer:t/this.yBuffer,r<0?r/this.yBuffer:r*this.yBuffer]);this.scaleR.domain([i<0?i*this.yBuffer:i/this.yBuffer,u<0?u/this.yBuffer:u*this.yBuffer]);f=this.scaleL.domain()[1]-this.scaleL.domain()[0]>1?"s":".3f";v=this.scaleR.domain()[1]-this.scaleR.domain()[0]>1?"s":".3f";this.svg.selectAll("*").empty()?(n=this.svg.append("g").attr("transform","translate("+this.margin.left+","+this.margin.top+")"),c=n.append("clipPath").attr("id","clip-"+this.chart.chartId()),c.append("rect"),y=n.append("g").call(d3.axisLeft(this.scaleL).ticks(f==="s"?8:12,f).tickSizeInner(-this.width)).attr("id","gridlines-left-"+this.chart.chartId()).classed("gridlines",!0),e=n.append("g").call(d3.axisLeft(this.scaleL).ticks(f==="s"?8:12,f)).attr("id","axis-left-"+this.chart.chartId()),p=e.append("text").classed("unitlabel",!0),this.hasRightAxis()&&(l=n.append("g").classed("axis-right-container",!0),o=l.call(d3.axisRight(this.scaleR).ticks(v==="s"?8:12,v)).attr("id","axis-right-"+this.chart.chartId()),w=o.append("text").classed("unitlabel",!0)),a=n.append("g").classed("chart-hover-marker-container",!0),b=a.append("line").classed("chart-hover-marker-line",!0),k=n.append("g").attr("class","path-container").attr("clip-path","url(#clip-"+this.chart.chartId()+")")):(n=this.svg.select("g"),c=this.svg.select("#clip-"+this.chart.chartId()),y=this.svg.select("#gridlines-left-"+this.chart.chartId()),e=this.svg.select("#axis-left-"+this.chart.chartId()),p=e.select("text.unitlabel"),this.hasRightAxis()&&(l=this.svg.select(".axis-right-container"),o=this.svg.select("#axis-right-"+this.chart.chartId()),w=o.select("text.unitlabel")),a=this.svg.select(".chart-hover-marker-container"),b=a.select("line"),k=this.svg.select("g.path-container"));this.ClipPath(c);this.hasRightAxis()&&this.AxisRight(l,o,w,v);this.AxisLeft(y,e,p,f);this.RolloverMarker(b);this.PathData(k,this.chart.chartItemsNotHidden());this.chart.UpdateNow();this.rendering(!1)},t.prototype.GetTicks=function(){var t=this.collection.datesUtc.GetDays(),n;return t>=360?(n=d3.timeMonth.every(1),this.interval="1m"):t>=60?(n=d3.timeWeek.every(1),this.interval="1w"):t>=3?(n=d3.timeDay.every(1),this.interval="1d"):(n=d3.timeHour.every(1),this.interval="1h"),this.scaleX.ticks(n).map(function(n){return n.getTime()})},t.prototype.ClipPath=function(n){(n.select("rect").attr("width",this.width>0?this.width:0).attr("height",this.height>0?this.height:0),this.chart.brush!=null)&&((this.chart.brush.extent([[0,0],[this.width>0?this.width:0,this.height>0?this.height:0]]),this.collection.supportsTouch)||this.chart.chartSvg().svg.select(".brush").call(this.chart.brush))},t.prototype.AxisRight=function(n,t,i,r){n.attr("transform","translate("+this.width+",0)");this.hasRightAxis()?(t.call(d3.axisRight(this.scaleR).ticks(r==="s"?8:12,r)),i.attr("fill","#000").attr("transform","rotate(-90)").attr("y",-12).attr("dy","0.71em").attr("text-anchor","end").text(this.chart.rightAxisTitle())):t.remove()},t.prototype.AxisLeft=function(n,t,i,r){this.chart.options().hideGridLines()?n.selectAll("*").remove():(n.call(d3.axisLeft(this.scaleL).ticks(r==="s"?8:12,r).tickSizeInner(-this.width)),n.selectAll("text").remove(),n.selectAll("path").remove());t.call(d3.axisLeft(this.scaleL).ticks(r==="s"?8:12,r));i.attr("fill","#000").attr("transform","rotate(-90)").attr("y",6).attr("dy","0.71em").attr("text-anchor","end").text(this.chart.leftAxisTitle())},t.prototype.RolloverMarker=function(n){n.attr("shape-rendering","crispEdges").style("opacity",0).attr("x1",-1).attr("y1",-this.margin.top).attr("x2",-1).attr("y2",this.height+this.margin.bottom).style("stroke","steelblue")},t.prototype.PathData=function(n,t){var i=this,h,u,r,o,s,f,e;this.bins([]);h=d3.histogram().value(function(n){return n.date}).domain([this.scaleX.domain()[0].getTime(),this.scaleX.domain()[1].getTime()]).thresholds(this.GetTicks());t.forEach(function(n){n!=null&&i.bins.push({chartItemId:n.chartItemId(),colour:n.colour(),axisTitle:n.axisTitle(),precision:n.precision(),data:h(n.data())})});this.bins().forEach(function(n){n!=null&&n.data.forEach(function(t){t.precision=n.precision;t.axisTitle=n.axisTitle})});u=n.selectAll("g.barbin-"+this.chart.chartId()).data(this.bins());u.exit().remove();r=u.enter().append("g").merge(u).classed("barbin",!0).classed("barbin-"+this.chart.chartId(),!0).attr("id",function(n){return"barbin-"+i.chart.chartId()+"-"+n.chartItemId}).selectAll("rect").data(function(n){return n.data});r.interrupt("histoRedraw");o=-1;s=-1;r.enter().append("rect").attr("class","bar").merge(r).datum(function(n){return n}).transition(this.t).attr("x",function(n,t){return o+=t===0?1:0,i.scaleX(n.x0)+Math.max(i.scaleX(n.x1)-i.scaleX(n.x0),0)/i.bins().length*o}).attr("y",function(n){var t=0;return n.forEach(function(n){t+=n.value}),i.chart.rightAxisTitle()===n.axisTitle?i.scaleR(t<0?0:t):i.scaleL(t<0?0:t)}).attr("width",function(n){return Math.max((i.scaleX(n.x1)-i.scaleX(n.x0))/i.bins().length-i.xGap,0)}).attr("height",function(n){var t=0;return n.forEach(function(n){t+=n.value}),t!==0?i.chart.rightAxisTitle()===n.axisTitle?i.scaleR(t<0?t:0)-i.scaleR(t<0?0:t):i.scaleL(t<0?t:0)-i.scaleL(t<0?0:t):0}).style("fill",function(n,t){return s+=t===0?1:0,"#"+i.bins()[s].colour}).style("opacity",this.itemOpacity);r.exit().remove();this.svg.select(".zero-line-container").empty()&&this.svg.select("g").append("g").classed("zero-line-container",!0);f=this.svg.select("line.zero-line-left");f.empty()&&(f=this.svg.select(".zero-line-container").append("line").classed("zero-line-left",!0));f.attr("shape-rendering","crispEdges").attr("x1",0).attr("y1",isNaN(this.scaleL(0))?0:this.scaleL(0)).attr("x2",this.width).attr("y2",isNaN(this.scaleL(0))?0:this.scaleL(0)).attr("stroke-dasharray","3,3").style("stroke","black").style("opacity",.35);this.hasRightAxis()&&(e=this.svg.select("line.zero-line-right"),e.empty()&&(e=this.svg.select(".zero-line-container").append("line").classed("zero-line-right",!0)),e.attr("shape-rendering","crispEdges").attr("x1",0).attr("y1",isNaN(this.scaleR(0))?0:this.scaleR(0)).attr("x2",this.width).attr("y2",isNaN(this.scaleR(0))?0:this.scaleR(0)).attr("stroke-dasharray","3,3").style("stroke","black").style("opacity",.35))},t.prototype.GetType=function(){return"Histogram Chart"},t}(ChartSvgBase),ChartSvgMultiTape=function(n){function t(t,i,r){var u=n.call(this,t,i,r)||this,f;return u.scaleL=null,u.yBuffer=1.1,u.itemOpacity=.75,u.t=d3.transition("tapeRedraw").duration(0).ease(d3.easeLinear),u.area=d3.area().curve(d3.curveMonotoneX).x(function(n){return u.scaleX(n.date)}).y0(function(n){return u.scaleL(n.min===0?-.1:n.min)}).y1(function(n){return u.scaleL(n.max===0?.1:n.max)}),f=u.collection.defaultMargins.tape,u.margin={top:f.top,right:f.right,bottom:f.bottom,left:f.left},u.Redraw(),u}return __extends(t,n),t.prototype.Load=function(){var n=this;if(!document.hidden){if(this.chart.chartItems().length===0){this.Redraw();return}this.chart.chartItems().forEach(function(t){(t.data([]),t.isHidden())||n.collection.RequestData(t)})}},t.prototype.UpdateLegends=function(n,t){var i=this,e=[],o=this.collection.rolloverDate().getTime(),u,f,r=null;this.chart.chartItemsFiltered().forEach(function(n){(u=1e99,r=null,n.dataInRange().forEach(function(n){f=Math.abs(n.date.getTime()-o);f<u&&(u=f,r=n)}),r!=null)&&e.push({v:r,chartItemId:n.chartItemId()})});e.forEach(function(n,r){var u=i.chart.chartItemsById[n.chartItemId],s,f,e,o;if(i.scaleX(n.v.date)>0&&i.scaleX(n.v.date)<i.width){if(u==null)return;if(s=d3.select("#item-point-legend-"+n.chartItemId+" .item-loading-indicator"),!u.isLoading()&&!s.empty()&&s.text()===""){if(f=new Date(n.v.date),u.offsetValue()>0){e=-u.offsetValue();switch(u.offsetUnit()){case"D":f=d3.timeDay.offset(f,e);break;case"W":f=d3.timeWeek.offset(f,e);break;case"Y":f=d3.timeYear.offset(f,e)}}u.legendDate(i.chart.dateFormatH(f));u.legendValue((n.v.min===-1?"True":"False")+(n.v.count>1?" (x"+n.v.count+")":""))}d3.select("#item-point-highlight-"+n.chartItemId).style("opacity",1).style("fill",function(){return n.v.min===-1?"#00ff00":"#ff0000"}).attr("cx",i.scaleX(n.v.date)).attr("cy",i.scaleL(n.v.value)+r*i.height/i.chart.chartItemsNotHiddenLength());t?(o=d3.select("#item-point-text-"+n.chartItemId),o.empty()?o=i.svg.select(".chart-hover-point-container").insert("text","#item-point-highlight-"+n.chartItemId).classed("item-point-texts",!0).attr("id","item-point-text-"+n.chartItemId).attr("text-anchor","middle").style("font-size","10px").attr("fill","#666"):d3.select("#item-point-text-"+n.chartItemId).style("opacity",1),o.text(u.name()).attr("x",i.scaleX(n.v.date)).attr("y",i.scaleL(n.v.value)+r*i.height/i.chart.chartItemsNotHiddenLength()-3)):d3.select("#item-point-text-"+n.chartItemId).style("opacity",0)}else d3.select("#item-point-highlight-"+n.chartItemId).style("opacity",0),d3.select("#item-point-text-"+n.chartItemId).style("opacity",0),u.legendDate(""),u.legendValue("")})},t.prototype.Redraw=function(){this.rendering(!0);var n,t,i,r,u,f;this.svg.attr("height",this.chart.displayHeight()*this.chart.chartItemsNotHiddenLength());this.width=+this.svg.style("width").split("px")[0]-this.margin.left-this.margin.right;isNaN(this.width)&&(this.width=+d3.select(this.collection.pageBody).style("width").split("px")[0]-this.margin.left-this.margin.right);this.height=+this.svg.attr("height")-this.margin.top-this.margin.bottom;this.scaleX=d3.scaleTime().rangeRound([0,this.width]);this.scaleL=d3.scaleLinear().rangeRound([this.height/this.chart.chartItemsNotHiddenLength(),0]);this.scaleX.domain([this.minDate(),this.maxDate()]);this.scaleL.domain([-1*this.yBuffer,1*this.yBuffer]);this.svg.selectAll("*").empty()?(n=this.svg.append("g").attr("transform","translate("+this.margin.left+","+this.margin.top+")"),t=n.append("clipPath").attr("id","clip-"+this.chart.chartId()),t.append("rect"),f=n.append("g").attr("class","path-container").attr("clip-path","url(#clip-"+this.chart.chartId()+")"),i=n.append("g").classed("chart-hover-marker-container",!0),r=i.append("line").classed("chart-hover-marker-line",!0),u=n.append("g").classed("chart-hover-point-container",!0)):(n=this.svg.select("g"),t=this.svg.select("#clip-"+this.chart.chartId()),f=this.svg.select("g.path-container"),i=this.svg.select(".chart-hover-marker-container"),r=i.select("line"),u=n.select("g.chart-hover-point-container"));this.ClipPath(t);this.PathData(f,this.chart.chartItemsNotHidden());this.RolloverMarker(r);this.RolloverPoints(u,this.chart.chartItemsNotHidden());this.chart.UpdateNow();this.rendering(!1)},t.prototype.ClipPath=function(n){(n.select("rect").attr("width",this.width>0?this.width:0).attr("height",this.height>0?this.height:0),this.chart.brush!=null)&&((this.chart.brush.extent([[0,0],[this.width>0?this.width:0,this.height>0?this.height:0]]),this.collection.supportsTouch)||this.chart.chartSvg().svg.select(".brush").call(this.chart.brush))},t.prototype.RolloverMarker=function(n){n.attr("shape-rendering","crispEdges").style("opacity",0).attr("x1",-1).attr("y1",-this.margin.top).attr("x2",-1).attr("y2",this.height+this.margin.bottom).style("stroke","steelblue")},t.prototype.RolloverPoints=function(n,t){var i=n.selectAll("circle").data(t);i.enter().append("circle").classed("item-point-highlights",!0).style("opacity",0).merge(i).attr("id",function(n){return n==null?null:"item-point-highlight-"+n.chartItemId()}).attr("r",3).attr("strokewidth",0).attr("fill","#ff0000");i.exit().remove()},t.prototype.PathData=function(n,t){var i=this,u,r;if(n.selectAll("*").interrupt("tapeRedraw"),d3.timeDay.count(this.minDate(),this.maxDate())>35){n.selectAll("*").remove();u=n.append("text").classed("errtext",!0).attr("y",18).attr("fill","#7f7f7f").style("font-size","0.8em").text("*** unavailable for periods over 1 month ***");u.attr("x",+this.svg.style("width").split("px")[0]/2-+u.node().getBBox().width/2-this.margin.left);return}n.select(".errtext").remove();r=n.selectAll("g.path-container-tape-"+this.chart.chartId()).data(t);r.enter().append("g").classed("path-container-tape-"+this.chart.chartId(),!0).attr("transform",function(n,t){return"translate(0,"+t*i.height/i.chart.chartItemsNotHiddenLength()+")"}).append("path").classed("path-tape-"+this.chart.chartId(),!0).merge(r).attr("id",function(n){return n==null?null:"path-tape-"+i.chart.chartId()+"-"+n.chartItemId()});n.selectAll(".path-container-tape-"+this.chart.chartId()).select("path.path-tape-"+this.chart.chartId()).transition(this.t).attr("fill",function(n){return n==null?null:"#"+n.colour()}).attr("opacity",this.itemOpacity).attr("d",function(n){return n==null?null:i.area(n.data())});r.exit().remove()},t.prototype.GetType=function(){return"Tape Chart"},t}(ChartSvgBase);ko.bindingHandlers.chartDate={init:function(n,t,i,r){var f=n.getAttribute("id"),e,u;if(f!=null){e={months:1,format:"DD-MMM-YYYY",dayOutOfMonthClickable:!0};u=new Kalendae.Input(f,e);u.setSelected(moment(t()()).format("DD-MMM-YYYY"));switch(f){case"startDateKal":r.datesUtc.SetStartPicker(u);break;case"endDateKal":r.datesUtc.SetEndPicker(u)}u.subscribe("date-clicked",function(t){n.blur();switch(f){case"startDateKal":r.datesUtc.SetStart(d3.timeDay.floor(t.toDate()));break;case"endDateKal":r.datesUtc.SetEnd(d3.timeDay.floor(t.toDate()))}});u.subscribe("hide",function(){var n=d3.timeDay.floor(u.getSelectedAsDates()[0]);switch(f){case"startDateKal":r.datesUtc.start().getTime()!==n.getTime()&&r.datesUtc.SetStart(n);break;case"endDateKal":r.datesUtc.end().getTime()!==n.getTime()&&r.datesUtc.SetEnd(n)}});n.onkeypress=function(t){t||(t=window.event);var i=t.keyCode||t.which;return i===13?(n.blur(),u.hide(),!1):!0}}},update:function(n,t,i,r){var u=n.getAttribute("id");if(u!=null)switch(u){case"startDateKal":r.datesUtc.startPicker.setSelected(moment(t()()).format("DD-MMM-YYYY"));r.datesUtc.startPicker.blackout=function(n){return r.datesUtc.endPicker.getSelectedRaw()[0]-d3.timeDay.offset(n.toDate(),-1).getTime()<0};break;case"endDateKal":r.datesUtc.endPicker.setSelected(moment(t()()).format("DD-MMM-YYYY"));r.datesUtc.endPicker.blackout=function(n){return r.datesUtc.startPicker.getSelectedRaw()[0]-n.toDate().getTime()>0}}}};ko.bindingHandlers.showAndFade={init:function(n,t){var i=t();d3.select(n).style("opacity",ko.unwrap(i)?1:0)},update:function(n,t){var i=t(),r;d3.select(n).empty()||(r=d3.transition(d3.select(n).attr("id")+"_Fader").duration(ko.unwrap(i)?0:500).ease(d3.easeLinear),d3.select(n).interrupt(d3.select(n).attr("id")+"_Fader"),d3.select(n).transition(r).style("opacity",ko.unwrap(i)?1:0))}};ko.bindingHandlers.indicatorFade={init:function(n,t){var i=t();d3.select(n).style("opacity",ko.unwrap(i)?1:0)},update:function(n,t){var i=t(),r;d3.select(n).empty()||(r=d3.transition(d3.select(n).attr("id")+"_Fader").duration(ko.unwrap(i)?0:250).ease(d3.easeLinear),d3.select(n).interrupt(d3.select(n).attr("id")+"_Fader"),d3.select(n).transition(r).style("opacity",ko.unwrap(i)?1:0).transition().text(ko.unwrap(i)?"Loading...":""))}};ko.bindingHandlers.addForm={init:function(n,t){var i=t();i.charts().length===0&&typeof i.parentClass.AddChartToCollectionForm=="function"&&page.OpenFormDialog(i.parentClass.AddChartToCollectionForm())}};var Base_View=function(){function n(){var n=this;this.Init=function(){n.titleComputed=null;page.view()!=null&&page.view().dispose();page.view(n);page.ClearUpdate();page.ViewRequests().forEach(function(n){return n.abort()});page.ViewRequests([]);page.view().loading(!0)};this.spinnerTitle=function(){return n.loadError()!==""?n.loadError():page.parentTitle()!=null?"Back to "+page.parentTitle():""};this.spinnerCss=function(){return{"page-loading":n.loading(),"parent-link":page.parentTitle()!=null&&!n.loading()&&page.view()!==views.Home_Index,"home-index":page.view()===views.Home_Index&&!n.loading(),"page-error":n.loadError()!==""&&!n.loading()}};this.clickAction=function(){var t=window.event;t&&t.shiftKey||n.loadError()!==""?typeof page.Update=="function"&&page.Update():page.parentTitle()!=null&&page.parentAction()};this.pointerEvents=function(){return n.loadError()!==""||page.parentTitle()!=null?"auto":"none"};this.pushState=function(){var t=window.event;return t&&(t.ctrlKey||t.metaKey)?(window.open(n.sourceUrl),!1):(history.pushState(n.stateHandler(),"",n.sourceUrl),!0)};this.replaceState=function(){return history.replaceState(n.stateHandler(),"",n.sourceUrl)};this.dispose=function(){return null};this.loading=ko.observable(!1);this.loadError=ko.observable("")}return n}(),Base_Model=function(){function n(){}return n}(),BaseGroup_Model=function(){function n(){return{GroupId:ko.observable(0),ParentGroupId:ko.observable(0),Name:ko.observable(""),ParentName:ko.observable(""),BrandingId:ko.observable(0)}}return n}(),Base_State=function(){function n(n){this.Type="";var t=Object.keys(views).filter(function(t){return views[t]===n});if(t.length>0)this.Type=t[0];else throw"Invalid view class name.";}return n}(),MappingOptions=function(){function n(){return{arrayChildId:{},extend:{}}}return n}(),BaseUpdateViewModel=function(n,t,i){i?ko.viewmodel.updateFromModel(n.viewModel,t):n.viewModel=ko.viewmodel.fromModel(t,n.mappingOptions||new MappingOptions);t!=null&&(page.UpdateCapabilities(t.Capabilities),page.UpdateCurrentUser(t.CurrentUser))},GroupUpdateViewModel=function(n,t){t!=null&&(n.viewModel.Name(t.Name),n.viewModel.GroupId(t.GroupId),n.viewModel.ParentName(t.ParentName),n.viewModel.ParentGroupId(t.ParentGroupId),n.viewModel.BrandingId(t.BrandingId),page.UpdateCapabilities(t.Capabilities),page.UpdateCurrentUser(t.CurrentUser))},ChartsUpdateViewModel=function(n,t,i,r){r?ko.viewmodel.updateFromModel(n.viewModel,i):n.viewModel=ko.viewmodel.fromModel(i,n.mappingOptions);r&&n.chartCollection!=null||(n.chartCollection=t?new ChartCollection(n,n.viewModel.SharedCollection.ChartCollectionId,n.viewModel.SharedCollection.Name,n.viewModel.SharedCollection.DaysToDisplay,n.viewModel.SharedCollection.Intervals,n.viewModel.SharedCollection.IsVirtual,n.viewModel.SharedCollection.Charts):new ChartCollection(n,n.viewModel.ChartCollectionId,n.viewModel.Name,n.viewModel.DaysToDisplay,n.viewModel.Intervals,n.viewModel.IsVirtual,n.viewModel.Charts));n.chartCollection.dataCollection.UpdateCollection();i!=null&&(page.UpdateCapabilities(i.Capabilities),page.UpdateCurrentUser(i.CurrentUser))},LoadView_Process=function(n){document.getElementById("page-scroll").scrollTop=0;n.replaceState();n.titleComputed=ko.computed(function(){n.titleHandler()});n.Render()},IsSuccessResponse=function(n){return n===""||n==null?(views.Error_Index.Load(),!1):n.Success===!1?n.Message==="Unauthorised"?(views.Unauthorised.UrlLoad(),!1):(page.SetMessage(n.Message),!1):!0},Load_Failed=function(n,t){SessionExpiryRedirect(n);n.statusText!=="abort"&&t.loadError("Failed to load page data.")},LoadView_Error=function(n){(n.Init(),n.loading(!1),n.loadError("Server error while loading page."),page.view()===n)&&(page.ClearItems(),LoadView_Process(n))},LoadView_Unauthorised=function(n){n.Init();page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(t){page.view()===n&&(page.ClearItems(),BaseUpdateViewModel(n,t.Response,!1),LoadView_Process(n))}))},LoadView_Base=function(n){n.Init();page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(t){page.view()===n&&IsSuccessResponse(t)&&(page.ClearItems(),BaseUpdateViewModel(n,t,!1),LoadView_Process(n))}))},LoadView_Chart=function(n,t){n.Init();page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(i){page.view()===n&&IsSuccessResponse(i)&&(page.ClearItems(),ChartsUpdateViewModel(n,t,i,!1),LoadView_Process(n))}))},LoadView_Group=function(n){n.Init();page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(t){page.view()===n&&IsSuccessResponse(t)&&(page.ClearItems(),GroupUpdateViewModel(n,t),LoadView_Process(n))}))},BaseUpdate=function(n,t){return page.SetUpdate(function(){n.loading(!0);page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(i){page.view()===n&&IsSuccessResponse(i)&&(t&&t.forEach(function(n){n.enabled()&&n.LoadData()}),BaseUpdateViewModel(n,i,!0))}))})},MapUpdate=function(n,t,i){return page.SetUpdate(function(){n.loading(!0);page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).done(function(r){(n.loading(!1),page.view()===n)&&IsSuccessResponse(r)&&(i&&i.forEach(function(n){n.enabled()&&n.LoadData()}),BaseUpdateViewModel(n,r,!0),t())}))})},UnauthorisedUpdate=function(n){return page.SetUpdate(function(){n.loading(!0);page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(t){if(t.Response==null){window.location.href=n.sourceUrl;return}BaseUpdateViewModel(n,t.Response,!0)}))})},GroupUpdate=function(n,t){return page.SetUpdate(function(){n.loading(!0);page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(i){page.view()===n&&IsSuccessResponse(i)&&(t&&t.forEach(function(n){n.enabled()&&n.LoadData()}),GroupUpdateViewModel(n,i))}))})},ChartUpdate=function(n,t){return page.SetUpdate(function(){n.loading(!0);page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).always(function(){n.loading(!1);n.loadError("")}).fail(function(t){return Load_Failed(t,n)}).done(function(i){page.view()===n&&IsSuccessResponse(i)&&ChartsUpdateViewModel(n,t,i,!0)}))})},__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_AndroidApk_Model=function(){function n(){}return n}(),Admin_AndroidApk_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_Capabilities_Model=function(){function n(){}return n}(),Admin_Capabilities_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_CapabilityDetails_Model=function(){function n(){return{DbCapability:{CapabilityId:ko.observable(0),FullName:ko.observable(""),Description:ko.observable(""),ClassName:ko.observable(""),SubName:ko.observable("")},CsCapability:{CapabilityId:ko.observable(0),FullName:ko.observable(""),Description:ko.observable(""),ClassName:ko.observable(""),SubName:ko.observable("")}}}return n}(),Admin_CapabilityDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DbCapabilityId=t.viewModel.DbCapability.CapabilityId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_CostItems_Model=function(){function n(){}return n}(),Admin_CostItems_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_EmailProviders_Model=function(){function n(){return{}}return n}(),Admin_EmailProviders_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_ErrorLogs_Model=function(){function n(){}return n}(),Admin_ErrorLogs_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_Firmware_Model=function(){function n(){}return n}(),Admin_Firmware_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_Index_Model=function(){function n(){return{Counts:{Capabilities:ko.observable(0),CostItems:ko.observable(0),Firmware:ko.observable(0),PurchaseOrders:ko.observable(0),ErrorLogs:ko.observable(0),SmsProviders:ko.observable(0),EmailProviders:ko.observable(0)}}}return n}(),Admin_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_PurchaseOrders_Model=function(){function n(){return{}}return n}(),Admin_PurchaseOrders_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_ServerHealth_Model=function(){function n(){return{}}return n}(),Admin_ServerHealth_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_SmsProviders_Model=function(){function n(){return{}}return n}(),Admin_SmsProviders_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),ApplicationTemplate_Details_Model=function(){function n(){return{ApplicationTemplate:{ApplicationTemplateId:ko.observable(0),Name:ko.observable(""),ApplicationGuid:ko.observable(""),CreatedUtc:ko.observable(new Date),CreatedUser:ko.observable(""),ApplicationName:ko.observable(""),AppId:ko.observable(0),ModuleMaxIndex:ko.observable(0)}}}return n}(),ApplicationTemplate_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ApplicationTemplateId=t.viewModel.ApplicationTemplate.ApplicationTemplateId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),ApplicationTemplate_Module_Model=function(){function n(){return{Module:{ApplicationTemplateId:ko.observable(0),ApplicationTemplateName:ko.observable(""),ModuleIndex:ko.observable(0),Name:ko.observable(""),ShortName:ko.observable(""),Icon:ko.observable(""),Type:ko.observable("")}}}return n}(),ApplicationTemplate_Module_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ApplicationTemplateId=t.viewModel.Module.ApplicationTemplateId(),i.ModuleIndex=t.viewModel.Module.ModuleIndex(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Application_AppModule_Model=function(){function n(){return{AppModule:{AppModuleId:ko.observable(0),AppId:ko.observable(0),AppName:ko.observable(""),AppVersionNumber:ko.observable(0),ModuleName:ko.observable(""),Type:ko.observable(""),AppModuleSourceId:ko.observable(0),ModuleVersion:ko.observable(0),Slot:ko.observable(0),Index:ko.observable(0)},GroupId:ko.observable(0)}}return n}(),Application_AppModule_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AppId=t.viewModel.AppModule.AppId(),i.AppModuleId=t.viewModel.AppModule.AppModuleId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Application_AppVersion_Model=function(){function n(){return{App:{AppId:ko.observable(0),Name:ko.observable(""),Description:ko.observable(""),DeviceType:ko.observable(""),ApplicationGuid:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(new Date),AppVersionNumber:ko.observable(0),AppModulesCount:ko.observable(0),VersionNotes:ko.observable(""),BinaryBuiltUtc:ko.observable(new Date),BinaryBuiltUserId:ko.observable(0),BinaryBuiltUserName:ko.observable(""),BinaryIsCurrent:ko.observable(!1)},GroupId:ko.observable(0)}}return n}(),Application_AppVersion_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AppId=t.viewModel.App.AppId(),i.Version=t.viewModel.App.AppVersionNumber(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Application_Details_Model=function(){function n(){return{App:{AppId:ko.observable(0),Name:ko.observable(""),Description:ko.observable(""),DeviceType:ko.observable(""),ApplicationGuid:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(new Date)},GroupId:ko.observable(0)}}return n}(),Application_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AppId=t.viewModel.App.AppId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AppModuleSource_Details_Model=function(){function n(){return{AppModuleSource:{AppModuleSourceId:ko.observable(0),Type:ko.observable(""),DeviceType:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(new Date),ApplicationGuid:ko.observable(""),InputsCount:ko.observable(0),OutputsCount:ko.observable(0)},GroupId:ko.observable(0)}}return n}(),AppModuleSource_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AppModuleSourceId=t.viewModel.AppModuleSource.AppModuleSourceId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AppModuleSource_SourceXML_Model=function(){function n(){return{AppModuleSource:{AppModuleSourceId:ko.observable(0),Type:ko.observable(""),ModuleVersion:ko.observable(0),Source:ko.observable("")},GroupId:ko.observable(0)}}return n}(),AppModuleSource_SourceXML_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AppModuleSourceId=t.viewModel.AppModuleSource.AppModuleSourceId(),i.Version=t.viewModel.AppModuleSource.ModuleVersion(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AppModuleSource_Version_Model=function(){function n(){return{AppModuleSourceVersion:{AppModuleSourceId:ko.observable(0),Type:ko.observable(""),DeviceType:ko.observable(""),ModuleVersion:ko.observable(0),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(new Date),ApplicationGuid:ko.observable(""),InputsCount:ko.observable(0),OutputsCount:ko.observable(0),Source:ko.observable(""),Notes:ko.observable("")},GroupId:ko.observable(0)}}return n}(),AppModuleSource_Version_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AppModuleSourceId=t.viewModel.AppModuleSourceVersion.AppModuleSourceId(),i.Version=t.viewModel.AppModuleSourceVersion.ModuleVersion(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),BillingEntity_AddressDetails_Model=function(){function n(){return{Address:{AddressId:ko.observable(0),Address:ko.observable(""),City:ko.observable(""),StateProvince:ko.observable(""),Country:ko.observable(""),Code:ko.observable(""),BillingEntityId:ko.observable(0),BillingEntityName:ko.observable(""),CurrentBillingAddressId:ko.observable(0)},GroupId:ko.observable(0)}}return n}(),BillingEntity_AddressDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.AddressId=t.viewModel.Address.AddressId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),BillingEntity_Details_Model=function(){function n(){return{BillingEntity:{BillingEntityId:ko.observable(0),CompanyName:ko.observable(""),Address:ko.observable(""),City:ko.observable(""),StateProvince:ko.observable(""),Code:ko.observable(""),Country:ko.observable(""),AddressId:ko.observable(0),EscalationListId:ko.observable(0),EscalationListName:ko.observable(""),InventoryGroupId:ko.observable(0),InventoryGroupName:ko.observable(""),TimeZoneName:ko.observable("")},GroupId:ko.observable(0)}}return n}(),BillingEntity_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.BillingEntityId=t.viewModel.BillingEntity.BillingEntityId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),BillingEntity_MessageAccounts_Model=function(){function n(){return{BillingEntity:{BillingEntityId:ko.observable(0),CompanyName:ko.observable(""),Address:ko.observable(""),City:ko.observable(""),StateProvince:ko.observable(""),Code:ko.observable(""),Country:ko.observable(""),AddressId:ko.observable(0),EscalationListId:ko.observable(0),EscalationListName:ko.observable(""),PrimaryGroupId:ko.observable(0),PrimaryGroupName:ko.observable("")},GroupId:ko.observable(0)}}return n}(),BillingEntity_MessageAccounts_State=function(n){function t(t){var i=n.call(this,t)||this;return i.BillingEntityId=t.viewModel.BillingEntity.BillingEntityId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Branding_Details_Model=function(){function n(){return{Branding:{BrandingId:ko.observable(0),Name:ko.observable(""),DisplayName:ko.observable(""),Website:ko.observable(""),Stylesheet:ko.observable(""),ToolbarLogo:ko.observable(""),Dashboard:ko.observable(""),FavIcon:ko.observable(""),Footer:ko.observable(""),ContactUsUrl:ko.observable(""),PrivacyPolicyUrl:ko.observable(""),TermsAndConditionsUrl:ko.observable(""),Hostnames:ko.observableArray([]),GroupCount:ko.observable(0)}}}return n}(),Branding_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.BrandingId=t.viewModel.Branding.BrandingId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Chart_Details_Model=function(){function n(){return{ChartCollectionId:ko.observable(0),Name:ko.observable(""),DaysToDisplay:ko.observable(0),IsVirtual:ko.observable(!1),ShowTapes:ko.observable(!1),ModuleId:ko.observable(0),CanCreateShared:ko.observable(!1),Intervals:ko.observableArray([]),Charts:ko.observableArray([])}}return n}(),Chart_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ChartCollectionId=t.viewModel.ChartCollectionId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Chart_Index_Model=function(){function n(){}return n}(),Chart_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),Chart_Index_Config=function(){function n(){this.chartTypes=[{Name:"Line",Value:"line"},{Name:"Histogram",Value:"histogram"},{Name:"Tape",Value:"tape"},{Name:"Timescale",Value:"timescale"}];this.chartTypeOptions={line:{Min:200,Max:500,Default:250,Heights:[{Name:"Small",Value:200},{Name:"Medium",Value:250},{Name:"Large",Value:350},{Name:"Extra Large",Value:500}]},histogram:{Min:200,Max:500,Default:250,Heights:[{Name:"Small",Value:200},{Name:"Medium",Value:250},{Name:"Large",Value:350},{Name:"Extra Large",Value:500}]},tape:{Min:25,Max:25,Default:25,Heights:[{Name:"Default",Value:25}]},timescale:{Min:25,Max:25,Default:25,Heights:[{Name:"Default",Value:25}]}};this.offsetUnits=[{Name:"Day",Value:"D"},{Name:"Week",Value:"W"},{Name:"Year",Value:"Y"}];this.chartColors=["#0e88e3","#49ec30","#d62728","#ea9410","#470dd8","#41eca2","#db4706","#eab410","#ae12f4","#70bf15","#dd0707","#ff7f23","#9467bd","#00ab70","#b11111","#f63810","#5d1287","#2c902c","#851f1f","#f60810"];this.colorCount=this.chartColors.length;this.colorScale=d3.scaleOrdinal(this.chartColors).domain(d3.range(0,this.colorCount-1).map(function(n){return""+n}))}return n}(),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Chart_Module_Model=function(){function n(){return{ChartCollectionId:ko.observable(0),Name:ko.observable(""),DaysToDisplay:ko.observable(0),IsVirtual:ko.observable(!1),ShowTapes:ko.observable(!1),ModuleId:ko.observable(0),CanCreateShared:ko.observable(!1),Intervals:ko.observableArray([]),Charts:ko.observableArray([])}}return n}(),Chart_Module_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.ModuleId(),i.ShowTapes=t.viewModel.ShowTapes()||!1,i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Containing_Groups_Model=function(){function n(){return{Id:ko.observable(""),Name:ko.observable("")}}return n}(),Containing_Groups_State=function(n){function t(t){var i=n.call(this,t)||this;return i.Id=t.viewModel.Id(),i.Name=t.viewModel.Name(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),CumulativeMeter_Details_Model=function(){function n(){return{CumulativeMeter:{CumulativeMeterId:ko.observable(0),ModuleId:ko.observable(0),ModuleName:ko.observable(""),Name:ko.observable(""),Icon:ko.observable(""),Scale:ko.observable(0),DisplayDigits:ko.observable(0),Units:ko.observable(""),StartUtc:ko.observable(new Date),Total:ko.observable(0),FormattedTotal:ko.observable(0),WarningReached:ko.observable(!1),LimitReached:ko.observable(!1),TotalAlarms:ko.observableArray([]),TimeAlarms:ko.observableArray([])},EscalationLists:ko.observableArray([])}}return n}(),CumulativeMeter_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.CumulativeMeterId=t.viewModel.CumulativeMeter.CumulativeMeterId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),DataStream_Details_Model=function(){function n(){return{DataStreamId:ko.observable(""),NetworkId:ko.observable(0),ModuleId:ko.observable(0),NetworkName:ko.observable(""),ModuleName:ko.observable(""),TrendUnits:ko.observable(""),Trend:ko.observable(""),Scale:ko.observable(0),Units:ko.observable("")}}return n}(),DataStream_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DataStreamId=t.viewModel.DataStreamId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),DeviceType_Details_Model=function(){function n(){return{DeviceType:{DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),Description:ko.observable(""),ImageUrl:ko.observable(""),IsObsolete:ko.observable(!1),IoType:ko.observable(""),MaxIoModules:ko.observable(0),HardwareId:ko.observable(0),ConfigurableSerialPorts:ko.observable(0),SupportsApplication:ko.observable(!1),SimRequirements:ko.observable(""),IsGateway:ko.observable(!1),ParentTypeId:ko.observable(0),ParentTypeName:ko.observable(""),NextAvailableModel:ko.observable(0)},GroupId:ko.observable(0)}}return n}(),DeviceType_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DeviceTypeId=t.viewModel.DeviceType.DeviceTypeId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Device_Calibration_Model=function(){function n(){return{Device:{DeviceCalibrationId:ko.observable(0),DeviceExtAddress:ko.observable(""),CreatedUtc:ko.observable(new Date)}}}return n}(),Device_Calibration_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DeviceExtAddress=t.viewModel.Device.DeviceExtAddress(),i.DeviceCalibrationId=t.viewModel.Device.DeviceCalibrationId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Device_Details_Model=function(){function n(){return{Device:{DeviceExtAddress:ko.observable(""),DeviceTypeId:ko.observable(0),Type:ko.observable(""),Model:ko.observable(0),DeviceTargetUpgradeModel:ko.observable(0),FirmwareVersion:ko.observable(0),NetworkId:ko.observable(0),NodeAddress:ko.observable(0),NetworkName:ko.observable(""),NodeName:ko.observable(""),SimId:ko.observable(0),SimNumber:ko.observable(""),SimStatus:ko.observable(""),SimSupported:ko.observable(!1),IsObsolete:ko.observable(!1),ParentDevice:{DeviceExtAddress:ko.observable(""),Type:ko.observable("")},ChildDevices:ko.observableArray([])}}}return n}(),Device_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DeviceExtAddress=t.viewModel.Device.DeviceExtAddress(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Device_TestReport_Model=function(){function n(){return{Device:{DeviceTestReportId:ko.observable(0),DeviceExtAddress:ko.observable(""),CreatedUtc:ko.observable(new Date),AllPassed:ko.observable(!1)}}}return n}(),Device_TestReport_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DeviceExtAddress=t.viewModel.Device.DeviceExtAddress(),i.DeviceTestReportId=t.viewModel.Device.DeviceTestReportId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Error_Index_Model=function(){function n(){}return n}(),Error_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),EscalationList_Details_Model=function(){function n(){return{EscalationList:{EscalationListId:ko.observable(0),Name:ko.observable(""),EscalationDelayMinutes:ko.observable(0)},BrandingId:ko.observable(0)}}return n}(),EscalationList_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.EscalationListId=t.viewModel.EscalationList.EscalationListId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Escalation_Index_Model=function(){function n(){}return n}(),Escalation_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),GisDataset_Details_Model=function(){function n(){return{GisDataset:{GisDatasetId:ko.observable(0),Name:ko.observable(""),CreatedUtc:ko.observable(new Date),CreatedUserId:ko.observable(0),CreatedUser:ko.observable(""),PolygonCount:ko.observable(0),ItemDescriptions:ko.observableArray([]),IsEditable:ko.observable(!1)}}}return n}(),GisDataset_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GisDatasetId=t.viewModel.GisDataset.GisDatasetId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ApplicationTemplates_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_ApplicationTemplates_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_AppModuleSources_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_AppModuleSources_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Apps_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Apps_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Attachments_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Attachments_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_BillingEntities_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_BillingEntities_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Brandings_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Brandings_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_DataStreams_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_DataStreams_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Devices_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Devices_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_DeviceSummary_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_DeviceSummary_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_DeviceTypes_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_DeviceTypes_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_EmailProviders_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_EmailProviders_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_EscalationLists_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_EscalationLists_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ExportTargets_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_ExportTargets_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_GisDatasets_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_GisDatasets_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Icons_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Icons_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_LegalTerms_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_LegalTerms_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_MessageAccounts_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_MessageAccounts_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_MessagePlans_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_MessagePlans_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ModuleConfigTemplates_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_ModuleConfigTemplates_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Modules_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Modules_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Networks_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Networks_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkSims_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_NetworkSims_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkSubscriptions_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_NetworkSubscriptions_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Notes_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Notes_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ReportTemplates_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_ReportTemplates_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_RfidTags_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_RfidTags_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Roles_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Roles_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_SharedCollections_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_SharedCollections_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Sims_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Sims_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_SmsProviders_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_SmsProviders_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Tags_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Tags_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Users_Model=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(BaseGroup_Model),Group_Users_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ConfigHistory_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable("")}}return n}(),Group_ConfigHistory_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ConfigHistoryDetails_Model=function(){function n(){return{GroupId:ko.observable(0),GroupName:ko.observable(""),ModuleType:ko.observable(""),ModuleConfigHistoryId:ko.observable(0),Reason:ko.observable(""),UserName:ko.observable(""),TimeUtc:ko.observable(new Date),RollbackHistoryId:ko.observable(0)}}return n}(),Group_ConfigHistoryDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i.ModuleConfigHistoryId=t.viewModel.ModuleConfigHistoryId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Details_Model=function(n){function t(){var t=n.call(this)||this;return{GroupId:ko.observable(0),Name:ko.observable(""),ParentGroupName:ko.observable(""),ParentGroupId:ko.observable(0),NetworkCount:ko.observable(0),UserCount:ko.observable(0),RoleCount:ko.observable(0),GroupCount:ko.observable(0),ModuleCount:ko.observable(0),DeviceCount:ko.observable(0),BrandingCount:ko.observable(0),EscalationListCount:ko.observable(0),DataStreamCount:ko.observable(0),GisDatasetCount:ko.observable(0),IconCount:ko.observable(0),LegalTermsCount:ko.observable(0),ExportTargetCount:ko.observable(0),SimCount:ko.observable(0),RfidTagCount:ko.observable(0),ApplicationTemplateCount:ko.observable(0),SharedCollectionCount:ko.observable(0),ReportTemplateCount:ko.observable(0),AppCount:ko.observable(0),AppModuleSourceCount:ko.observable(0),BillingEntityCount:ko.observable(0),DeviceTypeCount:ko.observable(0),ModuleConfigTemplateCount:ko.observable(0),MessageAccountCount:ko.observable(0),MessagePlanCount:ko.observable(0),NetworkSubscriptionCount:ko.observable(0),NoteCount:ko.observable(0),SmsProviderCount:ko.observable(0),EmailProviderCount:ko.observable(0),TagCount:ko.observable(0),AttachmentCount:ko.observable(0)}}return __extends(t,n),t}(Base_Model),Group_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_GrantedRoles_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable("")}}return n}(),Group_GrantedRoles_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ModuleConfiguration_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable(""),ModuleType:ko.observable(""),ConfigItems:ko.observableArray()}}return n}(),Group_ModuleConfiguration_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i.ModuleType=t.viewModel.ModuleType(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ModuleConversions_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable(""),ParentGroupId:ko.observable(0),ParentGroupName:ko.observable("")}}return n}(),Group_ModuleConversions_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkManagers_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable("")}}return n}(),Group_NetworkManagers_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkStatus_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable("")}}return n}(),Group_NetworkStatus_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Tasks_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable("")}}return n}(),Group_Tasks_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_UpdateNetworkFirmware_Model=function(){function n(){return{GroupId:ko.observable(0),Name:ko.observable(""),DeviceType:ko.observable(""),DeviceModel:ko.observable(0),MinVersion:ko.observable(0),MaxVersion:ko.observable(0),IncludeNoApplication:ko.observable(!1)}}return n}(),Group_UpdateNetworkFirmware_State=function(n){function t(t){var i=n.call(this,t)||this;return i.GroupId=t.viewModel.GroupId(),i.DeviceType=t.viewModel.DeviceType(),i.DeviceModel=t.viewModel.DeviceModel(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Home_Index_Model=function(){function n(){return{Groups:ko.observableArray([])}}return n}(),Home_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),LegalTerms_Details_Model=function(){function n(){return{LegalTerms:{LegalTermsId:ko.observable(0),Name:ko.observable(""),CreatedUtc:ko.observable(new Date),CreatedUserId:ko.observable(0),CreatedUser:ko.observable(""),LegalTermsMarkDown:ko.observable("")}}}return n}(),LegalTerms_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.LegalTermsId=t.viewModel.LegalTerms.LegalTermsId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),LegalTerms_View_Model=function(){function n(){return{LegalTermsId:ko.observable(0),Name:ko.observable(""),LegalTermsMarkdown:ko.observable("")}}return n}(),LegalTerms_View_State=function(n){function t(t){var i=n.call(this,t)||this;return i.LegalTermsId=t.viewModel.LegalTermsId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessageAccount_Details_Model=function(){function n(){return{MessageAccount:{MessageAccountId:ko.observable(0),Name:ko.observable(""),BillingEntityId:ko.observable(0),BillingEntityName:ko.observable(""),SmsCount:ko.observable(0),EmailCount:ko.observable(0),AccountStart:ko.observable(new Date),PeriodStart:ko.observable(new Date),PeriodEnd:ko.observable(new Date),MessagePlanId:ko.observable(0),MessagePlanName:ko.observable(""),PeriodMonths:ko.observable(0),PeriodSmsQuota:ko.observable(0),NotifyOnSmsExceeded:ko.observable(!1),EnforceSmsQuota:ko.observable(!1),PeriodEmailQuota:ko.observable(0),NotifyOnEmailExceeded:ko.observable(!1),EnforceEmailQuota:ko.observable(!1),PreviousMessageAccountId:ko.observable(0),NextMessageAccountId:ko.observable(0),IsClosed:ko.observable(!1)},GroupId:ko.observable(0)}}return n}(),MessageAccount_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.MessageAccountId=t.viewModel.MessageAccount.MessageAccountId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessageAccount_PeriodMessages_Model=function(){function n(){return{MessageAccountId:ko.observable(0),MessageAccountName:ko.observable(""),PeriodIndex:ko.observable(0),GroupId:ko.observable(0)}}return n}(),MessageAccount_PeriodMessages_State=function(n){function t(t){var i=n.call(this,t)||this;return i.MessageAccountId=t.viewModel.MessageAccountId(),i.PeriodIndex=t.viewModel.PeriodIndex(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessageAccount_Periods_Model=function(){function n(){return{MessageAccountId:ko.observable(0),MessageAccountName:ko.observable(""),GroupId:ko.observable(0)}}return n}(),MessageAccount_Periods_State=function(n){function t(t){var i=n.call(this,t)||this;return i.MessageAccountId=t.viewModel.MessageAccountId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessagePlan_Details_Model=function(){function n(){return{MessagePlan:{MessagePlanId:ko.observable(0),Name:ko.observable(""),SmsProviderId:ko.observable(0),SmsProviderName:ko.observable(""),EmailProviderId:ko.observable(0),EmailProviderName:ko.observable(""),Months:ko.observable(0),PeriodSmsQuota:ko.observable(0),EnforceSmsQuota:ko.observable(!1),NotifyOnSmsExceeded:ko.observable(!1),PeriodEmailQuota:ko.observable(0),EnforceEmailQuota:ko.observable(!1),NotifyOnEmailExceeded:ko.observable(!1),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(new Date),InUse:ko.observable(!1)},GroupId:ko.observable(0)}}return n}(),MessagePlan_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.MessagePlanId=t.viewModel.MessagePlan.MessagePlanId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_AlertDetails_Model=function(){function n(){return{CanViewNetwork:ko.observable(!1),IsLive:ko.observable(!1),Alert:{Name:ko.observable(""),Alert:ko.observable(0),Status:ko.observable(!1),AlertAndStatus:ko.observable(0),SendSms:ko.observable(!1),SendEmail:ko.observable(!1),AutoSms:ko.observable(!1)},Module:{AutoSmsUser:ko.observable(""),CanCommand:ko.observable(!1),CanEdit:ko.observable(!1),ConfigDirty:ko.observable(!1),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLinkUp:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),ShortName:ko.observable(""),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable("")},ModuleTile:{Commands:ko.observableArray([]),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),ShortName:ko.observable(""),SpecialIcon:ko.observable({}),State:ko.observable(""),StatusDescription:ko.observable(""),StatusText:ko.observable(""),StatusValues:ko.observableArray([]),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable(""),blockSets:ko.observableArray([])},Escalation:{ModuleId:ko.observable(0),AlertAndStatus:ko.observable(0),EscalationListId:ko.observable(0),EscalationListName:ko.observable(""),Delay:ko.observable(0),Users:ko.observable(0)}}}return n}(),Module_AlertDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Escalation.ModuleId(),i.AlertAndStatus=t.viewModel.Escalation.AlertAndStatus(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_AlertEventDetails_Model=function(){function n(){return{AlertAndStatus:ko.observable(0),ModuleEventId:ko.observable(0),TimeUtc:ko.observable(new Date),AcknowledgeUtc:ko.observable(new Date),AcknowledgeUser:ko.observable(""),EscalationComplete:ko.observable(!1),Details:ko.observable(""),UserName:ko.observable(""),Alert:{Name:ko.observable(""),Alert:ko.observable(0),Status:ko.observable(!1),AlertAndStatus:ko.observable(0),SendSms:ko.observable(!1),SendEmail:ko.observable(!1),AutoSms:ko.observable(!1)},Messages:ko.observableArray([]),Module:{AutoSmsUser:ko.observable(""),CanCommand:ko.observable(!1),CanEdit:ko.observable(!1),ConfigDirty:ko.observable(!1),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLinkUp:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),ShortName:ko.observable(""),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable("")},ModuleTile:{Commands:ko.observableArray([]),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),ShortName:ko.observable(""),SpecialIcon:ko.observable({}),State:ko.observable(""),StatusDescription:ko.observable(""),StatusText:ko.observable(""),StatusValues:ko.observableArray([]),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable(""),blockSets:ko.observableArray([])},ModuleTileSnapshot:{Commands:ko.observableArray([]),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),ShortName:ko.observable(""),SpecialIcon:ko.observable({}),State:ko.observable(""),StatusDescription:ko.observable(""),StatusText:ko.observable(""),StatusValues:ko.observableArray([]),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable(""),blockSets:ko.observableArray([])}}}return n}(),Module_AlertEventDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i.ModuleEventId=t.viewModel.ModuleEventId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_ConfigHistory_Model=function(){function n(){return{Module:{NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),Name:ko.observable(""),ConfigDirty:ko.observable(!1),Type:ko.observable("")},ModuleConfigHistoryId:ko.observable(0)}}return n}(),Module_ConfigHistory_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_ConfigTemplates_Model=function(){function n(){return{ModuleId:ko.observable(0),ModuleName:ko.observable(""),ModuleType:ko.observable("")}}return n}(),Module_ConfigTemplates_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Details_Model=function(){function n(){return{SupportsLocation:ko.observable(!1),SupportsRfidTags:ko.observable(!1),IsLive:ko.observable(!1),CanViewNetwork:ko.observable(!1),ConversionPercent:ko.observable(0),LocationFirstUtc:ko.observable(""),LocationLastUtc:ko.observable(""),Module:{AutoSmsUser:ko.observable(""),CanCommand:ko.observable(!1),CanEdit:ko.observable(!1),ConfigDirty:ko.observable(!1),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLinkUp:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),ShortName:ko.observable(""),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable(""),IsVirtualModule:ko.observable(!1),RelatedModules:ko.observableArray([])},ModuleTile:ko.observable({Commands:ko.observableArray([]),Icon:ko.observable(""),IsEnabled:ko.observable(!1),IsLive:ko.observable(!1),LastUpdateUtc:ko.observable(new Date),ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),ShortName:ko.observable(""),SpecialIcon:ko.observable({}),State:ko.observable(""),StatusDescription:ko.observable(""),StatusText:ko.observable(""),StatusValues:ko.observableArray([]),SuppressAlertsUtc:ko.observable(new Date),Type:ko.observable("")}),AllProperties:ko.observableArray([]),Attributes:ko.observableArray([]),ConfigItems:ko.observableArray([]),CumulativeMeters:ko.observableArray([]),DailyTotalProperties:ko.observableArray([]),DashboardGroups:ko.observableArray([]),DataStreams:ko.observableArray([]),Exports:ko.observableArray([]),NumberProperties:ko.observableArray([]),RfidTagGroups:ko.observableArray([]),TrailLocations:ko.observableArray([]),ModuleTasks:ko.observableArray([{Task:ko.observable(""),Type:ko.observable(""),IsCompleted:ko.observable(!1)}])}}return n}(),Module_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Map_Model=function(){function n(){return{Module:{ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),NodeLastSyncUtc:ko.observable(new Date),LastUpdateUtc:ko.observable(new Date),UserId:ko.observable(0),UserName:ko.observable(""),Latitude:ko.observable(0),Longitude:ko.observable(0),FirstModuleLatitude:ko.observable(0),FirstModuleLongitude:ko.observable(0)},SupportsLocation:ko.observable(!1),SupportsTrails:ko.observable(!1),GisPolygons:ko.observableArray([])}}return n}(),Module_Map_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_ModuleExportTarget_Model=function(){function n(){return{ModuleId:ko.observable(0),ModuleName:ko.observable(""),ModuleExportTargetId:ko.observable(0),ExportTargetId:ko.observable(0),ExportTargetName:ko.observable(""),Identifier:ko.observable(""),Trend:ko.observable(""),Scale:ko.observable(0),StartExportUtc:ko.observable(new Date),LastExportUtc:ko.observable(new Date),Enabled:ko.observable(!1),SupportsPreview:ko.observable(!1)}}return n}(),Module_ModuleExportTarget_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.ModuleId(),i.ModuleExportTargetId=t.viewModel.ModuleExportTargetId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Subscribers_Model=function(){function n(){return{CanViewNetwork:ko.observable(!1),IsLive:ko.observable(!1),Module:{NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),Name:ko.observable(""),ConfigDirty:ko.observable(!1),Type:ko.observable("")},Alerts:ko.observableArray([])}}return n}(),Module_Subscribers_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Tags_Model=function(){function n(){return{Module:{NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),Name:ko.observable(""),ConfigDirty:ko.observable(!1),Type:ko.observable("")}}}return n}(),Module_Tags_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),NetworkSubscription_Details_Model=function(){function n(){return{Subscription:{NetworkSubscriptionId:ko.observable(0),NetworkId:ko.observable(0),NetworkName:ko.observable(""),BillingEntityId:ko.observable(0),CustomerName:ko.observable(""),EndLocal:ko.observable(new Date),Fee:ko.observable(0),Expired:ko.observable(!1),CancelledUtc:ko.observable(new Date),CancelledById:ko.observable(0),CancelledByUser:ko.observable(""),IsCancelled:ko.observable(!1),XeroInvoiceGuid:ko.observable(""),XeroInvoicedUtc:ko.observable(new Date),XeroInvoiceNumber:ko.observable(""),XeroInvoiceStatus:ko.observable(""),XeroInvoiceIsPaid:ko.observable(!1)},GroupId:ko.observable(0),RequestedSubscriptionId:ko.observable(0)}}return n}(),NetworkSubscription_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkSubscriptionId=t.viewModel.Subscription.NetworkSubscriptionId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Details_Model=function(){function n(){return{NetworkId:ko.observable(0),Name:ko.observable(""),ShortName:ko.observable(""),LastSyncUtc:ko.observable(new Date),MaxSyncIntervalSeconds:ko.observable(0),CanViewSim:ko.observable(!1),HasSim:ko.observable(!1),SimId:ko.observable(0),SimNumber:ko.observable(""),SimPhoneNumber:ko.observable(""),SimCellularNetworkId:ko.observable(0),SimCellularNetworkName:ko.observable(""),SimCancelled:ko.observable(!1),SupportsSim:ko.observable(!1),RequiresSim:ko.observable(!1),DefaultModuleId:ko.observable(0),DefaultModule:ko.observable(""),DefaultModuleNodeName:ko.observable(""),PrimaryNodeExtAddress:ko.observable(""),IsSyncOverdue:ko.observable(!1),IsLive:ko.observable(!1),IsLinkUp:ko.observable(!1),GisDatasetId:ko.observable(0),GisDatasetName:ko.observable(""),MaxSyncInterval:ko.observable(""),UserHasSyncAlertSubscription:ko.observable(!1),TimeZoneName:ko.observable(""),TimeZoneOffset:ko.observable(0),IncompleteUpdateCount:ko.observable(0),GsmIdleTimeoutSeconds:ko.observable(0),StatusId:ko.observable(0),NextStatusId:ko.observable(0),StatusName:ko.observable(""),NextStatusName:ko.observable(""),StatusMessage:ko.observable(""),StatusState:ko.observable(""),NetworkSubscriptionId:ko.observable(0),NetworkSubscriptionEnd:ko.observable(new Date),NetworkSubscriptionFee:ko.observable(0),NetworkSubscriptionStatus:ko.observable(""),NetworkSubscriptionIsCancelled:ko.observable(!1),NetworkSubscriptionXeroInvoiceGuid:ko.observable(""),NetworkSubscriptionXeroInvoiceNumber:ko.observable(""),NetworkSubscriptionXeroInvoicedUtc:ko.observable(new Date),NetworkSubscriptionXeroInvoiceIsPaid:ko.observable(!1),BillingEntityName:ko.observable(""),HasN8LinkAttached:ko.observable(!1),MessageAccountId:ko.observable(0),MessageAccountName:ko.observable(""),SuppressedModules:ko.observableArray([{ModuleId:ko.observable(0),Name:ko.observable(""),ModuleIndex:ko.observable(0),NodeAddress:ko.observable(0),NodeName:ko.observable(""),SuppressedAlertsUtc:ko.observable(new Date)}]),NetworkTasks:ko.observableArray([{Task:ko.observable(""),Type:ko.observable(""),IsCompleted:ko.observable(!1)}])}}return n}(),Network_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Index_Model=function(){function n(){}return n}(),Network_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Managers_Model=function(){function n(){return{Network:{NetworkId:ko.observable(0),NetworkName:ko.observable(""),ShortName:ko.observable(""),StatusId:ko.observable(0),NetworkStatus:ko.observable(""),LastSyncUtc:ko.observable(new Date),TimeZoneName:ko.observable("")}}}return n}(),Network_Managers_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.Network.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Map_Model=function(){function n(){return{NetworkId:ko.observable(0),NetworkName:ko.observable(""),LastSyncUtc:ko.observable(new Date),MaxSyncInterval:ko.observable(0),NetworkNodes:ko.observableArray([]),GisPolygons:{GisDatasetId:ko.observable(0),GisPolygonDetails:ko.observableArray([]),ItemDescriptions:ko.observableArray([])},Modules:ko.observableArray([]),ModuleLocations:ko.observableArray([])}}return n}(),Network_Map_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_ModuleEvents_Model=function(){function n(){return{NetworkId:ko.observable(0),Name:ko.observable("")}}return n}(),Network_ModuleEvents_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Node_Model=function(){function n(){return{NetworkId:ko.observable(0),NodeAddress:ko.observable(0),IsLive:ko.observable(!1),Name:ko.observable(""),NetworkName:ko.observable(""),HasDevice:ko.observable(!1),DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),IoTypeId:ko.observable(0),MaxIoModules:ko.observable(0),AttachedIoModules:ko.observable(0),UsedSlotCount:ko.observable(0),DeviceModel:ko.observable(0),DeviceExtAddress:ko.observable(""),DeviceFirmwareVersion:ko.observable(0),DeviceBuildDate:ko.observable(new Date),DeviceLastUpdate:ko.observable(new Date),Latitude:ko.observable(0),Longitude:ko.observable(0),AppId:ko.observable(0),AppName:ko.observable(""),ApplicationGuid:ko.observable(""),AppBinaryId:ko.observable(0),AppVersionNumber:ko.observable(0),AppContainsSupplierIdTag:ko.observable(!1),SupplierIdTagValue:ko.observable(""),StatusId:ko.observable(0),NextStatusId:ko.observable(0),StatusName:ko.observable(""),NextStatusName:ko.observable(""),StatusMessage:ko.observable(""),StatusState:ko.observable(""),ModuleTiles:ko.observableArray([]),SuppressedModules:ko.observableArray([]),NetworkNodeTasks:ko.observableArray([{Task:ko.observable(""),Type:ko.observable(""),IsCompleted:ko.observable(!1)}])}}return n}(),Network_Node_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodePortConfig_Model=function(){function n(){return{NetworkId:ko.observable(0),NodeAddress:ko.observable(0),IsLive:ko.observable(!1),IsLinkUp:ko.observable(!1),Name:ko.observable(""),NetworkName:ko.observable(""),HasDevice:ko.observable(!1),DeviceType:ko.observable(""),DeviceModel:ko.observable(0),DeviceExtAddress:ko.observable(""),DeviceFirmwareVersion:ko.observable(0),DeviceBuildDate:ko.observable(new Date),DeviceLastUpdate:ko.observable(new Date),StatusId:ko.observable(0),StatusName:ko.observable(""),CommsPortTypes:ko.observableArray([]),SerialParities:ko.observableArray([]),SerialStopBits:ko.observableArray([]),ConfigurablePorts:ko.observableArray([])}}return n}(),Network_NodePortConfig_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeIoModuleDetails_Model=function(){function n(){return{NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),SlotIndex:ko.observable(0),IoTypeId:ko.observable(0),IoType:ko.observable(""),DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),DeviceExtAddress:ko.observable("")}}return n}(),Network_NodeIoModuleDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i.SlotIndex=t.viewModel.SlotIndex(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeIoModuleTemperatureDetails_Model=function(){function n(){return{NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),SlotIndex:ko.observable(0),IoTypeId:ko.observable(0),IoType:ko.observable(""),DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),DeviceExtAddress:ko.observable("")}}return n}(),Network_NodeIoModuleTemperatureDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i.SlotIndex=t.viewModel.SlotIndex(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeMap_Model=function(){function n(){return{NetworkId:ko.observable(0),NodeAddress:ko.observable(0),IsLive:ko.observable(!1),Name:ko.observable(""),NetworkName:ko.observable(""),HasDevice:ko.observable(!1),DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),IoTypeId:ko.observable(0),DeviceModel:ko.observable(0),DeviceExtAddress:ko.observable(""),DeviceFirmwareVersion:ko.observable(0),DeviceBuildDate:ko.observable(new Date),DeviceLastUpdate:ko.observable(new Date),Latitude:ko.observable(0),Longitude:ko.observable(0),FirstNodeLatitude:ko.observable(0),FirstNodeLongitude:ko.observable(0),AppId:ko.observable(0),AppName:ko.observable(""),ApplicationGuid:ko.observable(""),AppBinaryId:ko.observable(0),AppVersionNumber:ko.observable(0),StatusId:ko.observable(0),StatusName:ko.observable(""),StatusMessage:ko.observable(""),StatusState:ko.observable("")}}return n}(),Network_NodeMap_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeModuleEvents_Model=function(){function n(){return{NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable("")}}return n}(),Network_NodeModuleEvents_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeQueryDetails_Model=function(){function n(){return{NetworkId:ko.observable(0),NodeAddress:ko.observable(0),IsLive:ko.observable(!1),Name:ko.observable(""),NetworkName:ko.observable(""),DeviceType:ko.observable(""),DeviceModel:ko.observable(0),DeviceExtAddress:ko.observable("")}}return n}(),Network_NodeQueryDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i.NodeAddress=t.viewModel.NodeAddress(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeStatusHistory_Model=function(){function n(){return{NetworkId:ko.observable(0),NetworkName:ko.observable("")}}return n}(),Network_NodeStatusHistory_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_OverdueSubscribers_Model=function(){function n(){return{Network:{NetworkId:ko.observable(0),NetworkName:ko.observable(""),ShortName:ko.observable(""),StatusId:ko.observable(0),NetworkStatus:ko.observable(""),LastSyncUtc:ko.observable(new Date),TimeZoneName:ko.observable("")}}}return n}(),Network_OverdueSubscribers_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.Network.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Tags_Model=function(){function n(){return{Network:{NetworkId:ko.observable(0),NetworkName:ko.observable("")}}}return n}(),Network_Tags_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.Network.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_UpdateQueue_Model=function(){function n(){return{NetworkId:ko.observable(0),Name:ko.observable(""),ShortName:ko.observable(""),TimeZoneName:ko.observable("")}}return n}(),Network_UpdateQueue_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Users_Model=function(){function n(){return{NetworkId:ko.observable(0),Name:ko.observable("")}}return n}(),Network_Users_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NetworkId=t.viewModel.NetworkId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Note_Details_Model=function(){function n(){return{Note:{NoteId:ko.observable(0),CreatedUtc:ko.observable(new Date),CreatedBy:ko.observable(""),Title:ko.observable(""),Details:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),ModuleName:ko.observable(""),CumulativeMeterId:ko.observable(0),CumulativeMeterName:ko.observable(""),UserId:ko.observable(0),UserName:ko.observable("")}}}return n}(),Note_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.NoteId=t.viewModel.Note.NoteId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_Index_Model=function(){function n(){return{User:{UserId:ko.observable(0),IsActive:ko.observable(!1),IsLockedOut:ko.observable(!1),HasAccount:ko.observable(!1),Branding:ko.observable(""),TimeZoneName:ko.observable(""),Name:ko.observable(""),CreationDateUtc:ko.observable(new Date),AccountPasswordResetExpiryUtc:ko.observable(new Date),LegalTermsId:ko.observable(0),LegalTermsName:ko.observable(""),LegalTermsAcceptanceUtc:ko.observable(new Date),MessageAccountId:ko.observable(0),ModuleEventSubscriptionCount:ko.observable(0),NetworkAlertSubscriptionCount:ko.observable(0),SuppressAlertsUtc:ko.observable(new Date),EmailAddresses:ko.observableArray([]),PhoneNumbers:ko.observableArray([])}}}return n}(),Profile_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_ModuleEventNotifications_Model=function(){function n(){}return n}(),Profile_ModuleEventNotifications_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_ModuleEventSubscriptions_Model=function(){function n(){}return n}(),Profile_ModuleEventSubscriptions_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_NetworkAlertSubscriptions_Model=function(){function n(){}return n}(),Profile_NetworkAlertSubscriptions_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),PurchaseOrder_Details_Model=function(){function n(){return{PurchaseOrder:{PurchaseOrderId:ko.observable(0),ReferenceNumber:ko.observable(""),CreatedById:ko.observable(0),CreatedBy:ko.observable(""),CreatedUtc:ko.observable(new Date),CompletedUtc:ko.observable(new Date),CompletedByUser:ko.observable(""),CompletedById:ko.observable(0),AcknowledgedById:ko.observable(0),AcknowledgedByUser:ko.observable(""),AcknowledgedUtc:ko.observable(new Date),BillingEntityId:ko.observable(0),BillingEntity:ko.observable(""),SourceGroupId:ko.observable(0),SourceGroup:ko.observable(""),ContainsNonSerialCostItems:ko.observable(!1),ContainsSerialCostItems:ko.observable(!1),ContainsNonDeviceSerialCostItems:ko.observable(!1),Notes:ko.observable("")},GroupId:ko.observable(0)}}return n}(),PurchaseOrder_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.PurchaseOrderId=t.viewModel.PurchaseOrder.PurchaseOrderId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),PurchaseOrder_PackingListDetails_Model=function(){function n(){return{PackingList:{PackingListId:ko.observable(0),TrackingNumbers:ko.observable(""),DispatchedUtc:ko.observable(new Date),DispatchedById:ko.observable(0),DispatchedBy:ko.observable(""),ReceiptedUtc:ko.observable(new Date),ReceiptedById:ko.observable(0),ReceiptedBy:ko.observable(""),PurchaseOrderId:ko.observable(0),PurchaseOrderReference:ko.observable(""),PurchaseOrderCreatedUtc:ko.observable(new Date),PackingListItems:ko.observableArray([]),AddressDetails:{AddressId:ko.observable(0),Address:ko.observable(""),City:ko.observable(""),StateProvince:ko.observable(""),Code:ko.observable(""),Country:ko.observable("")},BillingEntityId:ko.observable(0),BillingEntity:ko.observable(""),DeliveryNotes:ko.observable(""),InvoicedUtc:ko.observable(new Date),XeroInvoiceGuid:ko.observable(""),XeroInvoiceNumber:ko.observable(""),XeroInvoiceIsPaid:ko.observable(!1),XeroInvoiceStatus:ko.observable(""),CanDownloadInvoice:ko.observable(!1)},Invoiceable:ko.observable(!0),GroupId:ko.observable(0)}}return n}(),PurchaseOrder_PackingListDetails_State=function(n){function t(t){var i=n.call(this,t)||this;return i.PurchaseOrderId=t.viewModel.PackingList.PurchaseOrderId(),i.PackingListId=t.viewModel.PackingList.PackingListId(),i.GroupId=t.viewModel.GroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Report_Details_Model=function(){function n(){return{Report:{ReportTemplateId:ko.observable(0),Name:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(new Date),Json:ko.observable("")}}}return n}(),Report_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ReportTemplateId=t.viewModel.Report.ReportTemplateId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Report_ModuleTypes_Model=function(){function n(){return{ReportTemplateId:ko.observable(0),ReportName:ko.observable(""),TypeNames:ko.observableArray([])}}return n}(),Report_ModuleTypes_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ReportTemplateId=t.viewModel.ReportTemplateId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Report_Run_Model=function(){function n(){return{ReportTemplateId:ko.observable(0),Name:ko.observable(""),TargetGroup:ko.observable(""),TargetGroupId:ko.observable(0),Error:ko.observable(""),StartLocal:ko.observable(new Date),EndLocal:ko.observable(new Date)}}return n}(),Report_Run_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ReportTemplateId=t.viewModel.ReportTemplateId(),i.TargetGroupId=t.viewModel.TargetGroupId(),i.StartLocal=moment(t.viewModel.StartLocal()||new Date).format("YYYY-MM-DD"),i.EndLocal=moment(t.viewModel.EndLocal()||new Date).format("YYYY-MM-DD"),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Rfid_Details_Model=function(){function n(){return{RfidTag:{RfidTagId:ko.observable(0),SectionCode:ko.observable(0),SerialCode:ko.observable(0),TagNumber:ko.observable(0),Name:ko.observable(""),OpensCabinet:ko.observable(!1),EncodedTagNumber:ko.observable(0),GroupCount:ko.observable(0)}}}return n}(),Rfid_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.RfidTagId=t.viewModel.RfidTag.RfidTagId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Role_Details_Model=function(){function n(){return{Role:{RoleId:ko.observable(0),Name:ko.observable(""),Capabilities:ko.observableArray([])}}}return n}(),Role_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.RoleId=t.viewModel.Role.RoleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Search_Index_Model=function(){function n(){}return n}(),Search_Index_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Section_Details_Model=function(){function n(){return{Group:{DashboardGroupId:ko.observable(0),Name:ko.observable(""),SortOrder:ko.observable(0),Expanded:ko.observable(!1),ModuleTiles:ko.observableArray([]),CumulativeMeterTiles:ko.observableArray([])}}}return n}(),Section_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.DashboardGroupId=t.viewModel.Group.DashboardGroupId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),SharedCollection_Details_Model=function(){function n(){return{SharedCollection:{ChartCollectionId:ko.observable(0),Name:ko.observable(""),DaysToDisplay:ko.observable(0),IsVirtual:ko.observable(!1),ShowTapes:ko.observable(!1),ModuleId:ko.observable(0),CanCreateShared:ko.observable(!1),Intervals:ko.observableArray([]),Charts:ko.observableArray([])}}}return n}(),SharedCollection_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ChartCollectionId=t.viewModel.SharedCollection.ChartCollectionId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Sim_Details_Model=function(){function n(){return{Sim:{SimId:ko.observable(0),SimNumber:ko.observable(""),PhoneNumber:ko.observable(""),DeviceExtAddress:ko.observable(""),Cancelled:ko.observable(!1),CellularNetworkId:ko.observable(0),CellularNetworkName:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),LastSyncUtc:ko.observable(new Date),SimStatus:ko.observable("")}}}return n}(),Sim_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.SimId=t.viewModel.Sim.SimId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Tag_Details_Model=function(){function n(){return{Tag:{TagId:ko.observable(0),Name:ko.observable(""),CreatedUtc:ko.observable(new Date),CreatedUserId:ko.observable(0),CreatedUsername:ko.observable("")},GroupId:ko.observable(0)}}return n}(),Tag_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.TagId=t.viewModel.Tag.TagId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Unauthorised_Model=function(){function n(){}return n}(),Unauthorised_State=function(n){function t(t){return n.call(this,t)||this}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_Details_Model=function(){function n(){return{User:{UserId:ko.observable(0),IsActive:ko.observable(!1),IsLockedOut:ko.observable(!1),HasAccount:ko.observable(!1),BrandingId:ko.observable(0),Branding:ko.observable(""),BrandingDashboard:ko.observable(""),TimeZoneName:ko.observable(""),Name:ko.observable(""),CreationDateUtc:ko.observable(new Date),AccountPasswordResetExpiryUtc:ko.observable(new Date),LegalTermsId:ko.observable(0),LegalTermsName:ko.observable(""),LegalTermsAcceptanceUtc:ko.observable(new Date),MessageAccountId:ko.observable(0),ModuleEventSubscriptionCount:ko.observable(0),NetworkAlertSubscriptionCount:ko.observable(0),SuppressAlertsUtc:ko.observable(new Date),EmailAddresses:ko.observableArray([]),PhoneNumbers:ko.observableArray([])},UserTasks:ko.observableArray([])}}return n}(),User_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.UserId=t.viewModel.User.UserId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_GrantedRoles_Model=function(){function n(){return{User:{UserId:ko.observable(0),Name:ko.observable("")}}}return n}(),User_GrantedRoles_State=function(n){function t(t){var i=n.call(this,t)||this;return i.UserId=t.viewModel.User.UserId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_ModuleEventNotifications_Model=function(){function n(){return{User:{UserId:ko.observable(0),Name:ko.observable("")}}}return n}(),User_ModuleEventNotifications_State=function(n){function t(t){var i=n.call(this,t)||this;return i.UserId=t.viewModel.User.UserId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_Subscriptions_Model=function(){function n(){return{User:{UserId:ko.observable(0),Name:ko.observable("")}}}return n}(),User_Subscriptions_State=function(n){function t(t){var i=n.call(this,t)||this;return i.UserId=t.viewModel.User.UserId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),VirtualModule_Details_Model=function(){function n(){return{Module:{ModuleId:ko.observable(0),ModuleIndex:ko.observable(0),Name:ko.observable(""),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NodeAddress:ko.observable(0),NodeName:ko.observable(""),WaterWatchInfo:{Serial:ko.observable(""),OrganisationId:ko.observable("")}}}}return n}(),VirtualModule_Details_State=function(n){function t(t){var i=n.call(this,t)||this;return i.ModuleId=t.viewModel.Module.ModuleId(),i}return __extends(t,n),t}(Base_State),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Containing_Groups=function(n){function t(t){var i=n.call(this)||this;return i.viewModel=new Containing_Groups_Model,i.stateHandler=function(){return new Containing_Groups_State(i)},i.titleHandler=function(){return page.SetTitle("Containing Groups",i.viewModel.Name,views[i.detailsPage].routeHandler(i.viewModel.Id),function(){return views[i.detailsPage].Load(i.viewModel.Id)})},i.routeHandler=function(n){return route.forControllerItemAction(i.type,n,"ContainingGroups")},i.UrlLoad=function(){i.sourceUrl=window.location.href;LoadView_Base(i)},i.Load=function(n){(i.sourceUrl=i.routeHandler(n),i.pushState())&&LoadView_Base(i)},i.Render=function(){i.groupsTable=new AjaxFilterTableViewModel(route.forControllerItemAction(i.type,i.viewModel.Id,"ContainingGroupsTable"),"Group",!0,function(n){return views.Group_Details.Load(n.GroupId)},50);i.groupsTable.AddColumn(new FilterTableColumnViewModel("Name","Group",!1,!0)).AddTitle("Groups containing "+i.viewModel.Name());page.Add(i.groupsTable);BaseUpdate(i,[i.groupsTable])},i.type=t,i.detailsPage=t+"_Details",i}return __extends(t,n),t}(Base_View),Network_ContainingGroups=function(n){function t(){return n.call(this,"Network")||this}return __extends(t,n),t}(Containing_Groups),DeviceType_ContainingGroups=function(n){function t(){return n.call(this,"DeviceType")||this}return __extends(t,n),t}(Containing_Groups),Module_ContainingGroups=function(n){function t(){return n.call(this,"Module")||this}return __extends(t,n),t}(Containing_Groups),User_ContainingGroups=function(n){function t(){return n.call(this,"User")||this}return __extends(t,n),t}(Containing_Groups),Device_ContainingGroups=function(n){function t(){return n.call(this,"Device")||this}return __extends(t,n),t}(Containing_Groups),Sim_ContainingGroups=function(n){function t(){return n.call(this,"Sim")||this}return __extends(t,n),t}(Containing_Groups),BillingEntity_ContainingGroups=function(n){function t(){return n.call(this,"BillingEntity")||this}return __extends(t,n),t}(Containing_Groups),Application_ContainingGroups=function(n){function t(){return n.call(this,"Application")||this}return __extends(t,n),t}(Containing_Groups),ApplicationTemplate_ContainingGroups=function(n){function t(){return n.call(this,"ApplicationTemplate")||this}return __extends(t,n),t}(Containing_Groups),GisDataset_ContainingGroups=function(n){function t(){return n.call(this,"GisDataset")||this}return __extends(t,n),t}(Containing_Groups),EscalationList_ContainingGroups=function(n){function t(){return n.call(this,"EscalationList")||this}return __extends(t,n),t}(Containing_Groups),Role_ContainingGroups=function(n){function t(){return n.call(this,"Role")||this}return __extends(t,n),t}(Containing_Groups),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Unauthorised=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Unauthorised_State(t)},t.titleHandler=function(){return page.SetTitle("Unauthorised","",null,function(){return history.back()})},t.UrlLoad=function(){t.sourceUrl=window.location.href;t.replaceState();LoadView_Unauthorised(t)},t.Render=function(){t.header=new HeaderPageItem("Unauthorised");t.message=new HtmlMessagePageItem("You do not have authorisation to view this item. If you believe this is an error, please contact your administrator.");page.Add(t.header);page.Add(t.message);UnauthorisedUpdate(t)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_AndroidApk=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_AndroidApk_Model,t.stateHandler=function(){return new Admin_AndroidApk_State(t)},t.titleHandler=function(){return page.SetTitle("Android Apks","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","AndroidApk")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Upload","Android apk file",t.UploadApkForm,null)])]);page.Add(t.pageCommands);BaseUpdate(t)},t.UploadApkForm=function(n,t){return new DialogViewModelBuilder(route.forControllerAction("Admin","UploadAndroidApk"),"Upload APK","Upload",{file:ko.observable(""),appName:ko.observable(""),version:ko.observable(0)}).SubmitData(function(n){return{file:n.file(),appName:n.appName(),version:n.version()}}).Done(function(){typeof t=="function"&&t()}).SingleFileUploadField("file","File").TextField("appName","App Name",50,!1).IntNumberField("version","Version",0,null,!1).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_Capabilities=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Admin_Capabilities_State(t)},t.titleHandler=function(){return page.SetTitle("Capabilities","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerAction("Admin","Capabilities")},t.selectedClassName=ko.observable(""),t.capabilityName=ko.observable(""),t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.showMismatches=ko.observable(!1);t.missingCapabilities=ko.observable([]);t.capabilitiesTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerActionParams("Admin","CapabilitiesTable",{showMismatches:t.showMismatches})}),"DbCapabilityId",!1,function(n){return n.DbCapabilityId!=null?views.Admin_CapabilityDetails.Load(n.DbCapabilityId):page.OpenFormDialog(t.CreateCapabilityFromCSForm(n))},50);t.capabilitiesTable.AddColumn(t.selectedCapabilities=new ToggleTableColumnViewModel("Select Capability","CsCapabilityId","ok","close",!0,function(n){return n.CsCapabilityId!=null&&n.CsCapabilityId===n.DbCapabilityId})).AddColumn(new IconTableColumnViewModel("MismatchId",function(n){return t.IdMismatch(n)?"Id Mismatch":""},!1,!1,function(n){return t.IdMismatch(n)?"alert":""})).AddColumn(new IconTableColumnViewModel("MismatchName",function(n){return t.NameMismatch(n)?"Name Mismatch":""},!1,!1,function(n){return t.NameMismatch(n)?"alert":""})).AddColumn(new IconTableColumnViewModel("MismatchDescription",function(n){return t.DescMismatch(n)?"Description Mismatch":""},!1,!1,function(n){return t.DescMismatch(n)?"alert":""})).AddColumn(new NumberFilterTableColumnViewModel("DbCapabilityId","DBCapabilityId",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("CsCapabilityId","CSCapabilityId",!0,!0)).AddColumn(new FilterTableColumnViewModel("ClassName","Class",!0,!0)).AddColumn(new FilterTableColumnViewModel("DbName","DBName",!1,!0)).AddColumn(new FilterTableColumnViewModel("CsName","CSName",!1,!0)).AddColumn(new FilterTableColumnViewModel("Existence","Existence",!1,!0,function(n){return n.DbCapabilityId!=null&&n.CsCapabilityId!=null?"Database  C#":n.DbCapabilityId!=null?"Database":"C#"})).AddColumn(new NumberFilterTableColumnViewModel("RoleCount","Roles",!1,!0)).AddColumn(new CommandTableColumnViewModel("Delete Capability from Database","delete",function(n){return page.OpenFormDialog(t.DeleteCapabilityFromDb(n))},!0,function(n){return n.DbCapabilityId!=null&&n.CsCapabilityId==null})).AddTitle("Capabilities");t.adminCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("add",new Header_Text("Capabilities",null,"Create Capability","Create new capability in root group"),new Header_Actions(function(){return page.OpenFormDialog(t.CreateCapabilityForm())})),new Command_Block("Visibility","Show mismatched",null,function(){return t.ToggleMismatches()},ko.computed(function(){return!t.showMismatches()})),new Command_Block("Visibility","Show all",null,function(){return t.ToggleMismatches()},ko.computed(function(){return t.showMismatches()}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Capability Selection"),new Command_Block("Select All","Select all filtered modules",null,function(){return t.SelectAll(t.capabilitiesTable.filteredData())}),new Command_Block("None","Deselect all modules",null,function(){return t.selectedCapabilities.UnselectAll()}),new Command_Block("Invert","Invert the module selections",null,function(){return t.Invert(t.capabilitiesTable.filteredData())})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Capability Update"),new SingleValue_Block("Selected",ko.computed(function(){return""+t.selectedCapabilities.selectedKeys().length+" selected capabilities"})),new Command_Block("Update Db","Update Db with C# Values",null,function(){return t.UpdateCapabilities()})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Bulk Add to Database"),new SingleValue_Block("Available",ko.computed(function(){return""+t.missingCapabilities().length+" missing capabilities"})),new Command_Block("Add To Db","Add C# values to database",t.BulkAddForm,null,ko.computed(function(){return t.missingCapabilities().length>0}))])]);ko.computed(function(){t.missingCapabilities(t.capabilitiesTable.data().filter(function(n){return n.DbCapabilityId==null}))});page.Add(t.adminCommands);page.Add(t.capabilitiesTable);BaseUpdate(t,[t.capabilitiesTable])},t.IdMismatch=function(n){return n.DbCapabilityId!==n.CsCapabilityId},t.NameMismatch=function(n){return n.DbName!=null&&n.CsName!=null&&n.DbName!==n.CsName},t.DescMismatch=function(n){return n.DbDescription!=null&&n.CsDescription!=null&&n.DbDescription!==n.CsDescription},t.ToggleMismatches=function(){t.showMismatches(!t.showMismatches());t.capabilitiesTable.LoadData()},t.UpdateCapabilities=function(){return t.selectedCapabilities.selectedKeys().length===0?page.SetMessage("Please select capabilities to update"):page.OpenFormDialog(t.UpdateConfirmationForm())},t.SelectAll=function(n){return n.forEach(function(n){n.CsCapabilityId!=null&&n.CsCapabilityId===n.DbCapabilityId&&t.selectedCapabilities.selectRow(n)})},t.Invert=function(n){return n.forEach(function(n){n.CsCapabilityId!=null&&n.CsCapabilityId===n.DbCapabilityId&&t.selectedCapabilities.action(n)})},t.DeleteCapabilityFromDb=function(n){return new DialogViewModelBuilder(route.forControllerAction("Admin","DeleteCapabilityFromDb"),"Delete Capabilities from DB","Delete",{confirm:ko.observable(!1)}).SubmitData(function(t){return{capabilityId:n.DbCapabilityId,confirm:t.confirm()}}).Validate(function(){return n.RoleCount>0?"You cannot delete a capability that is still attached to a role. Delete the capability from the role first.":null}).Done(function(){t.capabilitiesTable.LoadData()}).MessageField("Please confirm that you want to delete this capability from the database.").CheckBoxField("confirm","Confirm").Create()},t.UpdateConfirmationForm=function(){var n=[];return t.selectedCapabilities.selectedKeys().forEach(function(t){return n.push(t.CsCapabilityId)}),new DialogViewModelBuilder(route.forControllerAction("Admin","UpdateCapabilitiesFromCs"),"Update Capabilities from C#","Update",{confirm:ko.observable(!1)}).SubmitData(function(t){return{capabilityIds:n,confirm:t.confirm()}}).Done(function(){t.capabilitiesTable.LoadData();t.selectedCapabilities.UnselectAll()}).MessageField("Please confirm that you want to update these capabilities in the database with the values specified in the C# code.").CheckBoxField("confirm","Confirm").Create()},t.BulkAddForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Admin","AddCapabilities"),"Bulk Add Capabilities","Add",{}).SubmitData(function(){var n=[];return t.missingCapabilities().forEach(function(t){return n.push(t.CsCapabilityId)}),{capabilityIds:n}}).Done(function(){t.capabilitiesTable.LoadData()}).MessageField("Add the following capabilities to the database").ListField("Capabilities",t.missingCapabilities(),function(n){return n.CsCapabilityId+" "+n.CsName}).Create()},t.CreateCapabilityForm=function(){var n={name:ko.observable(""),description:ko.observable(""),capabilityId:ko.observable(0),className:ko.observable(""),fullName:ko.observable("")};return new DialogViewModelBuilder(route.forControllerAction("Admin","CreateCapability"),"Create New Capability","Create",n).SubmitData(function(n){var r=n.name().split(" "),i="",t;return r.forEach(function(n){var t=n.charAt(0).toUpperCase()+n.slice(1);i+=t}),t=n.className()+"_"+i,n.fullName(t),{name:t,description:n.description()}}).Done(function(n,i){n.capabilityId(i.CapabilityId);page.OpenFormDialog(t.ViewCreatedCapabilityDetailForm(n))}).MessageField("Specify the name for the new capability.").AjaxDropDownListField("className","Select Class",function(n){return n},function(n){return n},route.forControllerAction("Admin","CapabilityClassNames"),!1,null,null).TextField("name","Name",null,!1).TextField("description","Description",null,!1).MessageField("Full Capability Name").DisplayField("fullName",ko.computed(function(){var r=n.name().split(" "),i="",t;return r.forEach(function(n){var t=n.charAt(0).toUpperCase()+n.slice(1);i+=t}),t=n.className()!=undefined?n.className()+"_"+i:"",t+" ("+(50-t.length)+" characters remaining)"})).CreateMulti()},t.CreateCapabilityFromCSForm=function(n){var r=n.CsName.indexOf("_")>-1?n.CsName.substring(0,n.CsName.indexOf("_")):"",u=n.CsName.indexOf(r)>-1?n.CsName.replace(r+"_",""):"",i={name:ko.observable(u),description:ko.observable(n.CsDescription),capabilityId:ko.observable(n.CsCapabilityId),className:ko.observable(r),fullName:ko.observable("")};return new DialogViewModelBuilder(route.forControllerAction("Admin","CreateCapabilityFromCS"),"Create New Capability","Create",i).SubmitData(function(n){var r=n.name().split(" "),i="",t;return r.forEach(function(n){var t=n.charAt(0).toUpperCase()+n.slice(1);i+=t}),t=n.className()+"_"+i,n.fullName(t),{name:t,description:n.description(),capabilityId:n.capabilityId()}}).Done(function(n,i){n.capabilityId(i.CapabilityId);page.OpenFormDialog(t.ViewCreatedCapabilityDetailForm(n));t.capabilitiesTable.LoadData()}).MessageField("Specify the name for the new capability.").DisplayField("capabilityId","CapabilityId: "+i.capabilityId()).AjaxDropDownListField("className","Select Class",function(n){return n},function(n){return n},route.forControllerAction("Admin","CapabilityClassNames"),!1,i.className(),null).TextField("name","Name",null,!1).TextField("description","Description",null,!1).MessageField("Full Capability Name").DisplayField("fullName",ko.computed(function(){var r=i.name().split(" "),t="",n;return r.forEach(function(n){var i=n.charAt(0).toUpperCase()+n.slice(1);t+=i}),n=i.className()!=undefined?i.className()+"_"+t:"",n+" ("+(50-n.length)+" characters remaining)"})).Create()},t.ViewCreatedCapabilityDetailForm=function(n){return new DialogViewModelBuilder(null,"New Capability Detail","Close",{}).SubmitData(function(){return{}}).Done(function(){}).DisplayField("Name","Capability Name: "+n.fullName()).DisplayField("Description","Description: "+n.description()).DisplayField("Capability Id","CapabilityId: "+n.capabilityId()).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_CapabilityDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_CapabilityDetails_Model,t.stateHandler=function(){return new Admin_CapabilityDetails_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.DbCapability.FullName,"Capabilities",views.Admin_Capabilities.routeHandler(),function(){return views.Admin_Capabilities.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Admin",n,"CapabilityDetails")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.adminCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Database Detail"),new Header_Block("config",new Header_Text(ko.computed(function(){return t.viewModel.DbCapability.ClassName()}),null,ko.computed(function(){return t.viewModel.DbCapability.SubName()}),t.viewModel.DbCapability.Description)),new SingleValue_Block("Error",t.viewModel.DbCapability.FullName()!==t.viewModel.CsCapability.FullName()&&t.viewModel.DbCapability.Description()!==t.viewModel.CsCapability.Description()?"Name & Description Mismatch":t.viewModel.DbCapability.FullName()!==t.viewModel.CsCapability.FullName()?"Name mismatch":"Description mismatch",ko.computed(function(){return t.CalculateState()!==TileState.Idle}))]).setState(ko.computed(function(){return t.CalculateState()})),tiles.createTile().addBlockSet([new SmallHeader_Block("C# Detail"),new Header_Block("config",new Header_Text(ko.computed(function(){return t.viewModel.CsCapability.ClassName()}),null,ko.computed(function(){return t.viewModel.CsCapability.SubName()}),t.viewModel.CsCapability.Description)),new SingleValue_Block("Error","No match found in C#",ko.computed(function(){return t.viewModel.CsCapability.CapabilityId()==null}))]).setState(ko.computed(function(){return t.CalculateState()})),tiles.createTile().addBlockSet([new SmallHeader_Block("Fix Errors"),new Command_Block("Update","Update DB from C# value",function(){return t.UpdateConfirmationForm()})]).setEnabled(ko.computed(function(){return t.CalculateState()!==TileState.Idle&&t.viewModel.CsCapability.CapabilityId()!=null}))]);t.rolesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Admin",t.viewModel.DbCapability.CapabilityId,"RolesForCapabilityTable"),"RoleId",!0,function(n){return views.Role_Details.Load(n.RoleId)},25);t.rolesTable.AddColumn(new FilterTableColumnViewModel("RoleId","Role ID",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Role Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Capability from Role","delete",function(n){return page.OpenFormDialog(t.RemoveCapabilityFromRoleForm(n))},page.HasCapabilityComputed(Capability.Role_Edit))).AddTitle("Roles with Capability");page.Add(t.adminCommands);page.Add(t.rolesTable);BaseUpdate(t,[t.rolesTable])},t.RemoveCapabilityFromRoleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Role",n.RoleId,"RemoveCapability",{capabilityId:t.viewModel.DbCapability.CapabilityId}),"Remove Capability","Remove",{}).SubmitData(function(){return{}}).Done(function(){t.rolesTable.LoadData()}).MessageField("Are you sure you want to remove the capability "+t.viewModel.DbCapability.FullName()+" from the role "+n.Name+"?").Create()},t.UpdateConfirmationForm=function(){var i={confirm:ko.observable(!1)},n=[];return n.push(t.viewModel.CsCapability.CapabilityId()),new DialogViewModelBuilder(route.forControllerAction("Admin","UpdateCapabilitiesFromCs"),"Update Capabilities from C#","Update",i).SubmitData(function(t){return{capabilityIds:n,confirm:t.confirm()}}).Done(function(){page.Update()}).MessageField("Please confirm that you want to update these capabilities in the database with the values specified in the C# code.").CheckBoxField("confirm","Confirm").Create()},t.CalculateState=function(){return t.viewModel.DbCapability.FullName()!==t.viewModel.CsCapability.FullName()||t.viewModel.DbCapability.Description()!==t.viewModel.CsCapability.Description()?TileState.Faulted:TileState.Idle},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_CostItems=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_CostItems_Model,t.stateHandler=function(){return new Admin_CostItems_State(t)},t.titleHandler=function(){return page.SetTitle("Cost Items","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","CostItems")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("icon",new Header_Text("Cost Items","")),new Command_Block("Create","Create cost item",t.CreateCostItemForm,null,page.HasCapabilityComputed(Capability.Inventory_CreateCostItem))])]);t.costItemsTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","CostItemsTable"),"ItemName",!0,function(n){return n.DeviceTypeId!=null?views.DeviceType_Details.Load(n.DeviceTypeId,null):null},25);t.costItemsTable.AddColumn(new FilterTableColumnViewModel("ItemName","Product Code",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemDesc","Description",!1,!0)).AddColumn(new FilterTableColumnViewModel("UnitPrice","Base Price",!1,!0,function(n){return FormatCurrency(n.UnitPrice)})).AddColumn(new FilterTableColumnViewModel("RequiresSerial","Serial",!0,!0,function(n){return n.RequiresSerial?"Required":""})).AddColumn(new CommandTableColumnViewModel("Edit Cost Item","edit",function(n){return page.OpenFormDialog(t.EditCostItemForm(n))},page.HasCapabilityComputed(Capability.Inventory_EditCostItem))).AddColumn(new CommandTableColumnViewModel("Delete Cost Item","delete",function(n){return page.OpenFormDialog(t.DeleteCostItemForm(n))},page.HasCapabilityComputed(Capability.Inventory_DeleteCostItem))).AddTitle("Cost Items");page.Add(t.pageCommands);page.Add(t.costItemsTable);BaseUpdate(t,[t.costItemsTable])},t.CreateCostItemForm=function(){var n={itemName:ko.observable(""),itemLongDesc:ko.observable(""),itemDesc:ko.observable(""),deviceTypeId:ko.observable(0),basePrice:ko.observable(0),requiresSerial:ko.observable(!1)},i=new DialogViewModelBuilder(route.forControllerAction("Admin","CreateCostItem"),"Create cost item","Create",n).SubmitData(function(n){return{itemName:n.itemName(),itemLongDesc:n.itemLongDesc(),itemDesc:n.itemDesc(),deviceTypeId:n.deviceTypeId(),basePrice:n.basePrice(),requiresSerial:n.requiresSerial()}}).Done(function(){t.costItemsTable.LoadData()}).AjaxFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerAction("Admin","AvailableDeviceTypesForCostItems"),!0,null,"DeviceType").TextField("itemName","Product Code").CheckBoxField("requiresSerial","Serial Number Required").NumberField("basePrice","Base Price",0,999999,!1).TextField("itemDesc","Short Description",50,!0).MultilineTextField("itemLongDesc","Long Description").CreateMulti(),r=-1;return i.fields().forEach(function(n,t){n.fieldName==="deviceTypeId"&&(r=t)}),ko.computed(function(){r>-1&&i.fields()[r].options().forEach(function(t){t.DeviceTypeId===n.deviceTypeId()?(n.itemLongDesc(t.Description),n.itemName(t.DeviceType),n.itemDesc(t.DeviceType),n.requiresSerial(!0)):n.deviceTypeId()==null&&(n.itemName(""),n.itemDesc(""),n.itemLongDesc(""),n.requiresSerial(!1))})}),i},t.EditCostItemForm=function(n){var i={itemName:ko.observable(n.ItemName),itemLongDesc:ko.observable(n.ItemLongDesc),itemDesc:ko.observable(n.ItemDesc),basePrice:ko.observable(n.UnitPrice),requiresSerial:ko.observable(n.RequiresSerial)};return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n.CostItemId,"EditCostItem"),"Update cost item","Update",i).SubmitData(function(n){return{itemName:n.itemName(),itemLongDesc:n.itemLongDesc(),itemDesc:n.itemDesc(),basePrice:n.basePrice(),requiresSerial:n.requiresSerial()}}).Done(function(){t.costItemsTable.LoadData()}).TextField("itemName","Product Code").CheckBoxField("requiresSerial","Serial Number Required").NumberField("basePrice","Base Price",0,999999,!1).TextField("itemDesc","Short Description",50,!1).MultilineTextField("itemLongDesc","Long Description").Create()},t.DeleteCostItemForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n.CostItemId,"DeleteCostItem"),"Delete Cost Item","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.costItemsTable.LoadData()}).MessageField("Are you sure you want to delete this cost item?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of cost item "+n.ItemName+" and all related data").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_EmailProviders=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_EmailProviders_Model,t.stateHandler=function(){return new Admin_EmailProviders_State(t)},t.titleHandler=function(){return page.SetTitle("Email Providers","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","EmailProviders")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("email",new Header_Text("Email Providers")),new Command_Block("Create","Create Email Provider",t.CreateEmailProvidersForm,null,page.HasCapabilityComputed(Capability.System_Admin))])]);t.emailProvidersTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","EmailProvidersTable"),"Name",!0,null,25);t.emailProvidersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Edit Email Provider","edit",function(n){return page.OpenFormDialog(t.EditEmailProvidersForm(n.EmailProviderId,n.Name))},page.HasCapabilityComputed(Capability.System_Admin))).AddColumn(new CommandTableColumnViewModel("Delete Email Provider","delete",function(n){return page.OpenFormDialog(t.DeleteEmailProvidersForm(n.EmailProviderId,n.Name))},page.HasCapabilityComputed(Capability.System_Admin))).AddTitle("Email Providers");page.Add(t.pageCommands);page.Add(t.emailProvidersTable);BaseUpdate(t,[t.emailProvidersTable])},t.CreateEmailProvidersForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Admin","CreateEmailProvider"),"Create Email Provider","Create",{name:ko.observable(""),groupId:ko.observable()}).SubmitData(function(n){return{name:n.name(),groupId:n.groupId()}}).Done(function(){t.emailProvidersTable.LoadData()}).TextField("name","Name").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainEmailProvider"),!1,null,"Name",3,1).Create()},t.EditEmailProvidersForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n,"EditEmailProvider"),"Update Email Provider","Update",{name:ko.observable(i)}).SubmitData(function(n){return{name:n.name()}}).Done(function(){t.emailProvidersTable.LoadData()}).TextField("name","Name").Create()},t.DeleteEmailProvidersForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n,"DeleteEmailProvider"),"Delete Email Provider","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.emailProvidersTable.LoadData()}).MessageField("Are you sure you want to delete this email provider?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of email provider "+i+" and all related data").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_ErrorLogs=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_ErrorLogs_Model,t.stateHandler=function(){return new Admin_ErrorLogs_State(t)},t.titleHandler=function(){return page.SetTitle("SQL Procedure Errors","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","ErrorLogs")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Select All","Select all filtered items",null,function(){return t.SelectAll(t.errorsTable.filteredData())}),new Command_Block("Invert","Invert selected items",null,function(){return t.Invert(t.errorsTable.filteredData())}),new Command_Block("Clear","Clear selection",null,function(){return t.selectedErrors.UnselectAll()}),new Command_Block("Delete","Delete selected items",t.DeleteErrorLogsForm,null)])]);t.errorsTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","ErrorLogsTable"),"TimeUtc",!1,function(n){return page.OpenFormDialog(t.ErrorDetailDialog(n))},25);t.errorsTable.AddColumn(t.selectedErrors=new ToggleTableColumnViewModel("Select Errors","ProcedureErrorLogId","ok","close")).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("ProcedureName","Procedure Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ErrorMessage","Error Message",!0,!0)).AddColumn(new FilterTableColumnViewModel("UserName","User",!0,!0,function(n){return n.UserName!=null?n.UserName:""})).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return page.OpenFormDialog(t.DeleteErrorLogForm(n))})).AddTitle("SQL Procedure Errors");page.Add(t.pageCommands);page.Add(t.errorsTable);BaseUpdate(t,[t.errorsTable])},t.ErrorDetailDialog=function(n){return new DialogViewModelBuilder(null,"Error Details","Close",{}).SubmitData(function(){}).Done(function(){}).DisplayFieldWithHeading("TimeUtc","Error Date",FormatDateTime(moment(n.TimeUtc))).DisplayFieldWithHeading("ProcedureName","Procedure Name",n.ProcedureName).DisplayFieldWithHeading("LineNumber","Line",n.LineNumber).DisplayFieldWithHeading("UserName","User",n.UserName).SectionField("Error Message:").MessageField(n.ErrorMessage).SectionField("Line Text:").MessageField(n.LineText).SectionField("Params:").MessageField(n.ParamString).Create()},t.DeleteErrorLogForm=function(n){var i=[];return i.push(n.ProcedureErrorLogId),new DialogViewModelBuilder(route.forControllerItemAction("Admin",n.ProcedureErrorLogId,"DeleteErrorLogs"),"Delete Error Log","Delete",{}).SubmitData(function(){return{errorLogIds:i}}).Done(function(){t.errorsTable.LoadData()}).MessageField("You are about to delete this error log from the database, are you sure you want to do that?").Create()},t.DeleteErrorLogsForm=function(){var n=[];return t.selectedErrors.selectedKeys().forEach(function(t){return n.push(t.ProcedureErrorLogId)}),new DialogViewModelBuilder(route.forControllerAction("Admin","DeleteErrorLogs"),"Delete Error Log","Delete",{}).SubmitData(function(){return{errorLogIds:n}}).Done(function(){t.selectedErrors.UnselectAll();t.errorsTable.LoadData()}).MessageField("You are about to delete "+n.length+" error logs from the database, are you sure you want to do that?").Create()},t.SelectAll=function(n){return n.forEach(function(n){t.selectedErrors.selectRow(n)})},t.Invert=function(n){return n.forEach(function(n){t.selectedErrors.action(n)})},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_Firmware=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_Firmware_Model,t.stateHandler=function(){return new Admin_Firmware_State(t)},t.titleHandler=function(){return page.SetTitle("Firmware","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","Firmware")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.firmwareTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","FirmwareTable"),"DeviceType",!0,null,25);t.firmwareTable.AddColumn(new CommandTableColumnViewModel("Device Type","firmware",function(n){return views.DeviceType_Details.Load(n.DeviceTypeId,null)})).AddColumn(new FilterTableColumnViewModel("DeviceType","Type",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("DeviceModel","Model",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("FirmwareVersion","Version",!1,!0)).AddColumn(new FilterTableColumnViewModel("Development","Dev",!1,!0,function(n){return n.Development?"Dev":"Prod"})).AddColumn(new DateTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("BinaryLength","Size",!0,!0,function(n){return n.BinaryLength.toLocaleString()})).AddColumn(new CommandTableColumnViewModel("Change Development","config",function(n){return page.OpenFormDialog(t.SetDevelopmentForm(n.FirmwareId,n.Development))},page.HasCapabilityComputed(Capability.Device_Developer))).AddTitle("Firmware");page.Add(t.firmwareTable);BaseUpdate(t,[t.firmwareTable])},t.SetDevelopmentForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n,"SetFirmwareDevelopment"),"Set Development","Set",{}).SubmitData(function(){return{isDevelopment:!i}}).Done(function(){t.firmwareTable.LoadData()}).MessageField(i?"Set as Production":"Set as Development").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_Index=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_Index_Model,t.stateHandler=function(){return new Admin_Index_State(t)},t.titleHandler=function(){return page.SetTitle("System Admin","N8S",views.Group_Details.routeHandler(1),function(){return views.Group_Details.Load(1)})},t.routeHandler=function(){return route.forControllerIndex("Admin")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.adminCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("role",new Header_Text("Capabilities","",t.viewModel.Counts.Capabilities,"Total Capabilities"),new Header_Actions(function(){return views.Admin_Capabilities.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("firmware",new Header_Text("Firmware","",t.viewModel.Counts.Firmware,"Total Firmware"),new Header_Actions(function(){return views.Admin_Firmware.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text("Cost Items","",t.viewModel.Counts.CostItems,"Total Cost Items"),new Header_Actions(function(){return views.Admin_CostItems.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text("Purchase Orders","",t.viewModel.Counts.PurchaseOrders,"Total Unshipped Purchase Orders"),new Header_Actions(function(){return views.Admin_PurchaseOrders.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("SQL Error Logs","",t.viewModel.Counts.ErrorLogs,"Total Error Logs"),new Header_Actions(function(){return views.Admin_ErrorLogs.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("Android Apks","","",""),new Header_Actions(function(){return views.Admin_AndroidApk.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("sim",new Header_Text("SMS Providers","",t.viewModel.Counts.SmsProviders,"Total SMS Providers"),new Header_Actions(function(){return views.Admin_SmsProviders.Load()}))]),tiles.createTile().addBlockSet([new Header_Block("email",new Header_Text("Email Providers","",t.viewModel.Counts.EmailProviders,"Total Email Providers"),new Header_Actions(function(){return views.Admin_EmailProviders.Load()}))])]);page.Add(new HeaderPageItem("System Administration"));page.Add(t.adminCommands);BaseUpdate(t)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_PurchaseOrders=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_PurchaseOrders_Model,t.stateHandler=function(){return new Admin_PurchaseOrders_State(t)},t.titleHandler=function(){return page.SetTitle("Purchase Orders","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","PurchaseOrders")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.selectedStartDate=ko.observable(moment().startOf("month").toISOString());t.selectedEndDate=ko.observable(moment().toISOString());t.purchaseOrdersTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","PurchaseOrdersTable"),"CreatedUtc",!1,function(n){return views.PurchaseOrder_Details.Load(n.PurchaseOrderId,n.TargetGroupId)},25);t.purchaseOrdersTable.AddColumn(new DateFilterTableColumnViewModel("CreatedDate","Created",!1,!0,function(n){return FormatDateOnly(moment(n.CreatedDate))})).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!0,!0)).AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("ReferenceNumber","Reference",!0,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!1,!0)).AddTitle("Incomplete Purchase Orders");t.groupPurchaseOrdersTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","GroupPurchaseOrdersTable"),"SourceGroup",!0,function(n){return views.BillingEntity_Details.Load(n.TargetBillingEntityId,n.TargetGroupId)},25);t.groupPurchaseOrdersTable.AddColumn(new FilterTableColumnViewModel("SourceGroup","Source Group",!0,!0)).AddColumn(new FilterTableColumnViewModel("TargetGroup","Target Group",!0,!0)).AddColumn(new FilterTableColumnViewModel("TargetBillingEntity","Billing Entity",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Count","Count",!1,!0)).AddColumn(new FilterTableColumnViewModel("LastOrderDate","Last Ordered",!1,!0,function(n){return FormatDateOnly(moment(n.LastOrderDate))})).AddTitle("Groups Containing Purchase Orders");t.unreceivedPurchaseOrdersTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","UnreceivedPurchaseOrdersTable"),"DispatchedUtc",!1,function(n){return views.PurchaseOrder_PackingListDetails.Load(n.PurchaseOrderId,n.PackingListId,n.TargetGroupId)},25);t.unreceivedPurchaseOrdersTable.AddColumn(new DateFilterTableColumnViewModel("DispatchedUtc","Date Dispatched",!1,!0)).AddColumn(new FilterTableColumnViewModel("Reference","Reference",!1,!0)).AddColumn(new FilterTableColumnViewModel("TargetGroup","TargetGroup",!1,!0)).AddColumn(new FilterTableColumnViewModel("DispatchedBy","Dispatched By",!0,!0)).AddColumn(new FilterTableColumnViewModel("ItemCount","Items Packed",!1,!0)).AddTitle("Fully Shipped Packing Lists Not Yet Received");t.orderedCostItemsTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerActionParams("Admin","OrderedCostItemsTable",{selectedStartDate:t.selectedStartDate(),selectedEndDate:t.selectedEndDate()})}),"ItemName",!0,null,25);t.orderedCostItemsTable.AddColumn(new FilterTableColumnViewModel("ItemName","Cost Item",!1,!0)).AddColumn(new FilterTableColumnViewModel("Count","Items Shipped",!1,!0)).AddColumn(new CurrencyFilterTableColumnViewModel("UnitPrice","Price",!0,!0,function(n){return FormatCurrency(n.UnitPrice)})).AddColumn(new CurrencyFilterTableColumnViewModel("Total","Total",!0,!0,function(n){return FormatCurrency(n.UnitPrice*n.Count)})).AddTitle("Items shipped within date range");t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("Date Range")),new SingleValue_Block("From",ko.computed(function(){return FormatDateOnly(moment.utc(t.selectedStartDate()))})),new SingleValue_Block("To",ko.computed(function(){return FormatDateOnly(moment.utc(t.selectedEndDate()))})),new Command_Block("Set Range","Set date range",t.SelectDateRangeForm)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Totals"),new SingleValue_Block("Count",ko.computed(function(){return t.orderedCostItemsTable.data().reduce(function(n,t){return n+t.Count},0)})),new SingleValue_Block("Sales",ko.computed(function(){return FormatCurrency(t.orderedCostItemsTable.data().reduce(function(n,t){return n+t.UnitPrice*t.Count},0))}))])]);page.Add(t.purchaseOrdersTable);page.Add(t.groupPurchaseOrdersTable);page.Add(t.unreceivedPurchaseOrdersTable);page.Add(t.pageCommands);page.Add(t.orderedCostItemsTable);BaseUpdate(t,[t.purchaseOrdersTable,t.groupPurchaseOrdersTable,t.unreceivedPurchaseOrdersTable,t.orderedCostItemsTable])},t.SelectDateRangeForm=function(){return new DialogViewModelBuilder(null,"Set Date Range","Apply",{startLocal:ko.observable(moment(t.selectedStartDate()).format("YYYY-MM-DD")),endLocal:ko.observable(moment(t.selectedEndDate()).format("YYYY-MM-DD"))}).Submit(function(n){t.selectedStartDate(moment(n.startLocal()).toISOString());t.selectedEndDate(moment(n.endLocal()).toISOString());t.orderedCostItemsTable.LoadData();page.CloseFormDialog()}).Validate(function(n){return n.startLocal()>n.endLocal()?"Start date must be earlier than end date":null}).DateField("startLocal","Start").DateField("endLocal","End").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_ServerHealth=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_ServerHealth_Model,t.stateHandler=function(){return new Admin_ServerHealth_State(t)},t.titleHandler=function(){return page.SetTitle("Server Health","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","ServerHealth")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([]);t.driveInfoTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","DriveHealthTable"),"CreatedUtc",!1,null,25);t.driveInfoTable.AddColumn(new DateTableColumnViewModel("CreatedUtc","Date",!0,!0)).AddColumn(new FilterTableColumnViewModel("ServerName","Server",!0,!0)).AddColumn(new FilterTableColumnViewModel("DriveName","Drive",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("DriveSize","Size",!0,!0,function(n){return FormatBytes(n.DriveSize)})).AddColumn(new NumberFilterTableColumnViewModel("FreeSpace","Free",!0,!0,function(n){return FormatBytes(n.FreeSpace)})).AddColumn(new FilterTableColumnViewModel("PercentageFree","Free Space",!0,!0,function(n){return FormatPercentage(n.PercentageFree,2)})).AddColumn(new FilterTableColumnViewModel("FileCount","File Count",!0,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!0,!0)).AddTitle("Drive Info");t.memoryInfoTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","MemoryHealthTable"),"CreatedUtc",!1,null,25);t.memoryInfoTable.AddColumn(new DateTableColumnViewModel("CreatedUtc","Date",!0,!0)).AddColumn(new FilterTableColumnViewModel("ServerName","Server",!0,!0)).AddColumn(new FilterTableColumnViewModel("CPUUsage","CPU Usage",!0,!0,function(n){return FormatPercentage(n.CPUUsage,0)})).AddColumn(new NumberFilterTableColumnViewModel("PhysicalMemory","Physical Mem",!0,!0,function(n){return FormatPercentage(n.PhysicalMemory,0)})).AddColumn(new NumberFilterTableColumnViewModel("PhysicalMemory","Physical Mem",!0,!0,function(n){return FormatPercentage(n.PhysicalMemory,0)})).AddColumn(new FilterTableColumnViewModel("Message","Message",!0,!0)).AddTitle("Memory Info");t.networkInfoTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","NetworkHealthTable"),"CreatedUtc",!1,null,25);t.networkInfoTable.AddColumn(new DateTableColumnViewModel("CreatedUtc","Date",!0,!0)).AddColumn(new FilterTableColumnViewModel("ServerName","Server",!0,!0)).AddColumn(new FilterTableColumnViewModel("AdapterName","Adapter",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("BytesReceived","Received",!0,!0,function(n){return FormatBytes(n.BytesReceived)})).AddColumn(new NumberFilterTableColumnViewModel("BytesSent","Sent",!0,!0,function(n){return FormatBytes(n.BytesSent)})).AddColumn(new FilterTableColumnViewModel("Message","Message",!0,!0)).AddTitle("Network Adapter Info");t.serviceInfoTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","ServicesTable"),"CreatedUtc",!1,null,25);t.serviceInfoTable.AddColumn(new DateTableColumnViewModel("CreatedUtc","Date",!0,!0)).AddColumn(new FilterTableColumnViewModel("ServerName","Server",!0,!0)).AddColumn(new FilterTableColumnViewModel("ServiceName","Service",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("ServiceStatus","Status",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("StartType","Start Type",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("ProcessId","Process Id",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("ProcessName","Process",!0,!0)).AddColumn(new FilterTableColumnViewModel("CPUUsage","CPU",!0,!0,function(n){return FormatPercentage(n.CPUUsage,0)})).AddColumn(new FilterTableColumnViewModel("MemorySize","Memory",!0,!0,function(n){return FormatPercentage(n.MemorySize,0)})).AddColumn(new FilterTableColumnViewModel("Message","Message",!0,!0)).AddTitle("Services / Processes Info");page.Add(t.pageCommands);page.Add(t.driveInfoTable);page.Add(t.memoryInfoTable);page.Add(t.networkInfoTable);page.Add(t.serviceInfoTable);BaseUpdate(t,[t.driveInfoTable,t.memoryInfoTable,t.networkInfoTable,t.serviceInfoTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Admin_SmsProviders=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Admin_SmsProviders_Model,t.stateHandler=function(){return new Admin_SmsProviders_State(t)},t.titleHandler=function(){return page.SetTitle("Sms Providers","System Admin",views.Admin_Index.routeHandler(),function(){return views.Admin_Index.Load()})},t.routeHandler=function(){return route.forControllerActionParams("Admin","SmsProviders")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("sim",new Header_Text("SMS Providers")),new Command_Block("Create","Create SMS Provider",t.CreateSmsProvidersForm,null,page.HasCapabilityComputed(Capability.System_Admin))])]);t.smsProvidersTable=new AjaxFilterTableViewModel(route.forControllerAction("Admin","SmsProvidersTable"),"Name",!0,null,25);t.smsProvidersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Edit SMS Provider","edit",function(n){return page.OpenFormDialog(t.EditSmsProvidersForm(n.SmsProviderId,n.Name))},page.HasCapabilityComputed(Capability.System_Admin))).AddColumn(new CommandTableColumnViewModel("Delete SMS Provider","delete",function(n){return page.OpenFormDialog(t.DeleteSmsProvidersForm(n.SmsProviderId,n.Name))},page.HasCapabilityComputed(Capability.System_Admin))).AddTitle("Sms Providers");page.Add(t.pageCommands);page.Add(t.smsProvidersTable);BaseUpdate(t,[t.smsProvidersTable])},t.CreateSmsProvidersForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Admin","CreateSmsProvider"),"Create SMS Provider","Create",{name:ko.observable(""),groupId:ko.observable()}).SubmitData(function(n){return{name:n.name(),groupId:n.groupId()}}).Done(function(){t.smsProvidersTable.LoadData()}).TextField("name","Name").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainSmsProvider"),!1,null,"Name",3,1).Create()},t.EditSmsProvidersForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n,"EditSmsProvider"),"Update SMS Provider","Update",{name:ko.observable(i)}).SubmitData(function(n){return{name:n.name()}}).Done(function(){t.smsProvidersTable.LoadData()}).TextField("name","Name").Create()},t.DeleteSmsProvidersForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Admin",n,"DeleteSmsProvider"),"Delete SMS Provider","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.smsProvidersTable.LoadData()}).MessageField("Are you sure you want to delete this SMS provider?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of SMS provider "+i+" and all related data").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Chart_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Chart_Details_Model,t.stateHandler=function(){return new Chart_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Name,"Charts",views.Chart_Index.routeHandler(),function(){return views.Chart_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Chart",n,"Details")},t.config=new Chart_Index_Config,t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Chart(t,!1)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Chart(t,!1)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Configure","Configure chart report",t.ConfigureCollectionForm)]),tiles.createTile().addBlockSet([new Command_Block("Add","Add chart to report",t.AddChartToCollectionForm)]),tiles.createTile().addBlockSet([new Command_Block("Download","Download Trend Data",t.DownloadDataForm)]),tiles.createTile().addBlockSet([new Command_Block("Share","Share a copy of this chart report",t.CloneToSharedForm,null,ko.computed(function(){return t.viewModel.CanCreateShared()}))])]);t.pageCommands.lowMargin="true";page.Add(t.pageCommands);page.Add(t.chartCollection);ChartUpdate(t,!1)},t.ConfigureCollectionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"ConfigureCollection"),"Configure Chart Report","Update",{name:ko.observable(t.viewModel.Name()),daysToDisplay:ko.observable(t.viewModel.DaysToDisplay())}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,i){t.viewModel.Name(i.Name);t.viewModel.DaysToDisplay(n.daysToDisplay())}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.AddChartToCollectionForm=function(){var n={name:ko.observable("New Chart"),type:ko.observable("line"),sortIndex:ko.observable(t.chartCollection.highestIndex()+1),height:ko.observable(250),timescale:ko.observable(!0),tsHeight:t.config.chartTypeOptions.timescale.Heights[0].Value},r;ko.computed(function(){n.type();ko.computedContext.isInitial()||(n.height(t.config.chartTypeOptions[n.type()].Default),n.type()==="timescale"?($('input[name="name"]').prop("disabled",!0),$('input[name="timescale"]').prop("disabled",!0),n.name("")):($('input[name="name"]').prop("disabled",!1),$('input[name="timescale"]').prop("disabled",!1)))});var i=new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"AddChartToCollection"),"Add Chart To Report","Add",n),u=function(n){i.dialogModel.showOptionalCheckbox(n)},f=function(n){u(n)};return ko.computed(function(){t.chartCollection.charts().length===0&&f(!0)}),i.SubmitData(function(n){var t=[];return Object.keys(n).forEach(function(i){i.substring(0,7)==="option."&&n[i]===!0&&t.push(i.substr(7))}),{name:n.name(),type:n.type(),sortIndex:n.sortIndex(),height:n.height(),timescale:n.timescale(),tsHeight:n.tsHeight,options:t}}).Done(function(){page.Update()}).MessageField("Add a new chart to this report?").DropDownListField("type","Chart Type",function(n){return n.Name},function(n){return n.Value},t.config.chartTypes).TextField("name","Name",50,!0).DropDownListField("height","Display Height",function(n){return n.Name},function(n){return n.Value},ko.computed(function(){return t.config.chartTypeOptions[n.type()].Heights})).OptionalCheckBoxField("timescale","Add a timescale with the new chart?"),i.MessageField("Chart Options"),r=new ChartOptions,r.List().forEach(function(t){var r="option."+t.Field;i.CheckBoxField(r,t.Name);n[r]=t.Value}),i.Create()},t.DeleteChartFromCollectionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"DeleteChartFromCollection"),"Remove Chart from Report","Remove",{chartId:ko.observable(n.chartId()),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to permanently delete this chart?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of chart:").MessageField(n.chartSvg().GetType()+" - "+n.chartName()).Create()},t.AddItemToChartForm=function(n){var i={chartId:ko.observable(n.chartId()),network:ko.observable(0),node:ko.observable({}),module:ko.observable({}),trendName:ko.observable(""),displayName:ko.observable(""),offsetValue:ko.observable(0),offsetUnit:ko.observable(""),itemCount:ko.observable(n.chartItems().length),colour:ko.observable(""),colorOffset:ko.observable(0),chart:{},trends:{}},r;return i.chart=ko.computed(function(){i.chartId();var r=n;return n.collection.charts().forEach(function(n){n.chartId()===i.chartId()&&(r=n,i.colour(t.config.colorScale(""+r.chartItems().length%t.config.colorCount).substring(1)),i.itemCount(r.chartItems().length))}),r}),ko.computed(function(){i.colour(t.config.colorScale(""+i.colorOffset()).substring(1))}),r=[],n.collection.charts().forEach(function(n,t){if(n.chartType()!=="timescale"){var i=n.chartName();(i==null||i.length===0)&&(i="(unnamed chart "+t+")");i+=n.chartType()?" ["+n.chartType()+"]":"";r.push({name:i,chartId:n.chartId()})}}),i.trends=ko.computed(function(){var t=i.module(),n;return t&&isArray(t.Trends)?(n=[],t.Trends.forEach(function(t){if(t.IsCumulative){var r;i.chart().chartType()==="histogram"?(r={Name:t.Name,Type:"histogram",Units:t.Units,IsCumulative:t.IsCumulative},n.push(r)):(t.Type="line",n.push(t),r={Name:t.Name,Type:"cumulative",Units:t.Units,IsCumulative:t.IsCumulative},n.push(r))}else n.push(t)}),d3.select("#trendName").attr("size",Math.min(5,n.length)),n):[]}),ko.computed(function(){var r=i.module(),t=i.trendName(),n;t&&(t=t.replace("[line]",""),t=t.replace("[cumulative]",""),t=t.replace("[histogram]",""));r&&t&&(n=r.Name+" - "+t,n.length>50&&n.indexOf(":")>-1&&(n=n.substr(n.indexOf(":")+1)),n.length>50&&(n="..."+n.substr(-47)),i.displayName(n))}),new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"AddItemToChart"),"Add Item To Chart","Add & Continue",i).SubmitData(function(n){return{chartId:n.chartId(),moduleId:n.module().ModuleId,trendName:n.trendName(),displayName:n.displayName(),offsetValue:n.offsetValue(),offsetUnit:n.offsetUnit(),colour:n.colour()}}).Done(function(n){n.itemCount(n.itemCount()+1);page.Update()}).DropDownListField("chartId","Add to chart",function(n){return n.name},function(n){return n.chartId},r).AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerAction("Chart","GetUserNetworks"),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return FormatNodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return i.network()?route.forControllerItemAction("Chart",i.network(),"GetUserNetworkNodes"):null}),!0,null,"Name",3,1).AjaxCompactFilterDropDownListField("module","Module",function(n){return n.Name},function(n){return n},ko.computed(function(){return i.network()&&i.node()?route.forControllerItemAction("Chart",i.network(),"GetUserNetworkModules",{nodeAddress:i.node().NodeAddress,type:i.chart().chartType()}):null}),!0,null,"Name",3,1).DropDownListField("trendName","Trend",function(n){return n.Name+(n.Units!=null&&n.Units!==""||n.Type==="cumulative"?" ("+((n.Type==="cumulative"?"Cumulative ":"")+(n.Units||"")).trim()+")":"")},function(n){return n.Name+(n.Type?"["+n.Type+"]":"")},i.trends).TextField("displayName","Display Name",50).ColorField("colour","Colour",6,!1,i.colorOffset,t.config.chartColors).MessageField("Specify the date offset (0 for none)").IntNumberField("offsetValue","Offset Period Amount",0,365).DropDownListField("offsetUnit","Offset Period Units",function(n){return n.Name},function(n){return n.Value},t.config.offsetUnits).CreateMulti()},t.ConfigureChartInCollectionForm=function(n){var i={chartId:ko.observable(n.chartId()),name:ko.observable(n.chartName()),type:ko.observable(n.chartType()),height:ko.observable(n.configHeight()),types:{}},u=ko.observable(0),f=0,e=function(){var n=!0;t.config.chartTypeOptions[i.type()].Heights.forEach(function(t){f===t.Value&&(n=!1)});n&&i.height(t.config.chartTypeOptions[i.type()].Default)},r;return ko.computed(function(){if(i.type(),u(u()+1),!ko.computedContext.isInitial()){var n=function(){return e()};typeof e=="function"&&ko.ignoreDependencies(n)}}),i.types=ko.computed(function(){var t=[];return i.type()==="line"?(t.push({Name:"Line",Value:"line"}),t.push({Name:"Histogram",Value:"histogram"}),n.chartItems().length===0&&(t.push({Name:"Tape",Value:"tape"}),t.push({Name:"Timescale",Value:"timescale"}))):i.type()==="histogram"?(t.push({Name:"Histogram",Value:"histogram"}),t.push({Name:"Line",Value:"line"}),n.chartItems().length===0&&(t.push({Name:"Tape",Value:"tape"}),t.push({Name:"Timescale",Value:"timescale"}))):i.type()==="tape"?(t.push({Name:"Tape",Value:"tape"}),n.chartItems().length===0&&(t.push({Name:"Line",Value:"line"}),t.push({Name:"Histogram",Value:"histogram"}),t.push({Name:"Timescale",Value:"timescale"}))):i.type()==="timescale"&&(t.push({Name:"Timescale",Value:"timescale"}),t.push({Name:"Line",Value:"line"}),t.push({Name:"Histogram",Value:"histogram"}),t.push({Name:"Tape",Value:"tape"})),t}),r=new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"ConfigureChartInCollection"),"Configure Chart","Update",i).SubmitData(function(n){var t=[];return Object.keys(n).forEach(function(i){i.substring(0,7)==="option."&&n[i]===!0&&t.push(i.substr(7))}),{chartId:n.chartId(),name:n.name(),type:n.type(),height:n.height(),options:t}}).Done(function(){page.Update()}).TextField("name","Name",50).MessageField("Change the type of this chart. Note: where possible existing chart items will be converted").DropDownListField("type","Chart Type",function(n){return n.Name},function(n){return n.Value},i.types).DropDownListField("height","Display Height",function(n){return n.Name},function(n){return n.Value},ko.computed(function(){return u(),f=i.height.peek(),t.config.chartTypeOptions[i.type.peek()].Heights})),r.MessageField("Chart Options"),n.options().List().forEach(function(n){var t="option."+n.Field;r.CheckBoxField(t,n.Name);i[t]=n.Value}),r.Create()},t.ConfigureItemInChartForm=function(n){var r={chartId:ko.observable(n.chartId()),chartItemId:ko.observable(n.chartItemId()),displayName:ko.observable(n.name()),offsetValue:ko.observable(n.offsetValue()),offsetUnit:ko.observable(n.offsetUnit()),axisTitle:ko.observable(n.axisTitle()),colour:ko.observable(n.colour()),colorOffset:ko.observable(0),itemType:ko.observable(n.itemType())},i;return ko.computed(function(){r.colorOffset();ko.computedContext.isInitial()||r.colour(t.config.colorScale(""+r.colorOffset()).substring(1))}),i=new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"ConfigureItemInChart",{chartId:n.chartId,chartItemId:n.chartItemId}),"Configure Chart Item","Update",r).SubmitData(function(n){return{chartId:n.chartId(),chartItemId:n.chartItemId(),name:n.displayName(),offsetValue:n.offsetValue(),offsetUnit:n.offsetUnit(),axisTitle:n.axisTitle(),colour:n.colour(),itemType:n.itemType()}}).Done(function(t){var r,i,u;if(n.offsetValue()!==+t.offsetValue()||n.offsetUnit()!==t.offsetUnit()||n.itemType()!==t.itemType())for(r in n.collection.dataCollection.data)if(n.collection.dataCollection.data.hasOwnProperty(r)){i=n.collection.dataCollection.data[r];for(u in i)i.hasOwnProperty(u)&&+u===n.chartItemId()&&(i[n.chartItemId()]=null)}page.Update()}),i.TextField("displayName","Display Name",50),i.ColorField("colour","Colour",6,!1,r.colorOffset,t.config.chartColors),i.MessageField("Specify the date offset (0 for none)."),(n.itemType()==="cumulative"||n.itemType()==="line"&&n.isCumulative())&&i.DropDownListField("itemType","Item Type",function(n){return n.Name},function(n){return n.Value},[{Name:"Line",Value:"line"},{Name:"Cumulative",Value:"cumulative"}]),i.IntNumberField("offsetValue","Offset Period Amount",0,365),i.DropDownListField("offsetUnit","Offset Period Units",function(n){return n.Name},function(n){return n.Value},t.config.offsetUnits),i.Create()},t.DeleteItemFromChartForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"DeleteItemFromChart",{chartId:n.chartId,chartItemId:n.chartItemId}),"Delete Chart Item","Delete",{chartId:ko.observable(n.chartId()),chartItemId:ko.observable(n.chartItemId()),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),chartItemId:n.chartItemId(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to permanently delete this item?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of item from chart").MessageField(n.networkName()+" - "+n.nodeName()+" - "+n.name()).Create()},t.DownloadDataForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"DownloadChartData",{moduleId:0}),"Download Data","Download",{chartId:ko.observable(n==null?0:n),collectionName:ko.observable(t.viewModel.Name()),startLocal:ko.observable(moment(t.chartCollection.datesUtc.start()).format("YYYY-MM-DD")),endLocal:ko.observable(moment(t.chartCollection.datesUtc.end()).format("YYYY-MM-DD"))}).SubmitData(function(n){return{chartId:n.chartId(),collectionName:n.collectionName(),startLocal:moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).toISOString(),endLocal:moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()},t.CloneToSharedForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"SharePrivateChart"),"Share Chart Report Copy","Share",{name:ko.observable(t.viewModel.Name()),daysToDisplay:ko.observable(t.viewModel.DaysToDisplay()),groupId:ko.observable()}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay(),groupId:n.groupId()}}).Done(function(n,t){t.SharedCollectionId!=null&&views.SharedCollection_Details.Load(t.SharedCollectionId)}).MessageField("Select a group to share chart report with.").AjaxCompactFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Chart","GetUserGroupsForSharing"),!1,null,"Name",5,1).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.mappingOptions={arrayChildId:{"{root}.Charts":"ChartId","{root}.Charts[i].ChartItems":"ChartItemId"},extend:{}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Chart_Index=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Chart_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Chart Reports","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(){return route.forControllerIndex("Chart")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem();t.pageCommands.addTileSet([tiles.createTile().addBlockSet([new Command_Block("Create","Create new chart report",t.CreateCollectionForm)])]);t.collectionsTable=new AjaxFilterTableViewModel(route.forControllerAction("Chart","GetChartCollectionsTable"),"Name",!0,function(n){return views.Chart_Details.Load(n.ChartCollectionId)},25);t.collectionsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("DaysToDisplay","Days",!0,!0,function(n){return n.DaysToDisplay+" days"})).AddColumn(new NumberFilterTableColumnViewModel("ChartCount","Charts",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("ItemCount","Trends",!0,!0)).AddColumn(new CommandTableColumnViewModel("Download Data","download",function(n){return page.OpenFormDialog(t.DownloadDataForm(n))})).AddColumn(new CommandTableColumnViewModel("Configure Chart","config",function(n){return page.OpenFormDialog(t.ConfigureCollectionForm(n))})).AddColumn(new CommandTableColumnViewModel("Delete Chart","delete",function(n){return page.OpenFormDialog(t.DeleteCollectionForm(n))})).AddTitle("Chart Reports");t.sharedCollectionsTable=new AjaxFilterTableViewModel(route.forControllerAction("Chart","SharedCollectionsTableForUser"),"Name",!0,function(n){return views.SharedCollection_Details.Load(n.SharedCollectionId)},25);t.sharedCollectionsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DaysToDisplay","Display",!0,!0,function(n){return n.DaysToDisplay+" days"})).AddColumn(new NumberFilterTableColumnViewModel("SharedChartsCount","Charts",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("SharedChartItemsCount","Trends",!0,!0)).AddTitle("Shared Reports");page.Add(t.pageCommands);page.Add(t.collectionsTable);page.Add(t.sharedCollectionsTable);BaseUpdate(t,[t.collectionsTable,t.sharedCollectionsTable])},t.CreateCollectionForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Chart","CreateCollection"),"Create Chart Report","Create",{name:ko.observable(""),daysToDisplay:ko.observable(7)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,i){i.ChartCollectionId!=null?views.Chart_Details.Load(i.ChartCollectionId):t.collectionsTable.LoadData()}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.ConfigureCollectionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",n.ChartCollectionId,"ConfigureCollection"),"Configure Chart Report","Update",{name:ko.observable(ko.unwrap(n.Name)),daysToDisplay:ko.observable(ko.unwrap(n.DaysToDisplay))}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(){t.collectionsTable.LoadData()}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.DeleteCollectionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",n.ChartCollectionId,"DeleteCollection"),"Delete Chart Report","Delete",{chartCollectionId:ko.observable(ko.unwrap(n.ChartCollectionId)),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartCollectionId:n.chartCollectionId(),confirm:n.confirm()}}).Done(function(){t.collectionsTable.LoadData()}).MessageField("Are you sure you want to permanently delete this chart report?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of chart report").Create()},t.DownloadDataForm=function(n){var t=new Date,i=moment(t).subtract("days",n.DaysToDisplay);return new DialogViewModelBuilder(route.forControllerItemAction("Chart",n.ChartCollectionId,"DownloadChartData",{moduleId:0}),"Download Data","Download",{chartId:ko.observable(0),collectionName:ko.observable(n.Name),startLocal:ko.observable(moment(i).format("YYYY-MM-DD")),endLocal:ko.observable(moment(t).format("YYYY-MM-DD"))}).SubmitData(function(n){return{chartId:n.chartId(),collectionName:n.collectionName(),startLocal:moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).toISOString(),endLocal:moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Chart_Module=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Chart_Module_Model,t.stateHandler=function(){return new Chart_Module_State(t)},t.titleHandler=function(){return page.SetTitle("Dynamic Chart",t.viewModel.Name,views.Module_Details.routeHandler(t.viewModel.ModuleId),function(){return views.Module_Details.Load(t.viewModel.ModuleId)})},t.routeHandler=function(n,t){return t!=null?route.forControllerActionParams("Chart","Module",{moduleId:n,showTapes:t}):route.forControllerActionParams("Chart","Module",{moduleId:n})},t.config=new Chart_Index_Config,t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Chart(t,!1)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Chart(t,!1)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Download","Download Trend Data",t.DownloadDataForm)]),tiles.createTile().addBlockSet([new Command_Block("Save As...","Create an editable report",t.CreateCollectionFromVirtualForm)]),tiles.createTile().addBlockSet([new Command_Block("Load Tapes","Load boolean tape charts",null,function(){return views.Chart_Module.Load(t.viewModel.ModuleId,!0)},ko.computed(function(){return!t.viewModel.ShowTapes()})),new Command_Block("Unload Tapes","Unload boolean tape charts",null,function(){return views.Chart_Module.Load(t.viewModel.ModuleId,!1)},ko.computed(function(){return t.viewModel.ShowTapes()}))]),tiles.createTile().addBlockSet([new Command_Block("Show All","Show all items on the charts",null,function(){return t.chartCollection.ToggleAllChartsItemsDisplay(!0)},ko.computed(function(){return t.chartCollection.hasHiddenChartItems()})),new Command_Block("Hide All","Hide the items of all charts",null,function(){return t.chartCollection.ToggleAllChartsItemsDisplay(!1)},ko.computed(function(){return!t.chartCollection.hasHiddenChartItems()}))])]);t.pageCommands.lowMargin="true";page.Add(t.pageCommands);page.Add(t.chartCollection);ChartUpdate(t,!1)},t.DownloadDataForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Chart",t.viewModel.ChartCollectionId,"DownloadChartData",{moduleId:t.viewModel.ModuleId}),"Download Data","Download",{collectionName:ko.observable(t.viewModel.Name()),startLocal:ko.observable(moment(t.chartCollection.datesUtc.start()).format("YYYY-MM-DD")),endLocal:ko.observable(moment(t.chartCollection.datesUtc.end()).format("YYYY-MM-DD"))}).SubmitData(function(n){return{chartId:0,collectionName:n.collectionName(),startLocal:moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).toISOString(),endLocal:moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()},t.CreateCollectionFromVirtualForm=function(){var i=[];for(var n in t.config.chartTypeOptions)t.config.chartTypeOptions.hasOwnProperty(n)&&i.push({key:n,value:t.config.chartTypeOptions[n].Default});return new DialogViewModelBuilder(route.forControllerAction("Chart","CreateCollectionFromVirtual"),"Save as Chart Report","Create",{name:ko.observable(t.viewModel.Name()),moduleId:ko.observable(t.viewModel.ModuleId()),daysToDisplay:ko.observable(t.chartCollection.datesUtc.GetDays())}).SubmitData(function(n){return{name:n.name(),moduleId:n.moduleId(),daysToDisplay:n.daysToDisplay(),heights:i}}).Done(function(n,t){views.Chart_Details.Load(t.ChartCollectionId)}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.mappingOptions={arrayChildId:{"{root}.Charts":"ChartId","{root}.Charts[i].ChartItems":"ChartItemId"},extend:{}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),CumulativeMeter_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new CumulativeMeter_Details_Model,t.stateHandler=function(){return new CumulativeMeter_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.CumulativeMeter.Name,t.viewModel.CumulativeMeter.ModuleName,views.Module_Details.routeHandler(t.viewModel.CumulativeMeter.ModuleId),function(){return views.Module_Details.Load(t.viewModel.CumulativeMeter.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("CumulativeMeter",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.meterCommands=tiles.createPageItem().addTileSet([t.viewModel.CumulativeMeter,tiles.createTile().addBlockSet([new Command_Block("Rename","Change the name of this meter",t.RenameCumulativeMeterForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_Manage)),new Command_Block("Reset","Reset this meter",t.ResetCumulativeMeterForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_Reset)),new Command_Block("Delete","Delete this meter",t.DeleteCumulativeMeterForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_Manage))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Create Alarms",page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Total","Create new total alarm",t.CreateTotalAlarmForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Time","Create new time alarm",t.CreateTimeAlarmForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm))]),tiles.createTile().addBlockSet([new Header_Block("warning",new Header_Text("Escalation Lists",null,ko.computed(function(){return t.viewModel.EscalationLists().length}),"Escalation list count"))]).addBlockSet(t.viewModel.EscalationLists).addBlockSet([new Command_Block("Add","Add escalation list",t.AddEscalationListsForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_ManageEscalation))])]);t.alarmTiles=tiles.createPageItem().addTileSet(t.viewModel.CumulativeMeter.TotalAlarms).addTileSet(t.viewModel.CumulativeMeter.TimeAlarms);t.noteCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Note","Add a new Note",t.CreateNoteForm,null,page.HasCapabilityComputed(Capability.Note_Create))])]);t.totalsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"TotalsTable"),"EndUtc",!1,null,25);t.totalsTable.AddColumn(new DateFilterTableColumnViewModel("StartUtc","Start",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("EndUtc","End",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Total","Total",!1,!0,function(n){return(n.Total*t.viewModel.CumulativeMeter.Scale()).toFixed(t.viewModel.CumulativeMeter.DisplayDigits())+t.viewModel.CumulativeMeter.Units()})).AddTitle("Totals");t.notesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"NotesTable"),"CreatedUtc",!1,null,10);t.notesTable.AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return views.Note_Details.Load(n.NoteId)})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new CommandWithDynamicIconTableColumnViewModel("TargetIcon",function(n){return NoteInfoBuilder(n,"CumulativeMeter").icon()},function(n){return NoteInfoBuilder(n,"CumulativeMeter").tooltip()},function(n){return NoteInfoBuilder(n,"CumulativeMeter").action()},!0,function(n){return NoteInfoBuilder(n,"CumulativeMeter").actionEnabled()})).AddColumn(new FilterTableColumnViewModel("Target","Target",!1,!1,function(n){return NoteInfoBuilder(n,"CumulativeMeter").type()})).AddColumn(new FilterTableColumnViewModel("Title","Title",!1,!0)).AddColumn(new CommandTableColumnViewModel("Created By","profile",function(n){return views.User_Details.Load(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes");t.eventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"EventsTable"),"TimeUtc",!1,function(n){return page.OpenFormDialog(t.EventDetailsForm(n))},25);t.eventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("EventType","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("Alarm","Alarm",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Events");page.Add(new HeaderPageItem("Cumulative Meter"));page.Add(t.meterCommands);page.Add(t.totalsTable);page.Add(new HeaderPageItem("Alarms"));page.Add(t.alarmTiles);page.Add(t.noteCommands);page.Add(t.notesTable);page.Add(t.eventsTable);BaseUpdate(t,[t.eventsTable,t.totalsTable,t.notesTable])},t.CreateNoteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"CreateNote"),"Create Note","Create",{groupId:ko.observable(),title:ko.observable(),details:ko.observable()}).SubmitData(function(n){return{groupId:n.groupId(),title:n.title(),details:n.details()}}).Done(function(){t.notesTable.LoadData()}).MessageField("Select the group in which to create the note. Only users with access to this group will be able to view the note.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainNote"),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()},t.CreateTotalAlarmForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"CreateTotalAlarm"),"Create Alarm","Create",{name:ko.observable(),warning:ko.observable(),limit:ko.observable()}).SubmitData(function(n){return{name:n.name(),warning:n.warning(),limit:n.limit()}}).Done(function(){page.Update()}).MessageField("Specify the name for the alarm.").TextField("name","Name").MessageField("Specify the warning threshold for the alarm.").NumberField("warning","Warning").MessageField("Specify the limit threshold for the alarm.").NumberField("limit","Limit").Create()},t.RenameTotalAlarmForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"RenameTotalAlarm"),"Rename Alarm","Rename",{name:ko.observable(n.Name())}).SubmitData(function(t){return{cumulativeMeterTotalAlarmId:n.CumulativeMeterTotalAlarmId(),name:t.name()}}).Done(function(i,r){n.Name(r.Name);t.eventsTable.LoadData()}).MessageField("Specify the name for the alarm.").TextField("name","Name").Create()},t.SetTotalAlarmLimitsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"SetTotalAlarmLimits"),"Set Alarm Limits","Update",{warning:ko.observable(n.Warning().toFixed(n.DisplayDigits())),limit:ko.observable(n.Limit().toFixed(n.DisplayDigits()))}).SubmitData(function(t){return{cumulativeMeterTotalAlarmId:n.CumulativeMeterTotalAlarmId(),warning:t.warning(),limit:t.limit()}}).Done(function(i,r){n.Warning(r.Warning);n.Limit(r.Limit);t.eventsTable.LoadData()}).MessageField("Specify the warning threshold for the alarm.").NumberField("warning","Warning").MessageField("Specify the limit threshold for the alarm.").NumberField("limit","Limit").Create()},t.DeleteTotalAlarmForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"DeleteTotalAlarm"),"Delete Alarm","Delete",{}).SubmitData(function(){return{cumulativeMeterTotalAlarmId:n.CumulativeMeterTotalAlarmId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to delete the alarm "+n.Name()+"?").Create()},t.CreateTimeAlarmForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"CreateTimeAlarm"),"Create Alarm","Create",{name:ko.observable(),warningThreshold:ko.observable(90),days:ko.observable(),months:ko.observable()}).SubmitData(function(n){return{name:n.name(),warningThreshold:n.warningThreshold()/100,days:Math.round(n.days()),months:Math.round(n.months())}}).Done(function(){page.Update()}).MessageField("Specify the new name for the alarm.").TextField("name","Name").MessageField("Specify the warning threshold for the alarm. A warning alert will be generated when the time reaches this percentage of the limit. A value of zero will disable the warning.").NumberField("warningThreshold","Warning Threshold",0,99).MessageField("Specify the limit threshold for the alarm.").IntNumberField("days","Days",0,36525).IntNumberField("months","Months",0,1200).Create()},t.RenameTimeAlarmForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"RenameTimeAlarm"),"Rename Alarm","Rename",{name:ko.observable(n.Name())}).SubmitData(function(t){return{cumulativeMeterTimeAlarmId:n.CumulativeMeterTimeAlarmId(),name:t.name()}}).Done(function(i,r){n.Name(r.Name);t.eventsTable.LoadData()}).MessageField("Specify the name for the alarm.").TextField("name","Name").Create()},t.SetTimeAlarmLimitsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"SetTimeAlarmLimits"),"Set Alarm Limits","Update",{warningThreshold:ko.observable((n.WarningThreshold()*100).toFixed(0)),days:ko.observable(n.Days()),months:ko.observable(n.Months())}).SubmitData(function(t){return{cumulativeMeterTimeAlarmId:n.CumulativeMeterTimeAlarmId(),warningThreshold:t.warningThreshold()/100,days:t.days(),months:t.months()}}).Done(function(){page.Update()}).MessageField("Specify the warning threshold for the alarm. A warning alert will be generated when the time reaches this percentage of the limit. A value of zero will disable the warning.").NumberField("warningThreshold","Warning Threshold",0,99).MessageField("Specify the limit threshold for the alarm.").IntNumberField("days","Days",0,36525).IntNumberField("months","Months",0,1200).Create()},t.DeleteTimeAlarmForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"DeleteTimeAlarm"),"Delete Alarm","Delete",{}).SubmitData(function(){return{cumulativeMeterTimeAlarmId:n.CumulativeMeterTimeAlarmId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to delete the alarm "+n.Name()+"?").Create()},t.RenameCumulativeMeterForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"Rename"),"Rename Meter","Rename",{name:ko.observable(t.viewModel.CumulativeMeter.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.CumulativeMeter.Name(i.Name);t.eventsTable.LoadData()}).MessageField("Specify the name for the meter.").TextField("name","Name").Create()},t.DeleteCumulativeMeterForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"Delete"),"Delete Meter","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Module_Details.Load(t.viewModel.CumulativeMeter.ModuleId)}).MessageField("Are you sure you want to delete this meter?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion").Create()},t.ResetCumulativeMeterForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"Reset"),"Reset Cumulative Meter","Reset",{startLocal:ko.observable(moment().format("YYYY-MM-DDTHH:mm:ss")),initialTotal:ko.observable(0)}).SubmitData(function(n){return{startUtc:moment(n.startLocal()).utc().toISOString(),initialTotal:n.initialTotal()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to reset this cumulative meter.").MessageField("THIS ACTION CANNOT BE UNDONE!").MessageField("Specify the new start time and total for the meter").DateTimeField("startLocal","Start").NumberField("initialTotal","Initial Total").Create()},t.AddEscalationListsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"AddEscalationLists"),"Add Escalation Lists","Add",{escalationListIds:ko.observableArray([])}).SubmitData(function(n){return{escalationListIds:n.escalationListIds()}}).Done(function(){page.Update()}).MessageField("Select one or more escalation lists to receive alerts.").AjaxMultiSelectListField("escalationListIds","Escalation Lists (ctrl-click or drag for multi select)",function(n){return n.Name+" (ID: "+n.EscalationListId+")"},function(n){return n.EscalationListId},route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"EscalationListsWhichCanBeAdded"),15,!0).Create()},t.RemoveEscalationListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"RemoveEscalationList"),"Remove Escalation List","Remove",{}).SubmitData(function(){return{escalationListId:n.EscalationListId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the escalation list "+n.Name()+"?").Create()},t.EventDetailsForm=function(n){var i={details:n},u=ko.observable(!0),f=ko.observable(!1),e=function(n,t){return ko.computed(function(){return u()?n+": Loading...":f()?n+": Failed to load":n+": "+t()})},r=new DialogViewModelBuilder(undefined,"Event details","Close",{}).MessageField(e("Type",function(){return i.details.EventType})).MessageField(e("Details",function(){return i.details.Details})).MessageField(e("Time",function(){return FormatDateTime(moment.utc(i.details.TimeUtc))})).Create();return page.ViewRequests.push($.ajax(route.forControllerItemAction("CumulativeMeter",t.viewModel.CumulativeMeter.CumulativeMeterId,"EventDetails"),{data:{cumulativeMeterEventId:n.CumulativeMeterEventId},type:"POST"}).done(function(n){var o,s,e,t;for(i.details=n,o=i.details.Escalation,s=o.length,e=0;e<s;++e)t=o[e],r.fields.push(new DialogMessageFieldViewModel(t.EscalationList+": Escalation "+(t.EscalationComplete?"Complete":"In Progress"))),r.fields.push(new DialogMessageFieldViewModel(t.AcknowledgeTimeUtc?"Acknowledged by "+t.AcknowledgeUser+" at "+FormatDateTime(moment.utc(t.AcknowledgeTimeUtc)):"Unacknowledged")),r.fields.push(new DialogListFieldViewModel("Messages",t.Messages,function(n){return FormatDateTime(moment.utc(n.TimeUtc))+(n.Sms?" SMS":"")+(n.Email?" Email":"")+" "+n.User+" "+n.Content}));f(!1);u(!1)}).fail(function(){f(!0);u(!1)})),r},t.mappingOptions={arrayChildId:{TotalAlarms:"CumulativeMeterTotalAlarmId",TimeAlarms:"CumulativeMeterTimeAlarmId",EscalationLists:"EscalationListId"},extend:{CumulativeMeter:function(n){tiles.makeTile(n);n.addBlockSet([new Header_Block(n.Icon,new Header_Text(n.Name,"Meter Name",n.FormattedTotal,"Total")),new SingleValue_Block("Start",ko.computed(function(){return FormatDateTime(moment(n.StartUtc()))}))])},"TotalAlarms[i]":function(n){tiles.makeTile(n);n.addBlockSet([new Header_Block("warning",new Header_Text("Total Alarm","Trigger on total value",n.Name,"Name")),new SingleValue_Block("Warning",ko.computed(function(){return n.Warning().toFixed(n.DisplayDigits())+n.Units()})),new SingleValue_Block("Limit",ko.computed(function(){return n.Limit().toFixed(n.DisplayDigits())+n.Units()})),new PercentBar_Block("Progress",ko.computed(function(){return Math.floor(n.Total()/n.Limit()*100)+"% of limit"}),ko.computed(function(){return n.Total()/n.Limit()*100})),new Command_Block("Rename","Rename this alarm",null,function(){return page.OpenFormDialog(t.RenameTotalAlarmForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Limits","Change limits for this alarm",null,function(){return page.OpenFormDialog(t.SetTotalAlarmLimitsForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Delete","Delete this alarm",null,function(){return page.OpenFormDialog(t.DeleteTotalAlarmForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm))])},"TimeAlarms[i]":function(n){tiles.makeTile(n);n.addBlockSet([new Header_Block("warning",new Header_Text("Time Alarm","Trigger on time period",n.Name,"Name")),new SingleValue_Block("Limit",n.FormattedLimit),new SingleValue_Block("Warning",ko.computed(function(){return Math.round(n.WarningThreshold()*100)+"% of limit"})),new PercentBar_Block("Progress",ko.computed(function(){return Math.floor(n.Percent())+"% of limit"}),n.Percent),new Command_Block("Rename","Rename this alarm",null,function(){return page.OpenFormDialog(t.RenameTimeAlarmForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Limits","Change limits for this alarm",null,function(){return page.OpenFormDialog(t.SetTimeAlarmLimitsForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Delete","Delete this alarm",null,function(){return page.OpenFormDialog(t.DeleteTimeAlarmForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm))])},"EscalationLists[i]":function(n){return new Command_Block("Remove",n.Name,null,function(){return page.OpenFormDialog(t.RemoveEscalationListForm(n))},page.HasCapabilityComputed(Capability.CumulativeMeter_ManageEscalation))}}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Error_Index=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Error_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Error","",null,function(){return history.back()})},t.UrlLoad=function(){t.sourceUrl=window.location.href;t.replaceState();LoadView_Error(t)},t.Load=function(){LoadView_Error(t)},t.Render=function(){page.Add(new HeaderPageItem("An Error Has Occurred"));page.Add(new HtmlBlockPageItem('<p class="markdown">Unfortunately, something has gone wrong while processing your request. The administrator has been notified of the problem. If this problem persists, please contact your administrator for further assitance.<\/br><\/br><\/br><a href="/">Return to Dashboard home page<\/a><\/p>'));page.Add(new HtmlBlockPageItem('<p style="text-align: center; padding-top: 40px;"><img src="/Images/SadFace.png" title="Sad Face" alt="Sad Face" /><\/p>'))},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Escalation_Index=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Escalation_Index_Model,t.stateHandler=function(){return new Escalation_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Escalation","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(){return route.forControllerIndex("Escalation")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Create","Create a new escalation list",t.CreateEscalationListForm)])]);t.escalationListsTable=new AjaxFilterTableViewModel(route.forControllerAction("Escalation","EscalationListsTable"),"Name",!0,function(n){return views.EscalationList_Details.Load(n.EscalationListId)},10);t.escalationListsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("UserCount","Users",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("EscalationDelayMinutes","Delay (min)",!0,!0)).AddTitle("Escalation Lists");page.Add(t.pageCommands);page.Add(t.escalationListsTable);BaseUpdate(t,[t.escalationListsTable])},t.CreateEscalationListForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Escalation","CreateEscalationList"),"Create Escalation List","Create",{groupId:ko.observable(),name:ko.observable(),escalationDelayMinutes:ko.observable(15)}).SubmitData(function(n){return{groupId:n.groupId(),name:n.name(),escalationDelayMinutes:n.escalationDelayMinutes()}}).Done(function(n,t){views.EscalationList_Details.Load(t.EscalationListId)}).MessageField("Select the group that will contain the new escalation list.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Escalation","GroupsForCreatingEscalationLists"),!1,null,"Name",5).TextField("name","Name").IntNumberField("escalationDelayMinutes","Escalation Delay (minutes)",1,10080).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Details_Model,t.stateHandler=function(){return new Group_Details_State(t)},t.titleHandler=function(){t.viewModel.ParentGroupId()===t.viewModel.GroupId()?page.SetTitle(t.viewModel.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.Name,t.viewModel.ParentGroupName,views.Group_Details.routeHandler(t.viewModel.ParentGroupId),function(){return views.Group_Details.Load(t.viewModel.ParentGroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.groupCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Rename","Change the name of this group",t.RenameGroupForm,null,page.HasCapabilityComputed(Capability.Group_Rename))]),tiles.createTile().addBlockSet([new Command_Block("Delete","Delete this group",t.DeleteGroupForm,null,page.HasCapabilityComputed(Capability.Group_Delete))]),tiles.createTile().addBlockSet([new Command_Block("Move","Change parent group",t.MoveGroupForm,null,page.HasCapabilityComputed(Capability.Group_Remove))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new member group",t.CreateGroupForm,null,page.HasCapabilityComputed(Capability.Group_Create))]),tiles.createTile().addBlockSet([new Command_Block("Report","Run a report on this group",null,function(){return views.Report_Run.Load(0,t.viewModel.GroupId(),moment().add("day",-7),moment())})]),tiles.createTile().addBlockSet([new Command_Block("Status","Network Status Summary",null,function(){return views.Group_NetworkStatus.Load(t.viewModel.GroupId)})]),tiles.createTile().addBlockSet([new Command_Block("Tasks","Tasks report",null,function(){return views.Group_Tasks.Load(t.viewModel.GroupId)})]),tiles.createTile().addBlockSet([new Command_Block("Conversions","Module data conversions",null,function(){return views.Group_ModuleConversions.Load(t.viewModel.GroupId)},page.HasCapabilityComputed(Capability.Network_CreateNode))]),tiles.createTile().addBlockSet([new Command_Block("Configure","View and edit module configs",t.EditModuleConfigForm,null,page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller]))]),tiles.createTile().addBlockSet([new Command_Block("Firmware","Update network firmware",t.UpdateNetworkFirmwareForm,null,page.HasCapabilityComputed(Capability.Device_Firmware))]),tiles.createTile().addBlockSet([new Command_Block("Roles","Granted roles",null,function(){return views.Group_GrantedRoles.Load(t.viewModel.GroupId)},page.HasCapabilityComputed(Capability.Role_GrantToGroup))]),tiles.createTile().addBlockSet([new Command_Block("History","Config history",null,function(){return views.Group_ConfigHistory.Load(t.viewModel.GroupId)},page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller]))]),tiles.createTile().addBlockSet([new Command_Block("Network Sims","View network sims",null,function(){return views.Group_NetworkSims.Load(t.viewModel.GroupId)},page.HasCapabilityComputed(Capability.Network_ManageSim))]),tiles.createTile().addBlockSet([new Command_Block("Managers","View network managers",null,function(){return views.Group_NetworkManagers.Load(t.viewModel.GroupId)},page.HasCapabilityComputed(Capability.Network_ViewManagerUsers))]),tiles.createTile().addBlockSet([new Command_Block("System Admin","System Admin",null,function(){return views.Admin_Index.Load()},ko.computed(function(){return page.HasCapability(Capability.System_Admin)&&t.viewModel.GroupId()===1}))])]);t.groupTiles=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text("Networks","Group Networks",t.viewModel.NetworkCount,"Networks in group"),new Header_Actions(function(){return views.Group_Networks.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("profile",new Header_Text("Users","Group Users",t.viewModel.UserCount,"Users in group"),new Header_Actions(function(){return views.Group_Users.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("role",new Header_Text("Roles","Group Roles",t.viewModel.RoleCount,"Roles in group"),new Header_Actions(function(){return views.Group_Roles.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("module",new Header_Text("Modules","Group Modules",t.viewModel.ModuleCount,"Modules in group"),new Header_Actions(function(){return views.Group_Modules.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text("Devices","Group Devices",t.viewModel.DeviceCount,"Devices in group"),new Header_Actions(function(){return views.Group_Devices.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("data-stream",new Header_Text("Data Streams","Group Data Streams",t.viewModel.DataStreamCount,"Data streams in group"),new Header_Actions(function(){return views.Group_DataStreams.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("warning",new Header_Text("Escalation Lists","Group Escalation Lists",t.viewModel.EscalationListCount,"Escalation lists in group"),new Header_Actions(function(){return views.Group_EscalationLists.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("gis-layers",new Header_Text("GIS Datasets","Group GIS Datasets",t.viewModel.GisDatasetCount,"GIS datasets in group"),new Header_Actions(function(){return views.Group_GisDatasets.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("chart",new Header_Text("Shared Chart Reports","Group Reports",t.viewModel.SharedCollectionCount,"Reports in group"),new Header_Actions(function(){return views.Group_SharedCollections.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("report-template",new Header_Text("Report Templates","Group Templates",t.viewModel.ReportTemplateCount,"Templates in group"),new Header_Actions(function(){return views.Group_ReportTemplates.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("config-template",new Header_Text("Config Templates","Group Config Templates",t.viewModel.ModuleConfigTemplateCount,"Templates in group"),new Header_Actions(function(){return views.Group_ModuleConfigTemplates.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("application-template",new Header_Text("Application Templates","Group Templates",t.viewModel.ApplicationTemplateCount,"Templates in group"),new Header_Actions(function(){return views.Group_ApplicationTemplates.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("logic-application",new Header_Text("Applications","Group Applications",t.viewModel.AppCount,"Applications in group"),new Header_Actions(function(){return views.Group_Apps.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("module-source",new Header_Text("Module Sources","Group Module Sources",t.viewModel.AppModuleSourceCount,"Module sources in group"),new Header_Actions(function(){return views.Group_AppModuleSources.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("export",new Header_Text("Export Targets","Group Export Targets",t.viewModel.ExportTargetCount,"Export Targets in group"),new Header_Actions(function(){return views.Group_ExportTargets.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("icon",new Header_Text("Icons","Group Icons",t.viewModel.IconCount,"Icons in group"),new Header_Actions(function(){return views.Group_Icons.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("sim",new Header_Text("Sims","Group Sims",t.viewModel.SimCount,"Sims in group"),new Header_Actions(function(){return views.Group_Sims.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("rfid-tag",new Header_Text("Rfid Tags","Group Rfid Tags",t.viewModel.RfidTagCount,"Rfid Tags in group"),new Header_Actions(function(){return views.Group_RfidTags.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("brand",new Header_Text("Brandings","Group Brandings",t.viewModel.BrandingCount,"Brandings in group"),new Header_Actions(function(){return views.Group_Brandings.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("legal-terms",new Header_Text("Legal Terms","Group Legal Terms",t.viewModel.LegalTermsCount,"Legal terms in group"),new Header_Actions(function(){return views.Group_LegalTerms.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text("Billing Entities","Group Billing Entities",t.viewModel.BillingEntityCount,"Billing entities in group"),new Header_Actions(function(){return views.Group_BillingEntities.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("device",new Header_Text("Device Types","Group Device Types",t.viewModel.DeviceTypeCount,"Device types in group"),new Header_Actions(function(){return views.Group_DeviceTypes.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("message-plan",new Header_Text("Message Plans","Group Message Plans",t.viewModel.MessagePlanCount,"Message plans in group"),new Header_Actions(function(){return views.Group_MessagePlans.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("message-plan",new Header_Text("Message Accounts","Group Message Accounts",t.viewModel.MessageAccountCount,"Message accounts in group"),new Header_Actions(function(){return views.Group_MessageAccounts.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text("Network Subscriptions","Group Subscriptions",t.viewModel.NetworkSubscriptionCount,"Network subscriptions in group"),new Header_Actions(function(){return views.Group_NetworkSubscriptions.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("legal-terms",new Header_Text("Notes","Group Notes",t.viewModel.NoteCount,"Notes in group"),new Header_Actions(function(){return views.Group_Notes.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("message-plan",new Header_Text("Sms Providers","Group Sms Providers",t.viewModel.SmsProviderCount,"Providers in group"),new Header_Actions(function(){return views.Group_SmsProviders.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("message-plan",new Header_Text("Email Providers","Group Email Providers",t.viewModel.EmailProviderCount,"Providers in group"),new Header_Actions(function(){return views.Group_EmailProviders.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("tag",new Header_Text("Tags","Group Tags",t.viewModel.TagCount,"Tags in group"),new Header_Actions(function(){return views.Group_Tags.Load(t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new Header_Block("report",new Header_Text("Attachments","Group Attachments",t.viewModel.AttachmentCount,"Attachments in group"),new Header_Actions(function(){return views.Group_Attachments.Load(t.viewModel.GroupId)}))])]);t.groupsTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("Group",t.viewModel.GroupId,"MemberGroupsTable")}),"Name",!0,function(n){return views.Group_Details.Load(n.GroupId)},10);t.groupsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Member Groups");t.targetGroupActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"UserActionsForTargetGroupTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.targetGroupActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new CommandTableColumnViewModel("View User","profile",function(n){return views.User_Details.Load(n.UserId)})).AddColumn(new FilterTableColumnViewModel("User","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("Target Group Actions");page.Add(t.groupCommands);page.Add(t.groupTiles);page.Add(t.groupsTable);page.Add(t.targetGroupActionsTable);BaseUpdate(t,[t.groupsTable,t.targetGroupActionsTable])},t.RenameGroupForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"Rename"),"Rename Group","Rename",{name:ko.observable(t.viewModel.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.Name(i.Name)}).TextField("name","Name").Create()},t.DeleteGroupForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"Delete"),"Delete Group","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.viewModel.GroupId()===t.viewModel.ParentGroupId()?views.Group_Index.Load():views.Group_Details.Load(t.viewModel.ParentGroupId)}).MessageField("Are you sure you want to delete this group? Members of this group will be unaffected.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of group").Create()},t.MoveGroupForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"ChangeParent"),"Move Group","Move",{newParentGroupId:ko.observable()}).SubmitData(function(n){return{oldParentGroupId:t.viewModel.ParentGroupId(),newParentGroupId:n.newParentGroupId()}}).Done(function(){page.Update()}).AjaxCompactFilterDropDownListField("newParentGroupId","New Parent Group",function(n){return n.Name+" (ID:"+n.GroupId+")"},function(n){return n.GroupId},route.forControllerItemAction("Group",t.viewModel.GroupId,"AvailableParentGroups",{currentParentGroupId:t.viewModel.ParentGroupId}),!1,null,"Name",5,1).Create()},t.CreateGroupForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateGroup"),"Create Group","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){t.GroupId!=null&&views.Group_Details.Load(t.GroupId)}).TextField("name","Name").Create()},t.EditModuleConfigForm=function(){return new DialogViewModelBuilder(null,"Group Modules Configuration","Next",{moduleType:ko.observable()}).Submit(function(n){page.CloseFormDialog();views.Group_ModuleConfiguration.Load(t.viewModel.GroupId,n.moduleType)}).AjaxFilterDropDownListField("moduleType","Module Type",function(n){return n.Type},function(n){return n.Type},route.forControllerItemAction("Group",t.viewModel.GroupId,"NestedModuleTypes"),!1,null,"Type",10,10).Create()},t.UpdateNetworkFirmwareForm=function(){return new DialogViewModelBuilder(null,"Update Network Firmware","Next",{deviceTypeAndModel:ko.observable()}).Submit(function(n){page.CloseFormDialog();var i=n.deviceTypeAndModel().split("|");views.Group_UpdateNetworkFirmware.Load(t.viewModel.GroupId,i[0],i[1])}).AjaxFilterDropDownListField("deviceTypeAndModel","Device Type",function(n){return n.Type+"v"+n.Model},function(n){return n.Type+"|"+n.Model},route.forControllerItemAction("Group",t.viewModel.GroupId,"NestedNetworkDeviceTypes"),!1,null,"Type",10,10).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Index=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Group_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Groups","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(){return route.forControllerIndex("Group")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.groupsTable=new AjaxFilterTableViewModel(route.forControllerAction("Group","GroupsTable"),"Name",!0,function(n){return views.Group_Details.Load(n.GroupId)},25);t.groupsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Groups");page.Add(t.groupsTable);BaseUpdate(t,[t.groupsTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ApplicationTemplates=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ApplicationTemplates_Model,t.stateHandler=function(){return new Group_ApplicationTemplates_State(t)},t.titleHandler=function(){return page.SetTitle("Application Templates",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"ApplicationTemplates")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.applicationTemplatesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing template",t.AddExistingApplicationTemplateForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new template",t.CreateApplicationTemplateForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))]),tiles.createTile().addBlockSet([new Command_Block("Clone","Copy an existing template",t.CloneApplicationTemplateForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))])]);t.applicationTemplatesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ApplicationTemplatesTable"),"Name",!0,function(n){return views.ApplicationTemplate_Details.Load(n.ApplicationTemplateId)},25);t.applicationTemplatesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ApplicationName","Application",!1,!0)).AddColumn(new FilterTableColumnViewModel("ApplicationGuid","Application Guid",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUserName","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Application Template","delete",function(n){return page.OpenFormDialog(t.RemoveApplicationTemplateForm(n))},page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))).AddTitle("Application Templates");page.Add(t.applicationTemplatesCommands);page.Add(t.applicationTemplatesTable);GroupUpdate(t,[t.applicationTemplatesTable])},t.AddExistingApplicationTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingApplicationTemplates"),"Add Existing Application Templates","Add",{applicationTemplateIds:ko.observableArray()}).SubmitData(function(n){return{applicationTemplateIds:n.applicationTemplateIds()}}).Done(function(){t.applicationTemplatesTable.LoadData()}).MessageField("Select one or more existing application template to add to this group.").AjaxMultiSelectListField("applicationTemplateIds","Templates (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.ApplicationTemplateId},route.forControllerItemAction("Group",t.viewModel.GroupId,"ApplicationTemplatesWhichCanBeAdded"),15,!0).Create()},t.CreateApplicationTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateApplicationTemplate"),"Create Application Template","Create",{name:ko.observable(),applicationGuid:ko.observable()}).SubmitData(function(n){return{name:n.name(),applicationId:n.applicationGuid()}}).Done(function(n,t){views.ApplicationTemplate_Details.Load(t.ApplicationTemplateId)}).TextField("name","Application Template Name").AjaxFilterDropDownListField("applicationGuid","Application",function(n){return n.Name+" (v"+n.AppVersionNumber+")"},function(n){return n.ApplicationGuid},route.forControllerAction("ApplicationTemplate","AvailableApplications"),!1,null,"Name",1,10).Create()},t.RemoveApplicationTemplateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveApplicationTemplate"),"Remove Application Template","Remove",{applicationTemplateId:ko.observable(n.ApplicationTemplateId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{applicationTemplateId:n.applicationTemplateId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.applicationTemplatesTable.LoadData()}).MessageField("Are you sure you want to remove the application template "+n.Name+" from this group? The application template will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete application template.").Create()},t.CloneApplicationTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerActionParams("ApplicationTemplate","CloneApplicationTemplate"),"Clone Application Template","Clone",{sourceApplicationTemplateId:ko.observable(),groupId:t.viewModel.GroupId,name:ko.observable()}).SubmitData(function(n){return{sourceApplicationTemplateId:n.sourceApplicationTemplateId(),groupId:n.groupId(),name:n.name()}}).Done(function(n,t){views.ApplicationTemplate_Details.Load(t.ApplicationTemplateId)}).TextField("name","New Template Name").AjaxCompactFilterDropDownListField("sourceApplicationTemplateId","Application Template",function(n){return n.Name},function(n){return n.ApplicationTemplateId},route.forControllerAction("ApplicationTemplate","AvailableApplicationTemplates"),!1,null,"Name",3,1).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_AppModuleSources=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_AppModuleSources_Model,t.stateHandler=function(){return new Group_AppModuleSources_State(t)},t.titleHandler=function(){return page.SetTitle("Module Sources",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"AppModuleSources")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.appModuleSourcesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing module source",t.AddExistingAppModuleSourcesForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new module source",t.CreateAppModuleSourceForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Create))])]);t.appModuleSourcesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"AppModuleSourcesTable"),"Type",!0,function(n){return views.AppModuleSource_Details.Load(n.AppModuleSourceId,t.viewModel.GroupId)},25);t.appModuleSourcesTable.AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("ApplicationGuid","Guid",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove App Module Source","delete",function(n){return page.OpenFormDialog(t.RemoveAppModuleSourceForm(n))},page.HasCapabilityComputed(Capability.AppModuleSource_Remove))).AddTitle("App Module Sources");page.Add(t.appModuleSourcesCommands);page.Add(t.appModuleSourcesTable);GroupUpdate(t,[t.appModuleSourcesTable])},t.AddExistingAppModuleSourcesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingAppModuleSources"),"Add Existing App Module Source","Add",{appModuleSourceIds:ko.observableArray()}).SubmitData(function(n){return{appModuleSourceIds:n.appModuleSourceIds()}}).Done(function(){page.Update()}).MessageField("Select one or more existing App Module Source to add to this group.").AjaxMultiSelectListField("appModuleSourceIds","App Module Sources (ctrl-click or drag for multi select)",function(n){return n.Type+" ("+n.ApplicationGuid+")"},function(n){return n.AppModuleSourceId},route.forControllerItemAction("Group",t.viewModel.GroupId,"AppModuleSourcesWhichCanBeAdded"),15,!0).Create()},t.CreateAppModuleSourceForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateAppModuleSource"),"Create App Module Source","Create",{type:ko.observable(""),file:ko.observable(""),notes:ko.observable("")}).SubmitData(function(n){return{type:n.type(),file:n.file(),notes:n.notes()}}).Done(function(n,i){views.AppModuleSource_Details.Load(i.AppModuleSourceId,t.viewModel.GroupId)}).MessageField("Select an n8logic file to create a new app module source or add a new version.").SingleFileUploadField("file","Source").MultilineTextField("notes","Version Notes (optional)",null,!0).Create()},t.RemoveAppModuleSourceForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveAppModuleSource"),"Remove App Module Source","Remove",{appModuleSourceId:ko.observable(n.AppModuleSourceId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{appModuleSourceId:n.appModuleSourceId(),deleteFlag:n.deleteFlag()}}).Done(function(){page.Update()}).MessageField('Are you sure you want to remove the app module source "'+n.Type+'" from this group? The app module source will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete App Module Source.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Apps=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Apps_Model,t.stateHandler=function(){return new Group_Apps_State(t)},t.titleHandler=function(){return page.SetTitle("Applications",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Apps")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.appCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing Application to group",t.AddExistingAppsForm,null,page.HasCapabilityComputed(Capability.App_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new Application in group",t.CreateAppForm,null,page.HasCapabilityComputed(Capability.App_Create))])]);t.appsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"AppsTable"),"Name",!0,function(n){return views.Application_Details.Load(n.AppId,t.viewModel.GroupId)},25);t.appsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("ApplicationGuid","Guid",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Application","delete",function(n){return page.OpenFormDialog(t.RemoveAppForm(n))},page.HasCapabilityComputed(Capability.App_Remove))).AddTitle("Applications");page.Add(t.appCommands);page.Add(t.appsTable);GroupUpdate(t,[t.appsTable])},t.AddExistingAppsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingApps"),"Add Existing Applications","Add",{appIds:ko.observableArray()}).SubmitData(function(n){return{appIds:n.appIds()}}).Done(function(){page.Update()}).MessageField("Select one or more existing Applications to add to this group.").AjaxMultiSelectListField("appIds","Applications (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.AppId},route.forControllerItemAction("Group",t.viewModel.GroupId,"AppsWhichCanBeAdded"),15,!0).Create()},t.CreateAppForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateApp"),"Create Application","Create",{name:ko.observable(""),deviceTypeId:ko.observable(0),description:ko.observable("")}).SubmitData(function(n){return{name:n.name(),deviceTypeId:n.deviceTypeId(),description:n.description()}}).Done(function(n,i){views.Application_Details.Load(i.AppId,t.viewModel.GroupId)}).MessageField("Specify a unique name for the new application.").TextField("name","Name",255).AjaxFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerAction("Application","AvailableDeviceTypes"),!0,null,"DeviceType").MultilineTextField("description","Description").Create()},t.RemoveAppForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveApp"),"Remove Application","Remove",{appId:ko.observable(n.AppId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{appId:n.appId(),deleteFlag:n.deleteFlag()}}).Done(function(){page.Update()}).MessageField('Are you sure you want to remove the Application "'+n.Name+'" from this group? The Application will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete Application.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Attachments=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Attachments_Model,t.stateHandler=function(){return new Group_Attachments_State(t)},t.titleHandler=function(){return page.SetTitle("Attachments",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Attachments")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.attachmentsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"AttachmentsTable"),"Name",!0,function(n){return window.location.href=route.forControllerItemAction("Attachment",n.AttachmentId,"Download")},25);t.attachmentsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("FileSizeWithUnits","Size",!1,!0)).AddColumn(new FilterTableColumnViewModel("MimeType","Type",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUserName","Created By",!0,!0)).AddTitle("Attachments");page.Add(t.attachmentsTable);GroupUpdate(t,[t.attachmentsTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_BillingEntities=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_BillingEntities_Model,t.stateHandler=function(){return new Group_BillingEntities_State(t)},t.titleHandler=function(){return page.SetTitle("Billing Entities",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"BillingEntities")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing billing entities",t.AddExistingBillingEntityForm,null,page.HasCapabilityComputed(Capability.BillingEntity_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new billing entity",t.CreateBillingEntityForm,null,page.HasCapabilityComputed(Capability.BillingEntity_Create))])]);t.billingEntityTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"BillingEntitiesTable"),"CompanyName",!0,function(n){return views.BillingEntity_Details.Load(n.BillingEntityId,t.viewModel.GroupId)},25);t.billingEntityTable.AddColumn(new FilterTableColumnViewModel("CompanyName","Company Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("EscalationList","Escalation List",!0,!0,function(n){return n.EscalationList!=null?n.EscalationList:""})).AddColumn(new FilterTableColumnViewModel("EscalationDelay","Escalation Delay (Mins)",!0,!0,function(n){return n.EscalationDelay!=null?n.EscalationDelay:""})).AddColumn(new CommandTableColumnViewModel("Remove Billing Entity","delete",function(n){return page.OpenFormDialog(t.RemoveBillingEntityForm(n))},page.HasCapabilityComputed(Capability.BillingEntity_Remove))).AddTitle("Billing Entities");page.Add(t.pageCommands);page.Add(t.billingEntityTable);GroupUpdate(t,[t.billingEntityTable])},t.AddExistingBillingEntityForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingBillingEntities"),"Add Billing Entities to Group","Add",{billingEntityIds:ko.observableArray()}).SubmitData(function(n){return{billingEntityIds:n.billingEntityIds()}}).Done(function(){t.billingEntityTable.LoadData()}).MessageField("Select one or more existing billing entities to add to this group.").AjaxMultiSelectListField("billingEntityIds","Billing Entities (ctrl-click or drag for multi select)",function(n){return n.CompanyName},function(n){return n.BillingEntityId},route.forControllerItemAction("Group",t.viewModel.GroupId,"BillingEntitiesWhichCanBeAdded"),15,!0).Create()},t.CreateBillingEntityForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateBillingEntity"),"Create Billing Entity","Create",{companyName:ko.observable(""),address:ko.observable(""),city:ko.observable(""),stateProvince:ko.observable(""),code:ko.observable(""),country:ko.observable(""),escalationListId:ko.observable(null),timeZoneName:ko.observable(page.currentUser.TimeZoneName())}).SubmitData(function(n){return{companyName:n.companyName(),address:n.address(),city:n.city(),stateProvince:n.stateProvince(),code:n.code(),country:n.country(),escalationListId:n.escalationListId(),timeZoneName:n.timeZoneName()}}).Done(function(){t.billingEntityTable.LoadData()}).TextField("companyName","Company Name",null,!1,!0,!0).MessageField("Address Details").TextField("address","Address",null,!1).TextField("city","City",null,!1).TextField("stateProvince","State/Province",null,!1).TextField("code","Code",null,!1).DropDownListField("country","Country",function(n){return n},function(n){return n},["New Zealand"]).AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{TimeZoneName:page.currentUser.TimeZoneName(),BaseUtcOffset:page.currentUser.UtcOffsetHours()},"TimeZoneName",5,1).MessageField("").AjaxDropDownListField("EscalationListId","Escalation List",function(n){return n.Name},function(n){return n.EscalationListId},route.forControllerItemAction("Group",t.viewModel.GroupId,"EscalationListsWhichCanBeAdded"),!0).Create()},t.RemoveBillingEntityForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveBillingEntity"),"Remove Billing entity from Group","Remove",{billingEntityId:ko.observable(n.BillingEntityId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{billingEntityId:n.billingEntityId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.billingEntityTable.LoadData()}).MessageField("Are you sure you want to remove the billing entity "+n.CompanyName+" from this group?").OptionalCheckBoxField("deleteFlag","Delete billing entity").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Brandings=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Brandings_Model,t.stateHandler=function(){return new Group_Brandings_State(t)},t.titleHandler=function(){return page.SetTitle("Brandings",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Brandings")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.brandingsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"BrandingsTable"),"Name",!0,function(n){return views.Branding_Details.Load(n.BrandingId)},25);t.brandingsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DisplayName","Display Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("Website","Website",!1,!0)).AddColumn(new FilterTableColumnViewModel("Dashboard","Dashboard",!0,!0)).AddTitle("Brandings");page.Add(t.brandingsTable);GroupUpdate(t,[t.brandingsTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_DataStreams=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_DataStreams_Model,t.stateHandler=function(){return new Group_DataStreams_State(t)},t.titleHandler=function(){return page.SetTitle("DataStreams",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"DataStreams")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.dataStreamsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing data streams to group",t.AddExistingDataStreamsForm,null,page.HasCapabilityComputed(Capability.DataStream_Add))])]);t.dataStreamsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId(),"DataStreamsTable"),"Network",!0,function(n){return views.DataStream_Details.Load(n.DataStreamId)},25);t.dataStreamsTable.AddColumn(new FilterTableColumnViewModel("Network","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Module","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("Trend","Trend",!1,!0)).AddColumn(new FilterTableColumnViewModel("DataStreamId","ID",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Data Stream","delete",function(n){return page.OpenFormDialog(t.RemoveDataStreamForm(n))},page.HasCapabilityComputed(Capability.DataStream_Remove))).AddTitle("Data Streams");page.Add(t.dataStreamsCommands);page.Add(t.dataStreamsTable);GroupUpdate(t,[t.dataStreamsTable])},t.AddExistingDataStreamsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingDataStreams"),"Add Existing Data Streams","Add",{dataStreamIds:ko.observableArray([])}).SubmitData(function(n){return{dataStreamIds:n.dataStreamIds()}}).Done(function(){t.dataStreamsTable.LoadData()}).MessageField("Select one or more existing data streams to add to this group.").AjaxMultiSelectListField("dataStreamIds","Data Streams (ctrl-click or drag for multi select)",function(n){return n.Network+"/"+n.Module+"."+n.Trend+" (ID: "+n.DataStreamId+")"},function(n){return n.DataStreamId},route.forControllerItemAction("Group",t.viewModel.GroupId,"DataStreamsWhichCanBeAdded"),15,!0).Create()},t.RemoveDataStreamForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveDataStream"),"Remove Data Stream","Remove",{dataStreamId:ko.observable(n.DataStreamId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{dataStreamId:n.dataStreamId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.dataStreamsTable.LoadData()}).MessageField("Are you sure you want to remove the data stream "+n.DataStreamId+" ("+n.Trend+") from this group? The data stream will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete data stream.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Devices=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Devices_Model,t.stateHandler=function(){return new Group_Devices_State(t)},t.titleHandler=function(){return page.SetTitle("Devices",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Devices")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.childCount=0;t.childDevices=ko.observableArray([]);t.devicesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Select All","Select all filtered items",null,function(){return t.SelectAll(t.devicesTable.filteredData())}),new Command_Block("Invert","Invert selected items",null,function(){return t.Invert(t.devicesTable.filteredData())}),new Command_Block("Clear","Clear selection",null,function(){return t.selectedDevices.UnselectAll()}),new Command_Block("Move","Move selected items",t.MoveDevicesForm,null)]),tiles.createTile().addBlockSet([new Command_Block("Add","Add existing devices to group",t.AddExistingDevicesForm,null,page.HasCapabilityComputed(Capability.Device_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new device",t.CreateDeviceForm,null,page.HasCapabilityComputed(Capability.Device_Create))]),tiles.createTile().addBlockSet([new Command_Block("Summary","View summary of devices in group",null,function(){return views.Group_DeviceSummary.Load(t.viewModel.GroupId())},page.HasCapabilityComputed(Capability.Device_Create))])]);t.devicesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"DevicesTable"),"DeviceExtAddress",!0,function(n){return views.Device_Details.Load(n.DeviceExtAddress)},25);t.devicesTable.AddColumn(t.selectedDevices=new ToggleTableColumnViewModel("Select Devices","DeviceExtAddress","ok","close")).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Extended Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Model","Model",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("FirmwareVersion","Firmware",!0,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node Name",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Device","delete",function(n){return page.OpenFormDialog(t.RemoveDeviceForm(n))},page.HasCapabilityComputed(Capability.Device_Remove))).AddTitle("Devices");page.Add(t.devicesCommands);page.Add(t.devicesTable);GroupUpdate(t,[t.devicesTable])},t.AddExistingDevicesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingDevices"),"Add Existing Devices","Add",{deviceExtAddresses:ko.observableArray()}).SubmitData(function(n){return{deviceExtAddresses:n.deviceExtAddresses()}}).Done(function(){t.devicesTable.LoadData()}).MessageField("Select one or more existing devices to add to this group.").AjaxMultiSelectListField("deviceExtAddresses","Devices (ctrl-click or drag for multi select)",function(n){return n.DeviceExtAddress+": "+n.Type+" v"+n.Model},function(n){return n.DeviceExtAddress},route.forControllerItemAction("Group",t.viewModel.GroupId,"DevicesWhichCanBeAdded"),15,!0).Create()},t.CreateDeviceForm=function(){var n={deviceExtAddress:ko.observable(),deviceTypeId:ko.observable(),deviceModel:ko.observable(),firmwareVersion:ko.observable(),showObsolete:ko.observable(!1),childDeviceTypes:ko.observableArray([])},i=new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateDevice"),"Create Device","Create & Continue",n).Validate(function(n){if(n.deviceExtAddress().length!==16)return"Device Ext Address must be 16 characters long";var t=n.childDeviceTypes().filter(function(n){return n.Value.length!==16});return t>0?"One or more child device ext addresses is not 16 characters long":null}).SubmitData(function(n){return{deviceExtAddress:n.deviceExtAddress().toUpperCase(),deviceTypeId:n.deviceTypeId(),deviceModel:n.deviceModel(),firmwareVersion:n.firmwareVersion(),showObsolete:n.showObsolete(),childDeviceExtAddresses:n.childDeviceTypes().map(function(n){return{Key:n.DeviceTypeId,Value:n.Value.toUpperCase()}}),childDeviceCount:t.childCount}}).Done(function(n,i){if(i.Success===!1){page.SetMessage(i.Message);return}n.deviceExtAddress("");n.deviceTypeId.notifySubscribers();t.devicesTable.LoadData()}).CheckBoxField("showObsolete","Include Obsolete Device Types").AjaxFilterDropDownListField("deviceTypeId","Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},ko.computed(function(){return route.forControllerActionParams("DeviceType","AvailableDeviceTypes",{showObsolete:n.showObsolete()})}),!1,null,"DeviceType").AjaxFilterDropDownListField("deviceModel","Model",function(n){return n.Model},function(n){return n.Model},ko.computed(function(){return n.deviceTypeId()?route.forControllerItemAction("DeviceType",n.deviceTypeId,"GetModels"):null}),!1,null,"Model").NumberField("firmwareVersion","Firmware Version",0,1e9).MessageField("Extended addresses must be 16 uppercase hexadecimal characters.").TextField("deviceExtAddress","Device Ext Address",16,!1).CreateMulti(),r=-1;return i.fields().forEach(function(n,t){n.fieldName==="deviceTypeId"&&(r=t)}),ko.computed(function(){n.deviceTypeId();var u=function(){return t.ShowChildExtendedAddressFields(i,r,n)};typeof t.ShowChildExtendedAddressFields=="function"&&ko.ignoreDependencies(u)}).extend({throttle:300}),i},t.ShowChildExtendedAddressFields=function(n,i,r){var f=[],u;for(n.fields().forEach(function(n,t){n.templateName!=null&&n.templateName.indexOf("dialog-child-device-list-field-template")>-1&&f.push(t)}),u=f.length-1;u>-1;u--)n.fields.splice(f[u],1);i>-1&&n.fields()[i].options().forEach(function(i){i.DeviceTypeId===r.deviceTypeId()&&(r.childDeviceTypes([]),t.childCount=i.ChildDevices.length,i.ChildDevices.forEach(function(n){r.childDeviceTypes().push({DeviceTypeId:n.DeviceTypeId,DeviceType:n.DeviceType,Value:""})}),n.fields.push(new DialogChildDeviceListViewModel("Child Device Ext Addresses",r.childDeviceTypes())))})},t.RemoveDeviceForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveDevice"),"Remove Device","Remove",{deviceExtAddress:ko.observable(n.DeviceExtAddress),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{deviceExtAddress:n.deviceExtAddress(),deleteFlag:n.deleteFlag()}}).Done(function(){t.devicesTable.LoadData()}).MessageField("Are you sure you want to remove the device "+n.DeviceExtAddress+" from this group? The device will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete device.").Create()},t.MoveDevicesForm=function(){var n=[];return t.selectedDevices.selectedKeys().forEach(function(t){return n.push(t.DeviceExtAddress)}),new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"MoveDevices"),"Move Devices to Group","Move",{targetGroupId:ko.observable(0),confirm:ko.observable(!1)}).SubmitData(function(t){return{targetGroupId:t.targetGroupId(),deviceExtAddresses:n,confirm:t.confirm()}}).Validate(function(){return n.length>500?"You may only select 500 devices at a time to move to a new group.  Please reduce your selection.":n.length<1?"You must select the devices you wish to move.":null}).Done(function(){t.devicesTable.LoadData();t.selectedDevices.UnselectAll()}).MessageField("You have "+n.length+" devices selected to move.  Please select the target group for these devices").AjaxFilterDropDownListField("targetGroupId","Target Group",function(n){return n.Name+" ("+n.GroupId+")"},function(n){return n.GroupId},route.forControllerItemAction("Group",t.viewModel.GroupId,"AvailableTargetGroups"),!1,null,"Name").OptionalCheckBoxField("confirm","Devices will be added to target group but not removed from this group.").Create()},t.SelectAll=function(n){return n.forEach(function(n){t.selectedDevices.selectRow(n)})},t.Invert=function(n){return n.forEach(function(n){t.selectedDevices.action(n)})},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_DeviceSummary=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_DeviceSummary_Model,t.stateHandler=function(){return new Group_DeviceSummary_State(t)},t.titleHandler=function(){return page.SetTitle("Device Summary",t.viewModel.Name,views.Group_Devices.routeHandler(t.viewModel.GroupId),function(){return views.Group_Devices.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"DeviceSummary")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.deviceSummaryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"DeviceSummaryTable"),"Type",!0,null,25);t.deviceSummaryTable.AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Model","Model",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Quantity","Quantity",!1,!0)).AddTitle("Device Summary");page.Add(t.deviceSummaryTable);GroupUpdate(t,[t.deviceSummaryTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_DeviceTypes=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_DeviceTypes_Model,t.stateHandler=function(){return new Group_DeviceTypes_State(t)},t.titleHandler=function(){return page.SetTitle("Device Types",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"DeviceTypes")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add device type to group",t.AddExistingDeviceTypeForm,null,page.HasCapabilityComputed(Capability.DeviceType_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new device type",t.CreateDeviceTypeForm,null,page.HasCapabilityComputed(Capability.DeviceType_Create))])]);t.deviceTypesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"DeviceTypesTable"),"DeviceType",!0,function(n){return views.DeviceType_Details.Load(n.DeviceTypeId,t.viewModel.GroupId)},50);t.deviceTypesTable.AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("IsObsolete","Status",!1,!0,function(n){return n.IsObsolete?"Obsolete":n.ParentTypeId==null?"Active":"Child"})).AddColumn(new NumberFilterTableColumnViewModel("HardwareId","Hardware Id",!1,!0)).AddColumn(new FilterTableColumnViewModel("IsGateway","Gateway",!1,!0,function(n){return n.IsGateway?"Gateway":"-"})).AddColumn(new FilterTableColumnViewModel("IoModuleType","I/O Module",!0,!0)).AddColumn(new FilterTableColumnViewModel("MaxIoModules","Supported I/O",!0,!0,function(n){return n.MaxIoModules>0?n.MaxIoModules:"-"})).AddColumn(new FilterTableColumnViewModel("ConfigurableSerialPorts","Serial Ports",!0,!0,function(n){return n.ConfigurableSerialPorts>0?n.ConfigurableSerialPorts:"-"})).AddColumn(new FilterTableColumnViewModel("SupportsApplication","Application",!0,!0,function(n){return n.SupportsApplication?"Supported":"-"})).AddColumn(new FilterTableColumnViewModel("SimRequirements","SIM",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Device Type","edit",function(n){return page.OpenFormDialog(t.EditDeviceTypeForm(n))},page.HasCapabilityComputed(Capability.DeviceType_Edit))).AddColumn(new CommandTableColumnViewModel("Remove Device Type","delete",function(n){return page.OpenFormDialog(t.RemoveDeviceTypeForm(n))},page.HasCapabilityComputed(Capability.DeviceType_Remove),function(n){return n.ParentTypeId==null})).AddTitle("Device Types");page.Add(t.pageCommands);page.Add(t.deviceTypesTable);GroupUpdate(t,[t.deviceTypesTable])},t.AddExistingDeviceTypeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingDeviceTypes"),"Add Existing Device Types","Add",{deviceTypeIds:ko.observableArray()}).SubmitData(function(n){return{deviceTypeIds:n.deviceTypeIds()}}).Done(function(){t.deviceTypesTable.LoadData()}).MessageField("Select one or more existing device types to add to this group.").AjaxMultiSelectListField("deviceTypeIds","Device Types (ctrl-click or drag for multi select)",function(n){return n.DeviceType+" (ID: "+n.DeviceTypeId+")"},function(n){return n.DeviceTypeId},route.forControllerItemAction("Group",t.viewModel.GroupId,"DeviceTypesWhichCanBeAdded"),15,!0).Create()},t.CreateDeviceTypeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateDeviceType"),"Create Device Type","Create",{deviceType:ko.observable(""),imageUrl:ko.observable(""),description:ko.observable(""),parentTypeId:ko.observable(""),isIoModule:ko.observable(!1),ioTypeId:ko.observable(0),maxIoModules:ko.observable(0),hardwareId:ko.observable(0),configurableSerialPorts:ko.observable(0),model:ko.observable(1),supportsApplication:ko.observable(!1),supportsSim:ko.observable(!1),simRequired:ko.observable(!1)}).SubmitData(function(n){return{deviceType:n.deviceType(),imageUrl:n.imageUrl(),description:n.description(),parentTypeId:n.parentTypeId(),isIoModule:n.isIoModule(),ioTypeId:n.ioTypeId(),maxIoModules:n.maxIoModules(),hardwareId:n.hardwareId(),configurableSerialPorts:n.configurableSerialPorts(),model:n.model(),supportsApplication:n.supportsApplication(),supportsSim:n.supportsSim(),simRequired:n.simRequired()}}).Done(function(){t.deviceTypesTable.LoadData()}).TextField("deviceType","Device Type",50).MultilineTextField("description","Description").TextField("imageUrl","Image Url",null,!0).AjaxCompactFilterDropDownListField("parentTypeId","Parent Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerActionParams("DeviceType","AvailableParentDeviceTypes",{showObsolete:!0}),!0,null,"DeviceType",1,1).MessageField("I/O Modules").CheckBoxField("isIoModule","Is I/O Module").AjaxCompactFilterDropDownListField("ioTypeId","I/O Type",function(n){return n.IoTypeName},function(n){return n.IoTypeId},route.forControllerActionParams("DeviceType","AvailableIOTypes"),!1,{IoTypeName:"None",IoTypeId:0},"IoTypeId",1,1).IntNumberField("maxIoModules","Max I/O Modules",0,1024).IntNumberField("hardwareId","Hardware Id",0,65535).IntNumberField("configurableSerialPorts","Configurable Serial Ports",0,1024).IntNumberField("model","Model",0,65535).CheckBoxField("supportsApplication","Supports Application").CheckBoxField("supportsSim","Supports SIM").CheckBoxField("simRequired","SIM Required").Create()},t.EditDeviceTypeForm=function(n){var i={deviceTypeId:ko.observable(n.DeviceTypeId),deviceType:ko.observable(n.DeviceType),imageUrl:ko.observable(n.ImageUrl),description:ko.observable(n.Description),parentTypeId:ko.observable(n.ParentTypeId),isObsolete:ko.observable(n.IsObsolete),isIoModule:ko.observable(n.IsIoModule),ioTypeId:ko.observable(n.IoTypeId),maxIoModules:ko.observable(n.MaxIoModules),hardwareId:ko.observable(n.HardwareId),configurableSerialPorts:ko.observable(n.ConfigurableSerialPorts),supportsApplication:ko.observable(n.SupportsApplication),supportsSim:ko.observable(n.SupportsSim),simRequired:ko.observable(n.SimRequired)};return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",n.DeviceTypeId,"Update"),"Update Device Type","Update",i).SubmitData(function(n){return{deviceType:n.deviceType(),imageUrl:n.imageUrl(),description:n.description(),parentTypeId:n.parentTypeId(),isObsolete:n.isObsolete(),isIoModule:n.isIoModule(),ioTypeId:n.ioTypeId(),maxIoModules:n.maxIoModules(),hardwareId:n.hardwareId(),configurableSerialPorts:n.configurableSerialPorts(),supportsApplication:n.supportsApplication(),supportsSim:n.supportsSim(),simRequired:n.simRequired()}}).Done(function(){t.deviceTypesTable.LoadData()}).TextField("deviceType","Device Type",50).CheckBoxField("isObsolete","Obsolete").MultilineTextField("description","Description").TextField("imageUrl","Image Url",null,!0).AjaxCompactFilterDropDownListField("parentTypeId","Parent Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerActionParams("DeviceType","AvailableDeviceTypes",{showObsolete:!0}),!0,{DeviceTypeId:i.parentTypeId},"DeviceType",1,1).MessageField("I/O Modules").CheckBoxField("isIoModule","I/O Module").AjaxCompactFilterDropDownListField("ioTypeId","I/O Type",function(n){return n.IoTypeName},function(n){return n.IoTypeId},route.forControllerActionParams("DeviceType","AvailableIOTypes"),!1,{IoTypeId:i.ioTypeId()},"IoTypeId",1,1).NumberField("maxIoModules","Max I/O Modules",0,16,!1).NumberField("hardwareId","Hardware Id",1).NumberField("configurableSerialPorts","Configurable Serial Ports",0,16,!1).CheckBoxField("supportsApplication","Supports Application").CheckBoxField("supportsSim","Supports SIM").CheckBoxField("simRequired","SIM Required").Create()},t.RemoveDeviceTypeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveDeviceType",{deviceTypeId:n.DeviceTypeId}),"Remove Device Type from Group","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{deleteFlag:n.deleteFlag()}}).Done(function(){t.deviceTypesTable.LoadData()}).MessageField("Are you sure you want to remove this device type from the group? The device type will still exist, but will no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Delete device type").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_EmailProviders=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_EmailProviders_Model,t.stateHandler=function(){return new Group_EmailProviders_State(t)},t.titleHandler=function(){return page.SetTitle("Email Providers",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"EmailProviders")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.emailProvidersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"EmailProvidersTable"),"Name",!1,null,25);t.emailProvidersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!1)).AddTitle("Email Providers");page.Add(t.emailProvidersTable);BaseUpdate(t,[t.emailProvidersTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_EscalationLists=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_EscalationLists_Model,t.stateHandler=function(){return new Group_EscalationLists_State(t)},t.titleHandler=function(){return page.SetTitle("Escalation Lists",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"EscalationLists")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.escalationListsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing escalation lists",t.AddExistingEscalationListsForm,null,page.HasCapabilityComputed(Capability.EscalationList_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new escalation list",t.CreateEscalationListForm,null,page.HasCapabilityComputed(Capability.EscalationList_Create))])]);t.escalationListsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"EscalationListsTable"),"Name",!0,function(n){return views.EscalationList_Details.Load(n.EscalationListId)},25);t.escalationListsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("EscalationDelayMinutes","Delay (min)",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("UserCount","Users",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Escalation List","delete",function(n){return page.OpenFormDialog(t.RemoveEscalationListForm(n))},page.HasCapabilityComputed(Capability.EscalationList_Remove))).AddTitle("Escalation Lists");page.Add(t.escalationListsCommands);page.Add(t.escalationListsTable);GroupUpdate(t,[t.escalationListsTable])},t.AddExistingEscalationListsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingEscalationLists"),"Add Existing Escalation Lists","Add",{escalationListIds:ko.observableArray()}).SubmitData(function(n){return{escalationListIds:n.escalationListIds()}}).Done(function(){t.escalationListsTable.LoadData()}).MessageField("Select one or more existing escalation lists to add to this group.").AjaxMultiSelectListField("escalationListIds","Escalation Lists (ctrl-click or drag for multi select)",function(n){return n.Name+" (ID: "+n.EscalationListId+")"},function(n){return n.EscalationListId},route.forControllerItemAction("Group",t.viewModel.GroupId,"EscalationListsWhichCanBeAdded"),15,!0).Create()},t.CreateEscalationListForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateEscalationList"),"Create Escalation List","Create",{name:ko.observable(),escalationDelayMinutes:ko.observable(15)}).SubmitData(function(n){return{name:n.name(),escalationDelayMinutes:n.escalationDelayMinutes()}}).Done(function(n,t){views.EscalationList_Details.Load(t.EscalationListId)}).TextField("name","Name").IntNumberField("escalationDelayMinutes","Escalation Delay (minutes)",1,10080).Create()},t.RemoveEscalationListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveEscalationList"),"Remove Escalation List","Remove",{escalationListId:ko.observable(n.EscalationListId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{escalationListId:n.escalationListId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.escalationListsTable.LoadData()}).MessageField("Are you sure you want to remove the escalation list "+n.Name+" from this group? The escalation list will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete escalation list.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ExportTargets=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ExportTargets_Model,t.stateHandler=function(){return new Group_ExportTargets_State(t)},t.titleHandler=function(){return page.SetTitle("Export Targets",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"ExportTargets")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.exportTargetsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an export target to group",t.AddExistingExportTargetsForm,null,page.HasCapabilityComputed(Capability.ExportTarget_Add))])]);t.exportTargetsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ExportTargetsTable"),"Name",!0,null,25);t.exportTargetsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Protocol","Protocol",!1,!0)).AddColumn(new FilterTableColumnViewModel("TimeZoneName","Time Zone",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Export Target","delete",function(n){return page.OpenFormDialog(t.RemoveExportTargetForm(n))},page.HasCapabilityComputed(Capability.ExportTarget_Remove))).AddTitle("Export Targets");page.Add(t.exportTargetsCommands);page.Add(t.exportTargetsTable);GroupUpdate(t,[t.exportTargetsTable])},t.AddExistingExportTargetsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingExportTargets"),"Add Existing Export Targets","Add",{exportTargetIds:ko.observableArray()}).SubmitData(function(n){return{exportTargetIds:n.exportTargetIds()}}).Done(function(){t.exportTargetsTable.LoadData()}).MessageField("Select one or more existing export targets to add to this group.").AjaxMultiSelectListField("exportTargetIds","Export Targets (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.ExportTargetId},route.forControllerItemAction("Group",t.viewModel.GroupId,"ExportTargetsWhichCanBeAdded"),15,!0).Create()},t.RemoveExportTargetForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveExportTarget"),"Remove Export Target","Remove",{exportTargetId:ko.observable(n.ExportTargetId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{exportTargetId:n.exportTargetId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.exportTargetsTable.LoadData()}).MessageField("Are you sure you want to remove the export target "+n.Name+" from this group? The export target will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete export target.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_GisDatasets=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_GisDatasets_Model,t.stateHandler=function(){return new Group_GisDatasets_State(t)},t.titleHandler=function(){return page.SetTitle("GIS Datasets",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"GisDatasets")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.gisDatasetsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing GIS dataset to group",t.AddGisDatasetForm,null,page.HasCapabilityComputed(Capability.GisDataset_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create new GIS dataset",t.CreateGisDatasetForm,null,page.HasCapabilityComputed(Capability.GisDataset_Create))])]);t.gisDatasetsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"GisDatasetsTable"),"Name",!0,function(n){return views.GisDataset_Details.Load(n.GisDatasetId)},25);t.gisDatasetsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Creator",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("PolygonCount","Polygons",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveGisDatasetForm(n))},page.HasCapabilityComputed(Capability.GisDataset_Remove))).AddTitle("GIS Datasets");page.Add(t.gisDatasetsCommands);page.Add(t.gisDatasetsTable);GroupUpdate(t,[t.gisDatasetsTable])},t.CreateGisDatasetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateGisDataset"),"Create GIS Dataset","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){views.GisDataset_Details.Load(t.GisDatasetId)}).TextField("name","Name").Create()},t.AddGisDatasetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingGisDatasets"),"Add Existing GIS Datasets","Add",{gisDatasetIds:ko.observableArray([])}).SubmitData(function(n){return{gisDatasetIds:n.gisDatasetIds()}}).Done(function(){t.gisDatasetsTable.LoadData()}).AjaxMultiSelectListField("gisDatasetIds","GIS Datasets (ctrl+ click or drag for multi select)",function(n){return n.Name},function(n){return n.GisDatasetId},route.forControllerItemAction("Group",t.viewModel.GroupId,"GisDatasetsWhichCanBeAdded"),15,!0).Create()},t.RemoveGisDatasetForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveGisDataset",{gisDatasetId:n.GisDatasetId}),"Remove GIS Dataset","Remove",{deleteFlag:ko.observable()}).SubmitData(function(n){return{deleteFlag:n.deleteFlag()}}).Done(function(){t.gisDatasetsTable.LoadData()}).MessageField("Remove GIS Dataset from this group").OptionalCheckBoxField("deleteFlag","Delete GIS Dataset").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Icons=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Icons_Model,t.stateHandler=function(){return new Group_Icons_State(t)},t.titleHandler=function(){return page.SetTitle("Icons",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Icons")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing icon to group",function(){return t.AddExistingIconToGroup(t.viewModel.GroupId(),function(){return t.iconsTable.LoadData()})},null,page.HasCapabilityComputed(Capability.Icon_Add))]),tiles.createTile().addBlockSet([new Command_Block("Upload","Upload new icon",function(){return t.UploadIconForm(t.viewModel.GroupId(),function(){return t.iconsTable.LoadData()})},null,page.HasCapabilityComputed(Capability.Icon_Create))])]);t.iconsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"IconsTable"),"IconName",!0,null,25);t.iconsTable.AddColumn(new ImageTableColumnViewModel("IconName","",!1,!1,function(n){return route.forControllerAction("Icon",n.IconName)})).AddColumn(new FilterTableColumnViewModel("IconName","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Creator",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove icon","delete",function(n){return page.OpenFormDialog(t.RemoveIconForm(t.viewModel.GroupId(),n.IconName,function(){return t.iconsTable.LoadData()}))})).AddTitle("Icons");page.Add(t.pageCommands);page.Add(t.iconsTable);GroupUpdate(t,[t.iconsTable])},t.AddExistingIconToGroup=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("Group",n,"AddExistingIcons"),"Add Existing Icons","Add",{iconNames:ko.observableArray([])}).SubmitData(function(n){return{iconNames:n.iconNames()}}).Done(function(){typeof t=="function"&&t()}).AjaxMultiSelectListField("iconNames","Icons (ctrl+ click or drag for multi select)",function(n){return n.IconName},function(n){return n.IconName},route.forControllerItemAction("Group",n,"IconsWhichCanBeAdded"),15,!0).Create()},t.RemoveIconForm=function(n,t,i){return new DialogViewModelBuilder(route.forControllerItemAction("Group",n,"RemoveIcon",{iconName:t}),"Remove Icon","Remove",{}).SubmitData(function(){}).Done(function(){typeof i=="function"&&i()}).MessageField("Remove Icon from this group").Create()},t.UploadIconForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("Group",n,"UploadIcon"),"Upload Icon","Upload",{file:ko.observable(""),iconName:ko.observable("")}).SubmitData(function(n){return{file:n.file(),iconName:n.iconName()}}).Done(function(){typeof t=="function"&&t()}).SingleFileUploadField("file","File").TextField("iconName","Icon Name",50,!1).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_LegalTerms=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_LegalTerms_Model,t.stateHandler=function(){return new Group_LegalTerms_State(t)},t.titleHandler=function(){return page.SetTitle("Legal Terms",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"LegalTerms")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.legalTermsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing legal terms to group",t.AddExistingLegalTermsForm,null,page.HasCapabilityComputed(Capability.LegalTerms_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create new legal terms",t.CreateLegalTermsForm,null,page.HasCapabilityComputed(Capability.LegalTerms_Create))])]);t.legalTermsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"LegalTermsTable"),"CreatedUtc",!1,function(n){return views.LegalTerms_Details.Load(n.LegalTermsId)},25);t.legalTermsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Creator",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveLegalTermsForm(n))},page.HasCapabilityComputed(Capability.LegalTerms_Remove))).AddTitle("Legal Terms");page.Add(t.legalTermsCommands);page.Add(t.legalTermsTable);GroupUpdate(t,[t.legalTermsTable])},t.CreateLegalTermsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateLegalTerms"),"Create Legal Terms","Create",{name:ko.observable(),legalTermsMarkdown:ko.observable()}).SubmitData(function(n){return{name:n.name(),legalTermsMarkdown:n.legalTermsMarkdown()}}).Done(function(n,t){views.LegalTerms_Details.Load(t.LegalTermsId)}).TextField("name","Name").MultilineTextField("legalTermsMarkdown","Legal Terms Markdown").Create()},t.AddExistingLegalTermsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingLegalTerms"),"Add Existing Legal Terms","Add",{legalTermsIds:ko.observableArray([])}).SubmitData(function(n){return{legalTermsIds:n.legalTermsIds()}}).Done(function(){t.legalTermsTable.LoadData()}).AjaxMultiSelectListField("legalTermsIds","Legal Terms (ctrl+ click or drag for multi select)",function(n){return n.Name},function(n){return n.LegalTermsId},route.forControllerItemAction("Group",t.viewModel.GroupId,"LegalTermsWhichCanBeAdded"),15,!0).Create()},t.RemoveLegalTermsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveLegalTerms",{legalTermsId:n.LegalTermsId}),"Remove Legal Terms","Remove",{deleteFlag:ko.observable()}).SubmitData(function(n){return{deleteFlag:n.deleteFlag()}}).Done(function(){t.legalTermsTable.LoadData()}).MessageField("Remove Legal Terms from this group").OptionalCheckBoxField("deleteFlag","Delete Legal Terms").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_MessageAccounts=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_MessageAccounts_Model,t.stateHandler=function(){return new Group_MessageAccounts_State(t)},t.titleHandler=function(){return page.SetTitle("Message Accounts",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"MessageAccounts")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.messageAccountsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing accounts to group",t.AddExistingMessageAccountsForm,null,page.HasCapabilityComputed(Capability.MessageAccount_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new account",t.CreateMessageAccountForm,null,page.HasCapabilityComputed(Capability.MessageAccount_Create))])]);t.messageAccountsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"MessageAccountsTable"),"PeriodEnd",!0,function(n){return views.MessageAccount_Details.Load(n.MessageAccountId,t.viewModel.GroupId)},25);t.messageAccountsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!0,!0)).AddColumn(new FilterTableColumnViewModel("MessagePlanName","Message Plan",!0,!0)).AddColumn(new DateOnlyFilterTableColumnViewModel("AccountStart","Initial Period",!0,!0)).AddColumn(new DateOnlyFilterTableColumnViewModel("PeriodStart","Current Period",!1,!0)).AddColumn(new DateOnlyFilterTableColumnViewModel("PeriodEnd","Period Ends",!0,!0)).AddColumn(new FilterTableColumnViewModel("PeriodMonths","Months",!1,!0)).AddColumn(new FilterTableColumnViewModel("IsSmsExceeded","SMS",!1,!0,function(n){return n.IsSmsExceeded?"Exceeded":"Ok"})).AddColumn(new FilterTableColumnViewModel("IsEmailExceeded","Email",!1,!0,function(n){return n.IsEmailExceeded?"Exceeded":"Ok"})).AddColumn(new CommandTableColumnViewModel("Remove Message Account","delete",function(n){return page.OpenFormDialog(t.RemoveMessageAccountForm(n))},page.HasCapabilityComputed(Capability.MessageAccount_Remove))).AddTitle("Message Accounts");page.Add(t.messageAccountsCommands);page.Add(t.messageAccountsTable);GroupUpdate(t,[t.messageAccountsTable])},t.AddExistingMessageAccountsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingMessageAccounts"),"Add Existing Message Accounts","Add",{messageAccountIds:ko.observableArray()}).SubmitData(function(n){return{messageAccountIds:n.messageAccountIds()}}).Done(function(){page.Update()}).MessageField("Select one or more existing message accounts to add to this group.").AjaxMultiSelectListField("messageAccountIds","Message Accounts (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.MessageAccountId},route.forControllerItemAction("Group",t.viewModel.GroupId,"MessageAccountsWhichCanBeAdded"),15,!0).Create()},t.CreateMessageAccountForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateMessageAccount"),"Create Message Account","Create",{name:ko.observable(""),messagePlanId:ko.observable(0),billingEntityId:ko.observable(0)}).SubmitData(function(n){return{name:n.name(),messagePlanId:n.messagePlanId(),billingEntityId:n.billingEntityId()}}).Done(function(n,i){views.MessageAccount_Details.Load(i.MessageAccountId,t.viewModel.GroupId)}).TextField("name","Name",50,!1).AjaxFilterDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},route.forControllerAction("BillingEntity","AvailableBillingEntities"),!1,null,"CompanyName").AjaxFilterDropDownListField("messagePlanId","Message Plan",function(n){return n.Name},function(n){return n.MessagePlanId},route.forControllerAction("MessagePlan","AvailableMessagePlans"),!1,null,"Name").Create()},t.RemoveMessageAccountForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveMessageAccount"),"Remove Message Account","Remove",{messageAccountId:ko.observable(n.MessageAccountId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{messageAccountId:n.messageAccountId(),deleteFlag:n.deleteFlag()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the message account "+n.Name+" from this group? The message account will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete message account.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_MessagePlans=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_MessagePlans_Model,t.stateHandler=function(){return new Group_MessagePlans_State(t)},t.titleHandler=function(){return page.SetTitle("Message Plans",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"MessagePlans")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.messagePlansCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing message plans to group",t.AddExistingMessagePlansForm,null,page.HasCapabilityComputed(Capability.MessagePlan_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new message plan",t.CreateMessagePlanForm,null,page.HasCapabilityComputed(Capability.MessagePlan_Create))])]);t.messagePlansTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"MessagePlansTable"),"Name",!0,function(n){return views.MessagePlan_Details.Load(n.MessagePlanId,t.viewModel.GroupId)},25);t.messagePlansTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("PeriodMonths","Months",!1,!0)).AddColumn(new FilterTableColumnViewModel("SMS","SMS",!1,!0,function(n){return"Quota "+n.PeriodSmsQuota+" - "+(n.EnforceSmsQuota?"Enforced":"Not Enforced")+(n.NotifyOnSmsExceeded?" with Notification":"")})).AddColumn(new FilterTableColumnViewModel("Email","Email",!1,!0,function(n){return"Quota "+n.PeriodEmailQuota+" - "+(n.EnforceEmailQuota?"Enforced":"Not Enforced")+(n.NotifyOnEmailExceeded?" with Notification":"")})).AddColumn(new NumberFilterTableColumnViewModel("AccountCount","Accounts",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUserName","Creator",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUtc","Created",!0,!0,function(n){return FormatDateTime(moment(n.CreatedUtc))})).AddColumn(new CommandTableColumnViewModel("Remove Message Plan","delete",function(n){return page.OpenFormDialog(t.RemoveMessagePlanForm(n))},page.HasCapabilityComputed(Capability.MessagePlan_Remove))).AddTitle("Message Plans");page.Add(t.messagePlansCommands);page.Add(t.messagePlansTable);GroupUpdate(t,[t.messagePlansTable])},t.AddExistingMessagePlansForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingMessagePlans"),"Add Existing Message Plans","Add",{messagePlanIds:ko.observableArray()}).SubmitData(function(n){return{messagePlanIds:n.messagePlanIds()}}).Done(function(){page.Update()}).MessageField("Select one or more existing message plans to add to this group.").AjaxMultiSelectListField("messagePlanIds","Message Plans (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.MessagePlanId},route.forControllerItemAction("Group",t.viewModel.GroupId,"MessagePlansWhichCanBeAdded"),15,!0).Create()},t.CreateMessagePlanForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateMessagePlan"),"Create Message Plan","Create",{name:ko.observable(""),smsProviderId:ko.observable(0),emailProviderId:ko.observable(0),periodMonths:ko.observable(1),periodSmsQuota:ko.observable(0),enforceSmsQuota:ko.observable(!0),notifyOnSmsExceeded:ko.observable(!0),periodEmailQuota:ko.observable(0),enforceEmailQuota:ko.observable(!0),notifyOnEmailExceeded:ko.observable(!0)}).SubmitData(function(n){return{name:n.name(),smsProviderId:n.smsProviderId(),emailProviderId:n.emailProviderId(),periodMonths:n.periodMonths(),periodSmsQuota:n.periodSmsQuota(),enforceSmsQuota:n.enforceSmsQuota(),notifyOnSmsExceeded:n.notifyOnSmsExceeded(),periodEmailQuota:n.periodEmailQuota(),enforceEmailQuota:n.enforceEmailQuota(),notifyOnEmailExceeded:n.notifyOnEmailExceeded()}}).Done(function(n,i){views.MessagePlan_Details.Load(i.MessagePlanId,t.viewModel.GroupId)}).TextField("name","Name",50,!1).AjaxCompactFilterDropDownListField("smsProviderId","SMS Provider",function(n){return n.Name},function(n){return n.SmsProviderId},route.forControllerAction("MessagePlan","AvailableSmsProviders"),!1,null,"Name").AjaxCompactFilterDropDownListField("emailProviderId","Email Provider",function(n){return n.Name},function(n){return n.EmailProviderId},route.forControllerAction("MessagePlan","AvailableEmailProviders"),!1,null,"Name").IntNumberField("periodMonths","Months Per Period",1,24).IntNumberField("periodSmsQuota","SMS Quota",0).DropDownListField("enforceSmsQuota","Enforce SMS Quota",function(n){return n.Name},function(n){return n.Value},[{Name:"Enforced",Value:"true"},{Name:"Not Enforced",Value:"false"}]).DropDownListField("notifyOnSmsExceeded","Notify On SMS Exceeded",function(n){return n.Name},function(n){return n.Value},[{Name:"Send Notification",Value:"true"},{Name:"No Notification",Value:"false"}]).IntNumberField("periodEmailQuota","Email Quota",0).DropDownListField("enforceEmailQuota","Enforce Email Quota",function(n){return n.Name},function(n){return n.Value},[{Name:"Enforced",Value:"true"},{Name:"Not Enforced",Value:"false"}]).DropDownListField("notifyOnEmailExceeded","Notify On Email Exceeded",function(n){return n.Name},function(n){return n.Value},[{Name:"Send Notification",Value:"true"},{Name:"No Notification",Value:"false"}]).Create()},t.RemoveMessagePlanForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveMessagePlan"),"Remove Message Plan","Remove",{messagePlanId:ko.observable(n.MessagePlanId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{messagePlanId:n.messagePlanId(),deleteFlag:n.deleteFlag()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the message plan "+n.Name+" from this group? The message plan will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete message plan.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Modules=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Modules_Model,t.stateHandler=function(){return new Group_Modules_State(t)},t.titleHandler=function(){return page.SetTitle("Modules",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Modules")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.modulesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing modules to group",t.AddExistingModulesForm,null,page.HasCapabilityComputed(Capability.Module_Add))])]);t.modulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ModulesTable"),"NetworkShortName",!0,function(n){return views.Module_Details.Load(n.ModuleId)},25);t.modulesTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new FilterTableColumnViewModel("NetworkShortName","Network SMS",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("ShortName","SMS Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!0,!0)).AddColumn(new FilterTableColumnViewModel("ConfigDirty","Config",!0,!0,function(n){return n.ConfigDirty?"Updating":"Up to date"})).AddColumn(new CommandTableColumnViewModel("Remove Module","delete",function(n){return page.OpenFormDialog(t.RemoveModuleForm(n))},page.HasCapabilityComputed(Capability.Module_Remove))).AddTitle("Modules");page.Add(t.modulesCommands);page.Add(t.modulesTable);GroupUpdate(t,[t.modulesTable])},t.AddExistingModulesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingModules"),"Add Existing Modules","Add",{moduleIds:ko.observableArray(),networkId:ko.observable()}).SubmitData(function(n){return{moduleIds:n.moduleIds()}}).Done(function(){t.modulesTable.LoadData()}).MessageField("Select one or more existing modules to add to this group.").AjaxMultiSelectListField("moduleIds","Modules (ctrl-click or drag for multi select)",function(n){return n.NetworkName+"/"+n.Name+" (ID: "+n.ModuleId+")"},function(n){return n.ModuleId},route.forControllerItemAction("Group",t.viewModel.GroupId,"ModulesWhichCanBeAdded"),15,!0).Create()},t.RemoveModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveModule"),"Remove Module","Remove",{moduleId:ko.observable(n.ModuleId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{moduleId:n.moduleId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.modulesTable.LoadData()}).MessageField("Are you sure you want to remove the module "+n.NetworkName+"/"+n.Name+" from this group? The module will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete module.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ModuleConfigTemplates=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ModuleConfigTemplates_Model,t.stateHandler=function(){return new Group_ModuleConfigTemplates_State(t)},t.titleHandler=function(){return page.SetTitle("Module Config Templates",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"ModuleConfigTemplates")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.modulesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing template to group",t.AddExistingModuleConfigTemplatesForm,null,page.HasCapabilityComputed(Capability.ModuleConfigTemplate_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create template in group",t.CreateModuleConfigTemplateForm,null,page.HasCapabilityComputed(Capability.ModuleConfigTemplate_Create))])]);t.configTemplatesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ModuleConfigTemplatesTable"),"ModuleTypeName",!0,function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("ModuleConfigTemplate",n.ModuleConfigTemplateId,"GetModuleConfigTemplateConfigItems"),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}var i=ko.viewmodel.fromModel(n,t.mappingOptions);ViewModuleConfigForm(i())()}))},10);t.configTemplatesTable.AddColumn(new FilterTableColumnViewModel("TemplateName","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleTypeName","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("TemplateDescription","Description",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUtc","Created",!0,!0,function(n){return FormatDateTime(moment(n.CreatedUtc))})).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return page.OpenFormDialog(t.EditModuleConfigTemplateForm(n))},page.HasCapabilityComputed(Capability.ModuleConfigTemplate_Edit))).AddColumn(new CommandTableColumnViewModel("Configure","config",function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("ModuleConfigTemplate",n.ModuleConfigTemplateId,"GetModuleConfigTemplateConfigItems"),{data:{},type:"POST"}).done(function(i){if(i.Success===!1){page.SetMessage(i.Message);return}var r=ko.viewmodel.fromModel(i,t.mappingOptions);ConfigureModuleTemplateForm(n,r(),route.forControllerAction("ModuleConfigTemplate","UpdateModuleTemplateConfigItems"),"Edit Template Config Values","Update")()}))},page.HasCapabilityComputed(Capability.ModuleConfigTemplate_Edit))).AddColumn(new CommandTableColumnViewModel("Clone","group",function(n){return page.OpenFormDialog(t.CloneModuleConfigTemplateForm(n))},page.HasCapabilityComputed(Capability.ModuleConfigTemplate_Clone))).AddColumn(new CommandTableColumnViewModel("Remove Module Config Template","delete",function(n){return page.OpenFormDialog(t.RemoveModuleConfigTemplateForm(n))},page.HasCapabilityComputed(Capability.ModuleConfigTemplate_Remove))).AddTitle("Config Templates");page.Add(t.modulesCommands);page.Add(t.configTemplatesTable);GroupUpdate(t,[t.configTemplatesTable])},t.AddExistingModuleConfigTemplatesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingModuleConfigTemplates"),"Add existing template to group","Save",{moduleConfigTemplateIds:ko.observableArray([])}).SubmitData(function(n){return{moduleConfigTemplateIds:n.moduleConfigTemplateIds()}}).Done(function(){t.configTemplatesTable.LoadData()}).AjaxMultiSelectListField("moduleConfigTemplateIds","Select Templates",function(n){return n.TemplateName},function(n){return n.ModuleConfigTemplateId},"ModulesConfigTemplatesWhichCanBeAdded",15,!0).Create()},t.CreateModuleConfigTemplateForm=function(){return new DialogViewModelBuilder(null,"Create Config Template","Configure",{templateName:ko.observable(""),templateDescription:ko.observable(""),selectedModuleType:ko.observable("")}).Submit(function(n){t.selectedModuleType=n.selectedModuleType();t.templateName=n.templateName();t.templateDescription=n.templateDescription();page.ViewRequests.push($.ajax(route.forControllerAction("Module","GetModuleTypeConfigItems"),{data:{selectedModuleType:n.selectedModuleType()},type:"POST"}).done(function(i){if(i.Success===!1){page.SetMessage(i.Message);return}var r=ko.viewmodel.fromModel(i,t.mappingOptions)();ConfigureModuleTemplateForm(n,r,route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateModuleConfigTemplate"),"Config Template","Save",function(){return t.configTemplatesTable.LoadData()})()}))}).MessageField("Select the module type for this template.").TextField("templateName","Template Name",null,!1,!0,!0).MultilineTextField("templateDescription","Description",null,!1,!0).AjaxCompactFilterDropDownListField("selectedModuleType","Module Type",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableModuleTypes"),!1,null,null).Create()},t.RemoveModuleConfigTemplateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveModuleConfigTemplate"),"Remove Module","Remove",{moduleConfigTemplateId:ko.observable(n.ModuleConfigTemplateId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{moduleConfigTemplateId:n.moduleConfigTemplateId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.configTemplatesTable.LoadData()}).MessageField("Are you sure you want to remove the module config template  "+n.TemplateName+" from this group? The module config template will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Delete module config template").Create()},t.EditModuleConfigTemplateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("ModuleConfigTemplate",n.ModuleConfigTemplateId,"UpdateModuleConfigTemplate"),"Edit template info","Update",{templateName:ko.observable(n.TemplateName),templateDescription:ko.observable(n.TemplateDescription)}).SubmitData(function(n){return{templateName:n.templateName(),templateDescription:n.templateDescription()}}).Done(function(){t.configTemplatesTable.LoadData()}).TextField("templateName","Template Name",null,!1,!0,!0).MultilineTextField("templateDescription","Description",null,!1,!0).Create()},t.CloneModuleConfigTemplateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("ModuleConfigTemplate",n.ModuleConfigTemplateId,"CloneModuleConfigTemplate",{groupId:t.viewModel.GroupId}),"Clone existing template","Save",{templateName:ko.observable(""),templateDescription:ko.observable("")}).SubmitData(function(t){return{currentTemplateName:n.TemplateName,templateName:t.templateName(),templateDescription:t.templateDescription()}}).Done(function(){t.configTemplatesTable.LoadData()}).Validate(function(t){return n.TemplateName===t.templateName()?"New template name cannot be the same as the existing template name":null}).DisplayField("currentTemplateName","Template to clone: "+n.TemplateName).TextField("templateName","New name for clone",null,!1,!0,!0).MultilineTextField("templateDescription","Description for clone",null,!1,!0).MessageField("This will create an exact copy of the current module config template and config values.  Config values can be edited once the clone is complete.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Networks=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Networks_Model,t.stateHandler=function(){return new Group_Networks_State(t)},t.titleHandler=function(){return page.SetTitle("Networks",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Networks")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.networkCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing networks to group",t.AddExistingNetworksForm,null,page.HasCapabilityComputed(Capability.Network_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new network in group",t.CreateNetworkForm,null,page.HasCapabilityComputed(Capability.Network_Create))])]);t.networksTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"NetworksTable"),"ShortName",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25);t.networksTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("ShortName","SMS Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("NodeCount","Nodes",!0,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!0,!0)).AddColumn(new FilterTableColumnViewModel("ServiceProvider","Service Provider",!0,!0,null,page.HasCapabilityComputed(Capability.Network_ViewServiceProvider))).AddColumn(new CommandTableColumnViewModel("Remove Network","delete",function(n){return page.OpenFormDialog(t.RemoveNetworkForm(n))},page.HasCapabilityComputed(Capability.Network_Remove))).AddTitle("Networks");page.Add(t.networkCommands);page.Add(t.networksTable);GroupUpdate(t,[t.networksTable])},t.AddExistingNetworksForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingNetworks"),"Add Existing Networks","Add",{networkIds:ko.observableArray()}).SubmitData(function(n){return{networkIds:n.networkIds()}}).Done(function(){t.networksTable.LoadData()}).MessageField("Select one or more existing networks to add to this group.").AjaxMultiSelectListField("networkIds","Networks (ctrl-click or drag for multi select)",function(n){return n.Name+" (ID: "+n.NetworkId+")"},function(n){return n.NetworkId},route.forControllerItemAction("Group",t.viewModel.GroupId,"NetworksWhichCanBeAdded"),15,!0).Create()},t.CreateNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateNetwork"),"Create Network","Create",{name:ko.observable(),shortName:ko.observable(),timeZoneName:ko.observable(page.currentUser.TimeZoneName())}).SubmitData(function(n){return{name:n.name(),shortName:n.shortName(),timeZoneName:n.timeZoneName()}}).Done(function(n,t){views.Network_Details.Load(t.NetworkId)}).MessageField("Create a new network to add to this group.").TextField("name","Network Name",50).TextField("shortName","Short Name",50).AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{TimeZoneName:page.currentUser.TimeZoneName(),BaseUtcOffset:page.currentUser.UtcOffsetHours()},"TimeZoneName",5,1).Create()},t.RemoveNetworkForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveNetwork"),"Remove Network","Remove",{networkId:ko.observable(n.NetworkId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{networkId:n.networkId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.networksTable.LoadData()}).MessageField("Are you sure you want to remove the network "+n.Name+" from this group? The network will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete network.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkSubscriptions=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_NetworkSubscriptions_Model,t.stateHandler=function(){return new Group_NetworkSubscriptions_State(t)},t.titleHandler=function(){return page.SetTitle("Network Subscriptions",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"NetworkSubscriptions")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Subscriptions"),new Command_Block("Renew","Renew selected subscriptions",t.RenewForm,null),new Command_Block("Invoice","Invoice renewed subscriptions",t.InvoiceForm,null)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Subscription Selection"),new Command_Block("Select All","Select all filtered subscriptions",null,function(){return t.SelectAll(t.subscriptionsTable.filteredData())}),new Command_Block("Expired","Select expired subscriptions",null,function(){return t.SelectExpired(t.subscriptionsTable.filteredData())}),new Command_Block("30 Days","Select expiring within next 30 days",null,function(){return t.SelectExpiring(t.subscriptionsTable.filteredData())}),new Command_Block("None","Deselect all subscriptions",null,function(){return t.selectedSubscriptions.UnselectAll()}),new Command_Block("Invert","Invert the subscriptions selections",null,function(){return t.Invert(t.subscriptionsTable.filteredData())})])]);t.renewalsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"NetworkSubscriptionRenewalsTable"),"DaysRemaining",!0,function(n){return views.NetworkSubscription_Details.Load(n.NetworkSubscriptionId,t.viewModel.GroupId)},25);t.renewalsTable.AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Fee","Fee",!1,!0,function(n){return FormatCurrency(n.Fee)})).AddColumn(new FilterTableColumnViewModel("EndLocal","Expires",!1,!0,function(n){return FormatDueDate(moment(n.EndLocal))})).AddTitle("Renewals that need invoicing");t.subscriptionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"NetworkSubscriptionsTable"),"DaysRemaining",!0,function(n){return views.NetworkSubscription_Details.Load(n.NetworkSubscriptionId,t.viewModel.GroupId)},25);t.subscriptionsTable.AddColumn(t.selectedSubscriptions=new ToggleTableColumnViewModel("Select Subscription","NetworkSubscriptionId","ok","close",!0)).AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Fee","Fee",!1,!0,function(n){return FormatCurrency(n.Fee)})).AddColumn(new IconTableColumnViewModel("Expired",function(){return""},!0,!0,function(n){return new Date(n.EndLocal)<new Date?"warning":"ok"})).AddColumn(new FilterTableColumnViewModel("EndLocal","Expires",!1,!0,function(n){return FormatDueDate(moment(n.EndLocal))})).AddColumn(new FilterTableColumnViewModel("InvoicedUtc","Invoiced",!0,!0,function(n){return n.XeroInvoiceGuid==="00000000-0000-0000-0000-000000000000"?"":FormatDateOnly(moment(n.XeroInvoicedUtc))})).AddColumn(new NumberFilterTableColumnViewModel("DaysRemaining","Days Remaining",!1,!0)).AddTitle("Subscriptions");t.cancelledSubscriptionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"CancelledNetworkSubscriptionsTable"),"BillingEntityName",!0,function(n){return views.NetworkSubscription_Details.Load(n.NetworkSubscriptionId,t.viewModel.GroupId)},25);t.cancelledSubscriptionsTable.AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Fee","Fee",!1,!0,function(n){return FormatCurrency(n.Fee)})).AddColumn(new FilterTableColumnViewModel("CancelledUtc","Cancelled",!1,!0,function(n){return n.CancelledUtc!=null?FormatDueDate(moment(n.CancelledUtc)):"-"})).AddColumn(new FilterTableColumnViewModel("CancelledByUser","Cancelled By",!1,!0,function(n){return n.CancelledUtc!=null?n.CancelledByUser:"-"})).AddTitle("Cancelled Subscriptions");t.unsubscribedNetworksTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"UnsubscribedNetworksTable"),"NetworkName",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25);t.unsubscribedNetworksTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkStatus","Status",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddTitle("Unsubscribed Networks");page.Add(t.pageCommands);page.Add(t.renewalsTable);page.Add(t.subscriptionsTable);page.Add(t.cancelledSubscriptionsTable);page.Add(t.unsubscribedNetworksTable);BaseUpdate(t,[t.subscriptionsTable,t.renewalsTable,t.cancelledSubscriptionsTable,t.unsubscribedNetworksTable])},t.RenewForm=function(){return new DialogViewModelBuilder(route.forControllerActionParams("NetworkSubscription","RenewSubscriptions",{groupId:t.viewModel.GroupId}),"Renew Expired Subscriptions","Renew",{}).SubmitData(function(){return{subscriptionIds:t.selectedSubscriptions.selectedKeys().map(function(n){return n.NetworkSubscriptionId})}}).Done(function(){t.selectedSubscriptions.UnselectAll();t.subscriptionsTable.LoadData()}).MessageField("Renew "+t.selectedSubscriptions.selectedKeys().length+" subscriptions").Create()},t.InvoiceForm=function(){return new DialogViewModelBuilder(route.forControllerAction("NetworkSubscription","InvoiceRenewedSubscriptions"),"Invoice Renewed Subscriptions","Invoice",{}).SubmitData(function(){return{}}).Done(function(){t.renewalsTable.LoadData();t.subscriptionsTable.LoadData()}).MessageField("You are about to invoice "+t.renewalsTable.data().length+" "+(t.renewalsTable.data().length>1?"renewals":"renewal")).Create()},t.SelectAll=function(n){return n.forEach(function(n){t.selectedSubscriptions.selectRow(n)})},t.SelectExpired=function(n){t.selectedSubscriptions.UnselectAll();n.forEach(function(n){n.DaysRemaining<=0&&t.selectedSubscriptions.selectRow(n)})},t.SelectExpiring=function(n){t.selectedSubscriptions.UnselectAll();n.forEach(function(n){n.DaysRemaining<=30&&t.selectedSubscriptions.selectRow(n)})},t.Invert=function(n){return n.forEach(function(n){t.selectedSubscriptions.action(n)})},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Notes=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Notes_Model,t.stateHandler=function(){return new Group_Notes_State(t)},t.titleHandler=function(){return page.SetTitle("Notes",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Notes")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.notesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"NotesTable"),"CreatedUtc",!1,null,25);t.notesTable.AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return views.Note_Details.Load(n.NoteId)})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new CommandWithDynamicIconTableColumnViewModel("TargetIcon",function(n){return NoteInfoBuilder(n,"Group").icon()},function(n){return NoteInfoBuilder(n,"Group").tooltip()},function(n){return NoteInfoBuilder(n,"Group").action()},!0,function(n){return NoteInfoBuilder(n,"Group").actionEnabled()})).AddColumn(new FilterTableColumnViewModel("Title","Title",!1,!1,function(n){return NoteInfoBuilder(n,"Group").type()+n.Title})).AddColumn(new CommandTableColumnViewModel("CreatedUser","profile",function(n){return views.User_Details.Load(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes");page.Add(t.notesTable);BaseUpdate(t,[t.notesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ReportTemplates=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ReportTemplates_Model,t.stateHandler=function(){return new Group_ReportTemplates_State(t)},t.titleHandler=function(){return page.SetTitle("Report Templates",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"ReportTemplates")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.reportTemplatesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing templates to group",t.AddExistingReportTemplateForm,null,page.HasCapabilityComputed(Capability.Report_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new template in group",t.CreateReportTemplateForm,null,page.HasCapabilityComputed(Capability.Report_Create))])]);t.reportTemplatesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ReportTemplatesTable"),"Name",!0,function(n){return views.Report_Details.Load(n.ReportTemplateId)},25);t.reportTemplatesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUserName","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Report Template","delete",function(n){return page.OpenFormDialog(t.RemoveReportTemplateForm(n))},page.HasCapabilityComputed(Capability.Report_Remove))).AddTitle("Report Templates");page.Add(t.reportTemplatesCommands);page.Add(t.reportTemplatesTable);GroupUpdate(t,[t.reportTemplatesTable])},t.AddExistingReportTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingReportTemplates"),"Add Existing Report Templates","Add",{reportIds:ko.observableArray()}).SubmitData(function(n){return{reportIds:n.reportIds()}}).Done(function(){t.reportTemplatesTable.LoadData()}).MessageField("Select one or more existing report templates to add to this group.").AjaxMultiSelectListField("reportIds","Report Templates (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.ReportTemplateId},route.forControllerItemAction("Group",t.viewModel.GroupId,"ReportTemplatesWhichCanBeAdded"),15,!0).Create()},t.CreateReportTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateReportTemplate"),"Create Report Template","Create",{name:ko.observable(),json:ko.observable()}).SubmitData(function(n){return{name:n.name(),json:n.json()}}).Done(function(n,t){views.Report_Details.Load(t.ReportTemplateId)}).MessageField("Create a new report template to add to this group.").TextField("name","Report Template Name").MultilineTextField("json","Report Config").Create()},t.RemoveReportTemplateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveReportTemplate"),"Remove Report Template","Remove",{reportTemplateId:ko.observable(n.ReportTemplateId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{reportTemplateId:n.reportTemplateId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.reportTemplatesTable.LoadData()}).MessageField('Are you sure you want to remove the Report Template "'+n.Name+'" from this group? The Report Template will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete Report Template.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_RfidTags=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_RfidTags_Model,t.stateHandler=function(){return new Group_RfidTags_State(t)},t.titleHandler=function(){return page.SetTitle("Rfid Tags",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"RfidTags")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.rfidTagsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing rfid tag",t.AddExistingRfidTagsForm,null,page.HasCapabilityComputed(Capability.RfidTag_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new rfid tag",t.CreateRfidTagForm,null,page.HasCapabilityComputed(Capability.RfidTag_Create))]),tiles.createTile().addBlockSet([new Command_Block("Download","Download rfid tags in this group",null,function(){return window.location.href=route.forControllerItemAction("Group",t.viewModel.GroupId,"DownloadRfidTags")},page.HasCapabilityComputed(Capability.RfidTag_Add))])]);t.rfidTagsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"RfidTagsTable"),"Name",!0,function(n){return views.Rfid_Details.Load(n.RfidTagId)},25);t.rfidTagsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("TagNumber","Tag Number",!1,!0,function(n){return n.SectionCode+"/"+n.SerialCode})).AddColumn(new FilterTableColumnViewModel("OpensCabinet","Access Level",!0,!0,function(n){return n.OpensCabinet?"Maintenance":"User"})).AddColumn(new FilterTableColumnViewModel("GroupCount","Groups",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Rfid Tag","delete",function(n){return page.OpenFormDialog(t.RemoveRfidTagForm(n))},page.HasCapabilityComputed(Capability.RfidTag_Remove))).AddTitle("Rfid Tags");page.Add(t.rfidTagsCommands);page.Add(t.rfidTagsTable);GroupUpdate(t,[t.rfidTagsTable])},t.AddExistingRfidTagsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingRfidTags"),"Add Existing Rfid Tags","Add",{rfidTagIds:ko.observableArray()}).SubmitData(function(n){return{rfidTagIds:n.rfidTagIds()}}).Done(function(){t.rfidTagsTable.LoadData()}).MessageField("Select one or more existing rfid tags to add to this group.").AjaxMultiSelectListField("rfidTagIds","Rfid Tags (ctrl-click or drag for multi select)",function(n){return n.Name+": "+n.SectionCode+"/"+n.SerialCode},function(n){return n.RfidTagId},route.forControllerItemAction("Group",t.viewModel.GroupId,"RfidTagsWhichCanBeAdded"),15,!0).Create()},t.CreateRfidTagForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateRfidTag"),"Create Rfid Tag","Create & Continue",{name:ko.observable("New Tag"),sectionCode:ko.observable(0),serialCode:ko.observable(0),opensCabinet:ko.observable(!1)}).SubmitData(function(n){return{name:n.name(),sectionCode:n.sectionCode(),serialCode:n.serialCode(),opensCabinet:n.opensCabinet()}}).Done(function(){t.rfidTagsTable.LoadData()}).MessageField("Specify the unique name for the new tag.").TextField("name","Name",50).IntNumberField("sectionCode","Section Code",0,255).IntNumberField("serialCode","Serial Code",0,65535).CheckBoxField("opensCabinet","Maintenance Access").CreateMulti()},t.RemoveRfidTagForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveRfidTag"),"Remove Rfid Tag","Remove",{rfidTagId:ko.observable(n.RfidTagId),deleteTag:ko.observable(!1)}).SubmitData(function(n){return{rfidTagId:n.rfidTagId(),deleteTag:n.deleteTag()}}).Done(function(){t.rfidTagsTable.LoadData()}).MessageField("Are you sure you want to remove the Rfid Tag "+n.Name+" from this group? The Rfid Tag will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteTag","Permanently delete Rfid Tag.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Roles=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Roles_Model,t.stateHandler=function(){return new Group_Roles_State(t)},t.titleHandler=function(){return page.SetTitle("Roles",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Roles")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.rolesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing role to group",t.AddExistingRolesForm,null,page.HasCapabilityComputed(Capability.Role_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new role in group",t.CreateRoleForm,null,page.HasCapabilityComputed(Capability.Role_Create))])]);t.rolesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"RolesTable"),"Name",!0,function(n){return views.Role_Details.Load(n.RoleId)},25);t.rolesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveFromGroupForm(n))},page.HasCapabilityComputed(Capability.Role_Remove))).AddTitle("Roles");page.Add(t.rolesCommands);page.Add(t.rolesTable);GroupUpdate(t,[t.rolesTable])},t.AddExistingRolesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingRoles"),"Add Existing Roles","Add",{roleIds:ko.observableArray()}).SubmitData(function(n){return{roleIds:n.roleIds()}}).Done(function(){t.rolesTable.LoadData()}).MessageField("Select one or more existing roles to add to this group.").AjaxMultiSelectListField("roleIds","Roles (ctrl-click or drag for multi select)",function(n){return n.Name+" (RoleId: "+n.RoleId+")"},function(n){return n.RoleId},route.forControllerItemAction("Group",t.viewModel.GroupId,"RolesWhichCanBeAdded"),15,!0).Create()},t.CreateRoleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateRole"),"Create Role","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){views.Role_Details.Load(t.RoleId)}).TextField("name","Name").Create()},t.RemoveFromGroupForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveRole",{roleId:n.RoleId}),"Remove Role","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{deleteFlag:n.deleteFlag()}}).Done(function(){t.rolesTable.LoadData()}).MessageField("Are you sure you want to remove this role from the group?").OptionalCheckBoxField("deleteFlag","Confirm Delete").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_SharedCollections=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_SharedCollections_Model,t.stateHandler=function(){return new Group_SharedCollections_State(t)},t.titleHandler=function(){return page.SetTitle("Shared Charts",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"SharedCollections")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.sharedCollectionsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing Report to group",t.AddExistingSharedCollectionsForm,null,page.HasCapabilityComputed(Capability.SharedChart_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new Report in group",t.CreateSharedCollectionForm,null,page.HasCapabilityComputed(Capability.SharedChart_Create))])]);t.sharedCollectionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"SharedCollectionsTable"),"Name",!0,function(n){return views.SharedCollection_Details.Load(n.SharedCollectionId)},25);t.sharedCollectionsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DaysToDisplay","Display",!0,!0,function(n){return n.DaysToDisplay+" days"})).AddColumn(new FilterTableColumnViewModel("SharedChartsCount","Charts",!1,!0)).AddColumn(new CommandTableColumnViewModel("Download Data","download",function(n){return page.OpenFormDialog(t.DownloadDataForm(n))})).AddColumn(new CommandTableColumnViewModel("Configure Collection","config",function(n){return page.OpenFormDialog(t.ConfigureCollectionForm(n))},page.HasCapabilityComputed(Capability.SharedChart_Edit))).AddColumn(new CommandTableColumnViewModel("Remove Shared Collection","delete",function(n){return page.OpenFormDialog(t.RemoveSharedCollectionForm(n))},page.HasCapabilityComputed(Capability.SharedChart_Remove))).AddTitle("Shared Charts");page.Add(t.sharedCollectionsCommands);page.Add(t.sharedCollectionsTable);GroupUpdate(t,[t.sharedCollectionsTable])},t.AddExistingSharedCollectionsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingSharedCollections"),"Add Existing Shared Reports","Add",{sharedCollectionIds:ko.observableArray()}).SubmitData(function(n){return{sharedCollectionIds:n.sharedCollectionIds()}}).Done(function(){t.sharedCollectionsTable.LoadData()}).MessageField("Select one or more existing Shared Reports to add to this group.").AjaxMultiSelectListField("sharedCollectionIds","Shared Reports (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.SharedCollectionId},route.forControllerItemAction("Group",t.viewModel.GroupId,"SharedCollectionsWhichCanBeAdded"),15,!0).Create()},t.CreateSharedCollectionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateSharedCollection"),"Create Shared Report","Create",{name:ko.observable("New Report"),daysToDisplay:ko.observable(7)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,t){views.SharedCollection_Details.Load(t.SharedCollectionId)}).MessageField("Specify a unique name for the new report.").TextField("name","Name",50).MessageField("Specify the default number of days to display for the new report").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.RemoveSharedCollectionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveSharedCollection"),"Remove Shared Report","Remove",{sharedCollectionId:ko.observable(n.SharedCollectionId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{sharedCollectionId:n.sharedCollectionId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.sharedCollectionsTable.LoadData()}).MessageField('Are you sure you want to remove the Shared Report "'+n.Name+'" from this group? The Shared Report will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete Shared Report.").Create()},t.ConfigureCollectionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",n.SharedCollectionId,"ConfigureCollection"),"Configure Chart Report","Update",{name:ko.observable(ko.unwrap(n.Name)),daysToDisplay:ko.observable(ko.unwrap(n.DaysToDisplay))}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(){t.sharedCollectionsTable.LoadData()}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.DownloadDataForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",n.SharedCollectionId,"DownloadChartData"),"Download Data","Download",{chartId:ko.observable(0),collectionName:ko.observable(n.Name),startLocal:ko.observable(moment(new Date).subtract("days",n.DaysToDisplay).format("YYYY-MM-DD")),endLocal:ko.observable(moment(new Date).format("YYYY-MM-DD"))}).SubmitData(function(n){return{chartId:n.chartId(),collectionName:n.collectionName(),startLocal:moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).toISOString(),endLocal:moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Sims=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Sims_Model,t.stateHandler=function(){return new Group_Sims_State(t)},t.titleHandler=function(){return page.SetTitle("Sims",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Sims")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.simsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing sim to group",t.AddExistingSimsForm,null,page.HasCapabilityComputed(Capability.Sim_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new sim in group",t.CreateSimForm,null,page.HasCapabilityComputed(Capability.Sim_Create))])]);t.simsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"SimsTable"),"SimNumber",!0,function(n){return views.Sim_Details.Load(n.SimId)},25);t.simsTable.AddColumn(new FilterTableColumnViewModel("SimNumber","Sim Number",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhoneNumber","Phone Number",!0,!0)).AddColumn(new FilterTableColumnViewModel("CellularNetworkName","Cellular Network",!0,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!0,!0)).AddColumn(new CommandTableColumnViewModel("Copy Sim Number to Clipboard","edit",function(n){return CopyToClipboard(n.SimNumber)})).AddColumn(new CommandTableColumnViewModel("Copy Phone Number to Clipboard","sms",function(n){return CopyToClipboard(n.PhoneNumber)})).AddColumn(new CommandTableColumnViewModel("Remove Sim","delete",function(n){return page.OpenFormDialog(t.RemoveSimForm(n))},page.HasCapabilityComputed(Capability.Sim_Remove))).AddTitle("Sims");page.Add(t.simsCommands);page.Add(t.simsTable);GroupUpdate(t,[t.simsTable])},t.AddExistingSimsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingSims"),"Add Existing Sims","Add",{simIds:ko.observableArray()}).SubmitData(function(n){return{simIds:n.simIds()}}).Done(function(){page.Update()}).MessageField("Select one or more existing sims to add to this group.").AjaxMultiSelectListField("simIds","Sims (ctrl-click or drag for multi select)",function(n){return n.SimNumber+":"+n.PhoneNumber+" (SimId: "+n.SimId+")"},function(n){return n.SimId},route.forControllerItemAction("Group",t.viewModel.GroupId,"SimsWhichCanBeAdded"),15,!0).Create()},t.CreateSimForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateSim"),"Create Sim","Create",{simNumber:ko.observable(),phoneNumber:ko.observable(),cellularNetworkId:ko.observable(),cancelled:ko.observable()}).SubmitData(function(n){return{simNumber:n.simNumber(),phoneNumber:n.phoneNumber(),cellularNetworkId:n.cellularNetworkId(),cancelled:n.cancelled()}}).Done(function(n,t){views.Sim_Details.Load(t.SimId)}).TextField("simNumber","Sim Number").TextField("phoneNumber","Phone Number").AjaxFilterDropDownListField("cellularNetworkId","Cellular Network",function(n){return n.Name},function(n){return n.CellularNetworkId},route.forControllerItemAction("Group",t.viewModel.GroupId,"AvailableCellularNetworks"),!1,null,"Name",5,5).DropDownListField("cancelled","Cancelled",function(n){return n.Name},function(n){return n.Value},[{Value:"false",Name:"Active"},{Value:"true",Name:"Cancelled"}]).Create()},t.RemoveSimForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveSim"),"Remove Sim","Remove",{simId:ko.observable(n.SimId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{simId:n.simId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.simsTable.LoadData()}).MessageField("Are you sure you want to remove the sim "+n.SimNumber+" from this group? The sim will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete sim.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_SmsProviders=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_SmsProviders_Model,t.stateHandler=function(){return new Group_SmsProviders_State(t)},t.titleHandler=function(){return page.SetTitle("Sms Providers",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"SmsProviders")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.smsProvidersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"SmsProvidersTable"),"Name",!1,null,25);t.smsProvidersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!1)).AddTitle("SMS Providers");page.Add(t.smsProvidersTable);BaseUpdate(t,[t.smsProvidersTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Tags=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Tags_Model,t.stateHandler=function(){return new Group_Tags_State(t)},t.titleHandler=function(){return page.SetTitle("Tags",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Tags")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing tag to group",t.AddExistingTagsForm,null,page.HasCapabilityComputed(Capability.Tag_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new tag in group",t.CreateTagForm,null,page.HasCapabilityComputed(Capability.Tag_Create))])]);t.tagsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"TagsTable"),"Name",!0,function(n){return views.Tag_Details.Load(n.TagId,t.viewModel.GroupId())},25);t.tagsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Attachments","Attach To",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUsername","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Tag","delete",function(n){return page.OpenFormDialog(t.RemoveTagForm(n.TagId,n.Name))},page.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Tags");page.Add(t.pageCommands);page.Add(t.tagsTable);GroupUpdate(t,[t.tagsTable])},t.CreateTagForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateTag"),"Create Tag","Create",{name:ko.observable(),canAttachToModule:ko.observable(!1),canAttachToNode:ko.observable(!1),canAttachToNetwork:ko.observable(!1),canAttachToApplication:ko.observable(!1)}).SubmitData(function(n){return{name:n.name(),canAttachToModule:n.canAttachToModule(),canAttachToNode:n.canAttachToNode(),canAttachToNetwork:n.canAttachToNetwork(),canAttachToApplication:n.canAttachToApplication()}}).Done(function(){t.tagsTable.LoadData()}).TextField("name","Name").CheckBoxField("canAttachToModule","Can be attached to a module").CheckBoxField("canAttachToNode","Can be attached to a node").CheckBoxField("canAttachToNetwork","Can be attached to a network").CheckBoxField("canAttachToApplication","Can be attached to an application").Create()},t.AddExistingTagsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingTags"),"Add Existing Tags","Add",{tagIds:ko.observableArray()}).SubmitData(function(n){return{tagIds:n.tagIds()}}).Done(function(){page.Update()}).MessageField("Select one or more existing tags to add to this group.").AjaxMultiSelectListField("tagIds","Tags (ctrl-click or drag for multi select)",function(n){return n.Name+" (TagId: "+n.TagId+")"},function(n){return n.TagId},route.forControllerItemAction("Group",t.viewModel.GroupId,"TagsWhichCanBeAdded"),15,!0).Create()},t.RemoveTagForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveTag"),"Remove Tag","Remove",{tagId:ko.observable(n),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{tagId:n.tagId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.tagsTable.LoadData()}).MessageField("Are you sure you want to remove the tag "+i+" from this group? The tag will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete tag.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Users=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Users_Model,t.stateHandler=function(){return new Group_Users_State(t)},t.titleHandler=function(){return page.SetTitle("Users",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Users")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.usersCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Add existing users",t.AddExistingUsersForm,null,page.HasCapabilityComputed(Capability.User_Add))]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new user",t.CreateUserForm,null,page.HasCapabilityComputed(Capability.User_Create))]),tiles.createTile().addBlockSet([new Command_Block("Terms","Assign legal terms to users",t.AssignLegalTermsForm,null,page.HasCapabilityComputed(Capability.LegalTerms_Assign))])]);t.rolesCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Grant","Grant roles to groups",t.GrantRolesForm,null,page.HasCapabilityComputed(Capability.Role_GrantToGroup))])]);t.usersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"UsersTable"),"Name",!0,function(n){return views.User_Details.Load(n.UserId)},10);t.usersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryEmailAddress","Email Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryPhoneNumber","Phone Number",!0,!0,function(n){return FormatPhoneNumber(n.PrimaryPhoneNumber)})).AddColumn(new CommandTableColumnViewModel("Copy Email Address to Clipboard","copyemail",function(n){return CopyToClipboard(n.PrimaryEmailAddress)},!0,function(n){return ko.unwrap(n.PrimaryEmailAddress)!=null})).AddColumn(new CommandTableColumnViewModel("Copy Phone Number to Clipboard","copyphone",function(n){return CopyToClipboard(n.PrimaryPhoneNumber)},!0,function(n){return ko.unwrap(n.PrimaryPhoneNumber)!=null})).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return page.OpenFormDialog(t.RemoveUserForm(n))},page.HasCapabilityComputed(Capability.User_Remove))).AddTitle("Users");t.grantedRolesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"GrantedRolesTable"),"TargetGroupName",!0,function(n){return views.Group_Details.Load(n.TargetGroupId)},10);t.grantedRolesTable.AddColumn(new FilterTableColumnViewModel("TargetGroupName","Group",!1,!0)).AddColumn(new FilterTableColumnViewModel("RoleName","Role",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Role","delete",function(n){return page.OpenFormDialog(t.RevokeRoleForm(n))},page.HasCapabilityComputed(Capability.Role_RevokeFromGroup))).AddTitle("Granted Roles");page.Add(t.usersCommands);page.Add(t.usersTable);page.Add(t.rolesCommands);page.Add(t.grantedRolesTable);GroupUpdate(t,[t.usersTable,t.grantedRolesTable])},t.AddExistingUsersForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AddExistingUsers"),"Add Existing Users","Add",{userIds:ko.observableArray()}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){t.usersTable.LoadData()}).MessageField("Select one or more existing users to add to this group.").AjaxMultiSelectListField("userIds","Users (ctrl-click or drag for multi select)",function(n){return n.Name+" (UserId: "+n.UserId+")"},function(n){return n.UserId},route.forControllerItemAction("Group",t.viewModel.GroupId,"UsersWhichCanBeAdded"),15,!0).Create()},t.CreateUserForm=function(){var n={name:ko.observable(""),timeZoneName:ko.observable(page.currentUser.TimeZoneName()),primaryEmailAddress:ko.observable(""),primaryPhoneNumber:ko.observable(""),brandingId:ko.observable(0),legalTermsId:ko.observable(0)};return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"CreateUser"),"Create User","Create",n).SubmitData(function(n){return{name:n.name(),timeZoneName:n.timeZoneName(),primaryEmailAddress:n.primaryEmailAddress(),primaryPhoneNumber:n.primaryPhoneNumber(),brandingId:n.brandingId(),legalTermsId:n.legalTermsId()}}).Done(function(n,t){views.User_Details.Load(t.UserId)}).TextField("name","Name").AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{TimeZoneName:page.currentUser.TimeZoneName(),BaseUtcOffset:page.currentUser.UtcOffsetHours()},"TimeZoneName",5,1).TextField("primaryEmailAddress","Email Address",255,!1).MessageField("Phone number must be in international format, e.g. 64212345678").TextField("primaryPhoneNumber","Phone Number",50,!0).AjaxFilterDropDownListField("brandingId","Branding",function(n){return n.Name},function(n){return n.BrandingId},route.forControllerAction("Branding","AvailableBrandings"),!1,{BrandingId:t.viewModel.BrandingId()},"Name",5,1).AjaxFilterDropDownListField("legalTermsId","Legal Terms",function(n){return n.Name},function(n){return n.LegalTermsId},route.forControllerAction("LegalTerms","AvailableLegalTerms"),!0,null,"Name").Create()},t.RemoveUserForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RemoveUser"),"Remove User","Remove",{userId:ko.observable(n.UserId),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{userId:n.userId(),deleteFlag:n.deleteFlag()}}).Done(function(){t.usersTable.LoadData()}).MessageField("Are you sure you want to remove the user "+n.Name+" from this group?").OptionalCheckBoxField("deleteFlag","Permanently delete user.").Create()},t.GrantRolesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"GrantRoles"),"Grant Group Roles","Grant",{roleIds:ko.observableArray(),groupIds:ko.observableArray()}).SubmitData(function(n){return{roleIds:n.roleIds(),groupIds:n.groupIds()}}).Done(function(){t.grantedRolesTable.LoadData()}).MessageField("Select one or more roles to grant.").AjaxMultiSelectListField("roleIds","Roles (ctrl-click or drag for multi select)",function(n){return n.Name+" ("+n.RoleId+")"},function(n){return n.RoleId},route.forControllerAction("Role","AvailableRoles"),15,!0).MessageField("Select one or more groups to grant roles to.").AjaxMultiSelectListField("groupIds","Groups (ctrl-click or drag for multi select)",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),15,!0).Create()},t.RevokeRoleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"RevokeRole"),"Revoke Role","Revoke",{}).SubmitData(function(){return{roleId:n.RoleId,targetGroupId:n.TargetGroupId}}).Done(function(){t.grantedRolesTable.LoadData()}).MessageField("Are you sure you want to remove the role "+n.RoleName+" from this group for the target group "+n.TargetGroupName+"?").Create()},t.AssignLegalTermsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"AssignLegalTerms"),"Assign Legal Terms","Assign",{legalTermsId:ko.observable()}).SubmitData(function(n){return{legalTermsId:n.legalTermsId()}}).Done(function(){page.Update()}).MessageField("Assign legal terms to all users in this group.").AjaxFilterDropDownListField("legalTermsId","Terms",function(n){return n.Name},function(n){return n.LegalTermsId},route.forControllerAction("LegalTerms","AvailableLegalTerms"),!1,null,"Name",3,1).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ConfigHistory=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ConfigHistory_Model,t.stateHandler=function(){return new Group_ConfigHistory_State(t)},t.titleHandler=function(){return page.SetTitle("Group Config History",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"ConfigHistory")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.configHistoriesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ConfigHistoryByTypeTable"),"TimeUtc",!1,function(n){return views.Group_ConfigHistoryDetails.Load(t.viewModel.GroupId,n.ModuleConfigHistoryId)},25);t.configHistoriesTable.AddColumn(new FilterTableColumnViewModel("ModuleType","Module Type",!0,!0)).AddColumn(new FilterTableColumnViewModel("TimeUtc","Changed",!0,!0,function(n){return FormatDateTime(moment(n.TimeUtc))})).AddColumn(new FilterTableColumnViewModel("ChangedByUser","Last Changed By",!0,!0)).AddColumn(new FilterTableColumnViewModel("Reason","Reason",!0,!0)).AddTitle("Configuration History");page.Add(t.configHistoriesTable);BaseUpdate(t,[t.configHistoriesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ConfigHistoryDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ConfigHistoryDetails_Model,t.stateHandler=function(){return new Group_ConfigHistoryDetails_State(t)},t.titleHandler=function(){return page.SetTitle("Config Changes","Group Config History",views.Group_ConfigHistory.routeHandler(t.viewModel.GroupId),function(){return views.Group_ConfigHistory.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Group",n,"ConfigHistoryDetails",{moduleConfigHistoryId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.configHistoryItemsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ConfigHistoryItemsTable",{moduleConfigHistoryId:t.viewModel.ModuleConfigHistoryId,moduleType:t.viewModel.ModuleType}),null,!1,null,25);t.configHistoryItemsTable.AddColumn(new FilterTableColumnViewModel("ConfigName","Item",!0,!0)).AddColumn(new FilterTableColumnViewModel("DefaultValue","Default",!0,!0)).AddColumn(new FilterTableColumnViewModel("ConfigValue","Value",!0,!0,null,ko.computed(function(){return t.viewModel.RollbackHistoryId()==null}))).AddTitle("Config History");t.configHistoryModulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ConfigHistoryModulesTable",{moduleConfigHistoryId:t.viewModel.ModuleConfigHistoryId,moduleType:t.viewModel.ModuleType}),null,!1,function(n){return views.Module_ConfigHistory.Load(n.ModuleId,t.viewModel.ModuleConfigHistoryId)},25);t.configHistoryModulesTable.AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!0,!0)).AddColumn(new FilterTableColumnViewModel("Network","Network",!0,!0)).AddColumn(new FilterTableColumnViewModel("Node","Node",!0,!0)).AddTitle("Modules Changed");t.configCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Config History"),new SingleValue_Block("User",t.viewModel.UserName),new SingleValue_Block("Date",FormatDateTime(moment(t.viewModel.TimeUtc()))),new SingleValue_Block("Reason",t.viewModel.Reason),new SingleValue_Block("Module Type",t.viewModel.ModuleType),new SingleValue_Block("Module Count",ko.computed(function(){return t.configHistoryModulesTable.data().length})),new Command_Block("Previous","View the history that was rolled back",null,function(){return views.Group_ConfigHistoryDetails.Load(t.viewModel.GroupId,t.viewModel.RollbackHistoryId)},ko.computed(function(){return t.viewModel.RollbackHistoryId()!=null})),new Command_Block("Rollback","Roll back to previous values",t.RollBackHistoryForm)])]);t.configCommands.lowMargin="true";page.Add(t.configCommands);page.Add(t.configHistoryItemsTable);page.Add(t.configHistoryModulesTable);BaseUpdate(t)},t.RollBackHistoryForm=function(){return new DialogViewModelBuilder(route.forControllerActionParams("Module","RollbackConfigHistory",{groupId:t.viewModel.GroupId,moduleConfigHistoryId:t.viewModel.ModuleConfigHistoryId}),"Rollback Changes","Rollback",{confirm:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(n){return{confirm:n.confirm(),reason:n.reason()}}).Done(function(n,i){views.Group_ConfigHistoryDetails.Load(t.viewModel.GroupId,i.ModuleConfigHistoryId)}).MessageField("You are about to rollback the changes that were made in this config update, and any subsequent changes.  Are you sure you want to do that?").MultilineTextField("reason","Reason",null,!1,!0).SectionField("There will be "+t.configHistoryModulesTable.data().length+" modules affected by this rollback").CheckBoxField("confirm","I confirm that I want to rollback this config update").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_GrantedRoles=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_GrantedRoles_Model,t.stateHandler=function(){return new Group_GrantedRoles_State(t)},t.titleHandler=function(){return page.SetTitle("Group Granted Roles",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"GrantedRoles")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.rolesGrantedOnGroupTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"RolesGrantedOnGroupTable"),"SourceGroupName",!0,function(n){return views.Group_Users.Load(n.SourceGroupId)},10);t.rolesGrantedOnGroupTable.AddColumn(new FilterTableColumnViewModel("SourceGroupName","Source Group",!1,!0)).AddColumn(new FilterTableColumnViewModel("RoleName","Role",!1,!0)).AddTitle("Roles Granted on Group");page.Add(t.rolesGrantedOnGroupTable);BaseUpdate(t,[t.rolesGrantedOnGroupTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ModuleConfiguration=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ModuleConfiguration_Model,t.stateHandler=function(){return new Group_ModuleConfiguration_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.ModuleType()+" - Configure Modules",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Group",n,"ModuleConfiguration",{type:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.moduleConfigTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"GetNestedModuleConfigsTable",{type:t.viewModel.ModuleType}),null,!0,null,25);t.moduleConfigTable.AddColumn(t.selectedModules=new ToggleTableColumnViewModel("Select Module","ModuleId","ok","close")).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return route.forControllerItemAction("Network",n.NetworkId,"Details")},function(n){return views.Network_Details.Load(n.NetworkId)},!0,function(n){return n.NetworkId!=null},!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0,FormatNodeAddressAndName)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return route.forControllerItemAction("Network",n.NetworkId,"Node",{nodeAddress:n.NodeAddress})},function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)},!0,function(n){return n.NetworkId!=null},!0)).AddColumn(new FilterTableColumnViewModel("Name","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return route.forControllerItemAction("Module",n.ModuleId,"Details")},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new CommandTableColumnViewModel("Configure Module","config",function(n){return t.LoadConfig(n)},page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureInstaller,Capability.Module_ConfigureSystem]))).AddTitle("Module Configurations for Type: "+t.viewModel.ModuleType());t.configItemColumns=[];t.configItemVisible=ko.observableArray([]);t.viewModel.ConfigItems()!=null&&t.viewModel.ConfigItems().forEach(function(n){var i=new FilterTableColumnViewModel(n.Name,n.Name,!0,!1,function(t){return t.ConfigValues[n.Name()].Value+(t.ConfigValues[n.Name()].Value===t.ConfigValues[n.Name()].Default?" *":"")});t.moduleConfigTable.AddColumn(i);t.configItemColumns.push(i);t.configItemVisible.push(ko.observable(!0))});ko.computed(function(){t.viewModel.ConfigItems();for(var n=0;n<t.configItemVisible().length;n++)t.configItemVisible()[n]()?t.configItemColumns[n].visible(!0):t.configItemColumns[n].visible(!1)});t.configCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Modules"),new SingleValue_Block("Module Type",t.viewModel.ModuleType),new SingleValue_Block("Selected",ko.computed(function(){return""+t.selectedModules.selectedKeys().length+" selected modules"})),new Command_Block("Edit Config","Edit config for all selected modules",null,t.EditConfigs),new Command_Block("Copy Config","Copy config to all selected modules",null,t.CopyConfigs),new Command_Block("Use Template","Apply template to all selected modules",null,t.SelectTemplate)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Selection"),new Command_Block("Select All","Select all filtered modules",null,function(){return t.selectedModules.SelectAll(t.moduleConfigTable.filteredData())}),new Command_Block("None","Deselect all modules",null,function(){return t.selectedModules.UnselectAll()}),new Command_Block("Invert","Invert the module selections",null,function(){return t.selectedModules.Invert(t.moduleConfigTable.filteredData())})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Config Items"),new SingleValue_Block("Selected",ko.computed(function(){var n=t.configItemVisible().filter(function(n){return n()}).length,i=t.configItemVisible().length;return n===i?"All items":""+n+"/"+i+" items"})),new Command_Block("Change","Select which config items to display",t.SelectConfigItemsForm),new Command_Block("All Items","Show all config items",null,function(){return t.configItemVisible().forEach(function(n){return n(!0)})})])]);t.configCommands.lowMargin="true";page.Add(t.configCommands);page.Add(t.moduleConfigTable);page.Add(new HtmlMessagePageItem("* indicates a default configuration value"));BaseUpdate(t)},t.LoadConfig=function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",n.ModuleId,"GetModuleConfigItems"),{data:{},type:"POST"}).done(function(t){if(t.Success===!1){page.SetMessage(t.Message);return}var i=ko.viewmodel.fromModel(t,new MappingOptions)();ConfigureModuleForm(n.ModuleId,i,route.forControllerItemAction("Module",n.ModuleId,"Configure"),1)()}))},t.EditConfigs=function(){if(t.selectedModules.selectedKeys().length===0){page.SetMessage("Please select modules to configure");return}page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",t.selectedModules.selectedKeys()[0].ModuleId,"GetModuleConfigItems"),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}t.ProcessConfig(n,t.selectedModules.selectedKeys())}))},t.CopyConfigs=function(){if(t.selectedModules.selectedKeys().length===0){page.SetMessage("Please select modules to configure");return}page.OpenFormDialog(t.CopyConfigurationForm())},t.SelectTemplate=function(){if(t.selectedModules.selectedKeys().length===0){page.SetMessage("Please select modules to configure");return}page.OpenFormDialog(t.TemplateConfigurationForm())},t.GetConfigForm=function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",n.module(),"GetModuleConfigItems"),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}t.ProcessConfig(n,t.selectedModules.selectedKeys())}))},t.GetTemplateConfigForm=function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("ModuleConfigTemplate",n.moduleConfigTemplateId,"GetModuleConfigTemplateConfigItems"),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}t.ProcessConfig(n,t.selectedModules.selectedKeys())}))},t.ProcessConfig=function(n,i){var u=ko.viewmodel.fromModel(n,new MappingOptions)(),r=[];t.configItemColumns.forEach(function(n,i){return r.push({Key:ko.unwrap(n.name),Value:t.configItemVisible()[i]()})});ConfigureMultipleModulesForm(u,r,i,route.forControllerActionParams("Module","ConfigureBulk",{groupId:t.viewModel.GroupId}),1)()},t.CopyConfigurationForm=function(){var i=t.moduleConfigTable.data().filter(function(n){return t.selectedModules.isRowSelected(n)}).sort(function(n,t){return n.NetworkName<t.NetworkName?-1:n.NetworkName>t.NetworkName?1:n.NodeName<t.NodeName?-1:n.NodeName>t.NodeName?1:n.Name<t.Name?-1:n.Name>t.Name?1:0}),n=[];return t.selectedModules.selectedKeys().forEach(function(t){return n.push(t.ModuleId)}),new DialogViewModelBuilder(null,"Copy Module Configuration","Next",{module:ko.observable(),selectedModules:ko.observableArray(n)}).SubmitData(function(n){return{module:n.module(),selectedModules:n.selectedModules()}}).Done(function(){page.Update()}).Validate(function(n){return n.selectedModules().length===0?"There are no modules selected to copy config to.":null}).Submit(function(n){t.GetConfigForm(n)}).MessageField("Select a module from which to copy the config to all selected modules").AjaxCompactFilterDropDownListField("module","Source Module",function(n){return n.NetworkName+" - "+n.NodeName+" - "+n.Name},function(n){return n.ModuleId},ko.computed(function(){return route.forControllerActionParams("Module","AvailableModulesOfType",{type:t.viewModel.ModuleType})}),!1,null,"Name",3,1).CheckBoxListField("selectedModules","Target Modules",i,function(n){return n.NetworkName+" - "+n.NodeName+" - "+n.Name},function(n){return n.ModuleId}).Create()},t.TemplateConfigurationForm=function(){var i=t.moduleConfigTable.data().filter(function(n){return t.selectedModules.isRowSelected(n)}).sort(function(n,t){return n.NetworkName<t.NetworkName?-1:n.NetworkName>t.NetworkName?1:n.NodeName<t.NodeName?-1:n.NodeName>t.NodeName?1:n.Name<t.Name?-1:n.Name>t.Name?1:0}),n=[];return t.selectedModules.selectedKeys().forEach(function(t){return n.push(t.ModuleId)}),new DialogViewModelBuilder(null,"Copy Module Configuration","Next",{moduleConfigTemplateId:ko.observable(),selectedModules:ko.observableArray(n)}).SubmitData(function(n){return{moduleConfigTemplateId:n.moduleConfigTemplateId(),selectedModules:n.selectedModules()}}).Done(function(){page.Update()}).Validate(function(n){return n.selectedModules().length===0?"There are no modules selected to copy config to.":null}).Submit(function(n){t.GetTemplateConfigForm(n)}).MessageField("Select a module from which to copy the config to all selected modules").AjaxCompactFilterDropDownListField("moduleConfigTemplateId","Source Template",function(n){return n.TemplateName},function(n){return n.ModuleConfigTemplateId},ko.computed(function(){return route.forControllerActionParams("ModuleConfigTemplate","AvailableModuleConfigTemplatesForType",{moduleTypeName:t.viewModel.ModuleType})}),!1,null,"TemplateName",3,1).CheckBoxListField("selectedModules","Target Modules",i,function(n){return n.NetworkName+" - "+n.NodeName+" - "+n.Name},function(n){return n.ModuleId}).Create()},t.SelectConfigItemsForm=function(){var i=[],r=[],n,u;return t.configItemColumns.forEach(function(n,u){t.configItemVisible()[u]()&&i.push(u);r.push({Key:u,Name:ko.unwrap(n.name)})}),n={selectedItems:ko.observableArray(i),selectAll:ko.observable(!0)},u=new DialogViewModelBuilder(null,"Select Visible Config Items","Done",n).SubmitData(function(n){return{selectedItems:n.selectedItems()}}).Submit(function(n){t.configItemColumns.forEach(function(i,r){return t.configItemVisible()[r](n.selectedItems().indexOf(r)>-1)});page.CloseFormDialog()}).MessageField("Select which config items to display and edit").CheckBoxField("selectAll","Select All").CheckBoxListField("selectedItems","Config Items",r,function(n){return n.Name},function(n){return n.Key}).Create(),ko.computed(function(){n.selectAll();$(".check-box").each(function(n,t){var i=$(t);i.prop("name")!=="selectAll"&&i.prop("checked")!==$("#selectAll").prop("checked")&&i.click()})}),u},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_ModuleConversions=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_ModuleConversions_Model,t.stateHandler=function(){return new Group_ModuleConversions_State(t)},t.titleHandler=function(){return page.SetTitle("Module Conversions",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"ModuleConversions")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.modulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"ModuleConversionsTable"),"ProcessDate",!1,function(n){return views.Module_Details.Load(n.ModuleId)},25);t.modulesTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("SegmentSize","Days per Segment",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("StartDate","Data Start",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("EndDate","Data End",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("ProcessDate","Processed",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("Range","Total Days",!0,!0)).AddColumn(new FilterTableColumnViewModel("CompletionPercent","Progress",!1,!0)).AddTitle("Module Data Conversions");page.Add(t.modulesTable);BaseUpdate(t,[t.modulesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkManagers=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_NetworkManagers_Model,t.stateHandler=function(){return new Group_NetworkManagers_State(t)},t.titleHandler=function(){return page.SetTitle("Group Network Managers",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"NetworkManagers")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.managersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"NetworkManagersTable"),"UserCount",!0,function(n){return views.Network_Managers.Load(n.NetworkId)},25);t.managersTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("StatusName","Status",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("UserCount","User Count",!1,!0)).AddColumn(new FilterTableColumnViewModel("Users","Users",!0,!1,function(n){return n.Users.map(function(n){return n.Name}).join(", ")})).AddTitle("Network Manager Users");page.Add(t.managersTable);BaseUpdate(t,[t.managersTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkSims=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_NetworkSims_Model,t.stateHandler=function(){return new Group_NetworkSims_State(t)},t.titleHandler=function(){return page.SetTitle("Network Sims",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"NetworkSims")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Group(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Group(t)},t.Render=function(){t.networksTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"NetworkSimsTable"),"SimNumber",!1,function(n){return n.SimId!=null?views.Sim_Details.Load(n.SimId):null},25);t.networksTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkStatus","Status",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeCount","Node Count",!0,!0)).AddColumn(new FilterTableColumnViewModel("RequiresSim","Sim Required",!1,!0,function(n){return n.RequiresSim?"Required":"-"})).AddColumn(new FilterTableColumnViewModel("ProviderName","Cellular Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("SimNumber","Sim",!1,!0)).AddColumn(new FilterTableColumnViewModel("SimStatus","Sim Status",!1,!0)).AddTitle("Network Sims");page.Add(t.networksTable);GroupUpdate(t,[t.networksTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_NetworkStatus=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_NetworkStatus_Model,t.stateHandler=function(){return new Group_NetworkStatus_State(t)},t.titleHandler=function(){return page.SetTitle("Status Summary",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"NetworkStatus")},t.markersUrl=route.forControllerAction("Images","markers.png"),t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){var n;t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Select All","Select all filtered items",null,function(){return t.SelectAll(t.networkStatusTable.filteredData())}),new Command_Block("Invert","Invert selected items",null,function(){return t.Invert(t.networkStatusTable.filteredData())}),new Command_Block("Clear","Clear selection",null,function(){return t.selectedNetworks.UnselectAll()}),new Command_Block("Update","Update sync on selected networks",function(){return t.UpdateNetworkSyncIntervalForm()},null)])]);t.networkStatusTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"GetNetworkLocationSummary"),"LastSync",!1,function(n){return t.OpenMapInfoWindow(n)},10);t.networkStatusTable.AddColumn(t.selectedNetworks=new ToggleTableColumnViewModel("Select Networks","NetworkId","ok","close")).AddColumn(new CommandTableColumnViewModel("View Network","network",function(n){return views.Network_Details.Load(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("Name","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("StatusName","Status",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("MaxSyncInterval","Sync Interval",!0,!0)).AddColumn(new TimeagoFilterTableColumnViewModel("LastSync","Last Sync",!1,!0)).AddColumn(new IconTableColumnViewModel("hasLocation",function(n){return n.Latitude||n.Longitude?"Location: "+n.Latitude.toFixed(6)+", "+n.Longitude.toFixed(6):"No location set"},!1,!0,function(n){return n.Latitude||n.Longitude?"home":""})).AddColumn(new FilterTableColumnViewModel("ProviderName","Service Provider",!0,!0,null,page.HasCapabilityComputed(Capability.Network_ViewServiceProvider))).AddTitle("Network Status Summary");var i={url:t.markersUrl,size:new google.maps.Size(11,11),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(5.5,5.5)},r={url:t.markersUrl,size:new google.maps.Size(11,11),origin:new google.maps.Point(11,0),anchor:new google.maps.Point(5.5,5.5)},u={url:t.markersUrl,size:new google.maps.Size(11,11),origin:new google.maps.Point(22,0),anchor:new google.maps.Point(5.5,5.5)};t.map=new MapPageItem(!0);n=new MapItemsInfo;n.items=ko.observableArray([]);ko.computed(function(){t.networkStatusTable.filteredData();n.items(t.networkStatusTable.filteredData());var i=function(){return t.map.zoomToBounds()};typeof t.map.zoomToBounds=="function"&&ko.ignoreDependencies(i)}).extend({throttle:500});n.getLatLng=function(n){return n.Latitude&&n.Longitude?new google.maps.LatLng(n.Latitude,n.Longitude):null};n.getText=function(n){return n.Name};n.getInfo=function(n){var t='<div><span class="nodetitle"><a onClick="views.Network_Details.Load('+n.NetworkId+'); return false;" href="'+views.Network_Details.routeHandler(n.NetworkId)+'">'+n.Name+'<\/a><\/span> - (<span class="nodetitle"><a onClick="views.Network_Map.Load('+n.NetworkId+', true); return false;" href="'+route.forControllerItemAction("Network",n.NetworkId,"Map")+'">Node Map<\/a><\/span>)<\/div>',i;return n.Type!=null&&(t+='<div class="nodeitem"><strong>Device Type:<\/strong> '+n.Type+"<\/div>"),n.LastSync!=null&&(i="",n.IsOverdue&&(i=FormatOverdueBy(moment.duration(moment(new Date).diff(n.LastSync)))),t+='<div class="nodetext"><div class="nodeitem"><strong>Last Update:<\/strong> '+FormatLastUpdate(moment(n.LastSync))+" "+(n.IsOverdue?'<span class="overdue">Overdue by: '+i+"<\/span>":"")+"<\/div><\/div>"),t+='<div class="nodetext"><div class="nodeevents"><div class="resultheader">Scanning...<\/div><\/div><\/div>',page.ViewRequests.push($.ajax(route.forControllerItemAction("Network",n.NetworkId,"RecentNetworkAlerts"),{data:{},type:"POST"}).done(function(n){var i=JSON.parse(JSON.stringify(n)),t="";i.forEach(function(n){n!=null&&(t+='<div class="nodealert">'+FormatLastUpdate(moment(n.TimeUtc))+' (<a onClick="views.Module_Details.Load('+n.ModuleId+'); return false;" href="'+views.Module_Details.routeHandler(n.ModuleId)+'">'+n.ModuleName+"<\/a>) "+n.Details+"<\/div>")});t='<div class="resultheader">'+(t===""?"No Alerts for 30 days<\/div>":"Recent Alerts:<\/div><div>"+t+"<\/div>");$(".map .nodeevents").html(t)})),t};n.getIcon=function(n){return n.IsOverdue?i:n.Type==null?u:r};n.getZIndex=function(n){return n.IsOverdue?100:10};t.map.AddItems(n);page.Add(t.map);page.Add(t.pageCommands);page.Add(t.networkStatusTable);BaseUpdate(t)},t.OpenMapInfoWindow=function(n){t.map.itemSets.forEach(function(i){var r=i.items().filter(function(t){return t.NetworkId===n.NetworkId});r.length===1&&(r[0].Latitude!=null&&r[0].Latitude!==0&&r[0].Longitude!=null&&r[0].Longitude!==0?(t.map.infoWindow.setPosition(new google.maps.LatLng(r[0].Latitude,r[0].Longitude)),google.maps.event.trigger(r[0].map.marker,"click")):(t.map.infoWindow.close(),page.SetMessage("No location can be shown for this network.")))})},t.UpdateNetworkSyncIntervalForm=function(){var n=[];return t.selectedNetworks.selectedKeys().forEach(function(t){return n.push(t.NetworkId)}),new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"BulkSetMaxSyncInterval"),"Set Max Sync Interval","Set",{maxSyncInterval:ko.observable("")}).SubmitData(function(t){return{networkIds:n,maxSyncInterval:t.maxSyncInterval()}}).Validate(function(){return n.length===0?"There are no networks selected. Please select at least 1 network and try again.":null}).Done(function(){t.selectedNetworks.UnselectAll();t.networkStatusTable.LoadData()}).MessageField("You are about to update "+n.length+" networks to a new max sync interval, are you sure you want to do that?").MessageField("If the max sync interval is left blank it will be cleared on the selected networks.").TimeSpanField("maxSyncInterval","Max Sync Interval",!0).Create()},t.SelectAll=function(n){return n.forEach(function(n){t.selectedNetworks.selectRow(n)})},t.Invert=function(n){return n.forEach(function(n){t.selectedNetworks.action(n)})},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_Tasks=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_Tasks_Model,t.stateHandler=function(){return new Group_Tasks_State(t)},t.titleHandler=function(){return page.SetTitle("Tasks",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n){return route.forControllerItemAction("Group",n,"Tasks")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.tasksTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Group",t.viewModel.GroupId,"GetGroupTasks"),"Source",!0,null,25);t.tasksTable.AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return TaskTypeFormatter[n.SourceType].Icon},function(n){return TaskTypeFormatter[n.SourceType].DisplayName},function(n){return TaskTypeFormatter[n.SourceType].Action(n,t.viewModel.GroupId())})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Status",!0,!0,function(n){return TaskTypeFormatter[n.SourceType].DisplayName+" "+n.Type})).AddColumn(new FilterTableColumnViewModel("Description","Description",!0,!0,function(n){return TaskTypes[n.Description].Desc(n.IsComplete,n.Parameters)})).AddColumn(new MultipleFixHyperlinkTextTableColumnViewModel("Actions","Actions")).AddTitle("Tasks");page.Add(t.tasksTable);BaseUpdate(t)},t.UpdateTable=function(){t.tasksTable.LoadData()},t.CancelUpdatesForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"CancelNetworkUpdates"),"Cancel Pending Updates","Confirm",{}).SubmitData(function(){}).Done(function(){typeof t=="function"&&t()}).MessageField("Are you sure you want to cancel all pending updates on this network?").Create()},t.SetMaxIntervalForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n.NetworkId,"SetMaxSyncInterval"),"Set Max Sync Interval","Set",{maxSyncInterval:ko.observable(0)}).SubmitData(function(n){return{maxSyncInterval:n.maxSyncInterval()}}).Done(function(){t.UpdateTable()}).MessageField("Specify the expected maximum interval between sync requests from this network.").TimeSpanField("maxSyncInterval","Max Sync Interval",!1).Create()},t.ClearMaxIntervalForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetMaxSyncInterval"),"Set Max Sync Interval","Clear",{}).SubmitData(function(){return{maxSyncInterval:null}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("You are about to clear the max sync interval for this network").Create()},t.AddSubscribersToOverdueAlertForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AddSubscribersToOverdueAlert"),"Add Users to Overdue Alert","Set",{userIds:ko.observable(0)}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("A Max Sync Interval has been set for this network, but no users are subscribed to sync alerts.  Please add at least one user from the list below.").AjaxMultiSelectListField("userIds","Users (ctrl + click to select multiple)",function(n){return n.Name+" (ID: "+n.UserId+")"},function(n){return n.UserId},route.forControllerItemAction("Network",n,"AvailableUsersToSubscribe"),10,!0).Create()},t.AddLocationForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n.NetworkId,"SetNetworkNodeLocation"),"Set Node Location","Update",{latitude:ko.observable(0),longitude:ko.observable(0)}).Validate(function(n){return n.latitude()===0&&n.longitude()===0?"You must set a proper location for this network":null}).SubmitData(function(n){return{latitude:n.latitude(),longitude:n.longitude(),nodeAddress:0}}).Done(function(){t.UpdateTable()}).MessageField("Specify the location of this node using latitude and longitude values.").NumberField("latitude","Latitude (decimal degrees)",-90,90,!1).NumberField("longitude","Longitude (decimal degrees)",-180,180,!1).Create()},t.ChangeNetworkStatusForm=function(n,t,i){var r=ko.observableArray([]),u=ko.computed(function(){return r().length>0});return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetNetworkStatus"),"Set Network Status","Update",{statusId:ko.observable(t),confirmOverride:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(n){return{statusId:n.statusId(),confirmOverride:n.confirmOverride(),reason:n.reason()}}).Error(function(n,t){t.MismatchNodes!=null&&r(t.MismatchNodes)}).Done(function(){typeof i=="function"&&i()}).OptionalCheckBoxField("confirmOverride","Confirm Update").MessageField("Please provide a reason for this status change").MultilineTextField("reason","Reason",null,!1).AjaxDropDownListField("statusId","Network Gateway Status",function(n){return n.Name},function(n){return n.StatusId},ko.computed(function(){return route.forControllerItemAction("Network",n,"AvailableNodeStatus")}),!1,{StatusId:t}).ListField("Mismatching Node Status",r,function(n){return n.NodeName+" - "+n.StatusName},u).Create()},t.AcknowledgeForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AcknowledgeOverdue"),"Acknowledge Overdue Alert","Acknowledge",{}).SubmitData(function(){return{}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("Acknowledge Overdue").Create()},t.RemoveModuleAlertsForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"RemoveModuleAlerts"),"Remove all module alerts","Remove",{}).SubmitData(function(){return{}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("Are you sure you want to remove all module alerts for this user?").Create()},t.RemoveUserSyncAlertsForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"RemoveUserNetworkSyncAlerts"),"Remove all network sync alerts","Remove",{}).SubmitData(function(){return{}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("Are you sure you want to remove all network sync alerts for this user?").Create()},t.AttachDeviceForm=function(n,i,r){var u={deviceExtAddress:ko.observable(),unattached:ko.observable()};return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AttachDevice",{nodeAddress:i}),"Attach Device to Node","Attach",u).SubmitData(function(n){return{deviceExtAddress:n.deviceExtAddress()}}).Done(function(){typeof r=="function"?r():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("Select a device to attach to this node.").CheckBoxField("unattached","Include assigned devices in list").AjaxFilterDropDownListField("deviceExtAddress","Device",function(n){return n.DeviceExtAddress+" ("+n.Type+")"},function(n){return n.DeviceExtAddress},ko.computed(function(){return route.forControllerItemAction("Network",n,i===0?"AvailableGatewayDevices":"AvailableNonGatewayDevices",{unattached:!u.unattached()})}),!1,null,"DeviceExtAddress",1).Create()},t.AttachSimForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n.NetworkId,"AssignSim"),"Assign Sim","Assign",{SimId:ko.observable()}).SubmitData(function(n){return{SimId:n.SimId()}}).Done(function(){t.UpdateTable()}).AjaxCompactFilterDropDownListField("SimId","Sim",function(n){return n.SimNumber},function(n){return n.SimId},route.forControllerItemAction("Network",n.NetworkId,"AvailableSims"),!1,null,"SimNumber",5,1).Create()},t.AddContactsForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"AddEmailAndPhoneNumber"),"Add Contact Details","Add",{phoneNumber:ko.observable(),primaryPhoneNumber:ko.observable(!1),emailAddress:ko.observable(),primaryemailAddress:ko.observable(!1)}).SubmitData(function(n){return{phoneNumber:n.phoneNumber(),primaryPhoneNumber:n.primaryPhoneNumber(),emailAddress:n.emailAddress(),primaryemailAddress:n.primaryemailAddress()}}).Validate(function(n){return CheckDiallingPrefix(n.phoneNumber())}).Done(function(){typeof t=="function"&&t()}).SectionField("Phone Number").MessageField("Enter the new phone number in international format in the box below. For example, the phone number 021 555 1234 would become 64215551234").TextField("phoneNumber","Phone Number",50,!0).MessageField("Each user can have one phone number configured as the primary number at a time. If you make the new number the primary number, any old primary number will be changed to secondary.").CheckBoxField("primaryPhoneNumber","Primary Phone Number").SectionField("Email Address").MessageField("Enter the new email address in the box below.").TextField("emailAddress","Email Address",255,!0).MessageField("Each user can have one email address configured as the primary address at a time. If you make the new address the primary address, any old primary address will be changed to secondary.").CheckBoxField("primaryemailAddress","Primary Email Address").Create()},t.SetPrimaryEmailAddressForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"SetPrimaryEmailAddress"),"Set Primary Email Address","Set Primary",{emailAddress:ko.observable("")}).SubmitData(function(n){return{emailAddress:n.emailAddress()}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).AjaxCompactFilterDropDownListField("emailAddress","Email Address",function(n){return n.EmailAddress},function(n){return n.EmailAddress},route.forControllerItemAction("User",n,"AvailableEmailAddresses"),!1,null,"EmailAddress",5,1).Create()},t.SetPrimaryPhoneNumberForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"SetPrimaryPhoneNumber"),"Set Primary Phone Number","Set Primary",{phoneNumber:ko.observable("")}).SubmitData(function(n){return{phoneNumber:n.phoneNumber()}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).AjaxCompactFilterDropDownListField("phoneNumber","Phone Number",function(n){return n.PhoneNumber},function(n){return n.PhoneNumber},route.forControllerItemAction("User",n,"AvailablePhoneNumbers"),!1,null,"PhoneNumber",5,1).Create()},t.AddGatewayNodeForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"CreateNode"),"Create Gateway Node","Create",{name:ko.observable("")}).SubmitData(function(n){return{name:n.name(),nodeAddress:0}}).Done(function(){typeof i=="function"?i():typeof t.UpdateTable=="function"&&t.UpdateTable()}).MessageField("Enter the details for the gateway Node (Node 0000) to add to this network.").TextField("name","Name",50).Create()},t.AddManagerUsersForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n.NetworkId,"AddManagerUsers"),"Add Manager Users","Add",{userIds:ko.observableArray([])}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){t.UpdateTable()}).MessageField("Select one or more users to add to the list of network managers.").AjaxMultiSelectListField("userIds","User",function(n){return n.Name+" (ID: "+n.UserId+")"},function(n){return n.UserId},route.forControllerItemAction("Network",n.NetworkId,"ManagerUsersWhichCanBeAdded"),10,!0).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Group_UpdateNetworkFirmware=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Group_UpdateNetworkFirmware_Model,t.stateHandler=function(){return new Group_UpdateNetworkFirmware_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.DeviceType()+" - Firmware Update",t.viewModel.Name,views.Group_Details.routeHandler(t.viewModel.GroupId),function(){return views.Group_Details.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return route.forControllerItemAction("Group",n,"UpdateNetworkFirmware",{deviceType:t,deviceModel:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.deviceFirmwareTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("Group",t.viewModel.GroupId,"GetNetworkNodesWithDeviceTable",{type:t.viewModel.DeviceType,model:t.viewModel.DeviceModel,includeNoApplication:t.viewModel.IncludeNoApplication,minVersion:t.viewModel.MinVersion,maxVersion:t.viewModel.MaxVersion})}),null,!0,null,25);t.deviceFirmwareTable.AddColumn(t.selectedDevices=new ToggleTableColumnViewModel("Select Device",["NetworkId","NodeAddress"],"ok","close")).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return route.forControllerItemAction("Network",n.NetworkId,"Details")},function(n){return views.Network_Details.Load(n.NetworkId)},!0,function(n){return n.NetworkId!=null},!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0,FormatNodeAddressAndName)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return route.forControllerItemAction("Network",n.NetworkId,"Node",{nodeAddress:n.NodeAddress})},function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)},!0,function(n){return n.NetworkId!=null},!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Device",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Device","firmware",function(n){return route.forControllerItemAction("Device",n.DeviceExtAddress,"Details")},function(n){return views.Device_Details.Load(n.DeviceExtAddress)})).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("FirmwareVersion","Firmware",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("ApplicationName","Application",!0,!0,function(n){return n.ApplicationName==null?"":n.ApplicationName+" ("+n.ApplicationVersion+")"})).AddTitle("Devices for Type: "+t.viewModel.DeviceType());t.firmwareCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Devices"),new SingleValue_Block("Device Type",t.viewModel.DeviceType),new SingleValue_Block("Device Model",t.viewModel.DeviceModel),new SingleValue_Block("Selected",ko.computed(function(){return""+t.selectedDevices.selectedKeys().length+" selected devices"})),new Command_Block("Update","Update firmware for selected",t.UpdateFirmwareForm)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Selection"),new Command_Block("Select All","Select all filtered devices",null,function(){return t.selectedDevices.SelectAll(t.deviceFirmwareTable.filteredData())}),new Command_Block("None","Deselect all devices",null,function(){return t.selectedDevices.UnselectAll()}),new Command_Block("Invert","Invert the device selections",null,function(){return t.selectedDevices.Invert(t.deviceFirmwareTable.filteredData())})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Filters"),new Command_Block("Included","Showing devices without application",null,t.ToggleIncluded,ko.computed(function(){return t.viewModel.IncludeNoApplication()})),new Command_Block("Excluded","Showing devices with application",null,t.ToggleIncluded,ko.computed(function(){return!t.viewModel.IncludeNoApplication()})),new Command_Block("Versions",ko.computed(function(){return t.viewModel.MinVersion()<=0&&t.viewModel.MaxVersion()>=page.maxInt?"All":t.viewModel.MinVersion()+"-"+(t.viewModel.MaxVersion()>=page.minInt?"Any":t.viewModel.MaxVersion())}),t.VersionRangeForm)])]);t.firmwareCommands.lowMargin="true";page.Add(t.firmwareCommands);page.Add(t.deviceFirmwareTable);BaseUpdate(t,[t.deviceFirmwareTable])},t.ToggleIncluded=function(){t.viewModel.IncludeNoApplication(!t.viewModel.IncludeNoApplication());t.deviceFirmwareTable.LoadData()},t.UpdateFirmwareForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Group",t.viewModel.GroupId,"UpdateNetworkNodeFirmwareBulk"),"Update Node Firmware","Update",{firmwareId:ko.observable(),autoReboot:ko.observable(!0),reloadApplication:ko.observable(!0),networkNodes:ko.observableArray(t.selectedDevices.selectedKeys())}).SubmitData(function(n){return{firmwareId:n.firmwareId(),autoReboot:n.autoReboot(),reloadApplication:n.reloadApplication(),networkNodes:n.networkNodes()}}).Done(function(){t.deviceFirmwareTable.LoadData()}).MessageField("Are you sure you want to queue firmware updates in these network nodes?").AjaxDropDownListField("firmwareId","Firmware Image",function(n){return"v"+n.FirmwareVersion+" created "+FormatDate(moment.utc(n.CreatedUtc))},function(n){return n.FirmwareId},route.forControllerItemAction("Group",t.viewModel.GroupId,"AvailableFirmwareForDeviceModel",{deviceType:t.viewModel.DeviceType,model:t.viewModel.DeviceModel}),!1).CheckBoxField("autoReboot","Automatically reboot when done.").CheckBoxField("reloadApplication","Queue logic application and config reload.").Create()},t.VersionRangeForm=function(){return new DialogViewModelBuilder(null,"Set Version Range","Set",{minVersion:ko.observable(t.viewModel.MinVersion()<=0?"":t.viewModel.MinVersion()),maxVersion:ko.observable(t.viewModel.MaxVersion()>=page.minInt?"":t.viewModel.MaxVersion())}).Validate(function(n){return n.maxVersion()&&n.minVersion()>n.maxVersion()?"Max version must be greater than or equal to min version.":null}).Submit(function(n){t.viewModel.MinVersion(n.minVersion()||0);t.viewModel.MaxVersion(n.maxVersion()||page.maxInt);page.CloseFormDialog();t.deviceFirmwareTable.LoadData()}).Done(function(){}).IntNumberField("minVersion","Min Version (blank or 0 to ignore limit)",0,page.maxInt,!0).IntNumberField("maxVersion","Max Version (blank to ignore limit)",0,page.maxInt,!0).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Home_Index=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Home_Index_Model,t.stateHandler=function(){return new Home_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Dashboard")},t.routeHandler=function(){return route.forControllerIndex("Home")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("add",new Header_Text("Dashboard Section","Click to add a new section","Add Section"),new Header_Actions(function(){return page.OpenFormDialog(t.CreateSectionForm())}))])]);var n=new PageItem("nested");n.items=t.viewModel.Groups;page.Add(n);page.Add(t.pageCommands);BaseUpdate(t)},t.CreateSectionForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Section","Create"),"Create Dashboard Section","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){views.Section_Details.Load(t.DashboardGroupId)}).MessageField("Specify the name for the new section.").TextField("name","Name").Create()},t.mappingOptions={arrayChildId:{Groups:"DashboardGroupId",CumulativeMeterTiles:"CumulativeMeterId"},extend:{"Groups[i]":function(n){var i,t;n.type="nested";n.items=ko.observableArray([]);i=new DashboardHeaderPageItem(n.DashboardGroupId,n.Name,TileState.Idle);i.addButton(new DashboardActionButton(n.DashboardGroupId,"edit","Edit Section",function(){return views.Section_Details.Load(n.DashboardGroupId)},!0));i.addButton(new DashboardActionButton(n.DashboardGroupId,ko.computed(function(){return n.Expanded()?"collapse":"expand"}),ko.computed(function(){return n.Expanded()?"Hide Section":"Show Section"}),function(){n.Expanded(!n.Expanded());$.ajax(route.forControllerItemAction("Section",n.DashboardGroupId,"SetExpanded",{expanded:n.Expanded()}),{data:{},type:"POST"}).done(function(){n.Expanded()&&page.Update()})},!0));n.items.push(i);t=tiles.createPageItem();t.id="groupId-"+n.DashboardGroupId();t.defaultVisibility=n.Expanded;n.items.push(t);t.addTileSet(n.ModuleTiles);t.addTileSet(n.CumulativeMeterTiles)},"CumulativeMeterTiles[i]":function(n){tiles.makeTile(n);n.addBlockSet([new Header_Block(n.Icon,new Header_Text(n.Name,null,n.FormattedTotal,"Total",ko.computed(function(){return"Since "+FormatDateTime(moment(n.StartUtc()))})),new Header_Actions(function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)}),null,ko.computed(function(){return"state-"+(n.AnyLimitReached()?"faulted":n.AnyWarningReached()?"warning":"active")}))]);n.addBlockSet(n.TotalAlarms);n.addBlockSet(n.TimeAlarms)},"TotalAlarms[i]":function(n){return new PercentBar_Block(n.Name,ko.computed(function(){return n.Limit().toFixed(n.DisplayDigits())+n.Units()}),ko.computed(function(){return n.Total()/n.Limit()*100}),null,function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},"TimeAlarms[i]":function(n){return new PercentBar_Block(n.Name,n.FormattedLimit,n.Percent,null,function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))}}},tiles.applyModuleTileMapping(t.mappingOptions,"ModuleTiles"),t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Application_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Application_Details_Model,t.stateHandler=function(){return new Application_Details_State(t)},t.titleHandler=function(){return t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.App.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.App.Name,"Applications",views.Group_Apps.routeHandler(t.viewModel.GroupId),function(){return views.Group_Apps.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("Application",n,"Details"):route.forControllerItemAction("Application",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.App.ApplicationGuid,null,function(){return CopyToClipboard(t.viewModel.App.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("logic-application",new Header_Text(t.viewModel.App.Name,"Application Name",t.viewModel.App.DeviceType,"Device Type")),new SingleValue_Block("Created",ComputedDateTime(t.viewModel.App.CreatedUtc())),new SingleValue_Block("Creator",t.viewModel.App.CreatedUserName),new Command_Block("Groups","Groups containing application",null,function(){return views.Application_ContainingGroups.Load(t.viewModel.App.AppId)}),new Command_Block("Delete App","Permanently delete the app",t.DeleteAppForm,null,page.HasCapabilityComputed(Capability.App_Delete)),new Command_Block("Upload","Upload a binary for this app",t.UploadApplicationBinaryForm,null,page.HasCapabilityComputed(Capability.App_Create))])]);t.versionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Application",t.viewModel.App.AppId,"AppVersionsTable"),"AppVersionNumber",!1,function(n){return views.Application_AppVersion.Load(n.AppId,n.AppVersionNumber,t.viewModel.GroupId)},25);t.versionsTable.AddColumn(new NumberFilterTableColumnViewModel("AppVersionNumber","Version",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("AppModulesCount","Modules",!1,!0)).AddColumn(new FilterTableColumnViewModel("Notes","Notes",!0,!0,function(n){return n.Notes.length<50?n.Notes:n.Notes.substring(0,47)+"..."})).AddColumn(new CommandTableColumnViewModel("Delete Version","delete",function(n){return page.OpenFormDialog(t.DeleteAppVersionForm(n.AppVersionNumber))},!0,function(n){return ko.computed(function(){return page.HasCapability(Capability.App_Delete)&&n.AppVersionNumber!==0})()})).AddTitle("All Versions");t.nodesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Application",t.viewModel.App.AppId,"AppNodeAssignmentsTable"),"NetworkName",!0,function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)},25);t.nodesTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Node",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Device",!0,!0)).AddColumn(new FilterTableColumnViewModel("AppVersionNumber","App Version",!0,!0)).AddTitle("Network Node Assignments");t.applicationTemplatesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Application",t.viewModel.App.AppId,"AppTemplateAssignmentsTable"),"Name",!0,function(n){return views.ApplicationTemplate_Details.Load(n.ApplicationTemplateId)},25);t.applicationTemplatesTable.AddColumn(new FilterTableColumnViewModel("Name","Template Name",!1,!0)).AddTitle("Application Template Assignments");page.Add(t.pageCommands);page.Add(new HeaderPageItem("Description","edit","Edit Description",function(){return page.OpenFormDialog(t.EditAppForm())},page.HasCapabilityComputed(Capability.App_Edit)));page.Add(new HtmlMessagePageItem(t.viewModel.App.Description));page.Add(t.versionsTable);page.Add(t.nodesTable);page.Add(t.applicationTemplatesTable);BaseUpdate(t,[t.versionsTable,t.nodesTable,t.applicationTemplatesTable])},t.EditAppForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"EditApp"),"Edit App","Save",{name:ko.observable(t.viewModel.App.Name()),description:ko.observable(t.viewModel.App.Description())}).SubmitData(function(n){return{name:n.name(),description:n.description()}}).Done(function(n,i){t.viewModel.App.Name(i.Name);t.viewModel.App.Description(i.Description)}).TextField("name","App Name",255,!1).MultilineTextField("description","Description").Create()},t.DeleteAppForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"Delete"),"Delete Application","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Group_Index.Load()}).MessageField("Are you sure you want to delete this application?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of application").Create()},t.DeleteAppVersionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"DeleteAppVersion"),"Delete Application Version","Delete",{appVersionNumber:ko.observable(n),confirm:ko.observable(!1)}).SubmitData(function(n){return{appVersionNumber:n.appVersionNumber(),confirm:n.confirm()}}).Done(function(){t.versionsTable.LoadData()}).MessageField("Are you sure you want to delete this application version?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of application version").Create()},t.UploadApplicationBinaryForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"UploadApplicationBinary"),"Upload Application Binary","Upload",{file:ko.observable(),notes:ko.observable()}).SubmitData(function(n){return{file:n.file(),notes:n.notes()}}).Done(function(n,i){views.Application_AppVersion.Load(t.viewModel.App.AppId,i.Version,t.viewModel.GroupId)}).SingleFileUploadField("file","File").MultilineTextField("notes","Version Notes").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Application_AppModule=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Application_AppModule_Model,t.stateHandler=function(){return new Application_AppModule_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.AppModule.ModuleName,t.viewModel.AppModule.AppName,views.Application_AppVersion.routeHandler(t.viewModel.AppModule.AppId,t.viewModel.AppModule.AppVersionNumber,t.viewModel.GroupId),function(){return views.Application_AppVersion.Load(t.viewModel.AppModule.AppId,t.viewModel.AppModule.AppVersionNumber,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return ko.unwrap(i)==null?route.forControllerItemAction("Application",n,"AppModule",{appModuleId:t}):route.forControllerItemAction("Application",n,"AppModule",{appModuleId:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("logic-application",new Header_Text(t.viewModel.AppModule.ModuleName,"Module Name",t.viewModel.AppModule.Type,"Type")),new SingleValue_Block("Version",t.viewModel.AppModule.ModuleVersion),new SingleValue_Block("Slot",t.viewModel.AppModule.Slot),new SingleValue_Block("Index",t.viewModel.AppModule.Index)]),tiles.createTile().addBlockSet([new Command_Block("Edit","Edit module details",t.EditAppModuleForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.AppModule.AppVersionNumber()!=null&&t.viewModel.AppModule.AppVersionNumber()===0})),new Command_Block("Add","Add a custom module input",t.AddModuleInputForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.AppModule.AppVersionNumber()!=null&&t.viewModel.AppModule.AppVersionNumber()===0})),new Command_Block("Source Type","Change module source",t.ChangeModuleSourceForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.AppModule.AppVersionNumber()!=null&&t.viewModel.AppModule.AppVersionNumber()===0}))])]);t.inputsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"AppModuleInputsTable",{appModuleId:t.viewModel.AppModule.AppModuleId}),"InputName",!1,function(n){return page.HasCapability(Capability.App_Edit)&&t.viewModel.AppModule.AppVersionNumber()!=null&&t.viewModel.AppModule.AppVersionNumber()===0?page.OpenFormDialog(t.EditModuleInputForm(n)):null},25);t.inputsTable.AddColumn(new FilterTableColumnViewModel("InputName","Input Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Expression","Expression",!1,!0,function(n){return n.Expression.length<50?n.Expression:n.Expression.substring(0,47)+"..."})).AddColumn(new FilterTableColumnViewModel("ExistsOnSource","Exists On Source",!0,!0,function(n){return n.ExistsOnSource?"True":"False"})).AddColumn(new CommandTableColumnViewModel("Delete Input","delete",function(n){return page.OpenFormDialog(t.DeleteModuleInputForm(n))},ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.AppModule.AppVersionNumber()!=null&&t.viewModel.AppModule.AppVersionNumber()===0}))).AddTitle("Module Inputs");page.Add(t.pageCommands);page.Add(t.inputsTable);BaseUpdate(t,[t.inputsTable])},t.EditAppModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"EditAppModule",{version:t.viewModel.AppModule.AppVersionNumber,appModuleId:t.viewModel.AppModule.AppModuleId}),"Edit App Module","Save",{moduleName:ko.observable(t.viewModel.AppModule.ModuleName()),slot:ko.observable(t.viewModel.AppModule.Slot()),index:ko.observable(t.viewModel.AppModule.Index())}).SubmitData(function(n){return{moduleName:n.moduleName(),slot:n.slot(),index:n.index()}}).Done(function(){page.Update()}).TextField("moduleName","Module Name",50).IntNumberField("slot","Slot",0,255,!0).IntNumberField("index","Index",0,255,!0).Create()},t.ChangeModuleSourceForm=function(){var n={allVersions:ko.observable(!1),module:ko.observable(),confirm:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"ChangeModuleSourceForAppModule",{version:t.viewModel.AppModule.AppVersionNumber,appModuleId:t.viewModel.AppModule.AppModuleId}),"Change Module Source","Change",n).SubmitData(function(n){return{appModuleSourceId:n.module().AppModuleSourceId,moduleVersion:n.module().ModuleVersion,confirm:n.confirm()}}).Validate(function(n){return n.module()==null?"Select a module source to add.":null}).Done(function(){page.Update()}).MessageField("Select a module source to change this app module to").OptionalCheckBoxField("confirm","Confirm input removal.").AjaxFilterDropDownListField("module","Select Module Source",function(n){return n.Type+"v"+n.ModuleVersion},function(n){return{AppModuleSourceId:n.AppModuleSourceId,ModuleVersion:n.ModuleVersion}},ko.computed(function(){return route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"AvailableModuleSources",{allVersions:n.allVersions()})}),!0,null,"Type",10,10).CheckBoxField("allVersions","Show all versions of module sources").Create()},t.EditModuleInputForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"EditAppModuleInput",{version:t.viewModel.AppModule.AppVersionNumber,appModuleId:t.viewModel.AppModule.AppModuleId,inputName:n.InputName}),"Edit App Module Input","Save",{expression:ko.observable(n.Expression)}).SubmitData(function(n){return{expression:n.expression()}}).Done(function(){t.inputsTable.LoadData()}).MessageField("Input: "+n.InputName).MultilineTextField("expression","Expression",null,!0).Create()},t.AddModuleInputForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"AddAppModuleInput",{version:t.viewModel.AppModule.AppVersionNumber,appModuleId:t.viewModel.AppModule.AppModuleId}),"Add App Module Input","Add",{inputName:ko.observable(""),expression:ko.observable("")}).SubmitData(function(n){return{inputName:n.inputName(),expression:n.expression()}}).Done(function(){t.inputsTable.LoadData()}).TextField("inputName","Input Name",50).MultilineTextField("expression","Expression",null,!0).Create()},t.DeleteModuleInputForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.AppModule.AppId,"DeleteAppModuleInput",{version:t.viewModel.AppModule.AppVersionNumber(),appModuleId:t.viewModel.AppModule.AppModuleId(),inputName:n.InputName}),"Delete App Module Input","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.inputsTable.LoadData()}).MessageField("Are you sure you want to delete this module input?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of module input.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Application_AppVersion=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Application_AppVersion_Model,t.stateHandler=function(){return new Application_AppVersion_State(t)},t.titleHandler=function(){return page.SetTitle("Version "+t.viewModel.App.AppVersionNumber(),t.viewModel.App.Name,views.Application_Details.routeHandler(t.viewModel.App.AppId,t.viewModel.GroupId),function(){return views.Application_Details.Load(t.viewModel.App.AppId,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return ko.unwrap(i)==null?route.forControllerItemAction("Application",n,"AppVersion",{version:t}):route.forControllerItemAction("Application",n,"AppVersion",{version:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.App.ApplicationGuid,null,function(){return CopyToClipboard(t.viewModel.App.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("logic-application",new Header_Text(t.viewModel.App.Name,"Application Name",t.viewModel.App.DeviceType,"Device Type")),new SingleValue_Block("Version",ko.computed(function(){return t.viewModel.App.AppVersionNumber()==null?"None selected":t.viewModel.App.AppVersionNumber()})),new SingleValue_Block("Created",ComputedDateTime(t.viewModel.App.CreatedUtc())),new SingleValue_Block("Creator",t.viewModel.App.CreatedUserName)]),tiles.createTile().addBlockSet([new Command_Block("Notes","Edit app version notes",t.EditAppVersionNotesForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.App.AppVersionNumber()!==0})),new Command_Block("Reset WIP","Overwrite the work in progress version with this version",t.OverwriteWorkInProgressForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.App.AppVersionNumber()!==0})),new Command_Block("Publish","Publish an app version",t.CreateVersionForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.App.AppVersionNumber()===0&&t.viewModel.App.BinaryBuiltUtc()!=null})),new Command_Block("Delete","Delete this version",function(){return t.DeleteAppVersionForm(t.viewModel.App.AppVersionNumber())},null,ko.computed(function(){return page.HasCapability(Capability.App_Delete)&&t.viewModel.App.AppVersionNumber()!==0}))]),tiles.createTile().addBlockSet([new Header_Block("logic-application",new Header_Text("Binary","Built on",ComputedDateTime(t.viewModel.App.BinaryBuiltUtc),ko.computed(function(){return"By "+t.viewModel.App.BinaryBuiltUserName()})),null,ko.computed(function(){return t.viewModel.App.BinaryBuiltUtc()!=null})),new SingleValue_Block("Build Status",ko.computed(function(){return t.viewModel.App.BinaryIsCurrent()?"Current":"Out of Date"}),ko.computed(function(){return t.viewModel.App.BinaryIsCurrent()!=null})),new Header_Block("logic-application",new Header_Text("Binary",null,"None"),null,ko.computed(function(){return t.viewModel.App.BinaryBuiltUtc()==null})),new Command_Block("Create","Compile the binary",t.CreateAppBinaryForm,null,ko.computed(function(){return t.viewModel.App.BinaryBuiltUtc()==null&&t.viewModel.App.AppVersionNumber()===0})),new Command_Block("Rebuild","Rebuild the binary",t.CreateAppBinaryForm,null,ko.computed(function(){return t.viewModel.App.BinaryBuiltUtc()!=null&&t.viewModel.App.AppVersionNumber()===0})),new Command_Block("Template","Create an application template",null,t.BuildApplicationTemplate,ko.computed(function(){return page.HasCapability(Capability.ApplicationTemplate_Manage)&&t.viewModel.App.BinaryBuiltUtc()!=null}))])]);t.addModuleCommand=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Module","Add module to current version",t.AddModuleForm,null,ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.App.AppVersionNumber()===0}))])]);t.modulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Application",t.viewModel.App.AppId,"AppModulesTable",{version:t.viewModel.App.AppVersionNumber}),"ModuleName",!0,function(n){return views.Application_AppModule.Load(t.viewModel.App.AppId,n.AppModuleId,t.viewModel.GroupId)},100);t.modulesTable.AddColumn(new FilterTableColumnViewModel("ModuleName","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Module Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleVersion","Version",!1,!0)).AddColumn(new FilterTableColumnViewModel("Slot","Slot",!0,!0)).AddColumn(new FilterTableColumnViewModel("Index","Index",!0,!0)).AddColumn(new CommandTableColumnViewModel("Delete Module","delete",function(n){return page.OpenFormDialog(t.DeleteModuleForm(n))},ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.App.AppVersionNumber()===0}))).AddTitle("Module");page.Add(t.pageCommands);page.Add(new HeaderPageItem("Version Notes","edit","Edit Notes",function(){return page.OpenFormDialog(t.EditAppVersionNotesForm())},ko.computed(function(){return page.HasCapability(Capability.App_Edit)&&t.viewModel.App.AppVersionNumber()!==0})));page.Add(new HtmlMessagePageItem(t.viewModel.App.VersionNotes));page.Add(t.addModuleCommand);page.Add(t.modulesTable);BaseUpdate(t,[t.modulesTable])},t.EditAppVersionNotesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"EditAppVersionNotes",{version:t.viewModel.App.AppVersionNumber}),"Edit App Version Notes","Save",{notes:ko.observable(t.viewModel.App.VersionNotes())}).SubmitData(function(n){return{notes:n.notes()}}).Done(function(n,i){t.viewModel.App.VersionNotes(i.Notes)}).MultilineTextField("notes","Version Notes").Create()},t.CreateVersionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"CreateVersion"),"Publish Version","Publish",{notes:ko.observable("")}).SubmitData(function(n){return{notes:n.notes()}}).Done(function(){views.Application_Details.Load(t.viewModel.App.AppId,t.viewModel.GroupId)}).MessageField("Publish a new version for this application?").MultilineTextField("notes","Notes").Create()},t.OverwriteWorkInProgressForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"OverwriteWorkInProgress",{version:t.viewModel.App.AppVersionNumber}),"Overwrite Work In Progress","Confirm",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to overwrite the work in progress version?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible overwrite").Create()},t.DeleteAppVersionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"DeleteAppVersion"),"Delete Application Version","Delete",{appVersionNumber:ko.observable(n),confirm:ko.observable(!1)}).SubmitData(function(n){return{appVersionNumber:n.appVersionNumber(),confirm:n.confirm()}}).Done(function(){views.Application_Details.Load(t.viewModel.App.AppId,t.viewModel.GroupId)}).MessageField("Are you sure you want to delete this application version?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of application version").Create()},t.DeleteModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"DeleteAppModuleFromVersion",{version:n.AppVersionNumber}),"Delete Application Module","Delete",{appModuleId:ko.observable(n.AppModuleId),confirm:ko.observable(!1)}).SubmitData(function(n){return{appModuleId:n.appModuleId(),confirm:n.confirm()}}).Done(function(){page.Update();t.modulesTable.LoadData()}).MessageField("Are you sure you want to delete this Application Module?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Application Module").Create()},t.AddModuleForm=function(){var n={name:ko.observable(),allVersions:ko.observable(!1),module:ko.observable(),slot:ko.observable(null),index:ko.observable(null)};return new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"AddAppModuleToVersion",{version:t.viewModel.App.AppVersionNumber()}),"Add Module","Add",n).SubmitData(function(n){return{moduleName:n.name(),appModuleSourceId:n.module().AppModuleSourceId,moduleVersion:n.module().ModuleVersion,slot:n.slot(),index:n.index()}}).Validate(function(n){return n.module()==null?"Select a module source to add.":null}).Done(function(){page.Update();t.modulesTable.LoadData()}).CheckBoxField("allVersions","Show all versions of module sources").AjaxFilterDropDownListField("module","Select Module Source",function(n){return n.Type+"v"+n.ModuleVersion},function(n){return{AppModuleSourceId:n.AppModuleSourceId,ModuleVersion:n.ModuleVersion}},ko.computed(function(){return route.forControllerItemAction("Application",t.viewModel.App.AppId,"AvailableModuleSources",{allVersions:n.allVersions()})}),!0,null,"Type",10,10).TextField("name","Module Name",50).IntNumberField("slot","Slot (optional)",0,255,!0).IntNumberField("index","Index (optional)",0,255,!0).Create()},t.CreateAppBinaryForm=function(){return new DialogViewModelBuilder(null,"Build Binary","Close",{}).SubmitData(function(){return{}}).Done(function(){}).MessageField("Binary build is not yet implemented. Upload a binary from the app details page instead.").Create()},t.BuildApplicationTemplate=function(){var n={groupId:ko.observable(0),templateName:ko.observable(""),moduleIds:ko.observableArray([])},i=new DialogViewModelBuilder(route.forControllerItemAction("Application",t.viewModel.App.AppId,"CreateApplicationTemplateFromApp"),"Create Template","Create",n).SubmitData(function(n){return ko.mapping.toJS(n)}).Done(function(n,t){views.ApplicationTemplate_Details.Load(t.ApplicationTemplateId)}).AjaxCompactFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),!1,null,"Name",5,1).TextField("templateName","Template Name");page.ViewRequests.push($.ajax(route.forControllerItemAction("Application",t.viewModel.App.AppId,"GetAppModulesForTemplate",{version:t.viewModel.App.AppVersionNumber()}),{data:{},type:"POST"}).done(function(t){t.length>0&&t.forEach(function(t){var r="Module#"+t.AppModuleId+"$";n.moduleIds.push(t.AppModuleId);n[r+"DashboardType"]=ko.observable("");n[r+"Index"]=ko.observable(t.Index);n[r+"Icon"]=ko.observable("");n[r+"Name"]=ko.observable(t.ModuleName);n[r+"ShortName"]=ko.observable(t.ModuleName);i.MessageField(t.ModuleName+" - "+t.Type);i.DropDownListField(r+"DashboardType","DashboardType",function(n){return n},function(n){return n},t.DashboardTypes);i.TextField(r+"Index","Index");i.AjaxCompactFilterDropDownListField(r+"Icon","Icon",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableIconNames"),!1,null,null,5,1);i.TextField(r+"Name","Name");i.TextField(r+"ShortName","ShortName")});page.OpenFormDialog(i.Create())}))},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),ApplicationTemplate_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new ApplicationTemplate_Details_Model,t.stateHandler=function(){return new ApplicationTemplate_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.ApplicationTemplate.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("ApplicationTemplate",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("application-template",new Header_Text(t.viewModel.ApplicationTemplate.Name,"Template Name",t.viewModel.ApplicationTemplate.ApplicationName,"Application Name")),new Command_Block("Groups","Groups containing template",null,function(){return views.ApplicationTemplate_ContainingGroups.Load(t.viewModel.ApplicationTemplate.ApplicationTemplateId)}),new Command_Block("View","View assigned application",null,function(){return views.Application_Details.Load(t.viewModel.ApplicationTemplate.AppId,null)},page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Edit","Edit application template",t.EditApplicationTemplateForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Modules","Add new modules",t.AddModulesForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Delete","Delete application template",t.DeleteApplicationTemplateForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))])]);t.modulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("ApplicationTemplate",t.viewModel.ApplicationTemplate.ApplicationTemplateId,"ModulesTable"),"ModuleIndex",!0,function(n){return views.ApplicationTemplate_Module.Load(t.viewModel.ApplicationTemplate.ApplicationTemplateId(),n.ModuleIndex)},100);t.modulesTable.AddColumn(new FilterTableColumnViewModel("ModuleIndex","ModuleIndex",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("Icon","Icon",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ShortName","ShortName",!1,!0)).AddColumn(new FilterTableColumnViewModel("KeyValueCount","Key-Values",!1,!0)).AddColumn(new CommandTableColumnViewModel("Delete Module","delete",function(n){return page.OpenFormDialog(t.DeleteModuleForm(n))},page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))).AddTitle("Modules");page.Add(t.pageCommands);page.Add(t.modulesTable);BaseUpdate(t,[t.modulesTable])},t.EditApplicationTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.ApplicationTemplate.ApplicationTemplateId,"Update"),"Edit ApplicationTemplate","Update",{name:ko.observable(t.viewModel.ApplicationTemplate.Name()),applicationGuid:ko.observable(t.viewModel.ApplicationTemplate.ApplicationGuid())}).SubmitData(function(n){return{name:n.name(),applicationGuid:n.applicationGuid()}}).Done(function(){page.Update()}).TextField("name","Name",255).AjaxCompactFilterDropDownListField("applicationGuid","Application",function(n){return n.Name+" (v"+n.AppVersionNumber+")"},function(n){return n.ApplicationGuid},route.forControllerAction("ApplicationTemplate","AvailableApplications"),!1,{ApplicationGuid:t.viewModel.ApplicationTemplate.ApplicationGuid(),Version:0,Name:t.viewModel.ApplicationTemplate.ApplicationName()},"Name",3,1).Create()},t.AddModulesForm=function(){var n={moduleIndex:ko.observable(0),moduleType:ko.observable(""),icon:ko.observable(""),name:ko.observable(""),shortName:ko.observable("")};return ko.computed(function(){return n.moduleIndex(t.viewModel.ApplicationTemplate.ModuleMaxIndex()+1)}),new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.ApplicationTemplate.ApplicationTemplateId,"AddModule"),"Add Modules","Add & Continue",n).SubmitData(function(n){return{moduleIndex:n.moduleIndex(),moduleType:n.moduleType(),icon:n.icon(),name:n.name(),shortName:n.shortName()}}).Done(function(){page.Update()}).IntNumberField("moduleIndex","Module Index").AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableModuleTypes"),!1,null,null,5,1).AjaxCompactFilterDropDownListField("icon","Icon",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableIconNames"),!1,null,null,5,1).TextField("name","Name",100).TextField("shortName","Short Name",50).CreateMulti()},t.DeleteModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.ApplicationTemplate.ApplicationTemplateId,"DeleteModule",{moduleIndex:n.ModuleIndex}),"Delete Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to delete this Module?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Module").Create()},t.DeleteApplicationTemplateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.ApplicationTemplate.ApplicationTemplateId,"Delete"),"Delete ApplicationTemplate","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Group_Index.Load()}).MessageField("Are you sure you want to delete this Application Template?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Application Template").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),ApplicationTemplate_Module=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new ApplicationTemplate_Module_Model,t.stateHandler=function(){return new ApplicationTemplate_Module_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Module.Name,t.viewModel.Module.ApplicationTemplateName,views.ApplicationTemplate_Details.routeHandler(t.viewModel.Module.ApplicationTemplateId),function(){return views.ApplicationTemplate_Details.Load(t.viewModel.Module.ApplicationTemplateId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("ApplicationTemplate",n,"Module",{moduleIndex:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block(t.viewModel.Module.Icon,new Header_Text(t.viewModel.Module.Name,t.viewModel.Module.ShortName,t.viewModel.Module.Type,"Module Type")),new SingleValue_Block("Module Index",t.viewModel.Module.ModuleIndex),new Command_Block("Edit","Edit module",t.EditModuleForm,null,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Key-Values","Add new key-values",t.AddKeyValuesForm,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Delete","Delete module from template",t.DeleteModuleForm,page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))])]);t.keyValuesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("ApplicationTemplate",t.viewModel.Module.ApplicationTemplateId,"ModuleKeyValuesTable",{ModuleIndex:t.viewModel.Module.ModuleIndex}),"Key",!0,function(n){return page.OpenFormDialog(t.EditKeyValueForm(n))},100);t.keyValuesTable.AddColumn(new FilterTableColumnViewModel("Key","Key",!1,!0)).AddColumn(new FilterTableColumnViewModel("Value","Value",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Key-Value","delete",function(n){return page.OpenFormDialog(t.DeleteKeyValueForm(n.Key))},page.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))).AddTitle("Module Key-Values");page.Add(t.pageCommands);page.Add(t.keyValuesTable);BaseUpdate(t,[t.keyValuesTable])},t.EditModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.Module.ApplicationTemplateId,"UpdateModule",{moduleIndex:t.viewModel.Module.ModuleIndex}),"Edit Module","Update",{newModuleIndex:ko.observable(t.viewModel.Module.ModuleIndex()),moduleType:ko.observable(t.viewModel.Module.Type()),icon:ko.observable(t.viewModel.Module.Icon()),name:ko.observable(t.viewModel.Module.Name()),shortName:ko.observable(t.viewModel.Module.ShortName())}).SubmitData(function(n){return{moduleIndex:t.viewModel.Module.ModuleIndex(),newModuleIndex:n.newModuleIndex(),moduleType:n.moduleType(),icon:n.icon(),name:n.name(),shortName:n.shortName()}}).Done(function(n){t.viewModel.Module.ModuleIndex()!==n.newModuleIndex()?views.ApplicationTemplate_Module.Load(t.viewModel.Module.ApplicationTemplateId,n.newModuleIndex):page.Update()}).IntNumberField("newModuleIndex","Module Index").AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableModuleTypes"),!1,t.viewModel.Module.Type(),null,5,1).AjaxCompactFilterDropDownListField("icon","Icon",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableIconNames"),!1,t.viewModel.Module.Icon(),null,5,1).TextField("name","Name",100).TextField("shortName","Short Name",50).Create()},t.AddKeyValuesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.Module.ApplicationTemplateId,"AddKeyValue",{moduleIndex:t.viewModel.Module.ModuleIndex}),"Add Key-Value","Add & Continue",{key:ko.observable(""),value:ko.observable("")}).SubmitData(function(n){return{key:n.key(),value:n.value()}}).Done(function(){t.keyValuesTable.LoadData()}).TextField("key","Key",50).TextField("value","Value").CreateMulti()},t.EditKeyValueForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.Module.ApplicationTemplateId,"UpdateKeyValue",{moduleIndex:t.viewModel.Module.ModuleIndex}),"Edit Key-Value","Update",{newKey:ko.observable(n.Key),value:ko.observable(n.Value)}).SubmitData(function(t){return{key:n.Key,newKey:t.newKey(),value:t.value()}}).Done(function(){t.keyValuesTable.LoadData()}).TextField("newKey","Key",50).TextField("value","Value").Create()},t.DeleteKeyValueForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.Module.ApplicationTemplateId,"DeleteKeyValue",{moduleIndex:t.viewModel.Module.ModuleIndex}),"Delete Key-value","Delete",{confirm:ko.observable(!1)}).SubmitData(function(t){return{key:n,confirm:t.confirm()}}).Done(function(){t.keyValuesTable.LoadData()}).MessageField("Are you sure you want to delete this Key-value?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Key-value").Create()},t.DeleteModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("ApplicationTemplate",t.viewModel.Module.ApplicationTemplateId,"DeleteModule",{moduleIndex:t.viewModel.Module.ModuleIndex}),"Delete Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.ApplicationTemplate_Details.Load(t.viewModel.Module.ApplicationTemplateId)}).MessageField("Are you sure you want to delete this Module?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Module").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AppModuleSource_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new AppModuleSource_Details_Model,t.stateHandler=function(){return new AppModuleSource_Details_State(t)},t.titleHandler=function(){return t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.AppModuleSource.Type,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.AppModuleSource.Type,"App Module Sources",views.Group_AppModuleSources.routeHandler(t.viewModel.GroupId),function(){return views.Group_AppModuleSources.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("AppModuleSource",n,"Details"):route.forControllerItemAction("AppModuleSource",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.AppModuleSource.ApplicationGuid,null,function(){return CopyToClipboard(t.viewModel.AppModuleSource.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("module-source",new Header_Text(t.viewModel.AppModuleSource.Type,"Module Source Type",t.viewModel.AppModuleSource.DeviceType,"Device Type")),new SingleValue_Block("Created",ComputedDateTime(t.viewModel.AppModuleSource.CreatedUtc)),new SingleValue_Block("Creator",t.viewModel.AppModuleSource.CreatedUserName)]),tiles.createTile().addBlockSet([new Command_Block("Create","Create a new version",t.CreateModuleVersionForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Edit","Edit the type",t.EditModuleForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Types","Add a dashboard type",t.AddDashboardTypeForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Delete","Permanently delete module source",t.DeleteAppModuleSourceForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Delete))])]);t.versionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"VersionsTable"),"ModuleVersion",!1,function(n){return views.AppModuleSource_Version.Load(n.AppModuleSourceId,n.ModuleVersion,t.viewModel.GroupId)},25);t.versionsTable.AddColumn(new NumberFilterTableColumnViewModel("ModuleVersion","Version",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("InputsCount","Inputs",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("OutputsCount","Outputs",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Notes","Notes",!0,!0,function(n){return n.Notes.length<50?n.Notes:n.Notes.substring(0,47)+"..."})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUserName","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Delete Version","delete",function(n){return page.OpenFormDialog(t.DeleteModuleVersionForm(n.ModuleVersion))},page.HasCapabilityComputed(Capability.AppModuleSource_Delete))).AddTitle("All Versions");t.dashboardTypesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"DashboardTypesTable"),"Name",!1,null,25);t.dashboardTypesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Delete Type","delete",function(n){return page.OpenFormDialog(t.DeleteDashboardTypeForm(n.Name))},page.HasCapabilityComputed(Capability.AppModuleSource_Edit))).AddTitle("Dashboard Types");page.Add(t.pageCommands);page.Add(t.dashboardTypesTable);page.Add(t.versionsTable);BaseUpdate(t,[t.versionsTable,t.dashboardTypesTable])},t.CreateModuleVersionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"CreateVersion"),"Create Version","Create",{file:ko.observable(""),notes:ko.observable("")}).SubmitData(function(n){return{file:n.file(),notes:n.notes()}}).Done(function(n,i){views.AppModuleSource_Version.Load(t.viewModel.AppModuleSource.AppModuleSourceId,i.ModuleVersion,t.viewModel.GroupId)}).MessageField("Create a new version for this Module Source?").SingleFileUploadField("file","Source").MultilineTextField("notes","Version Notes",null,!0).Create()},t.EditModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"Edit"),"Edit","Update",{type:ko.observable(t.viewModel.AppModuleSource.Type())}).SubmitData(function(n){return{type:n.type()}}).Done(function(n,i){t.viewModel.AppModuleSource.Type(i.Type)}).MessageField("Update the type for this Module Source?").TextField("type","Type",null,!0).Create()},t.AddDashboardTypeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"AddDashboardType"),"Add Dashboard Type","Add",{types:ko.observableArray([])}).SubmitData(function(n){return{types:n.types()}}).Done(function(){t.dashboardTypesTable.LoadData()}).MessageField("Add dashboard types to this Module Source?").AjaxMultiSelectListField("types","Dashboard Types",function(n){return n},function(n){return n},route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"AvailableDashboardTypes"),10,!0).Create()},t.DeleteDashboardTypeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"DeleteDashboardType"),"Delete Module Source Version","Delete",{confirm:ko.observable(!1)}).SubmitData(function(t){return{confirm:t.confirm(),type:n}}).Done(function(){t.dashboardTypesTable.LoadData()}).MessageField("Are you sure you want to delete this module source dashboard type?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of module source dashboard type").Create()},t.DeleteModuleVersionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"DeleteVersion",{version:n}),"Delete Module Source Version","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.versionsTable.LoadData()}).MessageField("Are you sure you want to delete this Module Source version?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Module Source version").Create()},t.DeleteAppModuleSourceForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSource.AppModuleSourceId,"Delete"),"Delete Module Source","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.viewModel.GroupId()==null?views.Group_Index.Load():views.Group_AppModuleSources.Load(t.viewModel.GroupId)}).MessageField("Are you sure you want to delete this Module Source?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Module Source").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AppModuleSource_SourceXML=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new AppModuleSource_SourceXML_Model,t.stateHandler=function(){return new AppModuleSource_SourceXML_State(t)},t.titleHandler=function(){return page.SetTitle("Source XML",t.viewModel.AppModuleSource.Type()+" v"+t.viewModel.AppModuleSource.ModuleVersion(),views.AppModuleSource_Version.routeHandler(t.viewModel.AppModuleSource.AppModuleSourceId,t.viewModel.AppModuleSource.ModuleVersion,t.viewModel.GroupId),function(){return views.AppModuleSource_Version.Load(t.viewModel.AppModuleSource.AppModuleSourceId,t.viewModel.AppModuleSource.ModuleVersion,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return ko.unwrap(i)==null?route.forControllerItemAction("AppModuleSource",n,"SourceXML",{version:t}):route.forControllerItemAction("AppModuleSource",n,"SourceXML",{version:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){page.Add(new MessagePageItem(t.viewModel.AppModuleSource.Source));BaseUpdate(t)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AppModuleSource_Version=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new AppModuleSource_Version_Model,t.stateHandler=function(){return new AppModuleSource_Version_State(t)},t.titleHandler=function(){return page.SetTitle("Version "+t.viewModel.AppModuleSourceVersion.ModuleVersion(),t.viewModel.AppModuleSourceVersion.Type,views.AppModuleSource_Details.routeHandler(t.viewModel.AppModuleSourceVersion.AppModuleSourceId,t.viewModel.GroupId),function(){return views.AppModuleSource_Details.Load(t.viewModel.AppModuleSourceVersion.AppModuleSourceId,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return ko.unwrap(i)==null?route.forControllerItemAction("AppModuleSource",n,"Version",{version:t}):route.forControllerItemAction("AppModuleSource",n,"Version",{version:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.AppModuleSourceVersion.ApplicationGuid,null,function(){return CopyToClipboard(t.viewModel.AppModuleSourceVersion.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("module-source",new Header_Text(t.viewModel.AppModuleSourceVersion.Type,"Module Source Type",t.viewModel.AppModuleSourceVersion.DeviceType,"Device Type")),new SingleValue_Block("Module Version",t.viewModel.AppModuleSourceVersion.ModuleVersion),new SingleValue_Block("Inputs",t.viewModel.AppModuleSourceVersion.InputsCount),new SingleValue_Block("Outputs",t.viewModel.AppModuleSourceVersion.OutputsCount),new SingleValue_Block("Created",ComputedDateTime(t.viewModel.AppModuleSourceVersion.CreatedUtc)),new SingleValue_Block("Creator",t.viewModel.AppModuleSourceVersion.CreatedUserName)]),tiles.createTile().addBlockSet([new Command_Block("Notes","Edit the notes for this version",t.EditVersionNotesForm,null,page.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Source","View source for this version",null,function(){return views.AppModuleSource_SourceXML.Load(t.viewModel.AppModuleSourceVersion.AppModuleSourceId,t.viewModel.AppModuleSourceVersion.ModuleVersion,t.viewModel.GroupId)},page.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Copy Source","Copy source to clipboard",null,function(){return CopyToClipboard(t.viewModel.AppModuleSourceVersion.Source,!0)},page.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Delete","Delete this version",function(){return t.DeleteModuleVersionForm(t.viewModel.AppModuleSourceVersion.ModuleVersion())},null,page.HasCapabilityComputed(Capability.AppModuleSource_Delete))])]);t.moduleInputsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSourceVersion.AppModuleSourceId,"InputsTable",{version:t.viewModel.AppModuleSourceVersion.ModuleVersion}),"Name",!0,null,100);t.moduleInputsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhysicalIo","Physical Io",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!0,!1)).AddTitle("Module Inputs");t.moduleOutputsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSourceVersion.AppModuleSourceId,"OutputsTable",{version:t.viewModel.AppModuleSourceVersion.ModuleVersion}),"Name",!0,null,100);t.moduleOutputsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhysicalIo","Physical Io",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!0,!1)).AddTitle("Module Outputs");t.appsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSourceVersion.AppModuleSourceId,"UsageTable",{version:t.viewModel.AppModuleSourceVersion.ModuleVersion}),"Name",!0,function(n){return views.Application_AppVersion.Load(n.AppId,n.AppVersion,t.viewModel.GroupId)},25);t.appsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!0,!0)).AddColumn(new FilterTableColumnViewModel("ApplicationGuid","Guid",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("AppVersion","App Version",!0,!0)).AddTitle("Apps Using This Version");page.Add(t.pageCommands);page.Add(new HeaderPageItem("Version Notes","edit","Edit Notes",function(){return page.OpenFormDialog(t.EditVersionNotesForm())},page.HasCapabilityComputed(Capability.AppModuleSource_Edit)));page.Add(new HtmlMessagePageItem(t.viewModel.AppModuleSourceVersion.Notes));page.Add(t.moduleInputsTable);page.Add(t.moduleOutputsTable);page.Add(t.appsTable);BaseUpdate(t,[t.moduleInputsTable,t.moduleOutputsTable,t.appsTable])},t.DeleteModuleVersionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSourceVersion.AppModuleSourceId,"DeleteVersion",{version:n}),"Delete Version","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.AppModuleSource_Details.Load(t.viewModel.AppModuleSourceVersion.AppModuleSourceId,t.viewModel.GroupId)}).MessageField("Are you sure you want to delete this Module Source version?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Module Source version").Create()},t.EditVersionNotesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("AppModuleSource",t.viewModel.AppModuleSourceVersion.AppModuleSourceId,"EditVersionNotes",{version:t.viewModel.AppModuleSourceVersion.ModuleVersion()}),"Edit Module Source Version Notes","Save",{notes:ko.observable(t.viewModel.AppModuleSourceVersion.Notes())}).SubmitData(function(n){return{notes:n.notes()}}).Done(function(n,i){t.viewModel.AppModuleSourceVersion.Notes(i.Notes)}).MultilineTextField("notes","Version Notes").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),BillingEntity_AddressDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new BillingEntity_AddressDetails_Model,t.stateHandler=function(){return new BillingEntity_AddressDetails_State(t)},t.titleHandler=function(){return page.SetTitle("Address","Billing Entity",views.BillingEntity_Details.routeHandler(t.viewModel.Address.BillingEntityId,t.viewModel.GroupId),function(){return views.BillingEntity_Details.Load(t.viewModel.Address.BillingEntityId,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return route.forControllerItemAction("BillingEntity",n,"AddressDetails",{addressId:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Address Details"),new SingleValue_Block("Address",t.viewModel.Address.Address),new SingleValue_Block("City",t.viewModel.Address.City),new SingleValue_Block("State/Province",t.viewModel.Address.StateProvince),new SingleValue_Block("PostCode",t.viewModel.Address.Code),new SingleValue_Block("Country",t.viewModel.Address.Country),new Command_Block("Edit","Edit address details",t.EditAddressForm,null,page.HasCapabilityComputed(Capability.BillingEntity_Edit))]),tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text(t.viewModel.Address.BillingEntityName,"Billing Entity"),new Header_Actions(function(){return views.BillingEntity_Details.Load(t.viewModel.Address.BillingEntityId,t.viewModel.GroupId)})),new Command_Block("View Current","View the current address",null,function(){return views.BillingEntity_AddressDetails.Load(t.viewModel.Address.BillingEntityId,t.viewModel.Address.CurrentBillingAddressId,t.viewModel.GroupId)},ko.computed(function(){return t.viewModel.Address.CurrentBillingAddressId()!=null}))])]);t.addressHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("BillingEntity",t.viewModel.Address.BillingEntityId,"AddressHistoryTable",{addressId:t.viewModel.Address.AddressId}),"CreatedUtc",!1,function(n){return views.BillingEntity_AddressDetails.Load(t.viewModel.Address.BillingEntityId,n.AddressId,t.viewModel.GroupId)},25);t.addressHistoryTable.AddColumn(new FilterTableColumnViewModel("Address","Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("City","City",!1,!0)).AddColumn(new FilterTableColumnViewModel("StateProvince","State/Province",!1,!0)).AddColumn(new FilterTableColumnViewModel("Country","Country",!1,!0)).AddColumn(new FilterTableColumnViewModel("Code","Code",!1,!1)).AddColumn(new FilterTableColumnViewModel("CreatedUtc","Date Created",!0,!0,function(n){return FormatDateTime(moment(n.CreatedUtc))})).AddColumn(new FilterTableColumnViewModel("IsDDLSelectable","Usage",!1,!1,function(n){return n.IsDDLSelectable?"Reusable":"One Off"})).AddTitle("Previous Address Details");page.Add(t.pageCommands);page.Add(t.addressHistoryTable);BaseUpdate(t,[t.addressHistoryTable])},t.EditAddressForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",t.viewModel.Address.BillingEntityId,"UpdateAddress"),"Update Address Details","Update",{addressId:ko.observable(t.viewModel.Address.AddressId()),address:ko.observable(t.viewModel.Address.Address()),city:ko.observable(t.viewModel.Address.City()),stateProvince:ko.observable(t.viewModel.Address.StateProvince()),code:ko.observable(t.viewModel.Address.Code()),country:ko.observable(t.viewModel.Address.Country()),isDDLSelectable:ko.observable(!1)}).SubmitData(function(n){return{addressId:n.addressId(),address:n.address(),city:n.city(),stateProvince:n.stateProvince(),code:n.code(),country:n.country(),isDDLSelectable:n.isDDLSelectable()}}).Done(function(n,i){views.BillingEntity_AddressDetails.Load(t.viewModel.Address.BillingEntityId,i.NewAddressId,t.viewModel.GroupId)}).TextField("address","Address").TextField("city","City").TextField("stateProvince","State/Province",255,!0).TextField("code","Post Code").DropDownListField("country","Country",function(n){return n},function(n){return n},["New Zealand"]).CheckBoxField("isDDLSelectable","Reusable Address").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),BillingEntity_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new BillingEntity_Details_Model,t.stateHandler=function(){return new BillingEntity_Details_State(t)},t.titleHandler=function(){return t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.BillingEntity.CompanyName,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()}):page.SetTitle(t.viewModel.BillingEntity.CompanyName,"Billing Entities",views.Group_BillingEntities.routeHandler(t.viewModel.GroupId),function(){return views.Group_BillingEntities.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("BillingEntity",n,"Details"):route.forControllerItemAction("BillingEntity",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.showWhereBillingEntityIsSource=ko.observable(!1);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text(t.viewModel.BillingEntity.CompanyName,"Billing Entity",t.viewModel.BillingEntity.InventoryGroupName,ko.computed(function(){return t.viewModel.BillingEntity.InventoryGroupId()!=null?"Inventory Group":""}))),new Command_Block("Inventory","View devices in stock",null,function(){return views.Group_DeviceSummary.Load(t.viewModel.BillingEntity.InventoryGroupId())},ko.computed(function(){return t.viewModel.BillingEntity.InventoryGroupId()!=null})),new Command_Block("Groups","Groups containing billing entity",null,function(){return views.BillingEntity_ContainingGroups.Load(t.viewModel.BillingEntity.BillingEntityId)}),new Command_Block("Escalation","None",null,function(){return null},ko.computed(function(){return t.viewModel.BillingEntity.EscalationListId()==null})),new Command_Block("Escalation",t.viewModel.BillingEntity.EscalationListName,null,function(){return views.EscalationList_Details.Load(t.viewModel.BillingEntity.EscalationListId)},ko.computed(function(){return t.viewModel.BillingEntity.EscalationListId()!=null})),new Command_Block("Edit","Edit billing entity",t.EditBillingEntityForm,null,page.HasCapabilityComputed(Capability.BillingEntity_Edit)),new Command_Block("Add","Add existing cost item",t.AddCostItemForm,null,page.HasCapabilityComputed(Capability.BillingEntity_ManageCostItems)),new Command_Block("Accounts","View message accounts",null,function(){return views.BillingEntity_MessageAccounts.Load(t.viewModel.BillingEntity.BillingEntityId,t.viewModel.GroupId)})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Current Address"),new SingleValue_Block("Address",t.viewModel.BillingEntity.Address),new SingleValue_Block("City",t.viewModel.BillingEntity.City),new SingleValue_Block("State/Province",t.viewModel.BillingEntity.StateProvince),new SingleValue_Block("Post Code",t.viewModel.BillingEntity.Code),new SingleValue_Block("Country",t.viewModel.BillingEntity.Country),new Command_Block("View","View address details",null,function(){return views.BillingEntity_AddressDetails.Load(t.viewModel.BillingEntity.BillingEntityId,t.viewModel.BillingEntity.AddressId,t.viewModel.GroupId)})]).setEnabled(t.viewModel.BillingEntity.AddressId()!=null),tiles.createTile().addBlockSet([new SmallHeader_Block("Purchase Orders"),new Command_Block("Create","Create a new purchase order",t.CreatePurchaseOrderForm,null,page.HasCapabilityComputed(Capability.PurchaseOrder_Create))])]);t.purchaseOrderCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Purchase Order View"),new Command_Block("As Source","This billing entity as the source",null,function(){t.showWhereBillingEntityIsSource(!t.showWhereBillingEntityIsSource());t.purchaseOrdersTable.LoadData()},ko.computed(function(){return t.showWhereBillingEntityIsSource()}),"View orders sourced from this billing entity"),new Command_Block("As Target","This billing entity as the target",null,function(){t.showWhereBillingEntityIsSource(!t.showWhereBillingEntityIsSource());t.purchaseOrdersTable.LoadData()},ko.computed(function(){return!t.showWhereBillingEntityIsSource()}),"View orders made by this billing entity")])]);t.purchaseOrdersTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"PurchaseOrdersTable",{showWhereBillingEntityIsSource:t.showWhereBillingEntityIsSource()})}),"CreatedUtc",!1,function(n){return views.PurchaseOrder_Details.Load(n.PurchaseOrderId,t.viewModel.GroupId)},25);t.purchaseOrdersTable.AddColumn(new FilterTableColumnViewModel("TargetBillingEntity","Target Billing Entity",!1,!0,null,ko.computed(function(){return t.showWhereBillingEntityIsSource()}))).AddColumn(new FilterTableColumnViewModel("ReferenceNumber","Reference Number",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("AcknowledgedUtc","Date Acknowledged",!0,!0)).AddColumn(new FilterTableColumnViewModel("AcknowledgedBy","Acknowledged By",!0,!0)).AddColumn(new FilterTableColumnViewModel("DeliveryNotes","Notes",!0,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!1,!0)).AddColumn(new CommandTableColumnViewModel("Edit Address & Delivery Notes","edit",function(n){return page.OpenFormDialog(t.EditAddressForm(n))},!0,function(n){return!n.IsCompleted})).AddColumn(new CommandTableColumnViewModel("Delete Purchase Order","delete",function(n){return page.OpenFormDialog(t.DeletePurchaseOrderForm(n))},!0,function(n){return ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Delete)&&!n.IsCompleted})()})).AddTitle("Purchase Orders");t.unreceivedPurchaseOrdersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"UnreceivedPurchaseOrdersTable"),"DispatchedUtc",!1,function(n){return views.PurchaseOrder_PackingListDetails.Load(n.PurchaseOrderId,n.PackingListId,n.TargetGroupId)},25);t.unreceivedPurchaseOrdersTable.AddColumn(new DateFilterTableColumnViewModel("DispatchedUtc","Date Dispatched",!1,!0)).AddColumn(new FilterTableColumnViewModel("DispatchedBy","Dispatched By",!0,!0)).AddColumn(new FilterTableColumnViewModel("ItemCount","Items Packed",!1,!0)).AddTitle("Fully Shipped Packing Lists Not Yet Received");t.billingEntityCostItemTable=new AjaxFilterTableViewModel(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"CostItemsTable"),null,!0,function(n){return n.DeviceTypeId!=null?views.DeviceType_Details.Load(n.DeviceTypeId,t.viewModel.GroupId):null},25);t.billingEntityCostItemTable.AddColumn(new FilterTableColumnViewModel("ItemName","Item",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemDesc","Description",!0,!0)).AddColumn(new FilterTableColumnViewModel("UnitPrice","Unit Price",!1,!0,function(n){return FormatCurrency(n.UnitPrice)},page.HasCapabilityComputed(Capability.PurchaseOrder_ViewInvoice))).AddColumn(new FilterTableColumnViewModel("EffectiveDate","Effective",!1,!0,function(n){return moment(n.EffectiveDate).format("YYYY-MM-DD")})).AddColumn(new FilterTableColumnViewModel("EndDate","End",!0,!0,function(n){return n.EndDate!=null?moment(n.EndDate).format("YYYY-MM-DD"):"Not Set"})).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return page.OpenFormDialog(t.EditCostItemForm(n))},page.HasCapabilityComputed(Capability.BillingEntity_ManageCostItems))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveCostItemForm(n))},page.HasCapabilityComputed(Capability.BillingEntity_ManageCostItems))).AddTitle("Cost Items For Billing Entity");t.escalationListUserTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("EscalationList",t.viewModel.BillingEntity.EscalationListId,"UsersTable")}),"Priority",!0,function(n){return views.User_Details.Load(n.UserId)},25,ko.computed(function(){return t.viewModel.BillingEntity.EscalationListId()!=null}));t.escalationListUserTable.AddColumn(new FilterTableColumnViewModel("Priority","Priority",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return FormatSubscription(n.SendSms,n.SendEmail)})).AddTitle("Escalation List User Details");page.Add(t.pageCommands);page.Add(t.purchaseOrderCommands);page.Add(new HeaderPageItem("Unreceived Orders - If the below orders have been received, please mark them as received.",null,null,null,null,TileState.Warning,null,ko.computed(function(){return t.unreceivedPurchaseOrdersTable.data().length>0})));page.Add(t.unreceivedPurchaseOrdersTable);page.Add(t.purchaseOrdersTable);page.Add(t.billingEntityCostItemTable);page.Add(t.escalationListUserTable);BaseUpdate(t,[t.purchaseOrdersTable,t.unreceivedPurchaseOrdersTable,t.billingEntityCostItemTable,t.escalationListUserTable])},t.AddCostItemForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"AddCostItem"),"Add existing cost item(s) to billing entity","Add & Continue",{costItemId:ko.observableArray([]),unitPrice:ko.observable(),effectiveDate:ko.observable(moment().format("YYYY-MM-DD"))}).SubmitData(function(n){return{costItemId:n.costItemId(),unitPrice:n.unitPrice(),effectiveDate:n.effectiveDate()}}).Done(function(){t.billingEntityCostItemTable.LoadData()}).AjaxFilterDropDownListField("costItemId","Cost Items",function(n){return n.ItemName+"  (Base: "+FormatCurrency(n.UnitPrice)+")"},function(n){return n.CostItemId},ko.computed(function(){return route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"CostItemsWhichCanBeAdded",{listSize:t.billingEntityCostItemTable.data().length})}),!1,null,"ItemName",null,1,!0).NumberField("unitPrice","Unit Price (for selected cost items above)",0,999999,!1).DateField("effectiveDate","Effective Date").CreateMulti()},t.EditCostItemForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"UpdateCostItem"),"Update cost item for billing entity","Update",{unitPrice:ko.observable(n.UnitPrice),effectiveDate:ko.observable(moment(n.EffectiveDate).format("YYYY-MM-DD")),endDate:ko.observable(n.EndDate===null?null:moment(n.EndDate).format("YYYY-MM-DD"))}).SubmitData(function(t){return{costItemId:n.CostItemId,unitPrice:t.unitPrice(),effectiveDate:n.EffectiveDate,newEffectiveDate:t.effectiveDate(),newEndDate:t.endDate()}}).Done(function(){t.billingEntityCostItemTable.LoadData()}).MessageField("Update Cost Price for "+n.ItemName).MessageField(n.ItemDesc!=null?n.ItemDesc:"").NumberField("unitPrice","Unit Price",0,999999,!1).DateField("effectiveDate","Effective Date").DateField("endDate","End Date",!0).Create()},t.RemoveCostItemForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"RemoveCostItem"),"Remove cost item from billing entity","Remove",{}).SubmitData(function(){return{costItemId:n.CostItemId,effectiveDate:n.EffectiveDate}}).Done(function(){t.billingEntityCostItemTable.LoadData()}).MessageField("You are about to remove the following cost item from this billing entity").MessageField(n.ItemName).Create()},t.EditBillingEntityForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"Update"),"Update billing entity","Update",{companyName:ko.observable(t.viewModel.BillingEntity.CompanyName()),escalationListId:ko.observable(t.viewModel.BillingEntity.EscalationListId()),timeZoneName:ko.observable(t.viewModel.BillingEntity.TimeZoneName())}).SubmitData(function(n){return{companyName:n.companyName(),escalationListId:n.escalationListId(),timeZoneName:n.timeZoneName()}}).Done(function(n){t.viewModel.BillingEntity.EscalationListId(n.escalationListId());page.Update()}).TextField("companyName","Company Name").AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{TimeZoneName:t.viewModel.BillingEntity.TimeZoneName},"TimeZoneName",5,1).AjaxDropDownListField("escalationListId","Escalation List",function(n){return n.Name+" (ID: "+n.EscalationListId+")"},function(n){return n.EscalationListId},route.forControllerAction("Group","GetAvailableEscalationLists"),!0,{EscalationListId:t.viewModel.BillingEntity.EscalationListId}).Create()},t.CreatePurchaseOrderForm=function(){var n={referenceNumber:ko.observable(""),addressId:ko.observable(t.viewModel.BillingEntity.AddressId()),deliveryNotes:ko.observable(""),address:ko.observable(""),city:ko.observable(""),stateProvince:ko.observable(""),code:ko.observable(""),country:ko.observable(""),isDDLSelectable:ko.observable(!1),sourceGroupId:ko.observable(0),showAllAddresses:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"CreatePurchaseOrder"),"Create Purchase Order","Create",n).SubmitData(function(n){return n.addressId()===-1?{referenceNumber:n.referenceNumber(),addressId:n.addressId(),deliveryNotes:n.deliveryNotes(),sourceGroupId:n.sourceGroupId(),address:n.address(),city:n.city(),stateProvince:n.stateProvince(),code:n.code(),country:n.country(),isDDLSelectable:n.isDDLSelectable()}:{referenceNumber:n.referenceNumber(),addressId:n.addressId(),deliveryNotes:n.deliveryNotes(),sourceGroupId:n.sourceGroupId()}}).Done(function(n,i){views.PurchaseOrder_Details.Load(i.PurchaseOrderId,t.viewModel.GroupId)}).Validate(function(n){if(n.addressId===-1){if(n.address().length<1)return"You must supply an address.";if(n.city().length<1)return"You must supply a city.";if(n.code().length<1)return"You must supply a code.";if(n.country().length<1)return"You must supply a country."}return null}).TextField("referenceNumber","Reference Number").MessageField("Purchase order should be created in the Target Group").AjaxDropDownListField("sourceGroupId","Source Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"AvailableInventoryGroups"),null).CheckBoxField("showAllAddresses","Show All Addresses").AjaxDropDownAddressListField("addressId","Delivery Address",function(n){return n.FullAddress},function(n){return n.AddressId},ko.computed(function(){return route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"AvailableAddresses",{showAllAddresses:n.showAllAddresses()})}),!1,{AddressId:t.viewModel.BillingEntity.AddressId}).MultilineTextField("deliveryNotes","Delivery Notes",null,!0).Create()},t.DeletePurchaseOrderForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",n.PurchaseOrderId,"Delete",{billingEntityId:t.viewModel.BillingEntity.BillingEntityId}),"Delete Purchase Order","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.purchaseOrdersTable.LoadData()}).MessageField("You are about to delete this purchase order, and all order items associated with it.").CheckBoxField("confirm","Confirm irreversible deletion of purchase order").Create()},t.EditAddressForm=function(n){var i={addressId:ko.observable(n.AddressId),deliveryNotes:ko.observable(n.DeliveryNotes),address:ko.observable(""),city:ko.observable(""),stateProvince:ko.observable(""),code:ko.observable(""),country:ko.observable(""),isDDLSelectable:ko.observable(!1),showAllAddresses:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",n.PurchaseOrderId,"UpdateAddress",{billingEntityId:t.viewModel.BillingEntity.BillingEntityId}),"Update Delivery Address","Update",i).SubmitData(function(n){return n.addressId()===-1?{addressId:n.addressId(),deliveryNotes:n.deliveryNotes(),address:n.address(),city:n.city(),stateProvince:n.stateProvince(),code:n.code(),country:n.country(),isDDLSelectable:n.isDDLSelectable()}:{addressId:n.addressId(),deliveryNotes:n.deliveryNotes()}}).Done(function(){t.purchaseOrdersTable.LoadData()}).Validate(function(n){if(n.addressId===-1){if(n.address().length<1)return"You must supply an address.";if(n.city().length<1)return"You must supply a city.";if(n.code().length<1)return"You must supply a code.";if(n.country().length<1)return"You must supply a country."}return null}).CheckBoxField("showAllAddresses","Show All Addresses").AjaxDropDownAddressListField("addressId","Delivery Address",function(n){return n.FullAddress},function(n){return n.AddressId},ko.computed(function(){return route.forControllerItemAction("PurchaseOrder",n.PurchaseOrderId,"GetTargetBillingEntityAddresses",{billingEntityId:t.viewModel.BillingEntity.BillingEntityId,showAllAddresses:i.showAllAddresses})}),!1,{FullAddress:n.AddressString,AddressId:n.AddressId}).MultilineTextField("deliveryNotes","Delivery Notes",null,!0).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),BillingEntity_MessageAccounts=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new BillingEntity_MessageAccounts_Model,t.stateHandler=function(){return new BillingEntity_MessageAccounts_State(t)},t.titleHandler=function(){return page.SetTitle("Message Accounts",t.viewModel.BillingEntity.CompanyName,views.BillingEntity_Details.routeHandler(t.viewModel.BillingEntity.BillingEntityId(),t.viewModel.GroupId()),function(){return views.BillingEntity_Details.Load(t.viewModel.BillingEntity.BillingEntityId(),t.viewModel.GroupId())})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("BillingEntity",n,"MessageAccounts"):route.forControllerItemAction("BillingEntity",n,"MessageAccounts",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.messageAccountsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("BillingEntity",t.viewModel.BillingEntity.BillingEntityId,"MessageAccountsTable"),"Name",!0,function(n){return views.MessageAccount_Details.Load(n.MessageAccountId,t.viewModel.GroupId)},25);t.messageAccountsTable.AddColumn(new FilterTableColumnViewModel("Name","Account",!1,!0)).AddColumn(new DueByDateFilterTableColumnViewModel("AccountStart","Initial Period",!0,!0)).AddColumn(new DueByDateFilterTableColumnViewModel("PeriodStart","Current Period",!1,!0)).AddColumn(new DueByDateFilterTableColumnViewModel("PeriodEnd","Period Ends",!1,!0)).AddColumn(new FilterTableColumnViewModel("IsSmsExceeded","SMS",!1,!0,function(n){return n.IsSmsExceeded?"Exceeded":"Ok"})).AddColumn(new FilterTableColumnViewModel("IsEmailExceeded","Email",!1,!0,function(n){return n.IsEmailExceeded?"Exceeded":"Ok"})).AddTitle("Message Accounts");t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text(t.viewModel.BillingEntity.CompanyName,"Billing Entity",ko.computed(function(){return t.messageAccountsTable.data().length}),"Total accounts"),new Header_Actions(function(){return views.BillingEntity_Details.Load(t.viewModel.BillingEntity.BillingEntityId,t.viewModel.GroupId)}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Accounts"),new Command_Block("Create","Create a new account",t.CreateMessageAccountForm,null,page.HasCapabilityComputed(Capability.MessageAccount_Create))])]);page.Add(t.pageCommands);page.Add(t.messageAccountsTable);BaseUpdate(t,[t.messageAccountsTable])},t.CreateMessageAccountForm=function(){var n={name:ko.observable(""),messagePlanId:ko.observable(0),groupId:ko.observable(0)};return new DialogViewModelBuilder(ko.computed(function(){return route.forControllerItemAction("Group",n.groupId,"CreateMessageAccount")}),"Create Message Account","Create",n).SubmitData(function(n){return{name:n.name(),messagePlanId:n.messagePlanId(),billingEntityId:t.viewModel.BillingEntity.BillingEntityId()}}).Done(function(n,t){views.MessageAccount_Details.Load(t.MessageAccountId,n.groupId)}).TextField("name","Name",50,!1).MessageField("Select the group in which to create the message account.").AjaxDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainMessageAccount"),!1).MessageField("Select the message plan for the new account.").AjaxDropDownListField("messagePlanId","Message Plan",function(n){return n.Name},function(n){return n.MessagePlanId},route.forControllerAction("MessagePlan","AvailableMessagePlans"),!1).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Branding_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Branding_Details_Model,t.stateHandler=function(){return new Branding_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Branding.DisplayName,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Branding",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("brand",new Header_Text(t.viewModel.Branding.DisplayName,"DisplayName",t.viewModel.Branding.Name,"Name")),new SingleValue_Block("Groups",t.viewModel.Branding.GroupCount),new SingleValue_Block("Hostnames",t.viewModel.Branding.Hostnames().length),new Command_Block("Edit","Edit the details of branding",t.EditBrandingForm,null,page.HasCapabilityComputed(Capability.Branding_Edit))])]);page.Add(new HeaderPageItem(t.viewModel.Branding.DisplayName));page.Add(t.pageCommands);page.Add(new HeaderPageItem("Editable Settings"));page.Add(new TableViewModel([{Name:"Contact Us",Value:t.viewModel.Branding.ContactUsUrl},{Name:"Privacy Policy",Value:t.viewModel.Branding.PrivacyPolicyUrl},{Name:"Terms and Conditions",Value:t.viewModel.Branding.TermsAndConditionsUrl}],null,!0).AddColumn(new TextTableColumnViewModel("Name","Item",!1,!1)).AddColumn(new TextTableColumnViewModel("Value","Setting",!1,!1)));page.Add(new MessagePageItem(t.viewModel.Branding.Footer));page.Add(new HeaderPageItem("Other Settings"));page.Add(new TableViewModel([{Name:"Website",Value:t.viewModel.Branding.Website},{Name:"Dashboard",Value:t.viewModel.Branding.Dashboard},{Name:"FavIcon",Value:t.viewModel.Branding.FavIcon},{Name:"ToolbarLogo",Value:t.viewModel.Branding.ToolbarLogo},{Name:"Stylesheet",Value:t.viewModel.Branding.Stylesheet}],null,!0).AddColumn(new TextTableColumnViewModel("Name","Item",!1,!1)).AddColumn(new TextTableColumnViewModel("Value","Setting",!1,!1)));page.Add(new HeaderPageItem("Hostnames"));page.Add(new TableViewModel(t.viewModel.Branding.Hostnames().map(function(n){return{Name:n}}),null,!0).AddColumn(new TextTableColumnViewModel("Name","Name",!1,!1)));BaseUpdate(t)},t.EditBrandingForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Branding",t.viewModel.Branding.BrandingId,"Edit"),"Edit Branding","Update",{contactUsUrl:ko.observable(t.viewModel.Branding.ContactUsUrl()),privacyPolicyUrl:ko.observable(t.viewModel.Branding.PrivacyPolicyUrl()),termsAndConditionsUrl:ko.observable(t.viewModel.Branding.TermsAndConditionsUrl()),footer:ko.observable(t.viewModel.Branding.Footer())}).SubmitData(function(n){return{contactUsUrl:n.contactUsUrl(),privacyPolicyUrl:n.privacyPolicyUrl(),termsAndConditionsUrl:n.termsAndConditionsUrl(),footer:n.footer()}}).Done(function(){page.Update()}).MessageField("Note: These values are cached and can take a few minutes to update after changes have been applied.").TextField("contactUsUrl","Contact Us Url",255).TextField("privacyPolicyUrl","Privacy Policy Url",255).TextField("termsAndConditionsUrl","Terms and Conditions Url",255).MultilineTextField("footer","Main Footer Text (html enabled)").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),DataStream_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new DataStream_Details_Model,t.stateHandler=function(){return new DataStream_Details_State(t)},t.titleHandler=function(){return page.SetTitle("Data Stream",t.viewModel.ModuleName,views.Module_Details.routeHandler(t.viewModel.ModuleId),function(){return views.Module_Details.Load(t.viewModel.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("DataStream",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.DataStreamId,null,function(){return CopyToClipboard(t.viewModel.DataStreamId)},"Click to copy to clipboard"),new Header_Block("data-stream",new Header_Text("Data Stream",null,t.viewModel.Trend,"Trend")),new SingleValue_Block("Network",t.viewModel.NetworkName,ko.computed(function(){return t.viewModel.NetworkName()!=null})),new SingleValue_Block("Module",t.viewModel.ModuleName,ko.computed(function(){return t.viewModel.ModuleName()!=null})),new SingleValue_Block("Trend Units",t.viewModel.TrendUnits),new SingleValue_Block("Scale",t.viewModel.Scale),new SingleValue_Block("Stream Units",t.viewModel.Units)]),tiles.createTile().addBlockSet([new Command_Block("Configure","Configure this data stream",t.ConfigureDataStreamForm,null,page.HasCapabilityComputed(Capability.DataStream_Configure)),new Command_Block("Delete","Delete this data stream",t.DeleteDataStreamForm,null,page.HasCapabilityComputed(Capability.DataStream_Create))])]);t.eventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("DataStream",t.viewModel.DataStreamId,"EventsTable"),"TimeUtc",!1,null,25);t.eventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Events");page.Add(t.pageCommands);page.Add(t.eventsTable);BaseUpdate(t,[t.eventsTable])},t.ConfigureDataStreamForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("DataStream",t.viewModel.DataStreamId,"Configure"),"Configure Data Stream","Update",{scale:ko.observable(t.viewModel.Scale()),units:ko.observable(t.viewModel.Units())}).SubmitData(function(n){return{scale:n.scale(),units:n.units()}}).Done(function(n,i){t.viewModel.Scale(i.Scale);t.viewModel.Units(i.Units);t.eventsTable.LoadData()}).MessageField("Specify the scale for this data stream.").NumberField("scale","Scale").MessageField("Specify the units for this data stream after the scale is applied.").TextField("units","Units").Create()},t.DeleteDataStreamForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("DataStream",t.viewModel.DataStreamId,"Delete"),"Delete Data Stream","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){history.go(-1)}).MessageField("Are you sure you want to delete this data stream?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Device_Calibration=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Device_Calibration_Model,t.stateHandler=function(){return new Device_Calibration_State(t)},t.titleHandler=function(){return page.SetTitle("Calibration",t.viewModel.Device.DeviceExtAddress,views.Device_Details.routeHandler(t.viewModel.Device.DeviceExtAddress),function(){return views.Device_Details.Load(t.viewModel.Device.DeviceExtAddress)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Device",n,"Calibration",{deviceCalibrationId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.valuesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"CalibrationValuesTable",{deviceCalibrationId:t.viewModel.Device.DeviceCalibrationId}),"DeviceCalibrationId",!0,null,100);t.valuesTable.AddColumn(new FilterTableColumnViewModel("ValueIndex","ValueIndex",!1,!0)).AddColumn(new FilterTableColumnViewModel("CalibrationValue","CalibrationValue",!1,!0)).AddTitle("Calibration Values");page.Add(t.valuesTable);BaseUpdate(t,[t.valuesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Device_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Device_Details_Model,t.stateHandler=function(){return new Device_Details_State(t)},t.titleHandler=function(){t.viewModel.Device.NetworkId()!=null?page.SetTitle(t.viewModel.Device.Type,t.viewModel.Device.NetworkName()+" - "+t.viewModel.Device.NodeName(),views.Network_Node.routeHandler(t.viewModel.Device.NetworkId,t.viewModel.Device.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.Device.NetworkId,t.viewModel.Device.NodeAddress)}):page.SetTitle(t.viewModel.Device.Type,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Device",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.childDeviceCommands=ko.observableArray([]);ko.computed(function(){t.childDeviceCommands([]);t.viewModel.Device.ChildDevices().forEach(function(n){t.childDeviceCommands.push(new Command_Block(n.Type(),n.DeviceExtAddress(),null,function(){return views.Device_Details.Load(n.DeviceExtAddress())}))})});t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("device",new Header_Text(ko.computed(function(){return t.viewModel.Device.Type()+" v"+t.viewModel.Device.Model()}),ko.computed(function(){return"Firmware version "+t.viewModel.Device.FirmwareVersion()}),t.viewModel.Device.DeviceExtAddress,"Extended Address"),new Header_Actions(null,function(){return CopyToClipboard(t.viewModel.Device.Type()+" v"+t.viewModel.Device.Model())},function(){return CopyToClipboard(t.viewModel.Device.DeviceExtAddress)},null,"Click to copy to clipboard","Click to copy to clipboard")),new Command_Block("Edit","Edit device properties",t.EditDeviceForm,null,page.HasCapabilityComputed(Capability.Device_Edit)),new Command_Block("Device Type","View device type",null,function(){return views.DeviceType_Details.Load(t.viewModel.Device.DeviceTypeId(),null)}),new Command_Block("Groups","Groups containing device",null,function(){return views.Device_ContainingGroups.Load(t.viewModel.Device.DeviceExtAddress)}),new Command_Block("Attach Sim","Attach a sim",function(){return t.AttachSimForm(t.viewModel.Device.DeviceExtAddress)},null,ko.computed(function(){return page.HasCapability(Capability.Network_ManageSim)&&t.viewModel.Device.SimSupported()&&t.viewModel.Device.SimId()==null})),new Command_Block("Upgrade","Upgrade legacy device",t.UpgradeLegacyDeviceForm,null,ko.computed(function(){return t.viewModel.Device.DeviceTargetUpgradeModel()!=null&&t.viewModel.Device.DeviceTargetUpgradeModel()!==t.viewModel.Device.Model()&&page.HasCapability(Capability.Device_LegacyUpgrade)}))]),tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return t.viewModel.Device.NetworkName()||"Not Assigned"}),"Assigned Network",ko.computed(function(){return t.viewModel.Device.NodeName()||"Not Assigned"}),ko.computed(function(){return"Address "+FormatNodeAddress(t.viewModel.Device.NodeAddress())})),new Header_Actions(function(){return t.viewModel.Device.NetworkId()!=null?views.Network_Details.Load(t.viewModel.Device.NetworkId):null})),new Command_Block("View Network",ko.computed(function(){return t.viewModel.Device.NetworkName()||"Not Assigned"}),null,function(){return t.viewModel.Device.NetworkId()!=null?views.Network_Details.Load(t.viewModel.Device.NetworkId):null}),new Command_Block("View Node",ko.computed(function(){return t.viewModel.Device.NodeName()||"Not Assigned"}),null,function(){return t.viewModel.Device.NodeAddress()!=null?views.Network_Node.Load(t.viewModel.Device.NetworkId,t.viewModel.Device.NodeAddress):null}),new SingleValue_Block("Sim Status",t.viewModel.Device.SimStatus,ko.computed(function(){return page.HasCapability(Capability.Network_ManageSim)&&t.viewModel.Device.SimId()!=null})),new Command_Block("View Sim",ko.computed(function(){return t.viewModel.Device.SimNumber()||"Not Assigned"}),null,function(){return views.Sim_Details.Load(t.viewModel.Device.SimId)},ko.computed(function(){return t.viewModel.Device.SimId()&&page.HasCapability(Capability.Network_ManageSim)}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Child Devices")]).addBlockSet(t.childDeviceCommands).setEnabled(ko.computed(function(){return t.viewModel.Device.ChildDevices().length>0})),tiles.createTile().addBlockSet([new SmallHeader_Block("Parent Device"),new Command_Block(t.viewModel.Device.ParentDevice.Type,t.viewModel.Device.ParentDevice.DeviceExtAddress,null,function(){return views.Device_Details.Load(t.viewModel.Device.ParentDevice.DeviceExtAddress)})]).setEnabled(ko.computed(function(){return ko.unwrap(t.viewModel.Device.ParentDevice)!=null}))]);t.reportsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"TestReportsTable"),"CreatedUtc",!1,function(n){return views.Device_TestReport.Load(t.viewModel.Device.DeviceExtAddress,n.DeviceTestReportId)},10,page.HasCapabilityComputed(Capability.Device_ViewTestReport));t.reportsTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("AllPassed","Result",!1,!0,function(n){return n.AllPassed?"All Passed":"Some Fails"})).AddTitle("Test Reports");t.calibrationsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"CalibrationsTable"),"CreatedUtc",!1,function(n){return views.Device_Calibration.Load(t.viewModel.Device.DeviceExtAddress,n.DeviceCalibrationId)},10,page.HasCapabilityComputed(Capability.Device_ViewCalibration));t.calibrationsTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddTitle("Calibrations");t.targetDeviceActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"UserActionsForTargetDeviceTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.targetDeviceActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("Target Device Actions");page.Add(t.pageCommands);page.Add(t.reportsTable);page.Add(t.calibrationsTable);page.Add(t.targetDeviceActionsTable);BaseUpdate(t,[t.reportsTable,t.calibrationsTable,t.targetDeviceActionsTable])},t.EditDeviceForm=function(){var n={showObsolete:ko.observable(t.viewModel.Device.IsObsolete()),deviceTypeId:ko.observable(t.viewModel.Device.DeviceTypeId()),deviceModel:ko.observable(t.viewModel.Device.Model()),firmwareVersion:ko.observable(t.viewModel.Device.FirmwareVersion()),confirm:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"Update"),"Update Device","Update",n).SubmitData(function(n){return{deviceTypeId:n.deviceTypeId(),deviceModel:n.deviceModel(),firmwareVersion:n.firmwareVersion(),confirm:n.confirm()}}).Done(function(){page.Update()}).CheckBoxField("showObsolete","Include Obsolete Device Types").AjaxFilterDropDownListField("deviceTypeId","Type",function(n){return n.DeviceType+(n.IsChildDeviceType?" (Child Device of "+n.ParentDeviceTypeName+")":"")},function(n){return n.DeviceTypeId},ko.computed(function(){return route.forControllerActionParams("DeviceType","AvailableDeviceTypes",{showObsolete:n.showObsolete(),showChildren:!0})}),!1,{DeviceType:t.viewModel.Device.Type(),DeviceTypeId:t.viewModel.Device.DeviceTypeId()},"DeviceType").AjaxFilterDropDownListField("deviceModel","Model",function(n){return n.Model},function(n){return n.Model},ko.computed(function(){return n.deviceTypeId()?route.forControllerItemAction("DeviceType",n.deviceTypeId,"GetModels"):null}),!1,{Model:t.viewModel.Device.Model()},"Model").NumberField("firmwareVersion","Firmware Version",0,1e9).CheckBoxField("confirm","Are you sure you want to do this?").Create()},t.UpgradeLegacyDeviceForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"UpgradeLegacyDevice"),"Upgrade Legacy Device","Upgrade",{confirm:ko.observable(!1)}).SubmitData(function(n){return{deviceModel:t.viewModel.Device.DeviceTargetUpgradeModel(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Please ensure you know what you are doing before you attempt this. At minimum you will need to trigger a firmware update, then after the device reconnects, upgrade the application and re-apply the configuration. Do not proceed if you are unsure on any of these steps!").DisplayField("model","Current Model: "+t.viewModel.Device.Model()).DisplayField("targetModel","Upgraded Model: "+t.viewModel.Device.DeviceTargetUpgradeModel()).CheckBoxField("confirm","Confirm irreversible action?").Create()},t.AttachSimForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Device",n,"AttachSim"),"Attach Sim","Attach",{SimId:ko.observable()}).SubmitData(function(n){return{SimId:n.SimId()}}).Done(function(){page.Update()}).AjaxCompactFilterDropDownListField("SimId","Sim",function(n){return n.SimNumber},function(n){return n.SimId},route.forControllerAction("Device","AvailableSims"),!1,null,"SimNumber",5,1).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Device_TestReport=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Device_TestReport_Model,t.stateHandler=function(){return new Device_TestReport_State(t)},t.titleHandler=function(){return page.SetTitle("Test Report",t.viewModel.Device.DeviceExtAddress,views.Device_Details.routeHandler(t.viewModel.Device.DeviceExtAddress),function(){return views.Device_Details.Load(t.viewModel.Device.DeviceExtAddress)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Device",n,"TestReport",{deviceTestReportId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.reportsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Device",t.viewModel.Device.DeviceExtAddress,"TestReportItemsTable",{deviceTestReportId:t.viewModel.Device.DeviceTestReportId}),"Name",!0,null,100);t.reportsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemType","Item Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("Passed","Result",!1,!0,function(n){return n.Passed?"Pass":"Fail"})).AddColumn(new FilterTableColumnViewModel("Content","Content",!0,!1)).AddTitle("Test Report Items");page.Add(t.reportsTable);BaseUpdate(t,[t.reportsTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),DeviceType_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new DeviceType_Details_Model,t.stateHandler=function(){return new DeviceType_Details_State(t)},t.titleHandler=function(){return t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.DeviceType.DeviceType,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.DeviceType.DeviceType,"Device Types",views.Group_DeviceTypes.routeHandler(t.viewModel.GroupId),function(){return views.Group_DeviceTypes.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("DeviceType",n,"Details"):route.forControllerItemAction("DeviceType",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.showContainingGroups=ko.observable(!1);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("device",new Header_Text(t.viewModel.DeviceType.DeviceType,"Device Type",null,ko.computed(function(){return t.viewModel.DeviceType.IsObsolete()?"Obsolete":""}))),new SingleValue_Block("I/O Type",t.viewModel.DeviceType.IoType),new SingleValue_Block("Max I/O Modules",t.viewModel.DeviceType.MaxIoModules,ko.computed(function(){return t.viewModel.DeviceType.MaxIoModules()>0})),new SingleValue_Block("HardWare Id",ko.computed(function(){return t.viewModel.DeviceType.HardwareId()!=null?t.viewModel.DeviceType.HardwareId():"Unknown"})),new SingleValue_Block("Application",ko.computed(function(){return t.viewModel.DeviceType.SupportsApplication()?"Supported":"Not Supported"})),new SingleValue_Block("SIM",t.viewModel.DeviceType.SimRequirements)]),tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("Tools","",null,"")),new Command_Block("Groups","Groups containing device type",null,function(){return views.DeviceType_ContainingGroups.Load(t.viewModel.DeviceType.DeviceTypeId)}),new Command_Block("Edit","Edit device type",null,function(){return page.OpenFormDialog(t.EditDeviceTypeForm(t.viewModel.DeviceType))},page.HasCapabilityComputed(Capability.DeviceType_Edit)),new Command_Block("Create Child","Create child device type",t.CreateChildDeviceTypeForm,null,ko.computed(function(){return t.viewModel.DeviceType.ParentTypeId()==null&&page.HasCapability(Capability.DeviceType_Create)})),new Command_Block("Delete","Delete device type",function(){return t.DeleteDeviceTypeForm(t.viewModel.DeviceType.DeviceTypeId())},null,page.HasCapabilityComputed(Capability.DeviceType_Delete)),new Command_Block("Add Model","Add a new model for device type",t.CreateModelForm,null,page.HasCapabilityComputed(Capability.DeviceType_Edit))]),tiles.createTile().addBlockSet([new Header_Block("device",new Header_Text(t.viewModel.DeviceType.ParentTypeName,"Parent Device Type"),null,ko.computed(function(){return t.viewModel.DeviceType.ParentTypeId()!=null})),new Command_Block("Parent","Parent Device Type",null,function(){return views.DeviceType_Details.Load(t.viewModel.DeviceType.ParentTypeId,t.viewModel.GroupId)},ko.computed(function(){return t.viewModel.DeviceType.ParentTypeId()!=null}))])]);t.deviceTypeDescriptionCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Description",ko.computed(function(){return t.viewModel.DeviceType.Description()!==""}))])]);t.childDeviceTypesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"ChildTypesTable"),"DeviceType",!0,function(n){return views.DeviceType_Details.Load(n.DeviceTypeId,t.viewModel.GroupId)},25);t.childDeviceTypesTable.AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!1,!0)).AddColumn(new CommandTableColumnViewModel("Delete Device Type","delete",function(n){return page.OpenFormDialog(t.DeleteChildDeviceTypeForm(n.DeviceTypeId))},page.HasCapabilityComputed(Capability.DeviceType_Delete))).AddTitle("Child Device Types");t.deviceTypeModelsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"ModelsTable"),"Model",!0,null,25);t.deviceTypeModelsTable.AddColumn(new FilterTableColumnViewModel("Model","Model",!1,!0)).AddColumn(new FilterTableColumnViewModel("TargetUpgradeModel","Target Upgrade Model",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Target Upgrade Model","edit",function(n){return page.OpenFormDialog(t.SetModelUpgradeTarget(n))},page.HasCapabilityComputed(Capability.DeviceType_Edit))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return page.OpenFormDialog(t.DeleteModelForm(n))},page.HasCapabilityComputed(Capability.DeviceType_Delete))).AddTitle("Device Type Models");t.billingEntityCostItemsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"BillingEntityCostItemsTable"),"ItemName",!0,function(n){return views.BillingEntity_Details.Load(n.BillingEntityId,t.viewModel.GroupId)},25);t.billingEntityCostItemsTable.AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemName","Item Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("UnitPrice","Price",!1,!0,function(n){return FormatCurrency(n.UnitPrice)})).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return page.OpenFormDialog(t.EditCostItemForm(n))},page.HasCapabilityComputed(Capability.DeviceType_SetPrice))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return page.OpenFormDialog(t.RemoveCostItemForm(n))},page.HasCapabilityComputed(Capability.DeviceType_SetPrice))).AddTitle("Device Type Pricing for Billing Entities");page.Add(t.pageCommands);page.Add(t.deviceTypeDescriptionCommands);page.Add(new MessagePageItem(t.viewModel.DeviceType.Description,ko.computed(function(){return t.viewModel.DeviceType.Description()!==""})));page.Add(t.childDeviceTypesTable);page.Add(t.deviceTypeModelsTable);page.Add(t.billingEntityCostItemsTable);BaseUpdate(t,[t.childDeviceTypesTable,t.deviceTypeModelsTable,t.billingEntityCostItemsTable])},t.EditCostItemForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",n.BillingEntityId,"UpdateCostItem"),"Update cost item for billing entity","Update",{unitPrice:ko.observable(n.UnitPrice)}).SubmitData(function(t){return{costItemId:n.CostItemId,unitPrice:t.unitPrice()}}).Done(function(){t.billingEntityCostItemsTable.LoadData()}).MessageField("Update Cost Price for "+n.ItemName).MessageField(n.ItemDesc!=null?n.ItemDesc:"").NumberField("unitPrice","Unit Price",0,999999,!1).Create()},t.RemoveCostItemForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("BillingEntity",n.BillingEntityId,"RemoveCostItem"),"Remove cost item from billing entity","Remove",{}).SubmitData(function(){return{costItemId:n.CostItemId}}).Done(function(){t.billingEntityCostItemsTable.LoadData()}).MessageField("You are about to remove the following cost item from this billing entity").MessageField(n.ItemName).Create()},t.EditDeviceTypeForm=function(n){var t={deviceTypeId:ko.observable(n.DeviceTypeId()),deviceType:ko.observable(n.DeviceType()),imageUrl:ko.observable(n.ImageUrl()),description:ko.observable(n.Description()),parentTypeId:ko.observable(n.ParentTypeId()),isObsolete:ko.observable(n.IsObsolete()),isIoModule:ko.observable(n.IsIoModule()),ioTypeId:ko.observable(n.IoTypeId()),maxIoModules:ko.observable(n.MaxIoModules()),hardwareId:ko.observable(n.HardwareId()),configurableSerialPorts:ko.observable(n.ConfigurableSerialPorts()),supportsApplication:ko.observable(n.SupportsApplication()),supportsSim:ko.observable(n.SupportsSim()),simRequired:ko.observable(n.SimRequired())};return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",n.DeviceTypeId,"Update"),"Update Device Type","Update",t).SubmitData(function(n){return{deviceType:n.deviceType(),imageUrl:n.imageUrl(),description:n.description(),parentTypeId:n.parentTypeId(),isObsolete:n.isObsolete(),isIoModule:n.isIoModule(),ioTypeId:n.ioTypeId(),maxIoModules:n.maxIoModules(),hardwareId:n.hardwareId(),configurableSerialPorts:n.configurableSerialPorts(),supportsApplication:n.supportsApplication(),supportsSim:n.supportsSim(),simRequired:n.simRequired()}}).Done(function(){page.Update()}).TextField("deviceType","Device Type",50).CheckBoxField("isObsolete","Obsolete").MultilineTextField("description","Description").TextField("imageUrl","Image Url",null,!0).AjaxCompactFilterDropDownListField("parentTypeId","Parent Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerActionParams("DeviceType","AvailableDeviceTypes",{showObsolete:!0}),!0,{DeviceTypeId:t.parentTypeId},"DeviceType",1,1).MessageField("I/O Modules").CheckBoxField("isIoModule","I/O Module").AjaxCompactFilterDropDownListField("ioTypeId","I/O Type",function(n){return n.IoTypeName},function(n){return n.IoTypeId},route.forControllerActionParams("DeviceType","AvailableIOTypes"),!1,{IoTypeId:t.ioTypeId()},"IoTypeId",1,1).IntNumberField("maxIoModules","Max I/O Modules",0,65535,!1).IntNumberField("hardwareId","Hardware Id",1,65535).IntNumberField("configurableSerialPorts","Configurable Serial Ports",0,16,!1).CheckBoxField("supportsApplication","Supports Application").CheckBoxField("supportsSim","Supports SIM").CheckBoxField("simRequired","SIM Required").Create()},t.CreateChildDeviceTypeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"CreateChild"),"Create Child Device Type","Create",{deviceType:ko.observable(""),description:ko.observable(""),model:ko.observable(1),imageUrl:ko.observable("")}).SubmitData(function(n){return{deviceType:n.deviceType(),description:n.description(),model:n.model(),imageUrl:n.imageUrl()}}).Done(function(){page.Update()}).TextField("deviceType","Device Type").MultilineTextField("description","Description",null,!0).IntNumberField("model","Model",0,65535).TextField("imageUrl","Image Url",null,!0).Create()},t.DeleteChildDeviceTypeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",n,"Delete"),"Delete Child Device Type","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.childDeviceTypesTable.LoadData()}).MessageField("Are you sure you want to delete this child device type?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of child device type and all related data").Create()},t.DeleteDeviceTypeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",n,"Delete"),"Delete Device Type","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.viewModel.DeviceType.ParentTypeId()!=null?views.DeviceType_Details.Load(t.viewModel.DeviceType.ParentTypeId,t.viewModel.GroupId):views.Group_DeviceTypes.Load(t.viewModel.GroupId)}).MessageField("Are you sure you want to delete this device type?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of device type and all related data").Create()},t.CreateModelForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"CreateModel"),"Create Model for Device Type","Create",{model:ko.observable(t.viewModel.DeviceType.NextAvailableModel())}).SubmitData(function(n){return{model:n.model()}}).Done(function(){t.deviceTypeModelsTable.LoadData()}).IntNumberField("model","Model Number",1,65535).Create()},t.SetModelUpgradeTarget=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"SetModelUpgradeTarget"),"Set Device Type Model Upgrade Target","Update",{targetUpgradeModel:ko.observable(n.TargetUpgradeModel)}).SubmitData(function(t){return{model:n.Model,targetUpgradeModel:t.targetUpgradeModel()}}).Done(function(){t.deviceTypeModelsTable.LoadData()}).DisplayField("model","Source model number: "+n.Model).IntNumberField("targetUpgradeModel","Target Upgrade Model Number",1,65535,!0).Create()},t.DeleteModelForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("DeviceType",t.viewModel.DeviceType.DeviceTypeId,"DeleteModel"),"Delete model for device type","Delete",{confirm:ko.observable(!1)}).SubmitData(function(t){return{model:n.Model,confirm:t.confirm()}}).Done(function(){t.deviceTypeModelsTable.LoadData()}).MessageField("You are about to delete a model for this device type.").CheckBoxField("confirm","Confirm deletion of model for this device type").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),EscalationList_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new EscalationList_Details_Model,t.stateHandler=function(){return new EscalationList_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.EscalationList.Name,"Escalation",views.Escalation_Index.routeHandler(),function(){return views.Escalation_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("EscalationList",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.showContainingGroups=ko.observable(!1);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("attributes",new Header_Text(t.viewModel.EscalationList.Name,"Escalation List",ko.computed(function(){return t.viewModel.EscalationList.EscalationDelayMinutes()+"min"}),"Escalation delay")),new Command_Block("Groups","Groups containing escalation list",null,function(){return views.EscalationList_ContainingGroups.Load(t.viewModel.EscalationList.EscalationListId)})]),tiles.createTile().addBlockSet([new Command_Block("Delay","Set escalation delay",t.SetEscalationDelayForm,null,page.HasCapabilityComputed(Capability.EscalationList_Configure)),new Command_Block("Rename","Rename this escalation list",t.RenameForm,page.HasCapabilityComputed(Capability.EscalationList_Rename)),new Command_Block("Delete","Delete this escalation list",t.DeleteForm,null,page.HasCapabilityComputed(Capability.EscalationList_Delete))]),tiles.createTile().addBlockSet([new Command_Block("Add","Add an existing user",t.AddExistingUserForm,null,page.HasCapabilityComputed(Capability.EscalationList_ManageUser)),new Command_Block("Create","Create a new user",t.CreateUserForm,null,page.HasCapabilityComputed(Capability.EscalationList_CreateUser))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Containing Groups"),new Command_Block("Show","Show groups containing list",null,function(){return t.showContainingGroups(!t.showContainingGroups())},ko.computed(function(){return!t.showContainingGroups()})),new Command_Block("Hide","Hide groups containing list",null,function(){return t.showContainingGroups(!t.showContainingGroups())},ko.computed(function(){return t.showContainingGroups()}))])]);t.usersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"UsersTable"),"Priority",!0,function(n){return views.User_Details.Load(n.UserId)},10);t.usersTable.AddColumn(new NumberFilterTableColumnViewModel("Priority","Priority",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryEmailAddress","Email Address",!0,!1)).AddColumn(new FilterTableColumnViewModel("PrimaryPhoneNumber","Phone Number",!0,!1)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return FormatSubscription(n.SendSms,n.SendEmail)})).AddColumn(new CommandTableColumnViewModel("Edit Subscription","edit",function(n){return page.OpenFormDialog(t.UpdateSubscriptionForm(n))},page.HasCapabilityComputed(Capability.EscalationList_ManageUser))).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return page.OpenFormDialog(t.RemoveUserForm(n))},page.HasCapabilityComputed(Capability.EscalationList_ManageUser))).AddTitle("Users");t.historyTable=new AjaxFilterTableViewModel(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"HistoryTable"),"CreatedUtc",!1,function(n){return views.User_Details.Load(n.UserId)},10);t.historyTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("UserName","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("UserState","Action",!0,!0)).AddColumn(new FilterTableColumnViewModel("Priority","Priority",!0,!1,function(n){return n.PrevPriority===n.NewPriority?n.NewPriority:n.PrevPriority+" -> "+n.NewPriority})).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return FormatSubscriptionChange(n.PrevSendSms,n.PrevSendEmail,n.NewSendSms,n.NewSendEmail)})).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Actioned By",!0,!0)).AddTitle("Member History");t.alertsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"SubscribedAlertsTable"),null,!0,function(n){return views.Module_Details.Load(n.ModuleId)},10);t.alertsTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0)).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("AlertName","Alert",!1,!0,function(n){return"("+pad(n.AlertAndStatus,3)+") "+n.AlertName})).AddColumn(new CommandTableColumnViewModel("Manage Subscription","edit",function(n){return views.Module_AlertDetails.Load(n.ModuleId,n.AlertAndStatus)},page.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))).AddTitle("Subscribed Alerts");t.userModuleEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"ModuleEventsTable"),"SentUtc",!1,null,15);t.userModuleEventsTable.AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Create Time",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("SentUtc","Sent Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Delay","Delay",!0,!1,function(n){return n.SentUtc!=null?FormatDuration(moment.duration(moment(n.SentUtc).diff(moment(n.TimeUtc)))):""})).AddColumn(new FilterTableColumnViewModel("TargetUser","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("ContactMode","Mode of Contact",!1,!0,function(n){return FormatSubscription(n.SendSms,n.SendEmail)})).AddTitle("Events Received");t.groupsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"ContainingGroupsTable"),"CreatedUtc",!1,function(n){return views.Group_Details.Load(n.GroupId)},10,ko.computed(function(){return t.showContainingGroups()}));t.groupsTable.AddColumn(new FilterTableColumnViewModel("Name","Group",!1,!0)).AddTitle("Groups containing escalation list");page.Add(new HeaderPageItem("Escalation List"));page.Add(t.pageCommands);page.Add(t.usersTable);page.Add(t.historyTable);page.Add(t.alertsTable);page.Add(t.userModuleEventsTable);page.Add(t.groupsTable);BaseUpdate(t,[t.usersTable,t.alertsTable,t.historyTable,t.groupsTable])},t.SetEscalationDelayForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"SetEscalationDelay"),"Set Escalation Delay","Update",{escalationDelayMinutes:ko.observable(t.viewModel.EscalationList.EscalationDelayMinutes())}).SubmitData(function(n){return{escalationDelayMinutes:n.escalationDelayMinutes()}}).Done(function(n,i){t.viewModel.EscalationList.EscalationDelayMinutes(i.EscalationDelayMinutes)}).IntNumberField("escalationDelayMinutes","Escalation Delay Minutes",1,10080).Create()},t.RenameForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"Rename"),"Rename Escalation List","Rename",{name:ko.observable(t.viewModel.EscalationList.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.EscalationList.Name(i.Name)}).TextField("name","Name").Create()},t.DeleteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"Delete"),"Delete Escalation List","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Escalation_Index.Load()}).MessageField("Are you sure you want to delete this escalation list?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of escalation list").Create()},t.CreateUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"CreateUser"),"Create User","Create",{name:ko.observable(),groupId:ko.observable(),timeZoneName:ko.observable(page.currentUser.TimeZoneName()),emailAddress:ko.observable(),phoneNumber:ko.observable(),priority:ko.observable(),sendSms:ko.observable(!1),sendEmail:ko.observable(!0),brandingId:ko.observable()}).SubmitData(function(n){return{name:n.name(),groupId:n.groupId(),timeZoneName:n.timeZoneName(),emailAddress:n.emailAddress(),phoneNumber:n.phoneNumber(),priority:n.priority(),sendSms:n.sendSms(),sendEmail:n.sendEmail(),brandingId:n.brandingId()}}).Done(function(){t.usersTable.LoadData();t.historyTable.LoadData()}).MessageField("Full name for the new user, e.g. Joe Bloggs").TextField("name","Name").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"GroupsForCreatingUsers"),!1,null,"Name",5,5).AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{TimeZoneName:page.currentUser.TimeZoneName(),BaseUtcOffset:page.currentUser.UtcOffsetHours()},"TimeZoneName",5,1).MessageField("Optional email address for the new user.").TextField("emailAddress","Email Address",255,!0).MessageField("Optional phone number for the new user - should be in international format, e.g. 64212345678").TextField("phoneNumber","Phone Number",50,!0).MessageField("Specify the priority for the user. Lower numbers will receive messages first.").IntNumberField("priority","Priority",1,100).MessageField("Specify how the user should receive messages.").CheckBoxField("sendSms","Send SMS").CheckBoxField("sendEmail","Send Email").AjaxFilterDropDownListField("brandingId","Branding",function(n){return n.Name+" (ID: "+n.BrandingId+")"},function(n){return n.BrandingId},route.forControllerAction("Branding","AvailableBrandings"),!1,{BrandingId:t.viewModel.BrandingId()},"BrandingId").Create()},t.AddExistingUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"AddExistingUser"),"Add an Existing User","Add",{userId:ko.observableArray(),priority:ko.observableArray(),sendSms:ko.observable(!1),sendEmail:ko.observable(!0)}).SubmitData(function(n){return{userId:n.userId(),priority:n.priority(),sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){t.usersTable.LoadData();t.historyTable.LoadData()}).MessageField("Select a user to add to this escalation list.").AjaxFilterDropDownListField("userId","User",function(n){return n.Name+" (ID: "+n.UserId+")"},function(n){return n.UserId},route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"UsersWhichCanBeAdded"),!1,null,"Name",5,5).MessageField("Specify the priority for the user. Lower numbers will receive messages first.").IntNumberField("priority","Priority",1,100).MessageField("Specify how the user should receive messages.").CheckBoxField("sendSms","Send SMS").CheckBoxField("sendEmail","Send Email").Create()},t.RemoveUserForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"RemoveUser"),"Remove User","Remove",{userId:ko.observable(n.UserId),priority:ko.observable(n.Priority)}).SubmitData(function(n){return{userId:n.userId(),priority:n.priority()}}).Done(function(){t.usersTable.LoadData();t.historyTable.LoadData()}).MessageField("Are you sure you want to remove the user "+n.Name+" with priority "+n.Priority+" from this escalation list?").Create()},t.UpdateSubscriptionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("EscalationList",t.viewModel.EscalationList.EscalationListId,"UpdateSubscription"),"Update Subscription","Update",{userId:ko.observable(n.UserId),priority:ko.observable(n.Priority),sendSms:ko.observable(n.SendSms),sendEmail:ko.observable(n.SendEmail)}).SubmitData(function(n){return{userId:n.userId(),priority:n.priority(),sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){t.usersTable.LoadData();t.historyTable.LoadData()}).MessageField("Update subscription for user "+n.Name+" priority "+n.Priority).MessageField("Specify how the user should receive messages.").CheckBoxField("sendSms","Send SMS").CheckBoxField("sendEmail","Send Email").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),GisDataset_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new GisDataset_Details_Model,t.stateHandler=function(){return new GisDataset_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.GisDataset.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("GisDataset",n,"Details")},t.drawnCoordinates=[],t.drawingInProgress=ko.observable(!1),t.itemDescriptionCommands=ko.observableArray([]),t.editedPolygonId=ko.observable(0),t.coordinateHistory=[],t.isDragging=!1,t.isUndoing=!1,t.isCancelling=!1,t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){var i,n;ko.computed(function(){t.itemDescriptionCommands([]);t.viewModel.GisDataset.ItemDescriptions().forEach(function(n){t.itemDescriptionCommands.push(new Command_Block(n.ItemIndex,n.Description,null,function(){return page.HasCapability(Capability.GisDataset_Update)?page.OpenFormDialog(t.EditIndexDescriptionForm(n)):null}))})});$(document).keydown(function(n){n.which===90&&n.ctrlKey&&t.UndoLastPoint()});t.editedPolygonId(0);t.drawingInProgress(!1);t.isUndoing=!1;t.isCancelling=!1;t.isDragging=!1;ko.viewmodel.updateFromModel(t.polygonsModel,{});t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("gis-layers",new Header_Text(t.viewModel.GisDataset.Name,null,t.viewModel.GisDataset.PolygonCount,"Polygon Count")),new SingleValue_Block("ID",t.viewModel.GisDataset.GisDatasetId),new SingleValue_Block("Created",ComputedDateTime(t.viewModel.GisDataset.CreatedUtc())),new SingleValue_Block("Creator",t.viewModel.GisDataset.CreatedUser),new Command_Block("Groups","Groups containing dataset",null,function(){return views.GisDataset_ContainingGroups.Load(t.viewModel.GisDataset.GisDatasetId)}),new Command_Block("Clone","Clone and edit dataset",t.CloneDatasetForm,null,page.HasCapabilityComputed(Capability.GisDataset_Clone))]),tiles.createTile().addBlockSet([new Command_Block("Rename","Change the name of the dataset",t.RenameGisDatasetForm,null,page.HasCapabilityComputed(Capability.GisDataset_Update)),new Command_Block("Clear","Clear all data from the set",t.ClearGisDatasetForm,null,ko.computed(function(){return t.viewModel.GisDataset.IsEditable()&&page.HasCapability(Capability.GisDataset_Update)}))]),tiles.createTile().addBlockSet([new Header_Block("attributes",new Header_Text("Item Descriptions",null,ko.computed(function(){return t.viewModel.GisDataset.ItemDescriptions().length}),"Index value descriptions"))]).addBlockSet(t.itemDescriptionCommands).addBlockSet([new Command_Block("Add","Add an index",t.AddItemIndexForm,null,ko.computed(function(){return t.viewModel.GisDataset.IsEditable()&&page.HasCapability(Capability.GisDataset_Update)})),new Command_Block("Remove","Remove one or more indexes",t.RemoveItemIndexesForm,null,ko.computed(function(){return t.viewModel.GisDataset.IsEditable()&&t.viewModel.GisDataset.ItemDescriptions().length>0&&page.HasCapability(Capability.GisDataset_Update)}))])]);t.networksTable=new AjaxFilterTableViewModel(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"AssignedNetworksTable"),"ShortName",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25);t.networksTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("ShortName","SMS Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("NodeCount","Nodes",!0,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!0,!0)).AddTitle("Networks");t.mapItem=new MapPageItem(!0);t.polygonInfo=new MapPolygonsInfo;t.polygonInfo.polygons=t.polygonsModel.polygons;t.polygonInfo.getLatLng=function(n){for(var r=[],i=n.Coordinates,u=i.length,t=0;t<u;++t)r.push(new google.maps.LatLng(i[t].Latitude,i[t].Longitude));return r};t.polygonInfo.getName=function(n){return n.Name};t.polygonInfo.getInfo=function(n){var r="",i;return n.IndexValues.forEach(function(n){t.viewModel.GisDataset.ItemDescriptions().forEach(function(t){n.Key===t.ItemIndex()&&(r+='<div class="nodetext"><strong>'+t.Description()+":<\/strong> "+n.Value+"<\/div>")})}),i="",t.viewModel.GisDataset.IsEditable()&&(i="<br/><a href='#' onClick=\"{ page.view().mapItem.infoWindow.close(); page.view().SetEditablePolygon("+n.GisPolygonId+"); return false;}\"' > Edit Polygon <\/a>"),"<div>"+n.Name+r+i+"<\/div>"};t.mapItem.AddPolygons(t.polygonInfo);t.polygonsTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){t.viewModel.GisDataset.IsEditable()?t.SetEditablePolygon(n.PolygonId):page.SetMessage("You cannot edit a GIS dataset that is currently attached to a network.")},25);t.polygonsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("VertexCount","Vertices",!1,!0)).AddTitle("Polygons");t.polygonsTable.initialLoadComplete(!0);i=ko.computed(function(){var n=[];return t.polygonInfo.polygons().forEach(function(t){n.push({Name:t.Name,PolygonId:t.GisPolygonId,VertexCount:t.Coordinates.length,IndexValues:t.IndexValues})}),n}).extend({throttle:100});ko.computed(function(){t.polygonsTable.SetData({Items:i(),Success:!0})}).extend({throttle:100});t.polygonsTable.AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return page.OpenFormDialog(t.EditPolygonForm(n))},t.viewModel.GisDataset.IsEditable(),function(){return page.HasCapabilityComputed(Capability.GisDataset_EditPolygon)()})).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return page.OpenFormDialog(t.DeletePolygonForm(n))},t.viewModel.GisDataset.IsEditable(),function(){return page.HasCapabilityComputed(Capability.GisDataset_EditPolygon)()}));ko.computed(function(){var n=t.polygonsTable.columns.peek().filter(function(n){return n.name==="Name"||n.name==="VertexCount"||n.name==="Edit"||n.name==="Delete"});t.polygonsTable.columns.poke([]);t.polygonsTable.AddColumn(n[0]);t.polygonsTable.AddColumn(n[1]);t.viewModel.GisDataset.ItemDescriptions().forEach(function(n){var i=new FilterTableColumnViewModel(n.Description(),n.Description(),!0,!1,function(t){return t.IndexValues[n.ItemIndex()]?t.IndexValues[n.ItemIndex()].Value:null});t.polygonsTable.AddColumn(i)});t.polygonsTable.AddColumn(n[2]);t.polygonsTable.AddColumn(n[3])}).extend({throttle:300});page.Add(new HeaderPageItem("GIS Dataset"));page.Add(t.pageCommands);page.Add(new MessagePageItem("GIS Dataset cannot be edited while it is attached to a network.  Make a clone of the current dataset to enable editing.",!t.viewModel.GisDataset.IsEditable()));page.Add(t.networksTable);page.Add(new HeaderPageItem("Map"));page.Add(t.mapItem);page.Add(t.polygonsTable);t.drawingManager=new google.maps.drawing.DrawingManager({drawingMode:null,drawingControl:!1,polygonOptions:{strokeColor:"#1E90FF",strokeOpacity:.8,strokeWeight:2,fillColor:"#1E90FF",fillOpacity:.3,clickable:!0,editable:!0,draggable:!0,zIndex:5,geodesic:!0}});google.maps.event.addListener(t.drawingManager,"polygoncomplete",function(n){var i=n.getPath().getArray().map(function(n){return{Latitude:n.lat(),Longitude:n.lng()}});n.setMap(null);t.drawingInProgress(!1);t.isCancelling||page.OpenFormDialog(t.CreatePolygonForm(i));t.isCancelling=!1});t.drawingManager.setMap(t.mapItem.map);n=document.createElement("div");n.index=1;t.NewButton=t.CreateButton(n,"New","New",function(){return t.CreateNewPolygon()});t.CancelButton=t.CreateButton(n,"Cancel","Cancel",function(){return t.StopEditing()});t.UndoButton=t.CreateButton(n,"Undo","Undo last action",function(){return t.UndoLastPoint()});t.SaveButton=t.CreateButton(n,"Save","Save",function(){return t.SavePolygonVertices()});ko.computed(function(){t.NewButton.style.display=t.viewModel.GisDataset.IsEditable()&&!t.drawingInProgress()?"block":"none";t.drawingInProgress()?(t.CancelButton.style.display="block",t.editedPolygonId()?(t.UndoButton.style.display="block",t.SaveButton.style.display="block"):(t.UndoButton.style.display="none",t.SaveButton.style.display="none")):(t.CancelButton.style.display="none",t.UndoButton.style.display="none",t.SaveButton.style.display="none")});t.mapItem.map.controls[google.maps.ControlPosition.LEFT_TOP].push(n);t.mapItem.zoomToPolygons();BaseUpdate(t,[t.networksTable]);t.UpdatePolygons(!0)},t.UpdatePolygons=function(n){n===void 0&&(n=!1);page.ViewRequests.push($.ajax(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"GetPolygons"),{data:{},type:"POST"}).done(function(i){if(i.Success===!1){page.SetMessage(i.Message);return}ko.viewmodel.updateFromModel(t.polygonsModel,{polygons:i.Polygons});n&&t.mapItem.zoomToPolygons()}).fail(function(){page.SetMessage("Failed to load polygons.")}))},t.CreateButton=function(n,t,i,r){var u=document.createElement("div"),f;return u.style.backgroundColor="#fff",u.style.border="2px solid #fff",u.style.borderRadius="2px",u.style.cursor="pointer",u.style.margin="10px",u.style.textAlign="center",u.title=i,n.appendChild(u),f=document.createElement("div"),f.style.color="rgb(25,25,25)",f.style.fontFamily="Roboto,Arial,sans-serif",f.style.fontSize="11px",f.style.padding="6px",f.style.minWidth="60px",f.innerHTML=t,u.appendChild(f),google.maps.event.addDomListener(u,"click",r),u},t.StopEditing=function(){t.editableShape!=null&&(t.editableShape.setEditable(!1),t.editableShape.setDraggable(!1),t.editableShape.setMap(null),t.editableShape=null);t.isCancelling=!0;t.drawingManager.setDrawingMode(null);t.editedPolygonId(0);t.drawingInProgress(!1);t.coordinateHistory=[]},t.SetEditablePolygon=function(n){var u,f,o,e,r,i;if(t.coordinateHistory=[],t.editedPolygonId(n),t.drawingInProgress(!0),t.mapItem.polygonSets.forEach(function(t){var i=t.polygons().filter(function(t){return t.GisPolygonId===n});if(i.length>0){u=i[0];return}}),u!=null){for(f=u.map.polygon.getPath().getArray(),t.coordinateHistory.push(f),o=new google.maps.LatLngBounds,e=u.Coordinates,r=0;r<e.length;r++)o.extend(new google.maps.LatLng(e[r].Latitude,e[r].Longitude));t.mapItem.map.fitBounds(o);t.editableShape!=null&&t.editableShape.setMap(null);t.editableShape=new google.maps.Polygon({paths:f,strokeColor:"#1E90FF",strokeWeight:2,fillColor:"#1E90FF",fillOpacity:.2,zIndex:5,editable:!0,draggable:!0});t.drawingManager.setDrawingMode(null);t.editableShape.setMap(t.mapItem.map);t.drawnCoordinates=f;t.isDragging=!1;t.isUndoing=!1;i=function(){t.isUndoing||(t.drawnCoordinates=t.editableShape.getPath().getArray().slice(0),t.coordinateHistory.push(t.drawnCoordinates))};google.maps.event.addListener(t.editableShape,"polygoncomplete",i);google.maps.event.addListener(t.editableShape.getPath(),"set_at",function(){t.isDragging||i()});google.maps.event.addListener(t.editableShape.getPath(),"insert_at",i);google.maps.event.addListener(t.editableShape.getPath(),"remove_at",i);google.maps.event.addListener(t.editableShape,"dragend",function(){t.isDragging=!1;i()});google.maps.event.addListener(t.editableShape,"dragstart",function(){t.isDragging=!0})}},t.CreateNewPolygon=function(){t.isCancelling=!1;t.drawingInProgress(!0);t.drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON)},t.UndoLastPoint=function(){var i,u,n,r,f;if(t.coordinateHistory.length>1){for(t.coordinateHistory.pop(),i=t.editableShape.getPath(),u=t.coordinateHistory[t.coordinateHistory.length-1],t.isUndoing=!0,i.clear(),n=0,r=u;n<r.length;n++)f=r[n],i.push(f);t.isUndoing=!1}},t.RenameGisDatasetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"Rename"),"Rename GIS Dataset","Rename",{name:ko.observable(t.viewModel.GisDataset.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(){page.Update()}).MessageField("Assign a new name to this GIS dataset.").TextField("name","Name",256).Create()},t.ClearGisDatasetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"Clear"),"Clear GIS Dataset","Clear",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear all data in this GIS dataset?").MessageField("GIS datasets cannot be cleared if they are currently in use.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()},t.EditPolygonForm=function(n){var r=[],i,u;return t.viewModel.GisDataset.ItemDescriptions().forEach(function(t){var i=n.IndexValues.filter(function(n){return n.Key===t.ItemIndex()});r.push({ItemIndex:t.ItemIndex(),ItemDescription:t.Description(),ItemValue:i[0]?i[0].Value:0})}),i={indexValues:ko.observableArray(r),polygonName:ko.observable(n.Name)},u=new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"EditPolygon",{polygonId:n.PolygonId}),"Update Polygon","Update",i).SubmitData(function(n){return{indexValues:n.indexValues().map(function(n){return{Key:n.ItemIndex,Value:n.ItemValue}}),polygonName:n.polygonName()}}).Validate(function(n){var t=!0;return n.indexValues().forEach(function(n){Math.round(n.ItemValue)!==Number(n.ItemValue)&&(t=!1)}),t?null:"Values must be whole numbers"}).Done(function(){t.polygonsModel.polygons.remove(function(t){return t.GisPolygonId===n.PolygonId});t.UpdatePolygons()}).TextField("polygonName","Polygon Name").IndexValueDescriptionListField("Index Values",i.indexValues,function(n){return n.ItemDescription}).Create(),u},t.DeletePolygonForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"DeletePolygon",{gisPolygonId:n.PolygonId}),"Delete Polygon","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.UpdatePolygons()}).MessageField("Are you sure you want to delete the polygon "+n.Name+" from this GIS dataset ? ").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()},t.CreatePolygonForm=function(n){var i={indexValues:ko.observableArray([]),polygonName:ko.observable("")};return t.viewModel.GisDataset.ItemDescriptions().forEach(function(n){i.indexValues().push({ItemIndex:n.ItemIndex(),ItemDescription:n.Description(),ItemValue:0})}),new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"CreatePolygon"),"Create Polygon","Create",i).SubmitData(function(i){return{gisDatasetId:t.viewModel.GisDataset.GisDatasetId(),polygonName:i.polygonName(),indexValues:i.indexValues().map(function(n){return{Key:n.ItemIndex,Value:n.ItemValue}}),coordinates:n}}).Done(function(){t.StopEditing();t.drawingInProgress(!1);t.UpdatePolygons()}).TextField("polygonName","Polygon Name").IndexValueDescriptionListField("Index Values",i.indexValues,function(n){return n.ItemDescription}).Create()},t.SavePolygonVertices=function(){$.ajax(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"UpdatePolygonVertices"),{type:"POST",data:{gisPolygonId:t.editedPolygonId(),coordinates:t.drawnCoordinates.map(function(n){return{Latitude:n.lat(),Longitude:n.lng()}})}}).done(function(){page.view()===t&&(t.polygonsModel.polygons.remove(function(n){return n.GisPolygonId===t.editedPolygonId()}),t.StopEditing(),t.UpdatePolygons(),page.SetMessage("Polygon Saved!"))})},t.AddItemIndexForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"AddItemIndex"),"Add Index","Add & Continue",{description:ko.observable(""),index:ko.observable(0)}).SubmitData(function(n){return{description:n.description(),index:n.index()}}).Done(function(){page.Update();t.UpdatePolygons()}).MessageField("Specify the description for the index to be added.").NumberField("index","Index",0).TextField("description","Description").CreateMulti()},t.EditIndexDescriptionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"UpdateItemDescription"),"Edit Item Description","Update",{index:ko.observable(n.ItemIndex()),description:ko.observable(n.Description())}).SubmitData(function(n){return{description:n.description(),index:n.index()}}).Done(function(){page.Update();t.UpdatePolygons()}).MessageField("Specify the new description for this item index.").TextField("description","Description").Create()},t.RemoveItemIndexesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"RemoveItemDescriptions"),"Remove Item Descriptions","Remove",{indexes:ko.observableArray([])}).SubmitData(function(n){return{indexes:n.indexes()}}).Done(function(){page.Update();t.UpdatePolygons()}).MessageField("Select one or more item descriptions to remove.").CheckBoxListField("indexes","Indexes",t.viewModel.GisDataset.ItemDescriptions,function(n){return n.ItemIndex()+": "+n.Description()},function(n){return n.ItemIndex()}).Create()},t.CloneDatasetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("GisDataset",t.viewModel.GisDataset.GisDatasetId,"CloneDataset"),"Clone GIS Dataset","Clone",{name:ko.observable(t.viewModel.GisDataset.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){views.GisDataset_Details.Load(t.GisDatasetId)}).MessageField("Please provide a name for this clone").TextField("name","GIS Dataset Name",50,!1).Create()},t.polygonsModel=ko.viewmodel.fromModel({polygons:[]},{arrayChildId:{polygons:"GisPolygonId"},append:["polygons[i]"]}),t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),LegalTerms_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new LegalTerms_Details_Model,t.stateHandler=function(){return new LegalTerms_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.LegalTerms.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("LegalTerms",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("legal-terms",new Header_Text(t.viewModel.LegalTerms.Name,"Name",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.LegalTerms.CreatedUtc()))}),"Creation Date")),new SingleValue_Block("Creator",t.viewModel.LegalTerms.CreatedUser)]),tiles.createTile().addBlockSet([new Command_Block("Delete","Delete these legal terms",t.DeleteLegalTermsForm,null,page.HasCapabilityComputed(Capability.LegalTerms_Delete))])]);var n=new commonmark.Parser,i=new commonmark.HtmlRenderer,r=new HtmlMessagePageItem(ko.computed(function(){return i.render(n.parse(t.viewModel.LegalTerms.LegalTermsMarkDown()))}));page.Add(t.pageCommands);page.Add(r);BaseUpdate(t)},t.DeleteLegalTermsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("LegalTerms",t.viewModel.LegalTerms.LegalTermsId,"Delete"),"Delete Legal Terms","Delete",{}).SubmitData(function(){return{}}).Done(function(){window.history.go(-1)}).MessageField("Are you sure you want to delete these legal terms?").MessageField("This action CANNOT BE UNDONE!").MessageField("Legal terms that are assigned to a user or that have been accepted by a user cannot be deleted.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),LegalTerms_View=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new LegalTerms_View_Model,t.stateHandler=function(){return new LegalTerms_View_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("LegalTerms",n,"View")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){var n=new commonmark.Parser,i=new commonmark.HtmlRenderer;t.markdown=new HtmlMessagePageItem(ko.computed(function(){return i.render(n.parse(t.viewModel.LegalTermsMarkdown()))}));page.Add(t.markdown);BaseUpdate(t)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessageAccount_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new MessageAccount_Details_Model,t.stateHandler=function(){return new MessageAccount_Details_State(t)},t.titleHandler=function(){t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.MessageAccount.Name,t.viewModel.MessageAccount.BillingEntityName(),views.BillingEntity_MessageAccounts.routeHandler(t.viewModel.MessageAccount.BillingEntityId(),null),function(){return views.BillingEntity_MessageAccounts.Load(t.viewModel.MessageAccount.BillingEntityId(),null)}):page.SetTitle(t.viewModel.MessageAccount.Name,"Message Accounts",views.Group_MessageAccounts.routeHandler(t.viewModel.GroupId()),function(){return views.Group_MessageAccounts.Load(t.viewModel.GroupId())})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("MessageAccount",n,"Details"):route.forControllerItemAction("MessageAccount",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("message-plan",new Header_Text(t.viewModel.MessageAccount.Name,"Message Account",ko.computed(function(){return t.viewModel.MessageAccount.IsClosed()?"Closed":""}))),new Command_Block("Previous","View previous account",null,function(){return views.MessageAccount_Details.Load(t.viewModel.MessageAccount.PreviousMessageAccountId,t.viewModel.GroupId)},ko.computed(function(){return t.viewModel.MessageAccount.PreviousMessageAccountId()!=null})),new Command_Block("Next","View next account",null,function(){return views.MessageAccount_Details.Load(t.viewModel.MessageAccount.NextMessageAccountId,t.viewModel.GroupId)},ko.computed(function(){return t.viewModel.MessageAccount.NextMessageAccountId()!=null})),new Command_Block("Billing Entity",t.viewModel.MessageAccount.BillingEntityName,null,function(){return views.BillingEntity_MessageAccounts.Load(t.viewModel.MessageAccount.BillingEntityId,t.viewModel.GroupId)}),new Command_Block("Update","Update message account",t.UpdateMessageAccountForm,null,page.HasCapabilityComputed(Capability.MessageAccount_Edit)),new SingleValue_Block("SMS Count",ko.computed(function(){return t.viewModel.MessageAccount.SmsCount()+"/"+t.viewModel.MessageAccount.PeriodSmsQuota()})),new SingleValue_Block("Email Count",ko.computed(function(){return t.viewModel.MessageAccount.EmailCount()+"/"+t.viewModel.MessageAccount.PeriodEmailQuota()})),new SingleValue_Block("Account Created",ko.computed(function(){return FormatDueDateFromCs(t.viewModel.MessageAccount.AccountStart())})),new SingleValue_Block("Period Start",ko.computed(function(){return FormatDueDateFromCs(t.viewModel.MessageAccount.PeriodStart())})),new SingleValue_Block("Period End",ko.computed(function(){return FormatDueDateFromCs(t.viewModel.MessageAccount.PeriodEnd())})),new Command_Block("Messages","View messages by quota period",null,function(){return views.MessageAccount_Periods.Load(t.viewModel.MessageAccount.MessageAccountId,t.viewModel.GroupId)})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Account Plan"),new Command_Block("Plan",t.viewModel.MessageAccount.MessagePlanName,null,function(){return views.MessagePlan_Details.Load(t.viewModel.MessageAccount.MessagePlanId,t.viewModel.GroupId)}),new Command_Block("Change","Change message plan",t.ChangePlanForm,null,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()&&page.HasCapability(Capability.MessageAccount_Create)})),new SingleValue_Block("Period",ko.computed(function(){return t.viewModel.MessageAccount.PeriodMonths()+" months"})),new SingleValue_Block("SMS Quota",ko.computed(function(){return t.viewModel.MessageAccount.PeriodSmsQuota()})),new SingleValue_Block("Notify",ko.computed(function(){return t.viewModel.MessageAccount.NotifyOnSmsExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return t.viewModel.MessageAccount.EnforceSmsQuota()?"Enforced":"Not enforced"})),new SingleValue_Block("Email Quota",ko.computed(function(){return t.viewModel.MessageAccount.PeriodEmailQuota()})),new SingleValue_Block("Notify",ko.computed(function(){return t.viewModel.MessageAccount.NotifyOnEmailExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return t.viewModel.MessageAccount.EnforceEmailQuota()?"Enforced":"Not enforced"}))])]);t.managerCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Assign a manager",function(){return t.AddManagerForm(t.viewModel.MessageAccount.MessageAccountId(),function(){return t.managersTable.LoadData()})},null,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()&&page.HasCapability(Capability.MessageAccount_Edit)}))])]);t.managersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"ManagersTable"),"Name",!0,function(n){return views.User_Details.Load(n.UserId)},10,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()}));t.managersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Manager","delete",function(n){return page.OpenFormDialog(t.RemoveManagerForm(n))},page.HasCapabilityComputed(Capability.MessageAccount_Edit))).AddTitle("Assigned Managers");t.userCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Assign a user",t.AddUserForm,null,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()&&page.HasCapability(Capability.MessageAccount_ManageUser)}))]),tiles.createTile().addBlockSet([new Command_Block("Add Group","Assign group users",t.AddUserFromGroupForm,null,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()&&page.HasCapability(Capability.MessageAccount_ManageUser)}))])]);t.usersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"UsersTable"),"Name",!0,function(n){return views.User_Details.Load(n.UserId)},10,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()}));t.usersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return page.OpenFormDialog(t.RemoveUserForm(n))},page.HasCapabilityComputed(Capability.MessageAccount_ManageUser))).AddTitle("Assigned Users");t.networkCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add","Assign a network",t.AddNetworkForm,null,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()&&page.HasCapability(Capability.MessageAccount_ManageNetwork)}))]),tiles.createTile().addBlockSet([new Command_Block("Add Group","Assign group networks",t.AddNetworksFromGroupForm,null,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()&&page.HasCapability(Capability.MessageAccount_ManageNetwork)}))])]);t.networksTable=new AjaxFilterTableViewModel(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"NetworksTable"),"Name",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25,ko.computed(function(){return!t.viewModel.MessageAccount.IsClosed()}));t.networksTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Network","delete",function(n){return page.OpenFormDialog(t.RemoveNetworkForm(n))},page.HasCapabilityComputed(Capability.MessageAccount_ManageNetwork))).AddTitle("Assigned Networks");page.Add(t.pageCommands);page.Add(t.managerCommands);page.Add(t.managersTable);page.Add(t.userCommands);page.Add(t.usersTable);page.Add(t.networkCommands);page.Add(t.networksTable);BaseUpdate(t,[t.usersTable,t.networksTable])},t.UpdateMessageAccountForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"Update"),"Update Message Account","Update",{name:ko.observable(t.viewModel.MessageAccount.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.MessageAccount.Name(i.Name)}).TextField("name","Account Name",50).Create()},t.AddUserFromGroupForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AddGroupUsers"),"Assign Users","Assign",{groupId:ko.observable(),includeNested:ko.observable(!1)}).SubmitData(function(n){return{groupId:n.groupId(),includeNested:n.includeNested()}}).Done(function(){t.usersTable.LoadData()}).MessageField("Assign all users contained in the selected group, replacing existing assignments.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),!1,null,"Name").MessageField("Nested users includes all users in sub groups of the selected group.").CheckBoxField("includeNested","Include Nested Users").Create()},t.AddNetworksFromGroupForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AddGroupNetworks"),"Assign Networks","Assign",{groupId:ko.observable(),includeNested:ko.observable(!1)}).SubmitData(function(n){return{groupId:n.groupId(),includeNested:n.includeNested()}}).Done(function(){t.networksTable.LoadData()}).MessageField("Assign all networks contained in the selected group, replacing existing assignments.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),!1,null,"Name").MessageField("Nested networks includes all networks in sub groups of the selected group.").CheckBoxField("includeNested","Include Nested Networks").Create()},t.AddUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AddUser"),"Assign User","Assign & Continue",{userId:ko.observable()}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t.usersTable.LoadData()}).AjaxFilterDropDownListField("userId","User",function(n){return n.Name},function(n){return n.UserId},route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AvailableUsers"),!1,null,"Name").CreateMulti()},t.AddNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AddNetwork"),"Assign Network","Assign & Continue",{networkId:ko.observable()}).SubmitData(function(n){return{networkId:n.networkId()}}).Done(function(){t.networksTable.LoadData()}).AjaxFilterDropDownListField("networkId","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AvailableNetworks"),!1,null,"Name").CreateMulti()},t.RemoveUserForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"RemoveUser"),"Remove User","Remove",{}).SubmitData(function(){return{userId:n.UserId}}).Done(function(){t.usersTable.LoadData()}).MessageField("Are you sure you want to remove the user "+n.Name+" from this account?").Create()},t.RemoveNetworkForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"RemoveNetwork"),"Remove Network","Remove",{}).SubmitData(function(){return{networkId:n.NetworkId}}).Done(function(){t.networksTable.LoadData()}).MessageField("Are you sure you want to remove the network "+n.Name+" from this account?").Create()},t.ChangePlanForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"ChangePlan"),"Change Message Plan","Change",{messagePlanId:ko.observable()}).SubmitData(function(n){return{messagePlanId:n.messagePlanId()}}).Done(function(n,i){i.MessageAccountId>0&&views.MessageAccount_Details.Load(i.MessageAccountId,t.viewModel.GroupId)}).MessageField("Changing a message account plan requires creating a new message account and moving all assignments to the new plan. The new account provides a link back to the previous account.").AjaxFilterDropDownListField("messagePlanId","Message Plan",function(n){return n.Name},function(n){return n.MessagePlanId},route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"AvailableMessagePlansForAccount"),!1,null,"Name").Create()},t.AddManagerForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",n,"AddManager"),"Assign Manager","Assign & Continue",{userId:ko.observable()}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){typeof t=="function"&&t()}).MessageField("Message account managers are the users that will be emailed if a quota is exceeded.").AjaxFilterDropDownListField("userId","User",function(n){return n.Name},function(n){return n.UserId},route.forControllerItemAction("MessageAccount",n,"AvailableManagerUsers"),!1,null,"Name").CreateMulti()},t.RemoveManagerForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccount.MessageAccountId,"RemoveManager"),"Remove Manager","Remove",{}).SubmitData(function(){return{userId:n.UserId}}).Done(function(){t.managersTable.LoadData()}).MessageField("Are you sure you want to remove the manager "+n.Name+" from this account?").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessageAccount_PeriodMessages=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new MessageAccount_PeriodMessages_Model,t.stateHandler=function(){return new MessageAccount_PeriodMessages_State(t)},t.titleHandler=function(){return page.SetTitle("Period Messages",ko.computed(function(){return t.viewModel.MessageAccountName()+" Periods"}),views.MessageAccount_Periods.routeHandler(t.viewModel.MessageAccountId,t.viewModel.GroupId),function(){return views.MessageAccount_Periods.Load(t.viewModel.MessageAccountId,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return ko.unwrap(i)==null?route.forControllerItemAction("MessageAccount",n,"PeriodMessages",{periodIndex:t}):route.forControllerItemAction("MessageAccount",n,"PeriodMessages",{periodIndex:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.filterStartLocal=ko.observable(null);t.filterEndLocal=ko.observable(null);t.filterCount=ko.observable(100);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Filter Messages"),new Command_Block("Date Range",ko.computed(function(){return t.filterStartLocal()==null||t.filterEndLocal()==null?"All":FormatDateOnlyRange(moment(t.filterStartLocal()),moment(t.filterEndLocal()))}).extend({throttle:100}),t.DateRangeFilterForm),new Command_Block("Reset","Clear date range",null,function(){t.filterStartLocal(null);t.filterEndLocal(null);t.periodMessagesTable.LoadData()},ko.computed(function(){return t.filterEndLocal()!=null||t.filterStartLocal()!=null})),new Command_Block("Count",ko.computed(function(){return""+t.filterCount()}),t.ResultLimitFilterForm)])]);t.periodMessagesTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccountId,"PeriodMessagesTable",{periodIndex:t.viewModel.PeriodIndex,limit:t.filterCount,startUtc:t.filterStartLocal,endUtc:t.filterEndLocal})}),"TimeUtc",!1,function(n){return page.OpenFormDialog(t.MessageDetailsForm(n))},25);t.periodMessagesTable.AddColumn(new FilterTableColumnViewModel("RecipientName","Recipient",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!1,!0,function(n){return n.Succeeded?"Success":n.Completed?"Failed":"In Progress"})).AddColumn(new FilterTableColumnViewModel("ProviderType","Type",!1,!0,function(n){return n.IsSms?"SMS":"Email"})).AddTitle("Account Period Messages");page.Add(t.pageCommands);page.Add(t.periodMessagesTable);BaseUpdate(t,[t.periodMessagesTable])},t.ResultLimitFilterForm=function(){return new DialogViewModelBuilder(null,"Set result limit","Set",{resultLimit:ko.observable(t.filterCount())}).Submit(function(n){t.filterCount(n.resultLimit());t.periodMessagesTable.LoadData();page.CloseFormDialog()}).NumberField("resultLimit","Set Limit (between 10 and 10000)",10,1e4).Create()},t.DateRangeFilterForm=function(){return new DialogViewModelBuilder(null,"Set event by date range","Search",{startDate:ko.observable((t.filterStartLocal()!=null?moment(t.filterStartLocal()):moment().add("days",-7)).format("YYYY-MM-DD")),endDate:ko.observable((t.filterEndLocal()!=null?moment(t.filterEndLocal()):moment()).format("YYYY-MM-DD"))}).Submit(function(n){t.filterStartLocal(moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).utc().toISOString());t.filterEndLocal(moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).utc().toISOString());t.periodMessagesTable.LoadData();page.CloseFormDialog()}).DateField("startDate","Start").DateField("endDate","End").Create()},t.MessageDetailsForm=function(n){return new DialogViewModelBuilder(null,"Message Details","Close",{}).Submit(function(){page.CloseFormDialog()}).DisplayFieldWithHeading("Recipient","Recipient",n.RecipientName).DisplayFieldWithHeading("TimeUtc","Time",FormatDateTimeFromCs(n.TimeUtc)).DisplayFieldWithHeading("SentUtc","Status",n.Succeeded?"Successfully sent":n.Completed?"Failed":"In progress").DisplayFieldWithHeading("SentTo",n.IsSms?"Phone Number":"Email Address",n.IsSms?FormatPhoneNumber(n.Recipient):n.Recipient).HtmlField(n.IsSms?'<pre style="white-space: pre-wrap;">'+n.Message+"<\/pre>":n.Message).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessageAccount_Periods=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new MessageAccount_Periods_Model,t.stateHandler=function(){return new MessageAccount_Periods_State(t)},t.titleHandler=function(){return page.SetTitle("Account Periods",t.viewModel.MessageAccountName,views.MessageAccount_Details.routeHandler(t.viewModel.MessageAccountId,t.viewModel.GroupId),function(){return views.MessageAccount_Details.Load(t.viewModel.MessageAccountId,t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("MessageAccount",n,"Periods"):route.forControllerItemAction("MessageAccount",n,"Periods",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.periodsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("MessageAccount",t.viewModel.MessageAccountId,"PeriodsTable"),"PeriodDate",!1,function(n){return page.HasCapability(Capability.MessageAccount_ViewMessages)?views.MessageAccount_PeriodMessages.Load(t.viewModel.MessageAccountId,n.PeriodIndex,t.viewModel.GroupId):null},25);t.periodsTable.AddColumn(new DueByDateFilterTableColumnViewModel("PeriodDate","Start Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("SentCount","Sent",!1,!0)).AddColumn(new FilterTableColumnViewModel("FailedCount","Failed",!1,!0)).AddColumn(new FilterTableColumnViewModel("PendingCount","Pending",!1,!0)).AddColumn(new FilterTableColumnViewModel("TotalCount","Total",!1,!0)).AddTitle("Message Account Periods");page.Add(t.periodsTable);BaseUpdate(t,[t.periodsTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),MessagePlan_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new MessagePlan_Details_Model,t.stateHandler=function(){return new MessagePlan_Details_State(t)},t.titleHandler=function(){return t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.MessagePlan.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.MessagePlan.Name,"Message Plans",views.Group_MessagePlans.routeHandler(t.viewModel.GroupId),function(){return views.Group_MessagePlans.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("MessagePlan",n,"Details"):route.forControllerItemAction("MessagePlan",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("message-plan",new Header_Text(t.viewModel.MessagePlan.Name)),new SingleValue_Block("Period",ko.computed(function(){return t.viewModel.MessagePlan.Months()+" "+(t.viewModel.MessagePlan.Months()===1?"month":"months")})),new SingleValue_Block("SMS Provider",t.viewModel.MessagePlan.SmsProviderName),new SingleValue_Block("Email Provider",t.viewModel.MessagePlan.EmailProviderName),new SingleValue_Block("Creator",t.viewModel.MessagePlan.CreatedUserName),new SingleValue_Block("Created",ko.computed(function(){return FormatDateTime(moment(t.viewModel.MessagePlan.CreatedUtc()))})),new Command_Block("Edit","Edit message plan details",t.EditMessagePlanForm,null,ko.computed(function(){return!t.viewModel.MessagePlan.InUse()&&page.HasCapability(Capability.MessagePlan_Edit)})),new Command_Block("Delete","Delete message plan",t.DeleteMessagePlanForm,null,ko.computed(function(){return!t.viewModel.MessagePlan.InUse()&&page.HasCapability(Capability.MessagePlan_Delete)}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("SMS"),new SingleValue_Block("Quota",ko.computed(function(){return t.viewModel.MessagePlan.PeriodSmsQuota()})),new SingleValue_Block("Notify",ko.computed(function(){return t.viewModel.MessagePlan.NotifyOnSmsExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return t.viewModel.MessagePlan.EnforceSmsQuota()?"Enforced":"Not enforced"})),new Command_Block("Edit Quota","Edit SMS quota",t.EditSmsQuotaForm,null,ko.computed(function(){return!t.viewModel.MessagePlan.InUse()&&page.HasCapability(Capability.MessagePlan_Edit)}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Email"),new SingleValue_Block("Quota",ko.computed(function(){return t.viewModel.MessagePlan.PeriodEmailQuota()})),new SingleValue_Block("Notify",ko.computed(function(){return t.viewModel.MessagePlan.NotifyOnEmailExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return t.viewModel.MessagePlan.EnforceEmailQuota()?"Enforced":"Not enforced"})),new Command_Block("Edit Quota","Edit email quota",t.EditEmailQuotaForm,null,ko.computed(function(){return!t.viewModel.MessagePlan.InUse()&&page.HasCapability(Capability.MessagePlan_Edit)}))])]);t.messageAccountsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("MessagePlan",t.viewModel.MessagePlan.MessagePlanId,"AccountsForMessagePlanTable"),"Name",!1,function(n){return views.MessageAccount_Details.Load(n.MessageAccountId,t.viewModel.GroupId)},25);t.messageAccountsTable.AddColumn(new FilterTableColumnViewModel("Name","Account",!1,!0)).AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!0,!0)).AddColumn(new DueByDateFilterTableColumnViewModel("AccountStart","Initial Period",!0,!0)).AddColumn(new DueByDateFilterTableColumnViewModel("PeriodStart","Current Period",!1,!0)).AddColumn(new FilterTableColumnViewModel("SMS","SMS",!1,!0,function(n){return n.IsSMSExceeded?"Exceeded":"Ok"})).AddColumn(new FilterTableColumnViewModel("Email","Email",!1,!0,function(n){return n.IsEmailExceeded?"Exceeded":"Ok"})).AddTitle("Message Accounts");page.Add(t.pageCommands);page.Add(t.messageAccountsTable);BaseUpdate(t,[t.messageAccountsTable])},t.EditMessagePlanForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessagePlan",t.viewModel.MessagePlan.MessagePlanId,"Edit"),"Edit Message Plan","Update",{name:ko.observable(t.viewModel.MessagePlan.Name()),smsProviderId:ko.observable(t.viewModel.MessagePlan.SmsProviderId()),emailProviderId:ko.observable(t.viewModel.MessagePlan.EmailProviderId()),periodMonths:ko.observable(t.viewModel.MessagePlan.Months())}).SubmitData(function(n){return{name:n.name(),smsProviderId:n.smsProviderId(),emailProviderId:n.emailProviderId(),periodMonths:n.periodMonths()}}).Done(function(){page.Update()}).TextField("name","Name",50,!1).IntNumberField("periodMonths","Months Per Period",1,24).AjaxDropDownListField("smsProviderId","SMS Provider",function(n){return n.Name},function(n){return n.SmsProviderId},route.forControllerAction("MessagePlan","AvailableSmsProviders"),!1,{SmsProviderId:t.viewModel.MessagePlan.SmsProviderId()}).AjaxDropDownListField("emailProviderId","Email Provider",function(n){return n.Name},function(n){return n.EmailProviderId},route.forControllerAction("MessagePlan","AvailableEmailProviders"),!1,{EmailProviderId:t.viewModel.MessagePlan.EmailProviderId()}).Create()},t.EditSmsQuotaForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessagePlan",t.viewModel.MessagePlan.MessagePlanId,"EditSmsQuota"),"Edit SMS Quota","Update",{periodSmsQuota:ko.observable(t.viewModel.MessagePlan.PeriodSmsQuota()),enforceSmsQuota:ko.observable(t.viewModel.MessagePlan.EnforceSmsQuota()?"true":"false"),notifySmsExceeded:ko.observable(t.viewModel.MessagePlan.NotifyOnSmsExceeded()?"true":"false")}).SubmitData(function(n){return{periodQuota:n.periodSmsQuota(),enforceQuota:n.enforceSmsQuota(),notifyExceeded:n.notifySmsExceeded()}}).Done(function(){page.Update()}).IntNumberField("periodSmsQuota","SMS Quota",0).DropDownListField("enforceSmsQuota","Enforce SMS Quota",function(n){return n.Name},function(n){return n.Value},[{Name:"Enforced",Value:"true"},{Name:"Not Enforced",Value:"false"}]).DropDownListField("notifySmsExceeded","Notify On SMS Exceeded",function(n){return n.Name},function(n){return n.Value},[{Name:"Send Notification",Value:"true"},{Name:"No Notification",Value:"false"}]).Create()},t.EditEmailQuotaForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessagePlan",t.viewModel.MessagePlan.MessagePlanId,"EditEmailQuota"),"Edit Email Quota","Update",{periodEmailQuota:ko.observable(t.viewModel.MessagePlan.PeriodEmailQuota()),enforceEmailQuota:ko.observable(t.viewModel.MessagePlan.EnforceEmailQuota()?"true":"false"),notifyEmailExceeded:ko.observable(t.viewModel.MessagePlan.NotifyOnEmailExceeded()?"true":"false")}).SubmitData(function(n){return{periodQuota:n.periodEmailQuota(),enforceQuota:n.enforceEmailQuota(),notifyExceeded:n.notifyEmailExceeded()}}).Done(function(){page.Update()}).IntNumberField("periodEmailQuota","Email Quota",0).DropDownListField("enforceEmailQuota","Enforce Email Quota",function(n){return n.Name},function(n){return n.Value},[{Name:"Enforced",Value:"true"},{Name:"Not Enforced",Value:"false"}]).DropDownListField("notifyEmailExceeded","Notify On Email Exceeded",function(n){return n.Name},function(n){return n.Value},[{Name:"Send Notification",Value:"true"},{Name:"No Notification",Value:"false"}]).Create()},t.DeleteMessagePlanForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("MessagePlan",t.viewModel.MessagePlan.MessagePlanId,"Delete"),"Delete Message Plan","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t.viewModel.GroupId()!=null?views.Group_MessagePlans.Load(t.viewModel.GroupId()):views.Group_Index.Load()}).MessageField("Are you sure you want to delete this message plan?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of message plan").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_AlertDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_AlertDetails_Model,t.stateHandler=function(){return new Module_AlertDetails_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Alert.Name,"Subscribers",views.Module_Subscribers.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Subscribers.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Module",n,"AlertDetails",{alertAndStatus:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.moduleTiles=tiles.createPageItem().addTileSet([t.viewModel.ModuleTile]).addTileSet([tiles.createTile().addBlockSet([new Header_Block("email",new Header_Text("Alert",null,t.viewModel.Alert.Name,"Alert Name")),new SingleValue_Block("Auto SMS",ko.computed(function(){return t.viewModel.Alert.AutoSms()?"Enabled":"Off"})),new Command_Block("Disable","Disable auto SMS",null,function(){return page.OpenFormDialog(t.ConfigureAutoSmsForm(t.viewModel.Alert))},ko.computed(function(){return page.HasCapability(Capability.Module_ConfigureUser)&&t.viewModel.Alert.AutoSms()})),new Command_Block("Enable","Enable auto SMS",null,function(){return page.OpenFormDialog(t.ConfigureAutoSmsForm(t.viewModel.Alert))},ko.computed(function(){return page.HasCapability(Capability.Module_ConfigureUser)&&!t.viewModel.Alert.AutoSms()})),new SingleValue_Block("Auto SMS User",ko.computed(function(){return t.viewModel.Module.AutoSmsUser()||"None"})),new Command_Block("Clear","Clear the auto SMS user",null,function(){return page.OpenFormDialog(t.ClearAutoSmsUserForm())},ko.computed(function(){return page.HasCapability(Capability.Module_ConfigureUser)&&t.viewModel.Module.AutoSmsUser()!=null})),new Command_Block("Add","Add users to alert",t.AddUsersToAlertForm,null,page.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))]),tiles.createTile().addBlockSet([new Header_Block("email",new Header_Text("Escalation List",null,ko.computed(function(){return t.viewModel.Escalation.EscalationListName()||"None"}),"Assigned Escalation List"),new Header_Actions(function(){return t.viewModel.Escalation!=null?views.EscalationList_Details.Load(t.viewModel.Escalation.EscalationListId):null})),new SingleValue_Block("Users",ko.computed(function(){return t.viewModel.Escalation!=null?t.viewModel.Escalation.Users():"0"}),ko.computed(function(){return t.viewModel.Escalation.EscalationListId()!==0})),new SingleValue_Block("Delay",ko.computed(function(){return(t.viewModel.Escalation!=null?t.viewModel.Escalation.Delay():"0")+" mins"}),ko.computed(function(){return t.viewModel.Escalation.EscalationListId()!==0})),new Command_Block("Change","Change the assigned list",null,function(){return page.OpenFormDialog(t.SetAlertEscalationListForm(t.viewModel.Escalation))},page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ManageAlertSubscription])),new Command_Block("Remove","Remove the assigned list",null,function(){return page.OpenFormDialog(t.RemoveAlertEscalationListForm(t.viewModel.Escalation))},ko.computed(function(){return t.viewModel.Escalation.EscalationListId()!==0&&page.HasCapability(Capability.Module_ConfigureUser)&&page.HasCapability(Capability.Module_ManageAlertSubscription)}))])]);t.subscribersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SubscribedUsersTable",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"Name",!0,function(n){return views.User_Details.Load(n.UserId)},25);t.subscribersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryEmailAddress","Email Address",!0,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryPhoneNumber","Phone Number",!0,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return n.SendSms==null&&n.SendEmail==null?"-":(n.SendSms?" SMS":"")+(n.SendEmail?" Email ":"")})).AddColumn(new CommandTableColumnViewModel("Edit User","edit",function(n){return page.OpenFormDialog(t.EditUserAlertForm(n))},page.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return page.OpenFormDialog(t.RemoveUserFromAlertForm(n))},page.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))).AddTitle("Alert User Subscribers");t.userAlertHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"UserAlertHistoryTable",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"CreatedUtc",!1,null,25);t.userAlertHistoryTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return FormatSubscriptionChange(n.PrevSendSms,n.PrevSendEmail,n.NewSendSms,n.NewSendEmail)})).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!0,!0)).AddTitle("Subscription History");t.alertEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AlertEventsTable",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"TimeUtc",!1,function(n){return views.Module_AlertEventDetails.Load(t.viewModel.Module.ModuleId(),n.ModuleEventId)},25);t.alertEventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Event Time",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("EscalationLastSentUtc","Last Sent",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("AcknowledgeTimeUtc","Acknowledged",!0,!0)).AddColumn(new FilterTableColumnViewModel("AcknowledgeUserName","User",!0,!0)).AddColumn(new FilterTableColumnViewModel("EscalationPriority","Priority",!0,!0)).AddColumn(new FilterTableColumnViewModel("EscalationComplete","Escalation",!0,!0,function(n){return n.EscalationComplete?"Complete":"In Progress"})).AddColumn(new FilterTableColumnViewModel("Details","Details",!1,!0)).AddTitle("Alert Events (Last 100)");t.escalationListHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AlertEscalationListHistoryTable",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"CreatedUtc",!1,function(n){return n.EscalationListId!=null?views.EscalationList_Details.Load(n.EscalationListId):null},25);t.escalationListHistoryTable.AddColumn(new FilterTableColumnViewModel("CreatedUtc","Created",!1,!0,function(n){return FormatDateTime(moment(n.CreatedUtc))})).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Created By",!0,!0)).AddColumn(new FilterTableColumnViewModel("EscalationList","Action",!1,!0,function(n){return n.EscalationListId!=null?"Assigned "+n.EscalationList+"(ID: "+n.EscalationListId+")":"Removed"})).AddTitle("Escalation List Assignment History");page.Add(new HeaderPageItem("Module Alert - "+t.viewModel.Alert.Name()));page.Add(t.moduleTiles);page.Add(t.subscribersTable);page.Add(t.userAlertHistoryTable);page.Add(t.alertEventsTable);page.Add(t.escalationListHistoryTable);BaseUpdate(t,[t.subscribersTable,t.userAlertHistoryTable,t.alertEventsTable,t.escalationListHistoryTable])},t.AddUsersToAlertForm=function(){var n={sendSms:ko.observable(!1),sendEmail:ko.observable(!1),usersToAdd:ko.observableArray([])};return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"CreateSubscriberAlert",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"Add subscribers to alert","Add & Continue",n).SubmitData(function(n){return{sendSms:n.sendSms(),sendEmail:n.sendEmail(),usersToAdd:n.usersToAdd()}}).Done(function(){t.subscribersTable.LoadData();t.userAlertHistoryTable.LoadData()}).Validate(function(n){return!n.sendSms()&&!n.sendEmail()?"Users must be subscribed to either SMS, email, or both":n.usersToAdd().length===0?"You must select at least one user to subscribe":null}).MessageField("Add users to alert").CheckBoxField("sendSms","Send Sms Alerts").CheckBoxField("sendEmail","Send Email Alerts").AjaxMultiSelectListField("usersToAdd","Users (ctrl-click or drag for multi select)",function(n){return n.Name+" ("+n.UserId+")"},function(n){return n.UserId},ko.computed(function(){return route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AvailableUsersForAlertSubscription",{alertAndStatus:t.viewModel.Alert.AlertAndStatus})}),15,!0).CreateMulti()},t.RemoveUserFromAlertForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RemoveSubscriberFromAlert",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"Remove Subscriber","Remove",{}).SubmitData(function(){return{userId:n.UserId}}).Done(function(){t.subscribersTable.LoadData();t.userAlertHistoryTable.LoadData()}).MessageField("Remove user from this alert").Create()},t.EditUserAlertForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"UpdateSubscriberAlert",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"Update Subscriber Alert","Update",{sendSms:ko.observable(n.SendSms),sendEmail:ko.observable(n.SendEmail)}).SubmitData(function(t){return{userId:n.UserId,sendSms:t.sendSms(),sendEmail:t.sendEmail()}}).Validate(function(n){return!n.sendSms()&&!n.sendEmail()?"Users must be subscribed to either SMS, email, or both":null}).Done(function(){t.subscribersTable.LoadData();t.userAlertHistoryTable.LoadData()}).MessageField("Update alert options").CheckBoxField("sendSms","Send SMS Alerts").CheckBoxField("sendEmail","Send Email Alerts").Create()},t.ConfigureAutoSmsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetAlertAutoSms",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),"Set Alert Auto SMS",n.AutoSms()?"Disable":"Enable",{autoSms:ko.observable(!n.AutoSms())}).SubmitData(function(n){return{autoSms:n.autoSms()}}).Done(function(){page.Update()}).MessageField(ko.computed(function(){return n.AutoSms()?"Disabling auto SMS will stop automatic sending of messages to the last user who controlled this module.  Other subscribed alerts and escalation lists will continue as normal":"Enabling auto SMS will send a message to the last user who controlled this module using SMS"})).Create()},t.ClearAutoSmsUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ClearAutoSmsUser"),"Clear Auto SMS User","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear the auto SMS user? Automatic SMS alerts will not be generated again until a user commands this module using SMS.").Create()},t.SetAlertEscalationListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetAlertEscalationList"),"Set Alert Escalation","Update",{escalationListId:ko.observable(n.EscalationListId())}).SubmitData(function(t){return{alertAndStatus:n.AlertAndStatus(),escalationListId:t.escalationListId()}}).Done(function(){page.Update()}).MessageField("Select an escalation list to enable alert escalation. The alert will be sent to users in the list in priority order until someone acknowledges the alert.").AjaxFilterDropDownListField("escalationListId","Escalation List",function(n){return n.Name+" (ID:"+n.EscalationListId+")"},function(n){return n.EscalationListId},route.forControllerAction("Group","GetAvailableEscalationLists"),!1,n.EscalationListId()===null?null:{EscalationListId:n.EscalationListId(),Name:n.EscalationListName()},"Name",10,10).Create()},t.RemoveAlertEscalationListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RemoveAlertEscalationList"),"Set Alert Escalation","Remove",{escalationListId:ko.observable(n.EscalationListId())}).SubmitData(function(){return{alertAndStatus:n.AlertAndStatus()}}).Done(function(){page.Update()}).MessageField("Remove an escalation list from this alert.").Create()},t.SendTestAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SendTestAlerts",{alertAndStatus:t.viewModel.Alert.AlertAndStatus}),t.viewModel.Module.Type(),"Send",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to send test alerts for this module?").Create()},t.mappingOptions=new MappingOptions,tiles.applyModuleTileMappingSingle(t.mappingOptions,"ModuleTile"),t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_AlertEventDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_AlertEventDetails_Model,t.stateHandler=function(){return new Module_AlertEventDetails_State(t)},t.titleHandler=function(){t.viewModel.Alert!=null&&t.viewModel.AlertAndStatus()!=null?page.SetTitle("Event Details",t.viewModel.Alert.Name,views.Module_AlertDetails.routeHandler(t.viewModel.Module.ModuleId,t.viewModel.AlertAndStatus),function(){return views.Module_AlertDetails.Load(t.viewModel.Module.ModuleId,t.viewModel.AlertAndStatus)}):page.SetTitle("Event Details","Subscribers",views.Module_Subscribers.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Subscribers.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Module",n,"AlertEventDetails",{moduleEventId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.moduleTiles=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("warning",new Header_Text("Module Event",null,ko.unwrap(t.viewModel.Alert)?ko.unwrap(t.viewModel.Alert).Name():"",t.viewModel.Details)),new SingleValue_Block("Escalation",ko.computed(function(){return t.viewModel.EscalationComplete()?"Complete":"In Progress"}),ko.computed(function(){return t.viewModel.AlertAndStatus()!=null})),new SingleValue_Block("Status",ko.computed(function(){return t.viewModel.AcknowledgeUtc()!=null?"Acknowledged at "+FormatDateTime(moment.utc(t.viewModel.AcknowledgeUtc()).local()):"Unacknowledged"}),ko.computed(function(){return t.viewModel.AlertAndStatus()!=null})),new SingleValue_Block("ACK User",t.viewModel.AcknowledgeUser,ko.computed(function(){return t.viewModel.AcknowledgeUser()!=null})),new SingleValue_Block("Time",FormatDateTime(moment.utc(t.viewModel.TimeUtc()).local())),new SingleValue_Block("Initiator",t.viewModel.UserName,ko.computed(function(){return t.viewModel.UserName()!=null})),new Command_Block("Alert","View alert details",null,function(){return views.Module_AlertDetails.Load(t.viewModel.Module.ModuleId,t.viewModel.AlertAndStatus)},ko.computed(function(){return t.viewModel.Alert!=null&&t.viewModel.AlertAndStatus()!=null}))])]);t.viewModel.Alert&&(t.viewModel.ModuleTileSnapshot.blockSets()[0][0].footer="",t.viewModel.ModuleTileSnapshot.blockSets().splice(0,0,[new SmallHeader_Block("Alert State")]),t.moduleTiles.addTileSet([t.viewModel.ModuleTileSnapshot]));t.viewModel.ModuleTile.blockSets().splice(0,0,[new SmallHeader_Block("Current State")]);t.moduleTiles.addTileSet([t.viewModel.ModuleTile]);t.messagesTable=new TableViewModel(t.viewModel.Messages,null);t.messagesTable.AddColumn(new TextTableColumnViewModel("User","User",!1,!1)).AddColumn(new DateTableColumnViewModel("TimeUtc","Time",!1,!1)).AddColumn(new TextTableColumnViewModel("Sent","Sent",!1,!1,function(n){return(n.Sms()?"SMS ":"")+(n.Email()?"Email":"")})).AddColumn(new TextTableColumnViewModel("Content","Content",!1,!1));page.Add(t.moduleTiles);page.Add(new HeaderPageItem("Sent Messages"));page.Add(t.messagesTable);BaseUpdate(t)},t.mappingOptions=new MappingOptions,tiles.applyModuleTileMappingSingle(t.mappingOptions,"ModuleTile"),tiles.applyModuleTileMappingSingle(t.mappingOptions,"ModuleTileSnapshot"),t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_ConfigHistory=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_ConfigHistory_Model,t.stateHandler=function(){return new Module_ConfigHistory_State(t)},t.titleHandler=function(){return page.SetTitle("Module Configuration History",t.viewModel.Module.Name,views.Module_Details.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Details.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n,t){return t==null?route.forControllerItemAction("Module",n,"ConfigHistory"):route.forControllerItemAction("Module",n,"ConfigHistory",{moduleConfigHistoryId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.configHistoryId=ko.observable(t.viewModel.ModuleConfigHistoryId());t.configHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ConfigHistoryTable"),"TimeUtc",!1,function(n){t.SetCurrentHistory(n.ModuleConfigHistoryId)},25);t.configHistoryTable.AddColumn(new IconTableColumnViewModel("selectedRow",function(){return""},!0,!1,function(n){return ko.computed(function(){return n.ModuleConfigHistoryId===t.configHistoryId()?"ok":""})})).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("UserName","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Reason","Reason",!0,!0,function(n){return n.Reason.length>50?n.Reason.substring(0,47)+"...":n.Reason})).AddColumn(new CommandTableColumnViewModel("Edit Config Items","config",function(n){t.SetCurrentHistory(n.ModuleConfigHistoryId);page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetModuleConfigHistoryConfigItems",{moduleConfigHistoryId:n.ModuleConfigHistoryId}),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}var i=ko.viewmodel.fromModel(n,t.mappingOptions)();ConfigureModuleForm(t.viewModel.Module.ModuleId,i,route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"Configure"),1)()}))})).AddTitle("Configuration History Items");t.configHistoryValuesTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ConfigHistoryValuesTable",{moduleConfigHistoryId:t.configHistoryId})}),"Index",!0,null,100,ko.computed(function(){return t.configHistoryId()!=null}));t.configHistoryValuesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DefaultValue","Default",!0,!0)).AddColumn(new FilterTableColumnViewModel("PrevValue","Previous Value",!1,!0)).AddColumn(new FilterTableColumnViewModel("NewValue","New Value",!1,!0)).AddColumn(new FilterTableColumnViewModel("Change","Change",!1,!0,function(n){return n.NewValue===n.PrevValue?"-":"Changed"})).AddTitle("Configuration History Values");page.Add(t.configHistoryTable);page.Add(t.configHistoryValuesTable);BaseUpdate(t,[t.configHistoryTable,t.configHistoryValuesTable])},t.SetCurrentHistory=function(n){t.configHistoryId(n);t.configHistoryValuesTable.LoadData();t.sourceUrl=t.routeHandler(t.viewModel.Module.ModuleId,n);t.replaceState()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_ConfigTemplates=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_ConfigTemplates_Model,t.stateHandler=function(){return new Module_ConfigTemplates_State(t)},t.titleHandler=function(){return page.SetTitle("Config Templates",t.viewModel.ModuleName,views.Module_Details.routeHandler(t.viewModel.ModuleId),function(){return views.Module_Details.Load(t.viewModel.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("Module",n,"ConfigTemplates")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.templateTiles=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Create","Create config template for module",t.CreateConfigTemplateForm)])]);t.configTemplatesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.ModuleId,"ModuleConfigTemplatesTable"),null,!0,function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("ModuleConfigTemplate",n.ModuleConfigTemplateId,"GetModuleConfigTemplateConfigItems"),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}var i=ko.viewmodel.fromModel(n,t.mappingOptions)();ViewModuleConfigForm(i)()}))},10);t.configTemplatesTable.AddColumn(new FilterTableColumnViewModel("TemplateName","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("TemplateDescription","Description",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Created By",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUtc","Created",!1,!0,function(n){return FormatDateTime(moment(n.CreatedUtc))})).AddColumn(new CommandTableColumnViewModel("Apply Template","command",function(n){page.ViewRequests.push($.ajax(route.forControllerItemAction("ModuleConfigTemplate",n.ModuleConfigTemplateId,"GetModuleConfigTemplateConfigItems"),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}var i=ko.viewmodel.fromModel(n,t.mappingOptions)();ConfigureModuleForm(t.viewModel.ModuleId,i,route.forControllerItemAction("Module",t.viewModel.ModuleId,"Configure"),3e3)()}))})).AddTitle("Config Templates");page.Add(t.templateTiles);page.Add(t.configTemplatesTable);BaseUpdate(t,[t.configTemplatesTable])},t.CreateConfigTemplateForm=function(){return new DialogViewModelBuilder(null,"Create Config Template","Next",{groupId:ko.observable(0),templateName:ko.observable(""),templateDescription:ko.observable("")}).Submit(function(n){page.ViewRequests.push($.ajax(route.forControllerActionParams("Module","GetModuleTypeConfigItems",{selectedModuleType:t.viewModel.ModuleType}),{data:{},type:"POST"}).done(function(i){if(i.Success===!1){page.SetMessage(i.Message);return}var r=ko.viewmodel.fromModel(i,t.mappingOptions)();ConfigureModuleTemplateForm(n,r,route.forControllerItemAction("Group",n.groupId,"CreateModuleConfigTemplate",{selectedModuleType:t.viewModel.ModuleType}),"Config Template","Save",function(){return t.configTemplatesTable.LoadData()})()}))}).Done(function(){t.configTemplatesTable.LoadData()}).MessageField("Select the group in which to create the config template. Only users with access to this group will be able to view the template.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerItemAction("Module",t.viewModel.ModuleId,"GroupsToContainModuleConfigTemplate"),!1,null,"Name",1,1).MessageField("Specify a name and description for this template.").TextField("templateName","Name",50,!1,!0).MultilineTextField("templateDescription","Description",null,!1,!0).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_Details_Model,t.stateHandler=function(){return new Module_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Module.Name,t.viewModel.Module.NodeName,views.Network_Node.routeHandler(t.viewModel.Module.NetworkId,t.viewModel.Module.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.Module.NetworkId,t.viewModel.Module.NodeAddress)})},t.routeHandler=function(n){return route.forControllerItemAction("Module",n,"Details")},t.defaultTimeout=6e5,t.queryDelay=1e4,t.allTasksComplete=ko.observable(!1),t.expandedTaskList=ko.observable(!1),t.dispose=function(){clearInterval(t.updateInterval)},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.livePollTimeout=ko.observable(0);t.isLivePollingOn=ko.computed(function(){return t.livePollTimeout()>0});t.eventFilterStartLocal=ko.observable(null);t.eventFilterEndLocal=ko.observable(null);t.eventFilterCount=ko.observable(100);t.allTasksComplete=ko.computed(function(){return t.viewModel.ModuleTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()?!0:!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})});t.expandedTaskList(!t.allTasksComplete());t.statusHeader=new DashboardHeaderPageItem(0,ko.computed(function(){return"Module "+(t.allTasksComplete()?"":" - Required tasks outstanding")}),ko.computed(function(){return t.allTasksComplete()?TileState.Idle:TileState.Faulted}),function(){return t.expandedTaskList(!t.expandedTaskList())});t.statusHeader.addButton(new DashboardActionButton(0,ko.computed(function(){return t.expandedTaskList()?"collapse":"expand"}),ko.computed(function(){return t.expandedTaskList()?"Hide":"Show"}),function(){return t.expandedTaskList(!t.expandedTaskList())},!0));t.moduleTasksTable=new AjaxFilterTableViewModel(null,"SortOrder",!0,function(){return null},25,ko.computed(function(){return t.expandedTaskList()}),!1,!0);t.moduleTasksTable.AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return n.SourceType()==="User"?"profile":n.SourceType()==="Network"?"network":n.SourceType()==="Node"?"node":n.SourceType()==="Module"?"module":""},function(n){return n.SourceType()},function(n){return n.SourceType()==="User"?views.User_Details.Load(n.Parameters.UserId):n.SourceType()==="Network"?views.Network_Details.Load(n.Parameters.NetworkId):n.SourceType()==="Node"?views.Network_Node.Load(n.Parameters.NetworkId,n.Parameters.NodeAddress):null})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Status",!0,!0,function(n){return n.IsCompleted()?"Complete":n.Type()==="Problem"?"Module Problem":n.Type()==="Task"?"Required Task":"Optional Task"})).AddColumn(new FilterTableColumnViewModel("Problem","Problem",!1,!0,function(n){return TaskTypes[n.Description()].Desc(n.IsCompleted(),n.Parameters)})).AddColumn(new MultipleFixHyperlinkTextTableColumnViewModel("Actions","Actions",function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks");ko.computed(function(){t.moduleTasksTable.initialLoadComplete(!0);t.moduleTasksTable.SetData({Items:t.viewModel.ModuleTasks(),Success:!0})});t.moduleTiles=tiles.createPageItem().addTileSet([t.viewModel.ModuleTile]).addTileSet([tiles.createTile().addBlockSet([new Header_Block("config",new Header_Text("Configuration",null,ko.computed(function(){return t.viewModel.Module.ConfigDirty()?"Update Pending":"Up to Date"}),ko.computed(function(){return t.viewModel.Module.ConfigDirty()?"Module config update in progress":"Module config is up to date"}))),new SingleValue_Block("Status",ko.computed(function(){return t.viewModel.Module.IsEnabled()?"Enabled":"Disabled"})),new SingleValue_Block("SMS",t.viewModel.Module.ShortName),new SingleValue_Block("Auto SMS",ko.computed(function(){return t.viewModel.Module.AutoSmsUser()||"None"})),new Command_Block("Clear","Clear the auto SMS user",null,function(){return page.OpenFormDialog(t.ClearAutoSmsUserForm())},ko.computed(function(){return page.HasCapability(Capability.Module_ConfigureUser)&&t.viewModel.Module.AutoSmsUser()!=null})),new Command_Block("View","View the configuration",null,ViewModuleConfigForm(t.viewModel.ConfigItems()),ko.computed(function(){return t.viewModel.ConfigItems().length>0})),new Command_Block("Update","Force a configuration update",t.UpdateConfigForm,null,ko.computed(function(){return t.CanConfigure()&&t.viewModel.ConfigItems().length>0})),new Command_Block("Edit","Edit the configuration",null,ConfigureModuleForm(t.viewModel.Module.ModuleId,t.viewModel.ConfigItems(),route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"Configure"),null),ko.computed(function(){return t.CanConfigure()&&t.viewModel.ConfigItems().length>0})),new Command_Block("Template","View config templates",null,function(){return views.Module_ConfigTemplates.Load(t.viewModel.Module.ModuleId)},ko.computed(function(){return t.CanConfigure()&&t.viewModel.ConfigItems().length>0})),new Command_Block("History","View configuration history",null,function(){return views.Module_ConfigHistory.Load(t.viewModel.Module.ModuleId)},ko.computed(function(){return t.CanConfigure()&&t.viewModel.ConfigItems().length>0})),new Command_Block("Map","View the map for the module",null,function(){return views.Module_Map.Load(t.viewModel.Module.ModuleId)},page.HasCapabilityComputed(Capability.Network_ViewLocation)),new Command_Block("Rename","Rename the module",t.RenameModuleForm,null,page.HasCapabilityComputed(Capability.Module_ConfigureUser)),new Command_Block("Delete","Delete the module",t.DeleteModuleForm,null,page.HasCapabilityComputed(Capability.Module_Delete))]),tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("Type and Tools",t.viewModel.Module.IsVirtualModule()?"Virtual Module":"",t.viewModel.Module.ModuleIndex,"Module Index")),new SingleValue_Block("Type Change",ko.computed(function(){return t.viewModel.ConversionPercent()+"% Complete"}),ko.computed(function(){return t.viewModel.ConversionPercent()!=null}),null,"state-faulted"),new Command_Block("Type",t.viewModel.Module.Type,null,function(){return CopyToClipboard(t.viewModel.Module.Type)},page.HasCapabilityComputed(Capability.Module_SetType),ko.computed(function(){return t.viewModel.Module.Type()+" (Click to copy to clipboard)"})),new SingleValue_Block("Icon",t.viewModel.Module.Icon,page.HasCapabilityComputed(Capability.Module_SetIcon)),new Command_Block("Move","Move this module to a new node",t.MoveModuleForm,null,page.HasCapabilityComputed(Capability.Module_Move)),new Command_Block("Set Index","Set the index of this module",t.SetModuleIndexForm,null,page.HasCapabilityComputed(Capability.Module_SetIndex)),new Command_Block("Set Type","Set the type of this module",t.SetModuleTypeForm,null,page.HasCapabilityComputed(Capability.Module_SetType)),new Command_Block("Set Icon","Set the icon for this module",t.SetModuleIconForm,null,page.HasCapabilityComputed(Capability.Module_SetIcon)),new Command_Block("Alerts","Manage alert subscriptions",null,function(){return views.Module_Subscribers.Load(t.viewModel.Module.ModuleId)}),new Command_Block("Groups","Groups containing this module",null,function(){return views.Module_ContainingGroups.Load(t.viewModel.Module.ModuleId)}),new Command_Block("Suppress","Suppress alerts from this module",t.SuppressAlertsForm,null,page.HasCapabilityComputed(Capability.Module_SuppressAlerts)),new Command_Block("Clear","Clear alert suppression",t.ClearSuppressAlertsForm,null,ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.Module.SuppressAlertsUtc()!=null&&moment(t.viewModel.Module.SuppressAlertsUtc())>moment()&&page.HasCapability(Capability.Module_SuppressAlerts)})),new SingleValue_Block("Suppressed Until",ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.Module.SuppressAlertsUtc()==null?"None Set":moment(t.viewModel.Module.SuppressAlertsUtc())<moment()?"Expired":FormatDateTime(moment.utc(t.viewModel.Module.SuppressAlertsUtc()))}),ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.Module.SuppressAlertsUtc()!=null&&moment(t.viewModel.Module.SuppressAlertsUtc())>=moment()})),new SingleValue_Block("Expires",ko.computed(function(){page.currentTimeSeconds();var n=moment.utc(t.viewModel.Module.SuppressAlertsUtc());return n==null?"":FormatOverdueBy(moment.duration(n.diff(moment())))}),ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.Module.SuppressAlertsUtc()!=null&&moment(t.viewModel.Module.SuppressAlertsUtc())>=moment()})),new Command_Block("Live Poll","Start live polling",null,t.LivePollModuleState,ko.computed(function(){return!t.isLivePollingOn()&&page.HasCapability(Capability.Module_QueryModuleState)})),new Command_Block("Stop Poll","Stop live polling",null,function(){return t.livePollTimeout(0)},ko.computed(function(){return t.isLivePollingOn()&&page.HasCapability(Capability.Module_QueryModuleState)})),new Command_Block("Reset Timer","Reset live poll timer",null,function(){return t.livePollTimeout(t.defaultTimeout)},ko.computed(function(){return t.isLivePollingOn()&&t.livePollTimeout()<t.defaultTimeout/2&&page.HasCapability(Capability.Module_QueryModuleState)})),new SingleValue_Block("Live Poll Time",ko.computed(function(){return"Poll timeout "+moment.duration(t.livePollTimeout()).humanize()}),ko.computed(function(){return t.isLivePollingOn()&&page.HasCapability(Capability.Module_QueryModuleState)})),new Command_Block("Tags","View module tags",null,function(){return views.Module_Tags.Load(t.viewModel.Module.ModuleId())},page.HasCapabilityComputed(Capability.Tag_View))]),tiles.createTile().addBlockSet([new Header_Block("attributes",new Header_Text("Attributes",null,ko.computed(function(){return t.viewModel.Attributes().length}),"Attributes attached to module"))]).addBlockSet(t.viewModel.Attributes).addBlockSet([new Command_Block("Add","Add an attribute",t.AddAttributeForm,null,page.HasCapabilityComputed(Capability.Module_CreateAttribute)),new Command_Block("Remove","Remove one or more attributes",t.RemoveAttributesForm,null,ko.computed(function(){return page.HasCapability(Capability.Module_DeleteAttribute)&&t.viewModel.Attributes().length>0}))]),tiles.createTile().addBlockSet([new Header_Block("export",new Header_Text("Exports",null,ko.computed(function(){return t.viewModel.Exports().length===0?"No Exports":t.viewModel.Exports().length===1?"1 export":t.viewModel.Exports().length+" exports"}),"Exports for this module"))]).addBlockSet(t.viewModel.Exports).addBlockSet([new Command_Block("Create","Create a new export",t.CreateModuleExportTargetForm,null,page.HasCapabilityComputed(Capability.Module_ManageExports))]),tiles.createTile().addBlockSet([new Header_Block("data-stream",new Header_Text("Data Streams",null,ko.computed(function(){return t.viewModel.DataStreams().length===0?"No Data Streams":t.viewModel.DataStreams().length===1?"1 data stream":t.viewModel.DataStreams().length+" data streams"}),"Data streams for this module"))]).addBlockSet(t.viewModel.DataStreams).addBlockSet([new Command_Block("Create","Create a new data stream",t.CreateDataStreamForm,null,page.HasCapabilityComputed(Capability.DataStream_Create))]),tiles.createTile().addBlockSet([new Header_Block("download",new Header_Text("Download Data",null,"Historical Data")),new Command_Block("Daily Totals","Download data totalised daily",t.DownloadDailyTotalsForm,null,ko.computed(function(){return t.viewModel.DailyTotalProperties().length>0})),new Command_Block("Raw Data","Download raw log entries",t.DownloadRawDataForm,null,ko.computed(function(){return t.viewModel.AllProperties().length>0})),new Command_Block("Events","Download events data to CSV file",t.DownloadEventsForm,null),new Command_Block("Chart","View dynamic chart",null,function(){return views.Chart_Module.Load(t.viewModel.Module.ModuleId,!1)})]),tiles.createTile().addBlockSet([new SmallHeader_Block("Create Meters",page.HasCapabilityComputed(Capability.CumulativeMeter_Manage)),new Command_Block("Cumulative","Create cumulative meter",t.CreateCumulativeMeterForm,null,page.HasCapabilityComputed(Capability.CumulativeMeter_Manage))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Data Manipulation",page.HasCapabilityComputed(Capability.Module_ScaleData)),new Command_Block("Scale","Scale data",t.ScaleDataForm,null,page.HasCapabilityComputed(Capability.Module_ScaleData))]),tiles.createTile().addBlockSet([new Header_Block("dashboard",new Header_Text("Dashboard",null,ko.computed(function(){var n=t.viewModel.DashboardGroups().length;return n===1?"In 1 Section":n>1?"In "+n+" Sections":"Not on Dashboard"}))),new Command_Block("Add","Add to Dashboard sections",t.AddToExistingDashboardGroupsForm)]).addBlockSet(t.viewModel.DashboardGroups),tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text(t.viewModel.Module.NetworkName,"Module Network",t.viewModel.Module.NodeName,ko.computed(function(){return"Node "+FormatNodeAddress(t.viewModel.Module.NodeAddress())})),new Header_Actions(function(){return views.Network_Node.Load(t.viewModel.Module.NetworkId,t.viewModel.Module.NodeAddress)}))])]);t.cumulativeMetersHeader=new HeaderPageItem("Meters",null,null,null,null,null,null,ko.computed(function(){return t.viewModel.CumulativeMeters().length>0}));t.cumulativeMeterTiles=tiles.createPageItem().addTileSet(t.viewModel.CumulativeMeters);t.noteCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Note","Add a new Note",t.CreateNoteForm,null,page.HasCapabilityComputed(Capability.Note_Create))])]);t.notesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"NotesTable"),"CreatedUtc",!1,null,10);t.notesTable.AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return views.Note_Details.Load(n.NoteId)})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new CommandWithDynamicIconTableColumnViewModel("TargetIcon",function(n){return NoteInfoBuilder(n,"Module").icon()},function(n){return NoteInfoBuilder(n,"Module").tooltip()},function(n){return NoteInfoBuilder(n,"Module").action()},!0,function(n){return NoteInfoBuilder(n,"Module").actionEnabled()})).AddColumn(new FilterTableColumnViewModel("Target","Target",!1,!1,function(n){return NoteInfoBuilder(n,"Module").type()})).AddColumn(new FilterTableColumnViewModel("Title","Title",!1,!0)).AddColumn(new CommandTableColumnViewModel("Created By","profile",function(n){return views.User_Details.Load(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes");t.eventsCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Search Events"),new Command_Block("Date Range",ko.computed(function(){return t.eventFilterStartLocal()==null||t.eventFilterEndLocal()==null?"All":FormatDateOnlyRange(moment(t.eventFilterStartLocal()),moment(t.eventFilterEndLocal()))}),t.SearchEventsForm),new Command_Block("Reset","Clear date range",null,function(){t.eventFilterStartLocal(null);t.eventFilterEndLocal(null);t.moduleEventsTable.LoadData()},ko.computed(function(){return t.eventFilterEndLocal()!=null||t.eventFilterStartLocal()!=null})),new Command_Block("Count",ko.computed(function(){return""+t.eventFilterCount()}),t.SetResultsLimitForm)])]);t.moduleEventsTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"EventsTable",{limit:t.eventFilterCount,startUtc:t.eventFilterStartLocal,endUtc:t.eventFilterEndLocal})}),"TimeUtc",!1,function(n){return page.OpenFormDialog(t.ModuleEventDetailsDialog(n))},25);t.moduleEventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("Details","alert",function(n){return views.Module_AlertEventDetails.routeHandler(t.viewModel.Module.ModuleId,n.ModuleEventId)},function(n){return views.Module_AlertEventDetails.Load(t.viewModel.Module.ModuleId,n.ModuleEventId)})).AddTitle("Events");t.viewModel.SupportsRfidTags()&&(t.rfidCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Rfid Tags","Add Rfid Tag Groups",t.AddRfidTagGroupsForm,null,page.HasCapabilityComputed(Capability.Module_ConfigureUser))])]),t.rfidTagsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RfidTagGroupsTable"),"Name",!0,function(n){return views.Group_RfidTags.Load(n.GroupId)},25),t.rfidTagsTable.AddColumn(new FilterTableColumnViewModel("Name","Group Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("TagCount","Assigned Tags",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveRfidTagGroupForm(n))},page.HasCapabilityComputed(Capability.Module_ConfigureUser))).AddTitle("Rfid Tag Groups"));t.targetModuleActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"UserActionsForTargetModuleTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.targetModuleActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("Target Module Actions");page.Add(t.statusHeader);page.Add(t.moduleTasksTable);page.Add(t.moduleTiles);page.Add(t.cumulativeMetersHeader);page.Add(t.cumulativeMeterTiles);page.Add(t.noteCommands);page.Add(t.notesTable);page.Add(t.eventsCommands);page.Add(t.moduleEventsTable);t.viewModel.SupportsRfidTags()&&(page.Add(t.rfidCommands),page.Add(t.rfidTagsTable));page.Add(t.targetModuleActionsTable);BaseUpdate(t,[t.moduleEventsTable,t.notesTable,t.targetModuleActionsTable])},t.CanConfigure=function(){return page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller])()},t.LivePollModuleState=function(){clearInterval(t.updateInterval);t.livePollTimeout(t.defaultTimeout);var n=function(){if(!t.isLivePollingOn()){clearInterval(t.updateInterval);return}(t.livePollTimeout(t.livePollTimeout()-t.queryDelay),page.tabHidden())||t.QueryModuleState()};t.updateInterval=setInterval(n,t.queryDelay);n()},t.QueryModuleState=function(){page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"QueryModuleState",{networkId:t.viewModel.Module.NetworkId(),nodeAddress:t.viewModel.Module.NodeAddress(),moduleIndex:t.viewModel.Module.ModuleIndex()}),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);t.livePollTimeout(0);return}ko.viewmodel.updateFromModel(t.viewModel.ModuleTile,n)}))},t.SetResultsLimitForm=function(){return new DialogViewModelBuilder(null,"Set result limit","Set",{resultLimit:ko.observable(t.eventFilterCount())}).Submit(function(n){t.eventFilterCount(n.resultLimit());t.moduleEventsTable.LoadData();page.CloseFormDialog()}).NumberField("resultLimit","Set Limit (between 10 and 1000)",10,1e3).Create()},t.SearchEventsForm=function(){return new DialogViewModelBuilder(null,"Set event by date range","Search",{startDate:ko.observable((t.eventFilterStartLocal()!=null?moment(t.eventFilterStartLocal()):moment().add("days",-7)).format("YYYY-MM-DD")),endDate:ko.observable((t.eventFilterEndLocal()!=null?moment(t.eventFilterEndLocal()):moment()).format("YYYY-MM-DD"))}).Submit(function(n){t.eventFilterStartLocal(moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).utc().toISOString());t.eventFilterEndLocal(moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).utc().toISOString());t.moduleEventsTable.LoadData();page.CloseFormDialog()}).DateField("startDate","Start").DateField("endDate","End").Create()},t.AddAttributeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AddAttribute"),"Add Attribute","Add",{key:ko.observable(""),value:ko.observable("")}).SubmitData(function(n){return{key:n.key(),value:n.value()}}).Done(function(){page.Update()}).MessageField("Specify the key and value for the attribute to be added. Keys must be unique within the module.").TextField("key","Key",50).TextField("value","Value").Create()},t.EditAttributeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"UpdateAttribute"),"Edit Attribute","Update",{value:ko.observable(n.Value())}).SubmitData(function(t){return{key:n.Key(),value:t.value()}}).Done(function(t,i){n.Value(i.Value)}).MessageField("Specify the new value for the attribute "+n.Key()+".").TextField("value","Value").Create()},t.RemoveAttributesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RemoveAttributes"),"Remove Attributes","Remove",{keys:ko.observableArray([])}).SubmitData(function(n){return{keys:n.keys()}}).Done(function(){page.Update()}).MessageField("Select one or more attributes to remove.").CheckBoxListField("keys","Keys",t.viewModel.Attributes,function(n){return n.name()+": "+n.description()},function(n){return n.name()}).Create()},t.DownloadRawDataForm=function(){var n={properties:ko.observableArray(),startDate:ko.observable(moment().add("months",-1).format("YYYY-MM-DD")),endDate:ko.observable(moment().format("YYYY-MM-DD")),selectAll:ko.observable(!1)};return ko.computed(function(){n.selectAll();$(".check-box").each(function(n,t){var i=$(t);i.prop("name")!=="selectAll"&&i.prop("checked")!==$("#selectAll").prop("checked")&&i.click()})}),new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"DownloadRawData"),"Download Raw Data","Download",n).SubmitData(function(n){return{properties:n.properties(),startDateUtc:moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).utc().toISOString(),endDateUtc:moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).utc().toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":n.properties().length<1?"One or more properties must be selected.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select one or more properties to include in the download.").CheckBoxField("selectAll","Select All").CheckBoxListField("properties","Properties",t.viewModel.AllProperties,function(n){return n},function(n){return n}).DateField("startDate","Start Date").DateField("endDate","End Date").CreateDownload()},t.DownloadDailyTotalsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"DownloadDailyTotals"),"Download Daily Totals","Download",{properties:ko.observableArray(t.viewModel.DailyTotalProperties()),startDate:ko.observable(moment().add("months",-1).format("YYYY-MM-DD")),endDate:ko.observable(moment().format("YYYY-MM-DD"))}).SubmitData(function(n){return{properties:n.properties(),startDateUtc:moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("seconds",1).utc().toISOString(),endDateUtc:moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).utc().toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":n.properties().length<1?"One or more properties must be selected.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select one or more properties to include in the download.").CheckBoxListField("properties","Properties",t.viewModel.DailyTotalProperties,function(n){return n},function(n){return n}).DateField("startDate","Start Date").DateField("endDate","End Date").CreateDownload()},t.AddRfidTagGroupsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AddRfidTagGroups"),"Add RFID Tag Groups","Add",{groupIds:ko.observableArray()}).SubmitData(function(n){return{groupIds:n.groupIds()}}).Done(function(){page.Update();t.rfidTagsTable.LoadData()}).MessageField("Select one or more RFID tag groups to add to this module.").AjaxMultiSelectListField("groupIds","RFID Tag Groups (ctrl-click or drag for multi select)",function(n){return n.Name+" - "+n.TagCount+" tags"},function(n){return n.GroupId},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AvailableRfidTagGroups"),15,!0).Create()},t.RemoveRfidTagGroupForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RemoveRfidTagGroup"),"Remove RFID Tag Group","Remove",{groupId:n.GroupId}).SubmitData(function(n){return{groupId:n.groupId}}).Done(function(){page.Update();t.rfidTagsTable.LoadData()}).MessageField("Are you sure you want to remove the RFID tag group "+n.Name+" from this module?").Create()},t.RenameModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"Rename"),"Rename Module","Rename",{name:ko.observable(t.viewModel.ModuleTile.Name()),shortName:ko.observable(t.viewModel.Module.ShortName())}).SubmitData(function(n){return{name:n.name(),shortName:n.shortName()}}).Done(function(n,i){t.viewModel.ModuleTile.Name(i.Name);t.viewModel.Module.Name(i.Name);t.viewModel.Module.ShortName(i.ShortName);t.moduleEventsTable.LoadData()}).MessageField("Assign a unique name to this module. The SMS name should be short and easy to enter in to a phone").TextField("name","Name").TextField("shortName","Short Name").Create()},t.DeleteModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"Delete"),"Delete Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Network_Node.Load(t.viewModel.Module.NetworkId,t.viewModel.Module.NodeAddress)}).MessageField("Are you sure you want to permanently delete this module?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of module").Create()},t.ClearAutoSmsUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ClearAutoSmsUser"),"Clear Auto SMS User","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear the auto SMS user? Automatic SMS alerts will not be generated again until a user commands this module using SMS.").Create()},t.RemoveFromDashboardGroupForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RemoveFromDashboardGroup"),"Remove from Section","Remove",{}).SubmitData(function(){return{dashboardGroupId:n.DashboardGroupId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove this module from the section "+n.Name()+"?").Create()},t.AddToExistingDashboardGroupsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AddToDashboardGroups"),"Add to Existing Dashboard Sections","Add",{dashboardGroupIds:ko.observableArray([])}).SubmitData(function(n){return{dashboardGroupIds:n.dashboardGroupIds()}}).Done(function(){page.Update()}).MessageField("Select 1 or more sections from the list below to add this module to:").AjaxMultiSelectListField("dashboardGroupIds","Dashboard Sections (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.DashboardGroupId},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AvailableDashboardGroups"),15,!0).Create()},t.UpdateConfigForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ConfigUpdate"),"Force Configuration Update","Update",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to force a configuration update for this module?").Create()},t.MoveModuleForm=function(){var n={networkId:ko.observable(),nodeAddress:ko.observable(),moduleIndex:ko.observable()};return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"MoveModule"),"Move Module","Move",n).SubmitData(function(n){return{networkId:n.networkId(),nodeAddress:n.nodeAddress(),moduleIndex:n.moduleIndex()}}).Done(function(){page.Update()}).AjaxCompactFilterDropDownListField("networkId","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerAction("Network","GetUserNetworks"),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("nodeAddress","Node",function(n){return FormatNodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n.NodeAddress},ko.computed(function(){return n.networkId()?route.forControllerItemAction("Network",n.networkId,"GetUserNetworkNodes"):null}),!1,null,"Name",3,1).IntNumberField("moduleIndex","Module Index",0,255).Create()},t.SetModuleIndexForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetModuleIndex"),"Set Module Index","Update",{moduleIndex:ko.observable(t.viewModel.Module.ModuleIndex())}).SubmitData(function(n){return{moduleIndex:n.moduleIndex()}}).Done(function(){page.Update()}).MessageField("Change the index for this module.").IntNumberField("moduleIndex","Module Index",0,255).Create()},t.SetModuleTypeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetModuleType"),"Set Module Type","Update",{moduleType:ko.observable(t.viewModel.Module.Type()),confirm:ko.observable(!1)}).SubmitData(function(n){return{moduleType:n.moduleType(),confirm:n.confirm()}}).Done(function(n,t){views.Module_Details.Load(t.ModuleId)}).MessageField("Select the type from the list below.").OptionalCheckBoxField("confirm","Confirm change to incompatible module type").AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableModuleTypes"),!1,t.viewModel.Module.Type(),null,5,1).Create()},t.SetModuleIconForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetModuleIcon"),"Set Module Icon","Update",{iconName:ko.observable(t.viewModel.Module.Icon())}).SubmitData(function(n){return{iconName:n.iconName()}}).Done(function(){page.Update()}).MessageField("Select an icon from the list below. Note that modules with dynamic icons will ignore this setting.").AjaxFilterDropDownListField("iconName","Icon",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableIconNames"),!1,t.viewModel.Module.Icon(),null,5,5).Create()},t.ModuleEventDetailsDialog=function(n){var i={details:n},r=ko.observable(!0),u=ko.observable(!1),f=function(n,t){return ko.computed(function(){return r()?n+": Loading...":u()?n+": Failed to load":n+": "+t()})};return page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"EventDetails"),{data:{moduleEventId:n.ModuleEventId},type:"POST"}).done(function(n){i.details=n;u(!1);r(!1)}).fail(function(){u(!0);r(!1)})),new DialogViewModelBuilder(undefined,"Event details","Close",{}).MessageField(f("Details",function(){return i.details.Details})).MessageField(f("Time",function(){return FormatDateTime(moment.utc(i.details.TimeUtc))})).MessageField(f("Escalation",function(){return i.details.EscalationComplete?"Complete":"In Progress"})).MessageField(f("Acknowledgement",function(){return i.details.AcknowledgeUtc?FormatDateTime(moment.utc(i.details.AcknowledgeUtc))+" "+i.details.AcknowledgeUser:"Not Acknowledged"})).ListField("Messages",ko.computed(function(){return r()?["Loading..."]:u()?["Failed to load"]:i.details.Messages}),function(n){return typeof n=="string"?n:FormatDateTime(moment.utc(n.TimeUtc))+(n.Sms?" Sms":"")+(n.Email?" Email":"")+" "+n.User+" "+n.Content}).Create()},t.CreateCumulativeMeterForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"CreateCumulativeMeter"),"Create Cumulative Meter","Create",{name:ko.observable(),valueIndex:ko.observable(),startLocal:ko.observable(moment().format("YYYY-MM-DDTHH:mm:ss")),initialTotal:ko.observable(0)}).SubmitData(function(n){return{name:n.name(),valueIndex:n.valueIndex(),startUtc:moment(n.startLocal()).utc().toISOString(),initialTotal:n.initialTotal()}}).Done(function(n,t){views.CumulativeMeter_Details.Load(t.CumulativeMeterId)}).MessageField("Configure the new cumulative meter.").TextField("name","Name").AjaxDropDownListField("valueIndex","Trend",function(n){return n.Name},function(n){return n.ValueIndex},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetCumulativeTrends"),!1).DateTimeField("startLocal","Start").NumberField("initialTotal","Initial Total").Create()},t.CreateNoteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"CreateNote"),"Create Note","Create",{groupId:ko.observable(),title:ko.observable(),details:ko.observable()}).SubmitData(function(n){return{groupId:n.groupId(),title:n.title(),details:n.details()}}).Done(function(){t.notesTable.LoadData()}).MessageField("Select the group in which to create the note. Only users with access to this group will be able to view the note.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainNote"),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()},t.CreateModuleExportTargetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"CreateModuleExportTarget"),"Create Export","Create",{exportTargetId:ko.observable(),trend:ko.observable(),identifier:ko.observable(),scale:ko.observable(1),startExportUtc:ko.observable(moment().format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{exportTargetId:n.exportTargetId(),trend:n.trend(),identifier:n.identifier(),scale:n.scale(),startExportUtc:n.startExportUtc()}}).Done(function(){page.Update()}).MessageField("Select the export target.").AjaxFilterDropDownListField("exportTargetId","Export Target",function(n){return n.Name},function(n){return n.ExportTargetId},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetExportTargets"),!1,null,"Name",5,5).MessageField("Select the trend to export.").AjaxFilterDropDownListField("trend","Trend",function(n){return n.Name},function(n){return n.Name},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetExportableTrends"),!1,null,"Name",1,1).MessageField("Specify the identifier for this Export.").TextField("identifier","Identifier").MessageField("Specify the scale factor to apply to the export.").NumberField("scale","Scale").MessageField("Set the date for the beginning of the export period.").DateTimeField("startExportUtc","Export Start Date").Create()},t.CreateDataStreamForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"CreateDataStream"),"Create Data Stream","Create",{groupId:ko.observable(),trend:ko.observable(),units:ko.observable(),scale:ko.observable(1)}).SubmitData(function(n){return{groupId:n.groupId(),trend:n.trend(),units:n.units(),scale:n.scale()}}).Done(function(){page.Update()}).MessageField("Select the group in which to create the data stream. Only users with access to this group will be able to view the data stream.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GroupsToContainDataStream"),!1,null,"Name",1,1).MessageField("Select the trend to make available through the data stream.").AjaxFilterDropDownListField("trend","Trend",function(n){return n.Name},function(n){return n.Name},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetNumberTrends"),!1,null,"Name",1,1).MessageField("Specify the scale factor to apply to the data stream values.").NumberField("scale","Scale").MessageField("Specify the units after scaling.").TextField("units","Units").Create()},t.ScaleDataForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ScaleData"),"Scale Data","Scale",{trend:ko.observable(),scale:ko.observable(1),startLocal:ko.observable(moment().subtract("day",1).format("YYYY-MM-DDTHH:mm:ss")),endLocal:ko.observable(moment().format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{trend:n.trend(),scale:n.scale(),startUtc:moment(n.startLocal()).utc().toISOString(),endUtc:moment(n.endLocal()).utc().toISOString()}}).Done(function(){page.Update()}).SectionField("Trend").MessageField("Select a trend to scale").DropDownListField("trend","Trend",function(n){return n},function(n){return n},t.viewModel.NumberProperties()).SectionField("Scale").MessageField("Scale factor to apply to the data. Each data point will be multiplied by this factor.").NumberField("scale","Scale").SectionField("Range").MessageField("Select the time range to apply the scale to. The start date is inclusive, the end date is exclusive.").DateTimeField("startLocal","Start").DateTimeField("endLocal","End").Create()},t.DownloadEventsForm=function(){var n={alertIds:ko.observableArray([]),startLocal:ko.observable(moment(new Date).subtract("month",1).format("YYYY-MM-DD")),endLocal:ko.observable(moment(new Date).format("YYYY-MM-DD")),selectAll:ko.observable(!1)};return ko.computed(function(){n.selectAll();$(".check-box").each(function(n,t){var i=$(t);i.prop("name")!=="selectAll"&&i.prop("checked")!==$("#selectAll").prop("checked")&&i.click()})}),new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"DownloadEventsData"),"Download Data","Download",n).SubmitData(function(n){return{alertIds:n.alertIds(),startLocal:n.startLocal(),endLocal:n.endLocal()}}).Done(function(){}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD"]),i=moment(n.endLocal(),["YYYY-MM-DD"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":n.alertIds().length===0?"Please select at least 1 alert":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select the alerts you want to include in the download.").CheckBoxField("selectAll","Select All").AjaxCheckBoxListField("alertIds","Alerts",function(n){return n.Name},function(n){return n.AlertAndStatus},route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetAlerts")).MessageField("Select the date range for the events you want to include in the download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()},t.SuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SuppressAlerts"),"Suppress Alerts","Suppress",{suppressUntil:ko.observable(moment().add("d",1).format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{suppressUntilUtc:moment(n.suppressUntil()).utc().toISOString()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to suppress alerts for this module?").DateTimeField("suppressUntil","Suppress Until").Create()},t.ClearSuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"ClearSuppressAlerts"),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts for this module?").Create()},t.mappingOptions={arrayChildId:{Attributes:"Key",Exports:"Identifier",CumulativeMeters:"CumulativeMeterId",TotalAlarms:"CumulativeMeterTotalAlarmId",TimeAlarms:"CumulativeMeterTimeAlarmId",DashboardGroups:"DashboardGroupId",DataStreams:"DataStreamId"},extend:{"Attributes[i]":function(n){return new Command_Block(n.Key,n.Value,null,function(){return page.HasCapability(Capability.Module_UpdateAttribute)?page.OpenFormDialog(t.EditAttributeForm(n)):null})},"Exports[i]":function(n){return new ExportValue_Block(n.Trend,n.Target,n.Identifier,n.Scale,ko.computed(function(){return FormatLastUpdate(moment.utc(n.LastExportUtc()))}),ko.computed(function(){return FormatLastUpdate(moment.utc(n.StartExportUtc()))}),n.Enabled,function(){return views.Module_ModuleExportTarget.Load(n.ModuleId,n.ModuleExportTargetId)})},"CumulativeMeters[i]":function(n){tiles.makeTile(n);n.addBlockSet([new Header_Block(n.Icon,new Header_Text(n.Name,null,n.FormattedTotal,"Total",ko.computed(function(){return"Since "+FormatDateTime(moment(n.StartUtc()))})),new Header_Actions(function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)}),null,ko.computed(function(){return"state-"+(n.AnyLimitReached()?"faulted":n.AnyWarningReached()?"warning":"active")}))]);n.addBlockSet(n.TotalAlarms);n.addBlockSet(n.TimeAlarms)},"TotalAlarms[i]":function(n){return new PercentBar_Block(n.Name,ko.computed(function(){return n.Limit().toFixed(n.DisplayDigits())+n.Units()}),ko.computed(function(){return n.Total()/n.Limit()*100}),null,function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},"TimeAlarms[i]":function(n){return new PercentBar_Block(n.Name,n.FormattedLimit,n.Percent,null,function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},"DashboardGroups[i]":function(n){return new Command_Block("Remove",n.Name,null,function(){return page.OpenFormDialog(t.RemoveFromDashboardGroupForm(n))})},"DataStreams[i]":function(n){return new DataStream_Block(n.Trend,n.Units,n.DataStreamId,n.Scale,function(){return views.DataStream_Details.Load(n.DataStreamId)})}}},tiles.applyModuleTileMappingSingle(t.mappingOptions,"ModuleTile"),t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Map=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_Map_Model,t.stateHandler=function(){return new Module_Map_State(t)},t.titleHandler=function(){return page.SetTitle("Map",t.viewModel.Module.Name,views.Module_Details.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Details.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("Module",n,"Map")},t.markersUrl=route.forControllerAction("Images","markers-v3.png"),t.dependsOnMarkerState=ko.observable(!1),t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.dependsOnMarkerState(!1);t.icons={moduleMarker:{url:t.markersUrl,size:new google.maps.Size(20,20),origin:new google.maps.Point(4,60),anchor:new google.maps.Point(10,10)},dragMarker:{url:t.markersUrl,size:new google.maps.Size(28,32),origin:new google.maps.Point(0,84)}};t.mapModel=new MapPageItem(!0);t.mapMarker&&t.mapMarker.setMap(null);t.mapMarker=null;t.viewModel.SupportsLocation()?(t.PathMap(),MapUpdate(t,function(){return t.UpdateLocations(!0)})):(t.StaticMap(),BaseUpdate(t))},t.StaticMap=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("module",new Header_Text("Module",null,t.viewModel.Module.Name,t.viewModel.Module.LastUpdateUtc)),new SingleValue_Block("Network",t.viewModel.Module.NetworkName),new SingleValue_Block("Node",t.viewModel.Module.NodeName),new SingleValue_Block("Set By",ko.computed(function(){return t.viewModel.Module.UserName()})),new SingleValue_Block("Latitude",ko.computed(function(){return t.viewModel.Module.Latitude()!=null?t.viewModel.Module.Latitude().toFixed(6):"none"})),new SingleValue_Block("Longitude",ko.computed(function(){return t.viewModel.Module.Longitude()!=null?t.viewModel.Module.Longitude().toFixed(6):"none"})),new Command_Block("Set Location","Set the module location",null,function(){return page.OpenFormDialog(views.Module_Map.SetModuleLocationForm(t.viewModel.Module.ModuleId(),t.viewModel.Module.Latitude()!=null?t.viewModel.Module.Latitude():t.viewModel.Module.FirstModuleLatitude()!=null?t.viewModel.Module.FirstModuleLatitude():t.viewModel.Module.Latitude(),t.viewModel.Module.Longitude()!=null?t.viewModel.Module.Longitude():t.viewModel.Module.FirstModuleLongitude()!=null?t.viewModel.Module.FirstModuleLongitude():t.viewModel.Module.Longitude(),!(t.viewModel.Module.Latitude()==null&&t.viewModel.Module.Longitude()==null),function(n,i){t.viewModel.Module.Latitude(n===0?null:n);t.viewModel.Module.Longitude(i===0?null:i);views.Module_Map.mapModel.zoomToBounds();t.locationHistoryTable.LoadData()}))},page.HasCapabilityComputed(Capability.Module_SetLocation))])]);page.Add(t.pageCommands);t.locationHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"GetModuleLocationHistory"),"CreatedUtc",!1,null,10);t.locationHistoryTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Location","Location",!1,!0,function(n){return n.Latitude!=null?n.Latitude+", "+n.Longitude:"not set"})).AddColumn(new FilterTableColumnViewModel("CreatedByUser","User",!0,!0)).AddColumn(new CommandTableColumnViewModel("Restore location","home",function(n){return page.OpenFormDialog(views.Module_Map.SetModuleLocationForm(t.viewModel.Module.ModuleId(),n.Latitude,n.Longitude,!1,function(n,i){t.viewModel.Module.Latitude(n===0?null:n);t.viewModel.Module.Longitude(i===0?null:i);views.Module_Map.mapModel.zoomToBounds();t.locationHistoryTable.LoadData()}))},page.HasCapabilityComputed(Capability.Module_SetLocation))).AddTitle("Location History");t.mapOptions=new MapItemsInfo;t.mapOptions.items=ko.observableArray([t.viewModel.Module]);t.mapOptions.getLatLng=function(n){return n.Latitude()&&n.Longitude()?new google.maps.LatLng(n.Latitude(),n.Longitude()):null};t.mapOptions.getText=function(n){return n.Latitude()==null||n.Longitude()==null?"":n.Name()+": "+n.Latitude().toFixed(6)+", "+n.Longitude().toFixed(6)};t.mapOptions.getInfo=function(n){return n.Latitude()==null||n.Longitude()==null?"":n.Name()+" - lat:"+n.Latitude().toFixed(6)+", lng:"+n.Longitude().toFixed(6)};t.mapOptions.getIcon=function(){return t.icons.moduleMarker};t.mapOptions.getZIndex=function(){return 1};t.mapModel.AddItems(t.mapOptions);page.Add(t.mapModel);t.mapMarker=new google.maps.Marker({icon:t.icons.dragMarker,position:t.viewModel.Module.Latitude()==null||t.viewModel.Module.Longitude()==null?t.mapModel.map.getCenter():{lat:t.viewModel.Module.Latitude(),lng:t.viewModel.Module.Longitude()},title:"Drag the marker and use the Update command to move the module location",draggable:!0,zIndex:1e3});t.mapMarker.addListener("drag",t.markerDrag);t.mapMarker.addListener("dragend",t.markerDrag);page.Add(t.locationHistoryTable)},t.PathMap=function(){t.selectedStartUtc=ko.observable(moment.utc().subtract("day",2).toISOString());t.selectedEndUtc=ko.observable(moment.utc().toISOString());t.dataStartUtc=ko.observable("");t.dataEndUtc=ko.observable("");t.showMapOptions=ko.computed(function(){return t.viewModel.SupportsTrails()});t.hideMapOptions=ko.computed(function(){return!t.showMapOptions()});t.showTrailsLineType=ko.observable(!1);t.userShowIrrigationArea=ko.observable(!0);t.showIrrigationArea=ko.computed(function(){return t.userShowIrrigationArea()&&t.viewModel.SupportsTrails()&&t.showTrailsLineType()});t.userShowTrailLinks=ko.observable(!0);t.showTrailLinks=ko.computed(function(){return t.userShowTrailLinks()&&t.viewModel.SupportsTrails()&&t.showTrailsLineType()});t.trailsModel=ko.viewmodel.fromModel({trailLocations:[],trailLinks:[]},{arrayChildId:{trailLocations:"StartUtc",trailLinks:"StartUtc"},append:["trailLocations[i]","trailLinks[i]"]});t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("module",new Header_Text(t.viewModel.Module.Name,t.viewModel.Module.NetworkName,null,null)),new SingleValue_Block("Start",ko.computed(function(){return FormatDateTime(moment.utc(t.dataStartUtc()))}),ko.computed(function(){return t.trailsModel.trailLocations().length>0})),new SingleValue_Block("End",ko.computed(function(){return FormatDateTime(moment.utc(t.dataEndUtc()))}),ko.computed(function(){return t.trailsModel.trailLocations().length>0})),new SingleValue_Block("No Data","No data available",ko.computed(function(){return t.trailsModel.trailLocations().length===0}))]),tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("Date Range")),new SingleValue_Block("From",ko.computed(function(){return FormatDateTime(moment.utc(t.selectedStartUtc()))})),new SingleValue_Block("To",ko.computed(function(){return FormatDateTime(moment.utc(t.selectedEndUtc()))})),new Command_Block("Set Range","Set date range",t.SelectLocationDateRangeForm),new Command_Block("1 Day","View last 24 hours",null,function(){return t.QuickSetDateRange(1)}),new Command_Block("2 Days","View last 48 hours",null,function(){return t.QuickSetDateRange(2)}),new Command_Block("1 Week","View last 7 days",null,function(){return t.QuickSetDateRange(7)}),new Command_Block("2 Weeks","View last 14 days",null,function(){return t.QuickSetDateRange(14)}),new Command_Block("30 Days","View last 30 days",null,function(){return t.QuickSetDateRange(30)})]),tiles.createTile().addBlockSet([new Header_Block("tools",new Header_Text("Irrigation Views")),new Command_Block("Display",ko.computed(function(){return t.showTrailsLineType()?"Show raw data":"Show aggregate data"}),null,function(){return t.ToggleLineType()},t.showMapOptions),new Command_Block("Areas",ko.computed(function(){return t.userShowIrrigationArea()?"Hide irrigated areas":"Show irrigated areas"}),null,function(){return t.ToggleIrrigationArea()},ko.computed(function(){return t.showTrailsLineType()&&t.showMapOptions()})),new Command_Block("Links",ko.computed(function(){return t.userShowTrailLinks()?"Hide line between runs":"Show line between runs"}),null,function(){return t.ToggleShowTrailLinks()},ko.computed(function(){return t.showTrailsLineType()&&t.showMapOptions()}))]).setEnabled(t.showMapOptions)]);page.Add(t.pageCommands);t.mapModel.AddTrails({trails:t.trailsModel.trailLocations,getTextStart:function(n){return FormatDateTime(moment.utc(ko.unwrap(n.StartUtc)))},getTextEnd:function(n){return FormatDateTime(moment.utc(ko.unwrap(n.EndUtc)))}});t.mapModel.AddPolylines({polylines:t.trailsModel.trailLinks,getLatLng:function(n){for(var r=[],i=n.PathPoints,u=i.length,t=0;t<u;t++)r.push(new google.maps.LatLng(i[t].lat,i[t].lng));return r}});t.mapModel.AddPolygons({polygons:t.viewModel.GisPolygons.GisPolygonDetails,getLatLng:function(n){for(var r=[],i=n.Coordinates(),u=i.length,t=0;t<u;++t)r.push(new google.maps.LatLng(i[t].Latitude(),i[t].Longitude()));return r},getName:function(n){return n.Name()},getInfo:function(n){var i="";return n.IndexValues().forEach(function(n){t.viewModel.GisPolygons.ItemDescriptions().forEach(function(t){n.Key()===t.ItemIndex()&&(i+='<div class="nodetext"><strong>'+t.Description()+":<\/strong> "+n.Value()+"<\/div>")})}),"<div>"+n.Name()+i+"<\/div>"}});t.UpdateLocations();page.Add(t.mapModel)},t.CanConfigure=function(){return page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller])()},t.markerDrag=function(){t.dependsOnMarkerState(!t.dependsOnMarkerState())},t.distanceBetweenMarkerAndModule=function(){return google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(t.mapMarker.position.lat(),t.mapMarker.position.lng()),new google.maps.LatLng(t.viewModel.Module.Latitude(),t.viewModel.Module.Longitude())).toFixed(2)+"m"},t.markerAndModuleAtSameLocation=function(){return t.viewModel.Module.Latitude()==null||t.viewModel.Module.Longitude()?!1:t.mapMarker.position.lat().toFixed(6)===t.viewModel.Module.Latitude().toFixed(6)&&t.mapMarker.position.lng().toFixed(6)===t.viewModel.Module.Longitude().toFixed(6)},t.hasMarkerAndPos=function(){return t.mapMarker!=null&&t.mapMarker.map!=null&&t.viewModel.Module.Latitude()!=null&&t.viewModel.Module.Longitude()!=null},t.SetModuleLocationForm=function(n,t,i,r,u){var f={latitude:ko.observable(ko.unwrap(t)),longitude:ko.observable(ko.unwrap(i)),distance:ko.observable("0.00m"),locationMessage:ko.observable("")},e=new DialogViewModelBuilder(route.forControllerItemAction("Module",n,"SetLocation"),"Set Module Location","Update",f),o;return e.SubmitData(function(n){return{latitude:n.latitude(),longitude:n.longitude(),distance:n.distance()}}).Done(function(n){u(Number(n.latitude()),Number(n.longitude()))}),e.MapField(f,"nodeMarker",r),e.CommandButtonField("getUserLocation","Get current location",function(){navigator.geolocation?(f.locationMessage("Searching for your current location... "),navigator.geolocation.getCurrentPosition(function(n){f.latitude(n.coords.latitude.toFixed(6));f.longitude(n.coords.longitude.toFixed(6));f.locationMessage("Your current location is: "+n.coords.latitude.toFixed(6)+", "+n.coords.longitude.toFixed(6))},function(n){switch(n.code){case 1:f.locationMessage("You have denied location services for this site in the past.  To use this feature you need to re-enable location services for this site.");break;default:f.locationMessage(n.message)}},{enableHighAccuracy:!0,timeout:5e3,maximumAge:12e4})):f.locationMessage("Location services are not supported on this device")},function(){return navigator.geolocation}).MessageField(ko.computed(function(){return f.locationMessage()})).NumberField("latitude","Latitude (decimal degrees)",-90,90).NumberField("longitude","Longitude (decimal degrees)",-180,180).CommandButtonField("zoom","Zoom to marker",function(){var n=e.dialogModel.fields()[0];n.mapModel.zoomTo(f.latitude()!=null&&f.longitude()!=null?new google.maps.LatLng(f.latitude(),f.longitude()):new google.maps.LatLng(BaseMapLocation.Latitude,BaseMapLocation.Longitude))}).DisplayFieldWithHeading("distance","Distance",f.distance),o=e.Create(),ko.computed(function(){f.latitude();f.longitude();var n=e.dialogModel.fields()[0],t=n.mapMarker;t!=null&&(n.dragging()||(t.setPosition(new google.maps.LatLng(f.latitude(),f.longitude())),f.distance(n.distanceBetweenMarkerAndNode())))}).extend({throttle:250}),o},t.SetMarkerModuleLocationForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetLocation"),"Set Module Location","Update",{latitude:ko.observable(t.mapMarker.position.lat().toFixed(6)),longitude:ko.observable(t.mapMarker.position.lng().toFixed(6))}).SubmitData(function(n){return{latitude:n.latitude(),longitude:n.longitude()}}).Done(function(n,i){t.viewModel.Module.Latitude(i.latitude);t.viewModel.Module.Longitude(i.longitude);t.mapModel.map.setCenter(new google.maps.LatLng(i.latitude,i.longitude));page.Update()}).MessageField("Are you sure you want to move the module to the location of the marker").MessageField("New position: "+t.mapMarker.position.lat().toFixed(6)+","+t.mapMarker.position.lng().toFixed(6)).MessageField(t.hasMarkerAndPos()?"Distance between old and new location: "+t.distanceBetweenMarkerAndModule():"").Create()},t.CreateTrailLinks=function(n){var r,f,t,i,u;if(n.length<2)return[];for(r=[],f=n.length,t=1;t<f;t++)(i=n[t-1],u=n[t],i.Points.length<2||u.Points.length<1)||r.push({StartUtc:i.StartUtc,PathPoints:[i.Points[i.Points.length-1],u.Points[0]]});return r},t.UpdateLocations=function(n){n===void 0&&(n=!1);page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,t.showTrailsLineType()&&t.viewModel.SupportsTrails()?"GetLocationTrails":"GetLocationLogs"),{data:{startUtc:t.selectedStartUtc(),endUtc:t.selectedEndUtc()},type:"POST"}).done(function(i){if(page.view()===t){i.Success===!1&&(page.SetMessage("Failed to load location data"),i.Paths=[]);var r=t.CreateTrailLinks(i.Paths);ko.viewmodel.updateFromModel(t.trailsModel,{trailLocations:i.Paths,trailLinks:r});i.DataStartUtc?t.dataStartUtc(moment.utc(i.DataStartUtc).toISOString()):t.dataStartUtc(null);i.DataEndUtc?t.dataEndUtc(moment.utc(i.DataEndUtc).toISOString()):t.dataEndUtc(null);n||(t.mapModel.zoomToPolygons(),t.mapModel.zoomToBounds());t.ApplyIrrigationAreaVisibility();t.ApplyTrailLinkVisibility()}}))},t.QuickSetDateRange=function(n){var i=moment.utc().subtract("day",n).toISOString(),r=moment.utc().toISOString();t.selectedStartUtc(i);t.selectedEndUtc(r);t.UpdateLocations()},t.SelectLocationDateRangeForm=function(){return new DialogViewModelBuilder(null,"Set Date Range","Apply",{startLocal:ko.observable(moment.utc(t.selectedStartUtc()).local().format("YYYY-MM-DDTHH:mm:ss")),endLocal:ko.observable(moment.utc(t.selectedEndUtc()).local().format("YYYY-MM-DDTHH:mm:ss"))}).Submit(function(n){t.selectedStartUtc(moment(n.startLocal()).utc().toISOString());t.selectedEndUtc(moment(n.endLocal()).utc().toISOString());t.UpdateLocations();page.CloseFormDialog()}).Validate(function(n){return n.startLocal()>n.endLocal()?"Start date must be earlier than end date":null}).DateTimeField("startLocal","Start").DateTimeField("endLocal","End").Create()},t.ToggleLineType=function(){t.showTrailsLineType(!t.showTrailsLineType());t.UpdateLocations()},t.ApplyIrrigationAreaVisibility=function(){for(var i,u=t.showIrrigationArea(),n=0,r=t.trailsModel.trailLocations();n<r.length;n++)i=r[n],i.SetAreaVisible&&i.SetAreaVisible(u)},t.ToggleIrrigationArea=function(){t.userShowIrrigationArea(!t.userShowIrrigationArea());t.ApplyIrrigationAreaVisibility()},t.ApplyTrailLinkVisibility=function(){for(var i,u=t.showTrailLinks(),n=0,r=t.trailsModel.trailLinks();n<r.length;n++)i=r[n],i.SetVisible&&i.SetVisible(u)},t.ToggleShowTrailLinks=function(){t.userShowTrailLinks(!t.userShowTrailLinks());t.ApplyTrailLinkVisibility()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_ModuleExportTarget=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_ModuleExportTarget_Model,t.stateHandler=function(){return new Module_ModuleExportTarget_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Identifier,t.viewModel.ModuleName,views.Module_Details.routeHandler(t.viewModel.ModuleId),function(){return views.Module_Details.Load(t.viewModel.ModuleId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Module",n,"ModuleExportTarget",{moduleExportTargetId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("data-stream",new Header_Text(t.viewModel.Identifier,"Module Export Target",ko.computed(function(){return t.viewModel.Enabled()?"Enabled":"Disabled"}),"Status"),new Header_Actions(function(){return CopyToClipboard(t.viewModel.Identifier)},null,null,null,"Click to copy to clipboard")),new SingleValue_Block("Module",t.viewModel.ModuleName),new SingleValue_Block("Trend",t.viewModel.Trend),new SingleValue_Block("Scale",t.viewModel.Scale),new SingleValue_Block("Start Export",ko.computed(function(){return FormatDate(moment.utc(t.viewModel.StartExportUtc()))})),new SingleValue_Block("Last Export",ko.computed(function(){return FormatLastUpdate(moment.utc(t.viewModel.LastExportUtc()))})),new SingleValue_Block("Export Target",t.viewModel.ExportTargetName)]),tiles.createTile().addBlockSet([new Command_Block("Configure","Configure this module export",t.ConfigureModuleExportTargetForm,null,page.HasCapabilityComputed(Capability.Module_ManageExports)),new Command_Block("Enable","Enable this module export",null,t.SetModuleExportTargetEnabledState,ko.computed(function(){return page.HasCapability(Capability.Module_ManageExports)&&!t.viewModel.Enabled()})),new Command_Block("Disable","Disable this module export",null,t.SetModuleExportTargetEnabledState,ko.computed(function(){return page.HasCapability(Capability.Module_ManageExports)&&t.viewModel.Enabled()})),new Command_Block("Delete","Delete this module export",t.DeleteModuleExportTargetForm,null,page.HasCapabilityComputed(Capability.Module_ManageExports)),new Command_Block("Preview","Preview this module export",t.PreviewModuleExportTargetForm,null,ko.computed(function(){return page.HasCapability(Capability.Module_PreviewExportData)&&t.viewModel.SupportsPreview()}))])]);page.Add(t.pageCommands);BaseUpdate(t)},t.SetModuleExportTargetEnabledState=function(){return $.ajax(route.forControllerItemAction("Module",t.viewModel.ModuleId,"SetModuleExportTargetEnabledState",{moduleExportTargetId:t.viewModel.ModuleExportTargetId}),{data:{state:!t.viewModel.Enabled()},type:"POST"}).done(function(){page.Update()})},t.ConfigureModuleExportTargetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.ModuleId,"ConfigureModuleExportTarget",{moduleExportTargetId:t.viewModel.ModuleExportTargetId}),"Configure Module Export Target","Update",{exportTargetId:ko.observable(t.viewModel.ExportTargetId()),identifier:ko.observable(t.viewModel.Identifier()),trend:ko.observable(t.viewModel.Trend()),scale:ko.observable(t.viewModel.Scale())}).SubmitData(function(n){return{exportTargetId:n.exportTargetId(),identifier:n.identifier(),trend:n.trend(),scale:n.scale()}}).Done(function(){page.Update()}).MessageField("Specify the identifier for this export.").TextField("identifier","Identifier").MessageField("Specify the export target for this export.").AjaxFilterDropDownListField("exportTargetId","Export Target",function(n){return n.Name},function(n){return n.ExportTargetId},route.forControllerItemAction("Module",t.viewModel.ModuleId,"GetExportTargets"),!1,{Name:t.viewModel.ExportTargetName(),ExportTargetId:t.viewModel.ExportTargetId()},"Name",5,5).MessageField("Specify the trend for this export.").AjaxDropDownListField("trend","Trend",function(n){return n.Name},function(n){return n.Name},route.forControllerItemAction("Module",t.viewModel.ModuleId,"GetNumberTrends"),!1,{Name:t.viewModel.Trend()}).MessageField("Specify the scale for this export.").NumberField("scale","Scale").Create()},t.DeleteModuleExportTargetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.ModuleId,"DeleteModuleExportTarget",{moduleExportTargetId:t.viewModel.ModuleExportTargetId}),"Delete Module Export Target","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Module_Details.Load(t.viewModel.ModuleId)}).MessageField("Are you sure you want to delete this module export?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()},t.PreviewModuleExportTargetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.ModuleId,"PreviewModuleExportTarget",{moduleExportTargetId:t.viewModel.ModuleExportTargetId}),"Preview Module Export Target","Download",{startDate:ko.observable(moment().add("months",-1).format("YYYY-MM-DD"))}).SubmitData(function(n){return{startDateUtc:moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("seconds",1).utc().toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?null:"Start date is invalid."}).MessageField("Select the start date for the data to include in the preview.").DateField("startDate","Start Date").CreateDownload()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Subscribers=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_Subscribers_Model,t.stateHandler=function(){return new Module_Subscribers_State(t)},t.titleHandler=function(){return page.SetTitle("Subscribers",t.viewModel.Module.Name,views.Module_Details.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Details.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("Module",n,"Subscribers")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.alertsTable=new TableViewModel(t.viewModel.Alerts,null).AddColumn(new TextTableColumnViewModel("Name","Alert",!1,!1)).AddColumn(new TextTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return FormatSubscription(n.SendSms(),n.SendEmail())})).AddColumn(new CommandTableColumnViewModel("Set Subscription","sms",function(n){return page.OpenFormDialog(t.SetAlertSubscriptionForm(n))}));t.subscribersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SubscribersTable"),"Name",!0,function(n){return views.Module_AlertDetails.Load(t.viewModel.Module.ModuleId,n.AlertAndStatus)},100,page.HasCapabilityComputed(Capability.Module_ManageAlertSubscription));t.subscribersTable.AddColumn(new FilterTableColumnViewModel("Name","Alert Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("SmsCount","SMS",!1,!0,function(n){return n.SmsCount>0?n.SmsCount:"-"})).AddColumn(new FilterTableColumnViewModel("EmailCount","Email",!1,!0,function(n){return n.EmailCount>0?n.EmailCount:"-"})).AddColumn(new FilterTableColumnViewModel("AutoSms","Auto Sms",!0,!0,function(n){return n.AutoSms?"Enabled":"Off"})).AddColumn(new FilterTableColumnViewModel("EscalationListName","Escalation List",!0,!0,function(n){return n.EscalationListName!=null?n.EscalationListName+" ("+n.EscalationListCount+")":""})).AddColumn(new CommandTableColumnViewModel("Test Alert","profile",function(n){return page.OpenFormDialog(t.SendTestAlertsForm(n.AlertAndStatus))},page.HasCapabilityComputed(Capability.User_SendTestMessage))).AddColumn(new CommandTableColumnViewModel("Configure Auto SMS","auto-sms",function(n){return page.OpenFormDialog(t.ConfigureAutoSmsForm(n))},page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ManageAlertSubscription]))).AddColumn(new CommandTableColumnViewModel("Set Escalation","alert",function(n){return page.OpenFormDialog(t.SetAlertEscalationListForm(n))},page.HasCapabilitySetAnyComputed([Capability.Module_ConfigureInstaller,Capability.Module_ConfigureSystem,Capability.Module_ManageAlertSubscription]))).AddTitle("All User Subscriptions");page.Add(new HeaderPageItem("Your Subscriptions"));page.Add(t.alertsTable);page.Add(t.subscribersTable);BaseUpdate(t,[t.subscribersTable])},t.SetAlertSubscriptionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetAlertSubscription"),"Set Alert Subscription","Update",{alertAndStatus:ko.observable(n.AlertAndStatus()),sendSms:ko.observable(n.SendSms()),sendEmail:ko.observable(n.SendEmail())}).SubmitData(function(n){return{alertAndStatus:n.alertAndStatus(),sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){page.Update()}).MessageField("Edit your personal subscription to the alert "+n.Name()+".").MessageField("Tick the send SMS box if you want to receive an SMS message when this alert occurs. If the SMS cannot be sent an email will be sent instead.").CheckBoxField("sendSms","Send SMS").MessageField("Tick the send email box if you want to receive an email message when this alert occurs.").CheckBoxField("sendEmail","Send Email").Create()},t.ConfigureAutoSmsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetAlertAutoSms"),"Set Alert Auto SMS","Update",{alertAndStatus:ko.observable(ko.unwrap(n.AlertAndStatus)),autoSms:ko.observable(ko.unwrap(n.AutoSms))}).SubmitData(function(n){return{alertAndStatus:n.alertAndStatus(),autoSms:n.autoSms()}}).Done(function(){page.Update()}).MessageField("Choose whether this alert should generate automatic SMS messages. These messages are sent to the last user who controlled this module using SMS.").CheckBoxField("autoSms","Send Automatic SMS Alerts").Create()},t.SetAlertEscalationListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SetAlertEscalationList"),"Set Alert Escalation","Update",{escalationListId:ko.observable(ko.unwrap(n.EscalationListId))}).SubmitData(function(t){return{alertAndStatus:ko.unwrap(n.AlertAndStatus),escalationListId:t.escalationListId()}}).Done(function(){page.Update()}).MessageField("Select an escalation list to enable alert escalation. The alert will be sent to users in the list in priority order until someone acknowledges the alert.").AjaxFilterDropDownListField("escalationListId","Escalation List",function(n){return n.Name+" (ID:"+n.EscalationListId+")"},function(n){return n.EscalationListId},route.forControllerAction("Group","GetAvailableEscalationLists"),!0,{EscalationListId:ko.unwrap(n.EscalationListId),Name:ko.unwrap(n.EscalationListName)},"Name",10,10).Create()},t.SendTestAlertsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"SendTestAlerts"),t.viewModel.Module.Type(),"Send",{alertAndStatus:ko.observable(n)}).SubmitData(function(n){return{alertAndStatus:n.alertAndStatus()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to send test alerts for this module?").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Module_Tags=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Module_Tags_Model,t.stateHandler=function(){return new Module_Tags_State(t)},t.titleHandler=function(){return page.SetTitle("Tags",t.viewModel.Module.Name,views.Module_Details.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Details.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("Module",n,"Tags")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Attach Tags","Add tags to Module",t.AttachTagsForm,null,page.HasCapabilityComputed(Capability.Tag_Attach))])]);t.tagsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"TagsTable"),"Name",!0,null,25,page.HasCapabilityComputed(Capability.Tag_View));t.tagsTable.AddColumn(new FilterTableColumnViewModel("Name","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("TagValue","Value",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Value","edit",function(n){return page.OpenFormDialog(t.EditTagsForm(n.TagId,n.TagValue))},page.HasCapabilityComputed(Capability.Tag_Update))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveTagForm(n.TagId,n.Name,t.viewModel.Module.Name()))},page.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Module Tags");t.historyTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"TagValueHistoryTable"),"CreatedUtc",!1,null,25,page.HasCapabilityComputed(Capability.Tag_View));t.historyTable.AddColumn(new FilterTableColumnViewModel("Tag","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("Value","Value",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Changed By",!0,!0)).AddTitle("Module Tag Value History");page.Add(t.pageCommands);page.Add(t.tagsTable);page.Add(t.historyTable);BaseUpdate(t,[t.tagsTable,t.historyTable])},t.RemoveTagForm=function(n,i,r){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"RemoveTag"),"Remove tag from Module","Remove",{confirm:ko.observable(!1)}).SubmitData(function(t){return{tagId:n,confirm:t.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the tag "+i+" from module "+r+"? ").CheckBoxField("confirm","Confirm").Create()},t.AttachTagsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"AttachTag"),"Attach tags to Module","Attach",{tagId:ko.observable(0),tagValue:ko.observable("")}).SubmitData(function(n){return{tagId:n.tagId(),tagValue:n.tagValue()}}).Done(function(){page.Update()}).MessageField("Select a tag to add to this module along with its value.").AjaxCompactFilterDropDownListField("tagId","Tag to add",function(n){return n.Name+" (TagId: "+n.TagId+")"},function(n){return n.TagId},route.forControllerActionParams("Tag","ModuleTagsWhichCanBeAdded",{moduleId:t.viewModel.Module.ModuleId()}),!1,null,"Name").TextField("tagValue","Value").Create()},t.EditTagsForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Module",t.viewModel.Module.ModuleId,"UpdateTag"),"Update tag value","Update",{tagValue:ko.observable(i)}).SubmitData(function(t){return{tagId:n,tagValue:t.tagValue()}}).Done(function(){page.Update()}).TextField("tagValue","Value").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_Details_Model,t.stateHandler=function(){return new Network_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Name,"Networks",views.Network_Index.routeHandler(),function(){return views.Network_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"Details")},t.networkTaskCommands=ko.observableArray([]),t.allTasksComplete=ko.observable(!1),t.expandedTaskList=ko.observable(!1),t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.allTasksComplete=ko.computed(function(){return t.viewModel.NetworkTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()?!0:!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})});t.expandedTaskList(!t.allTasksComplete());t.statusHeader=new DashboardHeaderPageItem(0,ko.computed(function(){return"Network - "+(t.viewModel.StatusMessage()!=null?t.viewModel.StatusMessage():"Installed")+(t.allTasksComplete()?"":" - Required tasks outstanding")}),ko.computed(function(){return TileState[t.allTasksComplete()?t.viewModel.StatusState():"Faulted"]}),function(){return t.expandedTaskList(!t.expandedTaskList())});t.statusHeader.addButton(new DashboardActionButton(0,"command",ko.computed(function(){return"Change status to "+t.viewModel.NextStatusName()}),function(){return t.allTasksComplete()?page.OpenFormDialog(t.ConfirmNetworkStatusChangeForm()):page.OpenFormDialog(t.ConfirmIncompleteNetworkStatusChangeForm())},ko.computed(function(){return t.viewModel.NextStatusName()!=null})));t.statusHeader.addButton(new DashboardActionButton(0,ko.computed(function(){return t.expandedTaskList()?"collapse":"expand"}),ko.computed(function(){return t.expandedTaskList()?"Hide":"Show"}),function(){return t.expandedTaskList(!t.expandedTaskList())},!0));t.networkTiles=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text(t.viewModel.Name,"Network Name",t.viewModel.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+FormatLastUpdate(moment.utc(t.viewModel.LastSyncUtc()))}))),new Command_Block("Default",ko.computed(function(){return t.viewModel.DefaultModule()||"None"}),null,function(){return t.viewModel.DefaultModuleId()?views.Module_Details.Load(t.viewModel.DefaultModuleId):null}),new Command_Block("GIS Dataset",ko.computed(function(){return t.viewModel.GisDatasetName()||"None assigned"}),null,function(){return t.viewModel.GisDatasetId()?views.GisDataset_Details.Load(t.viewModel.GisDatasetId):null},null,null,ko.computed(function(){return t.viewModel.GisDatasetName()?"state-active":"state-idle"})),new SingleValue_Block("Time Zone",ko.computed(function(){return t.viewModel.TimeZoneName()||""})),new Command_Block("Gateway",ko.computed(function(){return t.viewModel.PrimaryNodeExtAddress()||""}),null,function(){return CopyToClipboard(t.viewModel.PrimaryNodeExtAddress)},ko.computed(function(){return t.viewModel.PrimaryNodeExtAddress()!=null}),"Click to copy to clipboard"),new SingleValue_Block("Status",ko.computed(function(){return t.viewModel.StatusId()!=null?t.viewModel.StatusName():"Gateway Missing"}),null,"Status of the gateway node"),new Command_Block("History","View status history",null,function(){return views.Network_NodeStatusHistory.Load(t.viewModel.NetworkId)})]),tiles.createTile().addBlockSet([new Command_Block("Rename","Rename this network",t.RenameNetworkForm,null,page.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Update","Update device network",t.UpdateNetworkForm,null,page.HasCapabilityComputed(Capability.Network_ManageDevices)),new Command_Block("Set Default","Set the default module",t.SetDefaultModuleForm,null,page.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Get Rejected","Get last rejected address",t.GetLastRejectedAddressForm,null,page.HasCapabilityComputed(Capability.Network_ManageDevices)),new Command_Block("Map","View network on map",null,function(){return views.Network_Map.Load(t.viewModel.NetworkId)},page.HasCapabilityComputed(Capability.Network_ViewLocation)),new Command_Block("GIS Dataset","Assign GIS dataset",t.AssignGisDatasetForm,null,page.HasCapabilityComputed(Capability.GisDataset_Assign)),new Command_Block("Users","View users with access",null,function(){return views.Network_Users.Load(t.viewModel.NetworkId)},page.HasCapabilityComputed(Capability.User_Impersonate)),new Command_Block("Groups","Groups containing this network",null,function(){return views.Network_ContainingGroups.Load(t.viewModel.NetworkId)}),new Command_Block("Time Zone","Change the time zone",t.ChangeTimeZoneForm,null,page.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Suppress","Suppress module alerts on network",t.SuppressAlertsForm,null,page.HasCapabilityComputed(Capability.Module_SuppressAlerts)),new Command_Block("Status","Change the network status",function(){return t.ChangeNetworkStatusForm(t.viewModel.NetworkId)},null,page.HasCapabilityComputed(Capability.Network_SetNodeStatus)),new Command_Block("Delete","Delete the network",function(){return t.DeleteNetworkForm(t.viewModel.NetworkId,function(){return views.Home_Index.Load()})},null,page.HasCapabilityComputed(Capability.Network_Delete)),new Command_Block("Tags","View network tags",null,function(){return views.Network_Tags.Load(t.viewModel.NetworkId())},page.HasCapabilityComputed(Capability.Tag_View))]),tiles.createTile().addBlockSet([new Header_Block("config",new Header_Text(ko.computed(function(){return t.viewModel.IsSyncOverdue()?"Overdue":t.viewModel.IsLive()?t.viewModel.IsLinkUp()?"Live":"Down":"OK"}),"Sync Status",ko.computed(function(){return t.viewModel.MaxSyncInterval()||"Not Set"}),"Max Sync Interval")),new SingleValue_Block("Alerts",ko.computed(function(){return t.viewModel.UserHasSyncAlertSubscription()?"Subscribed":"Not subscribed"})),new Command_Block("Configure","Configure sync alerts",function(){return t.SetMaxSyncIntervalForm(t.viewModel.NetworkId)},null,page.HasCapabilityComputed(Capability.Network_ManageDevices)),new Command_Block("Subscribe","Subscribe to sync alerts",t.SubscribeToNetworkSyncAlertsForm,null,ko.computed(function(){return!t.viewModel.UserHasSyncAlertSubscription()})),new Command_Block("Unsubscribe","Unsubscribe from sync alerts",t.UnsubscribeFromNetworkSyncAlertsForm,null,t.viewModel.UserHasSyncAlertSubscription),new Command_Block("Subscribers","View subscribers to sync alert",null,function(){return views.Network_OverdueSubscribers.Load(t.viewModel.NetworkId)},page.HasCapabilityComputed(Capability.Network_ViewStatusSubscribers)),new Command_Block("Managers","View network managers",null,function(){return views.Network_Managers.Load(t.viewModel.NetworkId)},page.HasCapabilityComputed(Capability.Network_ViewManagerUsers)),new Command_Block("GSM Idle",ko.computed(function(){return t.viewModel.GsmIdleTimeoutSeconds()?t.viewModel.GsmIdleTimeoutSeconds()+" seconds - click to change":"Disabled - click to enable"}),t.SetGsmIdleTimeoutForm,null,ko.computed(function(){return t.viewModel.IsLive()&&t.viewModel.HasSim()&&page.HasCapability(Capability.Network_Diagnostics)})),new Command_Block("Attach Link","Attach N8Link device",t.AttachN8LinkForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_AttachLinkDevice)&&t.viewModel.IsLive()&&!t.viewModel.HasN8LinkAttached()})),new Command_Block("Detach Link","Detach N8Link device",t.DetachN8LinkForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_AttachLinkDevice)&&t.viewModel.IsLive()&&t.viewModel.HasN8LinkAttached()})),new Command_Block("Account",ko.computed(function(){return t.viewModel.MessageAccountId()?t.viewModel.MessageAccountName():"None"}),null,function(){return views.MessageAccount_Details.Load(t.viewModel.MessageAccountId(),null)},page.HasCapabilityComputed(Capability.MessageAccount_ManageNetwork)),new Command_Block("Assign","Assign a message account",function(){return t.SetMessageAccountForm(t.viewModel.NetworkId(),t.viewModel.MessageAccountId(),page.Update())},null,page.HasCapabilityComputed(Capability.MessageAccount_ManageNetwork)),new SingleValue_Block("Provider",ko.computed(function(){return t.viewModel.HasSim()?t.viewModel.SimCellularNetworkName():t.viewModel.RequiresSim()?"Unknown":"Customer Local Network"}),page.HasCapabilityComputed(Capability.Network_ViewServiceProvider))]).setState(ko.computed(function(){return t.viewModel.IsSyncOverdue()?TileState.Faulted:TileState.Active})),tiles.createTile().addBlockSet([new Header_Block("queue",new Header_Text("Update Queue",null,ko.computed(function(){return t.viewModel.IncompleteUpdateCount()?t.viewModel.IncompleteUpdateCount()+" Pending":"Empty"})),new Header_Actions(function(){return views.Network_UpdateQueue.Load(t.viewModel.NetworkId)}))]).setState(ko.computed(function(){return t.viewModel.IncompleteUpdateCount()?TileState.Active:TileState.Idle})),tiles.createTile().addBlockSet([new Header_Block("phone",new Header_Text(ko.computed(function(){return ko.unwrap(t.viewModel.SimNumber)||"None"}),"Sim Number",ko.computed(function(){return t.viewModel.SimPhoneNumber()?FormatPhoneNumber(t.viewModel.SimPhoneNumber()):"None"}),"Phone Number",ko.computed(function(){return ko.unwrap(t.viewModel.SimCellularNetworkName)||"None"})),new Header_Actions(function(){return t.viewModel.CanViewSim()?views.Sim_Details.Load(t.viewModel.SimId):null})),new SingleValue_Block("Status",ko.computed(function(){return t.viewModel.SimCancelled()?"Cancelled":"Active"}),ko.computed(function(){return t.viewModel.HasSim()})),new Command_Block("View","View & Configure this Sim",null,function(){return views.Sim_Details.Load(t.viewModel.SimId)},ko.computed(function(){return t.viewModel.HasSim()&&t.viewModel.CanViewSim()})),new Command_Block("Remove","Remove this Sim from this Network",t.RemoveSimForm,null,ko.computed(function(){return t.viewModel.HasSim()})),new Command_Block("Attach SIM","Attach an existing SIM",function(){return t.AssignSimForm(t.viewModel.NetworkId)},null,ko.computed(function(){return!t.viewModel.HasSim()&&t.viewModel.SupportsSim()})),new SingleValue_Block("Support","Sim not supported",ko.computed(function(){return t.viewModel.HasSim()&&!t.viewModel.SupportsSim()}))]).setEnabled(ko.computed(function(){return page.HasCapability(Capability.Network_ManageSim)&&(t.viewModel.HasSim()||t.viewModel.SupportsSim())})).setState(ko.computed(function(){return t.viewModel.HasSim()&&!t.viewModel.SupportsSim()?TileState.Warning:TileState.Idle})),tiles.createTile().addBlockSet([new Header_Block("billing-entity",new Header_Text(t.viewModel.BillingEntityName,"Network subscription",t.viewModel.NetworkSubscriptionStatus,"Subscription status"),new Header_Actions(function(){return views.NetworkSubscription_Details.Load(t.viewModel.NetworkSubscriptionId,null)},null,null,ko.computed(function(){return t.viewModel.NetworkSubscriptionId()!=null}))),new SingleValue_Block("Expires",ko.computed(function(){return FormatDueDate(moment(t.viewModel.NetworkSubscriptionEnd()))}),ko.computed(function(){return t.viewModel.NetworkSubscriptionId()!=null})),new SingleValue_Block("Fee",ko.computed(function(){return FormatCurrency(t.viewModel.NetworkSubscriptionFee())}),ko.computed(function(){return t.viewModel.NetworkSubscriptionId()!=null})),new SingleValue_Block("Invoiced",ko.computed(function(){return FormatDateOnly(moment(t.viewModel.NetworkSubscriptionXeroInvoicedUtc()))}),ko.computed(function(){return t.viewModel.NetworkSubscriptionId()!=null})),new SingleValue_Block("Payment",ko.computed(function(){return t.viewModel.NetworkSubscriptionXeroInvoiceIsPaid()?"PAID":t.viewModel.NetworkSubscriptionXeroInvoiceGuid()?"UNPAID":"NOT INVOICED"}),ko.computed(function(){return t.viewModel.NetworkSubscriptionId()!=null})),new Command_Block("Download","Download invoice",t.DownloadInvoiceForm,null,ko.computed(function(){return t.viewModel.NetworkSubscriptionXeroInvoiceGuid()!=="00000000-0000-0000-0000-000000000000"&&t.viewModel.NetworkSubscriptionXeroInvoiceGuid()!=null})),new Command_Block("Create","Create subscription for network",t.CreateNetworkSubscriptionForm,null,ko.computed(function(){return(t.viewModel.NetworkSubscriptionId()==null||t.viewModel.NetworkSubscriptionIsCancelled())&&page.HasCapability(Capability.NetworkSubscriptions_Create)}))]).setEnabled(page.HasCapabilityComputed(Capability.Network_ViewSubscription)).setState(ko.computed(function(){return t.viewModel.NetworkSubscriptionStatus()==="Cancelled"?TileState.Faulted:t.viewModel.NetworkSubscriptionStatus()==="Expired"?TileState.Warning:TileState.Active}))]);t.networkTasksTable=new AjaxFilterTableViewModel(null,"SortOrder",!0,function(){return null},25,ko.computed(function(){return t.expandedTaskList()}),!1,!0);t.networkTasksTable.AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return n.SourceType()==="User"?"profile":n.SourceType()==="Network"?"network":n.SourceType()==="Node"?"node":""},function(n){return n.SourceType()},function(n){return n.SourceType()==="User"?views.User_Details.Load(n.Parameters.UserId):n.SourceType()==="Network"?views.Network_Details.Load(n.Parameters.NetworkId):n.SourceType()==="Node"?views.Network_Node.Load(n.Parameters.NetworkId,n.Parameters.NodeAddress):null})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Status",!0,!0,function(n){return n.IsCompleted()?"Complete":n.Type()==="Problem"?"Network Problem":n.Type()==="Task"?"Required Task":"Optional Task"})).AddColumn(new FilterTableColumnViewModel("Problem","Problem",!1,!0,function(n){return TaskTypes[n.Description()].Desc(n.IsCompleted(),n.Parameters)})).AddColumn(new MultipleFixHyperlinkTextTableColumnViewModel("Actions","Actions",function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks");ko.computed(function(){t.networkTasksTable.initialLoadComplete(!0);t.networkTasksTable.SetData({Items:t.viewModel.NetworkTasks(),Success:!0})});t.nodeCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Node","Add a new Node",function(){return t.CreateNodeForm(t.viewModel.NetworkId)},null,ko.computed(function(){return page.HasCapability(Capability.Network_CreateNode)&&!page.powerGeniusBranding()}))])]);t.moduleCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Clear All","Clear all module alert suppressions",t.ClearSuppressAlertsForm,null,ko.computed(function(){return page.HasCapability(Capability.Module_SuppressAlerts)&&t.viewModel.SuppressedModules().length>0}))])]);t.noteCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Note","Add a new Note",t.CreateNoteForm,page.HasCapabilityComputed(Capability.Note_Create))])]);t.networkNodesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodesTable"),"NodeAddress",!0,function(n){return views.Network_Node.Load(t.viewModel.NetworkId,n.NodeAddress)},100);t.networkNodesTable.AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return FormatNodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device",!0,!0,function(n){return n.HasDevice?n.DeviceType+"v"+n.DeviceModel:"Not Assigned"})).AddColumn(new FilterTableColumnViewModel("ApplicationBinary","Application",!0,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Ext Address",!0,!0)).AddColumn(new FilterTableColumnViewModel("NodeStatus","Node Status",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!1,!0)).AddColumn(new CommandTableColumnViewModel("Delete Node","delete",function(n){return page.OpenFormDialog(t.DeleteNetworkNodeForm(n))},page.HasCapabilityComputed(Capability.Network_DeleteNode))).AddTitle("Network Nodes");t.suppressedModulesTable=new AjaxFilterTableViewModel(null,"SuppressedAlertsUtc",!1,function(n){return views.Module_Details.Load(n.ModuleId)},25,ko.computed(function(){return t.viewModel.SuppressedModules().length>0}));t.suppressedModulesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleIndex","Index",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("SuppressedAlertsUtc","Suppressed Until",!1,!0)).AddColumn(new CommandTableColumnViewModel("Clear Suppression","delete",function(n){return page.OpenFormDialog(t.ClearSuppressAlertsModuleForm(n.ModuleId))},page.HasCapabilityComputed(Capability.Module_SuppressAlerts))).AddTitle("Modules With Suppressed Alerts");ko.computed(function(){t.suppressedModulesTable.initialLoadComplete(!0);t.suppressedModulesTable.SetData({Items:t.viewModel.SuppressedModules(),Success:!0})});t.networkEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"EventsTable"),"TimeUtc",!1,null,10);t.networkEventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return FormatNodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Network Events");t.notesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"Notes"),"CreatedUtc",!1,null,10);t.notesTable.AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return views.Note_Details.Load(n.NoteId)})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new CommandWithDynamicIconTableColumnViewModel("TargetIcon",function(n){return NoteInfoBuilder(n,"Network").icon()},function(n){return NoteInfoBuilder(n,"Network").tooltip()},function(n){return NoteInfoBuilder(n,"Network").action()},!0,function(n){return NoteInfoBuilder(n,"Network").actionEnabled()})).AddColumn(new FilterTableColumnViewModel("Target","Target",!1,!1,function(n){return NoteInfoBuilder(n,"Network").type()})).AddColumn(new FilterTableColumnViewModel("Title","Title",!1,!0)).AddColumn(new CommandTableColumnViewModel("Created By","profile",function(n){return views.User_Details.Load(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes");t.targetNetworkActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UserActionsForTargetNetworkTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.targetNetworkActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("Target Network Actions");page.Add(t.statusHeader);page.Add(t.networkTasksTable);page.Add(t.networkTiles);page.Add(t.nodeCommands);page.Add(t.networkNodesTable);page.Add(t.moduleCommands);page.Add(t.suppressedModulesTable);page.Add(t.networkEventsTable);page.Add(t.noteCommands);page.Add(t.notesTable);page.Add(t.targetNetworkActionsTable);BaseUpdate(t,[t.networkNodesTable,t.networkEventsTable,t.notesTable,t.targetNetworkActionsTable,t.networkTasksTable])},t.AttachN8LinkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"AttachN8Link"),"Attach N8Link Device","Attach",{nodeAddress:ko.observable(251),deviceExtAddress:ko.observable("")}).SubmitData(function(n){return{nodeAddress:n.nodeAddress(),deviceExtAddress:n.deviceExtAddress()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to attach N8Link device and update network?").MessageField("The N8Link device will be attached to node "+FormatNodeAddress(251)+" (251)").AjaxFilterDropDownListField("deviceExtAddress","Device",function(n){return n.DeviceExtAddress+" ("+n.Type+")"},function(n){return n.DeviceExtAddress},ko.computed(function(){return route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableN8LinkDevices")}),!1,null,"DeviceExtAddress",1).Create()},t.DetachN8LinkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DetachN8Link"),"Detach N8Link Device","Detach",{nodeAddress:ko.observable(251)}).SubmitData(function(n){return{nodeAddress:n.nodeAddress()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to detach N8Link device and update network?").MessageField("The N8Link device will be detached from node "+FormatNodeAddress(251)+" (251)").Create()},t.RemoveSimForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"RemoveSim"),"Remove Sim","Remove",{SimId:ko.observable(t.viewModel.SimId())}).SubmitData(function(n){return{SimId:n.SimId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove this Sim?.").Create()},t.AssignSimForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AssignSim"),"Assign Sim","Assign",{SimId:ko.observable()}).SubmitData(function(n){return{SimId:n.SimId()}}).Done(function(){typeof t=="function"?t():page.Update()}).AjaxCompactFilterDropDownListField("SimId","Sim",function(n){return n.SimNumber},function(n){return n.SimId},route.forControllerItemAction("Network",n,"AvailableSims"),!1,null,"SimNumber",5,1).Create()},t.CreateNodeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"CreateNode"),"Create Node","Create",{name:ko.observable(),nodeAddress:ko.observable()}).SubmitData(function(n){return{name:n.name(),nodeAddress:n.nodeAddress()}}).Done(function(){page.Update()}).MessageField("Enter the details for the new Node to add to this network.").TextField("name","Name",50).MessageField("Select an available node address from the list").AjaxDropDownListField("nodeAddress","Node Address",function(n){return FormatNodeAddress(n)+" ("+n+")"},function(n){return n},route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableNodeAddresses",{max:255}),!1).Create()},t.DeleteNetworkNodeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DeleteNetworkNode"),"Delete Network","Delete",{nodeAddress:ko.observable(n.NodeAddress),confirm:ko.observable(!1)}).SubmitData(function(n){return{nodeAddress:n.nodeAddress(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField('Are you sure you want to permanently delete the node "'+n.Name+'" from this network?').MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Node").Create()},t.CreateNoteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"CreateNote"),"Create Note","Create",{groupId:ko.observable(),title:ko.observable(),details:ko.observable()}).SubmitData(function(n){return{groupId:n.groupId(),title:n.title(),details:n.details()}}).Done(function(){t.notesTable.LoadData()}).MessageField("Select the group in which to create the note. Only users with access to this group will be able to view the note.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainNote"),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()},t.GetLastRejectedAddressForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"GetLastRejectedAddress"),"Get Last Rejected Address","Get Address",null).SubmitData(function(){return{}}).Done(function(){t.networkEventsTable.LoadData()}).MessageField("Are you sure you want to request the address of the last node which unsuccessfully requested association with the network?").Create()},t.RenameNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"RenameNetwork"),"Rename Network","Rename",{name:ko.observable(t.viewModel.Name()),shortName:ko.observable(t.viewModel.ShortName())}).SubmitData(function(n){return{name:n.name(),shortName:n.shortName()}}).Done(function(n,i){t.viewModel.Name(i.Name);t.viewModel.ShortName(i.ShortName);t.networkEventsTable.LoadData()}).MessageField("Assign a unique name to this network.").TextField("name","Name",50).MessageField("Assign a short name for use in SMS commands and alerts to this network.").TextField("shortName","Short Name",50).Create()},t.DeleteNetworkForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"Delete"),"Delete Network","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){typeof t=="function"&&t()}).MessageField("Are you sure you want to delete this network?").CheckBoxField("confirm","Confirm this irreversible action").Create()},t.SetMaxSyncIntervalForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetMaxSyncInterval"),"Set Maximum Sync Interval","Update",{maxSyncInterval:ko.observable(t.viewModel.MaxSyncInterval())}).SubmitData(function(n){return{maxSyncInterval:n.maxSyncInterval()}}).Done(function(){typeof i=="function"?i():page.Update()}).MessageField("Specify the expected maximum interval between synchronization requests from this network. Leave blank to ignore.").TimeSpanField("maxSyncInterval","Max Sync Interval",!0).Create()},t.UpdateNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdateNetwork"),"Update Network","Update",{}).SubmitData(function(){return{}}).Done(function(){t.networkEventsTable.LoadData();page.Update()}).MessageField("Are you sure you want to update the network binary for this network?").Create()},t.SetDefaultModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SetDefaultModule"),"Set Default Module","Update",{moduleId:ko.observable(t.viewModel.DefaultModule())}).SubmitData(function(n){return{moduleId:n.moduleId()}}).Done(function(){page.Update()}).MessageField("Select the module to use as the default module").AjaxFilterDropDownListField("moduleId","Module",function(n){return n.NodeName+" - "+n.ModuleName},function(n){return n.ModuleId},route.forControllerItemAction("Network",t.viewModel.NetworkId,"AllNetworkModules"),!0,t.viewModel.DefaultModule()==null?null:{NodeName:t.viewModel.DefaultModuleNodeName(),ModuleName:t.viewModel.DefaultModule(),ModuleId:t.viewModel.DefaultModuleId()},"ModuleName",3,1).Create()},t.AssignGisDatasetForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"AssignGisDataset"),"Assign GIS Dataset","Assign",{gisDatasetId:ko.observable(t.viewModel.GisDatasetId())}).SubmitData(function(n){return{gisDatasetId:n.gisDatasetId()}}).Done(function(){page.Update()}).MessageField("Select a GIS dataset to assign to this network, or choose none to clear the assigned dataset.").AjaxCompactFilterDropDownListField("gisDatasetId","GIS Dataset",function(n){return n.Name+", ID: "+n.GisDatasetId+", Created: "+FormatDateTime(moment.utc(n.CreatedUtc))},function(n){return n.GisDatasetId},route.forControllerItemAction("Network",t.viewModel.NetworkId,"AllGisDatasets"),!0,t.viewModel.GisDatasetName()==null?null:{Name:t.viewModel.GisDatasetName(),GisDatasetId:t.viewModel.GisDatasetId()},"Name",5,1).Create()},t.SubscribeToNetworkSyncAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SubscribeToSyncAlerts"),"Subscribe to Sync Alerts","Subscribe",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Click subscribe to receive email alerts when the network sync status changes.").Create()},t.UnsubscribeFromNetworkSyncAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UnsubscribeFromSyncAlerts"),"Unsubscribe from Sync Alerts","Unsubscribe",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Click unsubscribe to stop receiving email alerts when the network sync status changes.").Create()},t.SetGsmIdleTimeoutForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SetGsmIdleTimeout"),"Set GSM Idle Timeout","Apply",{gsmIdleTimeout:ko.observable(t.viewModel.GsmIdleTimeoutSeconds())}).SubmitData(function(n){return{gsmIdleTimeout:n.gsmIdleTimeout()}}).Done(function(){page.Update()}).MessageField("Specify the GSM idle timeout for this network in seconds. Setting this to zero will disable the timeout. Note that the controller may still apply its own timeout (typically 5 minutes).").IntNumberField("gsmIdleTimeout","GSM Idle Timeout",0,300,!1).Create()},t.ChangeTimeZoneForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ChangeTimeZone"),"Change Time Zone for Network","Change",{timeZoneName:ko.observable(t.viewModel.TimeZoneName())}).SubmitData(function(n){return{timeZoneName:n.timeZoneName()}}).Done(function(){page.Update()}).AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{BaseUtcOffset:0,TimeZoneName:t.viewModel.TimeZoneName()},"TimeZoneName",5,1).Create()},t.SuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SuppressAlerts"),"Suppress Alerts","Suppress",{suppressUntil:ko.observable(moment().add("d",1).format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{suppressUntilUtc:moment(n.suppressUntil()).utc().toISOString()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to suppress alerts for this network?").DateTimeField("suppressUntil","Suppress Until").Create()},t.ClearSuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ClearSuppressAlerts"),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts for this network?").Create()},t.ClearSuppressAlertsModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",n,"ClearSuppressAlerts"),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts for this module?").Create()},t.CreateNetworkSubscriptionForm=function(){var n={fee:ko.observable(0),endLocal:ko.observable(moment().date(1).add("months",13).subtract("days",1).format("YYYY-MM-DD")),groupId:ko.observable(0),billingEntityId:ko.observable(0),confirm:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerAction("Group","CreateNetworkSubscription"),"Create Network Subscription","Create",n).SubmitData(function(n){return{id:n.groupId(),networkId:t.viewModel.NetworkId(),fee:n.fee(),endLocal:n.endLocal(),billingEntityId:n.billingEntityId()}}).Done(function(n,t){views.NetworkSubscription_Details.Load(t.NetworkSubscriptionId,null)}).AjaxFilterDropDownListField("groupId","Subscription Group",function(n){return n.Name+" ("+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),!1,null,"Name").AjaxFilterDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},route.forControllerAction("BillingEntity","AvailableBillingEntities"),!1,null,"CompanyName").NumberField("fee","Annual Subscription Fee",0,null,!1).DateField("endLocal","Expiry Date").Create()},t.ChangeNetworkStatusForm=function(n){var i=ko.observableArray([]),r=ko.computed(function(){return i().length>0});return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetNetworkStatus"),"Set Network Status","Update",{statusId:ko.observable(t.viewModel.StatusId()),confirmOverride:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(n){return{statusId:n.statusId(),confirmOverride:n.confirmOverride(),reason:n.reason(),overrideTaskCompletion:!t.allTasksComplete()}}).Error(function(n,t){t.MismatchNodes!=null&&i(t.MismatchNodes)}).Done(function(){page.Update()}).OptionalCheckBoxField("confirmOverride","Confirm Update").MessageField(ko.computed(function(){return t.allTasksComplete()?"Please provide a reason for this status change":"You have tasks outstanding, please provide a reason for changing the status with incomplete tasks"})).MultilineTextField("reason","Reason",null,!1).AjaxDropDownListField("statusId","Network Gateway Status",function(n){return n.Name},function(n){return n.StatusId},ko.computed(function(){return route.forControllerItemAction("Network",n,"AvailableNodeStatus")}),!1,{StatusId:t.viewModel.StatusId(),Name:t.viewModel.StatusName()}).ListField("Mismatching Node Status",i,function(n){return n.NodeName+" - "+n.StatusName},r).Create()},t.ConfirmNetworkStatusChangeForm=function(){var n=ko.observableArray([]),r=ko.computed(function(){return n().length>0}),i="All required tasks completed, changing status from "+t.viewModel.StatusName()+" to "+t.viewModel.NextStatusName(),u=t.viewModel.NextStatusId();return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SetNetworkStatus"),"Set Network Status","Update",{confirmOverride:ko.observable(!1)}).SubmitData(function(n){return{statusId:u,confirmOverride:n.confirmOverride(),reason:i,overrideTaskCompletion:!1}}).Error(function(t,i){i.MismatchNodes!=null&&n(i.MismatchNodes)}).Done(function(){page.Update();t.expandedTaskList(!0)}).OptionalCheckBoxField("confirmOverride","Confirm Update").MessageField(i).ListField("Mismatching Node Status",n,function(n){return n.NodeName+" - "+n.StatusName},r).Create()},t.ConfirmIncompleteNetworkStatusChangeForm=function(){var n=ko.observableArray([]),i=ko.computed(function(){return n().length>0}),r=t.viewModel.NextStatusId();return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SetNetworkStatus"),"Set Network Status","Update",{confirmOverride:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(n){return{statusId:r,confirmOverride:n.confirmOverride(),reason:n.reason(),overrideTaskCompletion:!0}}).Error(function(t,i){i.MismatchNodes!=null&&n(i.MismatchNodes)}).Done(function(){page.Update();t.expandedTaskList(!0)}).OptionalCheckBoxField("confirmOverride","Confirm Update").MessageField("You have tasks outstanding, please provide a reason for advancing with incomplete tasks").MultilineTextField("reason","Reason",null,!1).ListField("Mismatching Node Status",n,function(n){return n.NodeName+" - "+n.StatusName},i).Create()},t.DownloadInvoiceForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("NetworkSubscription",t.viewModel.NetworkSubscriptionId,"DownloadPDFInvoiceFromXero"),"Download Invoice from Xero","Download",null).SubmitData(function(){return{}}).CreateDownload()},t.SetMessageAccountForm=function(n,t,i){var r={messageAccountId:ko.observable(0)},u=new DialogViewModelBuilder(ko.computed(function(){return route.forControllerItemAction("MessageAccount",r.messageAccountId,"AddNetwork")}),"Assign Message Account","Assign",r).SubmitData(function(){return{networkId:n}}).Done(function(){typeof i=="function"&&i()}).AjaxCompactFilterDropDownListField("messageAccountId","Message Account",function(n){return n.Name},function(n){return n.MessageAccountId},route.forControllerAction("MessageAccount","AvailableMessageAccounts"),!1,{MessageAccountId:t,Name:""},"Name",5,1);return u.Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Index=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Network_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Networks","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(){return route.forControllerIndex("Network")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.networksTable=new AjaxFilterTableViewModel(route.forControllerAction("Network","NetworksTable"),"ShortName",!0,function(n){return views.Network_Details.Load(n.NetworkId)},50);t.networksTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("ShortName","SMS Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("NodeCount","Nodes",!0,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!1,!0)).AddTitle("Networks");page.Add(t.networksTable);BaseUpdate(t,[t.networksTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Managers=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_Managers_Model,t.stateHandler=function(){return new Network_Managers_State(t)},t.titleHandler=function(){return page.SetTitle("Network Managers",t.viewModel.Network.NetworkName,views.Network_Details.routeHandler(t.viewModel.Network.NetworkId),function(){return views.Network_Details.Load(t.viewModel.Network.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"Managers")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text(t.viewModel.Network.NetworkName,"Network Name",t.viewModel.Network.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+FormatLastUpdate(moment.utc(t.viewModel.Network.LastSyncUtc()))})),new Header_Actions(function(){return views.Network_Details.Load(t.viewModel.Network.NetworkId)})),new SingleValue_Block("Status",ko.computed(function(){return t.viewModel.Network.NetworkStatus()}))]),tiles.createTile().addBlockSet([new Command_Block("Add User","Add a new User",null,function(){return page.OpenFormDialog(t.AddExistingUserForm(t.viewModel.Network.NetworkId))},ko.computed(function(){return page.HasCapability(Capability.Network_AddManagerUser)}))])]);t.managersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"ManagersTable"),"UserName",!0,function(n){return views.User_Details.Load(n.UserId)},50);t.managersTable.AddColumn(new FilterTableColumnViewModel("Name","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhoneNumber","Phone Number",!1,!0,function(n){return FormatPhoneNumber(n.PhoneNumber)})).AddColumn(new FilterTableColumnViewModel("EmailAddress","Email",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveUserForm(n))},page.HasCapabilityComputed(Capability.Network_RemoveManagerUser))).AddTitle("Manager Users");t.managersHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"ManagersHistoryTable"),"CreatedUtc",!1,null,50);t.managersHistoryTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("WasAdded","Action",!1,!0,function(n){return n.WasAdded?"Added":"Removed"})).AddTitle("Manager Users History");page.Add(t.pageCommands);page.Add(t.managersTable);page.Add(t.managersHistoryTable);BaseUpdate(t,[t.managersTable,t.managersHistoryTable])},t.AddExistingUserForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AddManagerUsers"),"Add Manager Users","Add",{userIds:ko.observableArray([])}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){typeof i=="function"?i():(t.managersTable.LoadData(),t.managersHistoryTable.LoadData())}).MessageField("Select one or more users to add to the list of network managers.").AjaxMultiSelectListField("userIds","User",function(n){return n.Name+" (ID: "+n.UserId+")"},function(n){return n.UserId},route.forControllerItemAction("Network",n,"ManagerUsersWhichCanBeAdded"),10,!0).Create()},t.RemoveUserForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"RemoveManagerUser"),"Remove User","Remove",{userId:ko.observable(n.UserId)}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t.managersTable.LoadData();t.managersHistoryTable.LoadData()}).MessageField("Are you sure you want to remove the user "+n.Name+" from this manager list?").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Map=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_Map_Model,t.stateHandler=function(){return new Network_Map_State(t)},t.titleHandler=function(){return page.SetTitle("Map",t.viewModel.NetworkName,views.Network_Details.routeHandler(t.viewModel.NetworkId),function(){return views.Network_Details.Load(t.viewModel.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"Map")},t.markersUrl=route.forControllerAction("Images","markers-v3.png"),t.runCallback=!1,t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){var n,i,r;t.icons={gatewayGreen:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(14,14)},gatewayBlue:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(28,0),anchor:new google.maps.Point(14,14)},gatewayRed:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(56,0),anchor:new google.maps.Point(14,14)},nodeGreen:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(0,28),anchor:new google.maps.Point(14,14)},nodeBlue:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(28,28),anchor:new google.maps.Point(14,14)},nodeRed:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(56,28),anchor:new google.maps.Point(14,14)},moduleGreen:{url:t.markersUrl,size:new google.maps.Size(20,20),origin:new google.maps.Point(4,60),anchor:new google.maps.Point(10,10)},moduleBlue:{url:t.markersUrl,size:new google.maps.Size(20,20),origin:new google.maps.Point(32,60),anchor:new google.maps.Point(10,10)},moduleRed:{url:t.markersUrl,size:new google.maps.Size(20,20),origin:new google.maps.Point(60,60),anchor:new google.maps.Point(10,10)},drag:{url:t.markersUrl,size:new google.maps.Size(28,32),origin:new google.maps.Point(84,0),anchor:new google.maps.Point(14,16)}};t.map=new MapPageItem(!0);n=new MapItemsInfo;n.getLatLng=function(n){return n.Latitude()&&n.Longitude()?new google.maps.LatLng(n.Latitude(),n.Longitude()):null};n.getText=function(n){return FormatNodeAddress(n.NodeAddress())+": "+n.Name()};n.getIcon=function(n){return n.LastUpdateUtc()?t.viewModel.LastSyncUtc()-n.LastUpdateUtc()>36e5?n.NodeAddress()===0?t.icons.gatewayRed:t.icons.nodeRed:n.NodeAddress()===0?t.icons.gatewayGreen:t.icons.nodeGreen:n.NodeAddress()===0?t.icons.gatewayBlue:t.icons.nodeBlue};n.getZIndex=function(){return 3};n.getInfo=function(n){return"<div>"+FormatNodeAddress(n.NodeAddress())+': <span class="nodetitle"><a onClick="views.Network_Node.Load('+n.NetworkId()+", "+n.NodeAddress()+'); return false;" href="'+views.Network_Node.routeHandler(n.NetworkId,n.NodeAddress)+'">'+n.Name()+'<\/a><\/span><\/div><div class="nodetext">'+FormatOverdueUpdate(moment.utc(n.LastUpdateUtc()),t.viewModel.MaxSyncInterval())+"<\/div>"};t.nodeItemSet=t.map.AddItems(n);i=new MapItemsInfo;i.getLatLng=function(n){return n.Latitude()&&n.Longitude()?new google.maps.LatLng(n.Latitude(),n.Longitude()):null};i.getText=function(n){return FormatNodeAddress(n.NodeAddress())+"."+n.ModuleIndex()+": "+n.Name()};i.getIcon=function(n){return n.LastUpdateUtc()?t.viewModel.LastSyncUtc()-n.LastUpdateUtc()>36e5?t.icons.moduleRed:t.icons.moduleGreen:t.icons.moduleBlue};i.getZIndex=function(){return 5};i.getInfo=function(n){return"<div>"+FormatNodeAddress(n.NodeAddress())+"."+n.ModuleIndex()+': <span class="nodetitle"><a onClick="views.Module_Details.Load('+n.ModuleId()+'); return false;" href="'+views.Module_Details.routeHandler(n.ModuleId)+'">'+n.Name()+'<\/a><\/span><\/div><div class="nodetext">'+FormatOverdueUpdate(moment.utc(n.LastUpdateUtc()),t.viewModel.MaxSyncInterval())+'<\/div><div class="nodetext">GPS Location<\/div>'};t.gpsModuleItemSet=t.map.AddItems(i);r=new MapItemsInfo;r.getLatLng=function(n){return n.Latitude()&&n.Longitude()?new google.maps.LatLng(n.Latitude(),n.Longitude()):null};r.getText=function(n){return FormatNodeAddress(n.NodeAddress())+"."+n.ModuleIndex()+": "+n.ModuleName()};r.getIcon=function(){return t.icons.moduleBlue};r.getZIndex=function(){return 4};r.getInfo=function(n){return"<div>"+FormatNodeAddress(n.NodeAddress())+"."+n.ModuleIndex()+': <span class="nodetitle"><a onClick="views.Module_Details.Load('+n.ModuleId()+'); return false;" href="'+views.Module_Details.routeHandler(n.ModuleId)+'">'+n.ModuleName()+'<\/a><\/span> - (<span class="nodetitle"><a onClick="views.Module_Map.Load('+n.ModuleId()+', true); return false;" href="'+route.forControllerItemAction("Module",n.ModuleId,"Map")+'">Module Map<\/a><\/span>)<\/div><div class="nodetext">'+FormatOverdueUpdate(moment.utc(n.ModuleLastUpdateUtc()),t.viewModel.MaxSyncInterval())+'<\/div><div class="nodetext">Static Location<\/div>'};t.staticModuleItemSet=t.map.AddItems(r);t.map.AddPolygons({polygons:t.viewModel.GisPolygons.GisPolygonDetails,getLatLng:function(n){for(var r=[],i=n.Coordinates(),u=i.length,t=0;t<u;++t)r.push(new google.maps.LatLng(i[t].Latitude(),i[t].Longitude()));return r},getName:function(n){return n.Name()},getInfo:function(n){var i="";return n.IndexValues().forEach(function(n){t.viewModel.GisPolygons.ItemDescriptions().forEach(function(t){n.Key()===t.ItemIndex()&&(i+='<div class="nodetext"><strong>'+t.Description()+":<\/strong> "+n.Value()+"<\/div>")})}),"<div>"+n.Name()+i+"<\/div>"}});t.toggleNodes=ko.observable(!0);t.toggleModules=ko.observable(!0);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Nodes","Toggle node map markers",null,function(){return t.toggleNodes(!t.toggleNodes())})]),tiles.createTile().addBlockSet([new Command_Block("Modules","Toggle module map markers",null,function(){return t.toggleModules(!t.toggleModules())})]),tiles.createTile().addBlockSet([new Command_Block("GisDataset","View GIS dataset details",null,function(){return views.GisDataset_Details.Load(t.viewModel.GisPolygons.GisDatasetId)},ko.computed(function(){return t.viewModel.GisPolygons.GisDatasetId!=null}))])]);ko.computed(function(){t.toggleNodes()?t.nodeItemSet.items(t.viewModel.NetworkNodes()):t.nodeItemSet.items([])});ko.computed(function(){t.toggleModules()?(t.gpsModuleItemSet.items(t.viewModel.Modules()),t.staticModuleItemSet.items(t.viewModel.ModuleLocations())):(t.gpsModuleItemSet.items([]),t.staticModuleItemSet.items([]))});t.networkNodesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodesTable"),"NodeAddress",!0,function(n){return views.Network_Node.Load(t.viewModel.NetworkId,n.NodeAddress)},100);t.networkNodesTable.AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return FormatNodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device",!0,!0,function(n){return n.HasDevice?n.DeviceType+"v"+n.DeviceModel:"Not Assigned"})).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Ext Address",!0,!0)).AddColumn(new FilterTableColumnViewModel("Location","Location",!0,!0,function(n){return(n.Latitude===0||n.Latitude==null||n.Latitude===BaseMapLocation.Latitude)&&(n.Longitude===0||n.Longitude==null||n.Longitude===BaseMapLocation.Longitude)?"Not Set":"("+n.Latitude+","+n.Longitude+")"})).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!1,!0)).AddColumn(new CommandTableColumnViewModel("Update Location","edit",function(n){return page.OpenFormDialog(views.Network_Node.SetLocationMapForm(t.viewModel.NetworkId(),n.NodeAddress,n.Latitude,n.Longitude,!1,function(){t.runCallback=!0;page.Update()}))})).AddTitle("Network Nodes");page.Add(new HeaderPageItem("Network Map"));page.Add(t.map);page.Add(t.pageCommands);page.Add(t.networkNodesTable);MapUpdate(t,function(){t.runCallback&&(t.map.itemSets.filter(function(n){return n.items().filter(function(n){return n.Latitude()!=null}).length!==0}).length===0?(views.Network_Map.map.map.setCenter(new google.maps.LatLng(BaseMapLocation.Latitude,BaseMapLocation.Longitude)),views.Network_Map.map.map.setZoom(14)):views.Network_Map.map.zoomToBounds(),t.runCallback=!1)},[t.networkNodesTable])},t.mappingOptions={arrayChildId:{NetworkNodes:"NodeAddress",GisPolygons:"GisPolygonId",Modules:"ModuleId",ModuleLocations:"ModuleId"},extend:{}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_ModuleEvents=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_ModuleEvents_Model,t.stateHandler=function(){return new Network_ModuleEvents_State(t)},t.titleHandler=function(){return page.SetTitle("Network Module Events",t.viewModel.Name,views.Network_Details.routeHandler(t.viewModel.NetworkId),function(){return views.Network_Details.Load(t.viewModel.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"ModuleEvents")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.networkModuleEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ModuleEventsTable"),"TimeUtc",!1,function(n){return page.OpenFormDialog(t.ModuleEventDetailsDialog(n))},25);t.networkModuleEventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return views.Network_Node.routeHandler(n.NetworkId,n.NodeAddress)},function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return views.Module_Details.routeHandler(n.ModuleId)},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("AcknowledgedUtc","Acknowledged",!0,!0)).AddColumn(new FilterTableColumnViewModel("Delay","Delay",!1,!0,function(n){return n.AcknowledgedUtc!=null?FormatDuration(moment.duration(moment(n.AcknowledgedUtc).diff(moment(n.TimeUtc)))):""})).AddColumn(new HyperlinkTableColumnViewModel("Details","alert",function(n){return views.Module_AlertEventDetails.routeHandler(n.ModuleId,n.ModuleEventId)},function(n){return views.Module_AlertEventDetails.Load(n.ModuleId,n.ModuleEventId)},function(n){return n.AlertAndStatus!=null})).AddTitle("Recent Network Module Events");page.Add(t.networkModuleEventsTable);BaseUpdate(t,[t.networkModuleEventsTable])},t.ModuleEventDetailsDialog=function(n){var t={details:n},i=ko.observable(!0),r=ko.observable(!1),u=function(n,t){return ko.computed(function(){return i()?n+": Loading...":r()?n+": Failed to load":n+": "+t()})};return page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",n.ModuleId,"EventDetails"),{data:{moduleEventId:n.ModuleEventId},type:"POST"}).done(function(n){t.details=n;r(!1);i(!1)}).fail(function(){r(!0);i(!1)})),new DialogViewModelBuilder(undefined,"Event details","Close",{}).MessageField(u("Details",function(){return t.details.Details})).MessageField(u("Time",function(){return FormatDateTime(moment.utc(t.details.TimeUtc))})).MessageField(u("Acknowledgement",function(){return t.details.AcknowledgeUtc?FormatDateTime(moment.utc(t.details.AcknowledgeUtc))+" "+t.details.AcknowledgeUser:"Not Acknowledged"})).ListField("Messages",ko.computed(function(){return i()?["Loading..."]:r()?["Failed to load"]:t.details.Messages}),function(n){return typeof n=="string"?n:FormatDateTime(moment.utc(n.TimeUtc))+(n.Sms?" Sms":"")+(n.Email?" Email":"")+" "+n.User+" "+n.Content}).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Node=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_Node_Model,t.stateHandler=function(){return new Network_Node_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Name,t.viewModel.NetworkName,views.Network_Details.routeHandler(t.viewModel.NetworkId),function(){return views.Network_Details.Load(t.viewModel.NetworkId)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Network",n,"Node",{nodeAddress:t})},t.allTasksComplete=ko.observable(!1),t.expandedTaskList=ko.observable(!1),t.UrlLoad=function(){t.sourceUrl=window.location.href;t.showDisabledModules=ko.observable(!1);LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&(t.showDisabledModules=ko.observable(!1),LoadView_Base(t))},t.Render=function(){t.allTasksComplete=ko.computed(function(){return t.viewModel.NetworkNodeTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()?!0:!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})});t.expandedTaskList(!t.allTasksComplete());t.statusHeader=new DashboardHeaderPageItem(0,ko.computed(function(){return"Node - "+(t.viewModel.StatusMessage()!=null?t.viewModel.StatusMessage():"Installed")+(t.allTasksComplete()?"":" - Required tasks outstanding")}),ko.computed(function(){return TileState[t.allTasksComplete()?t.viewModel.StatusState():"Faulted"]}),function(){return t.expandedTaskList(!t.expandedTaskList())});t.statusHeader.addButton(new DashboardActionButton(0,"command","Change status to "+ko.unwrap(t.viewModel.NextStatusName),function(){return t.allTasksComplete()?page.OpenFormDialog(t.ConfirmNodeStatusChangeForm(t.viewModel.NetworkId,t.viewModel.NodeAddress)):page.OpenFormDialog(t.ConfirmIncompleteNodeStatusChangeForm(t.viewModel.NetworkId,t.viewModel.NodeAddress))},ko.computed(function(){return t.viewModel.NextStatusName()!=null})));t.statusHeader.addButton(new DashboardActionButton(0,ko.computed(function(){return t.expandedTaskList()?"collapse":"expand"}),ko.computed(function(){return t.expandedTaskList()?"Hide":"Show"}),function(){return t.expandedTaskList(!t.expandedTaskList())},!0));t.nodeTiles=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return t.viewModel.DeviceType()&&t.viewModel.DeviceModel()?t.viewModel.DeviceType()+" v"+t.viewModel.DeviceModel():"No Device"}),t.viewModel.DeviceExtAddress,ComputedFormatNodeAddress(t.viewModel.NodeAddress),"Node Address"),new Header_Actions(null,function(){return t.viewModel.DeviceType()&&t.viewModel.DeviceModel()?CopyToClipboard(t.viewModel.DeviceType()+" v"+t.viewModel.DeviceModel()):null},null,null,"Click to copy to clipboard",null,function(){return CopyToClipboard(t.viewModel.DeviceExtAddress)})),new SingleValue_Block("Status",t.viewModel.StatusName),new Command_Block("Change","Change the node status",function(){return t.ChangeNodeStatusForm(t.viewModel.NetworkId,t.viewModel.NodeAddress)},null,page.HasCapabilityComputed(Capability.Network_SetNodeStatus)),new Command_Block("Rename","Rename network node",t.RenameNetworkNodeForm,null,page.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Map","View the node map",null,function(){return views.Network_NodeMap.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)},page.HasCapabilitySetAllComputed([Capability.Network_Edit,Capability.Network_SetLocation])),new Command_Block("Delete","Permanently delete node",t.DeleteNetworkNodeForm,null,page.HasCapabilityComputed(Capability.Network_DeleteNode))]),tiles.createTile().setEnabled(page.HasCapabilityComputed(Capability.Network_ManageDevices)).addBlockSet([new Header_Block("firmware",new Header_Text("Firmware",null,ko.computed(function(){return t.viewModel.DeviceFirmwareVersion()?"v"+t.viewModel.DeviceFirmwareVersion():"Unknown"}),ko.computed(function(){return t.viewModel.DeviceBuildDate()?"Built "+FormatDateTime(moment(t.viewModel.DeviceBuildDate())):""}),ko.computed(function(){return t.viewModel.DeviceLastUpdate()?"Updated "+FormatDateTime(moment(t.viewModel.DeviceLastUpdate())):""}))),new Command_Block("Update","Update node firmware",function(){return t.viewModel.IsLive()?t.UpdateNetworkNodeLiveFirmwareForm(t.viewModel.NetworkId,t.viewModel.NodeAddress):t.UpdateNetworkNodeFirmwareForm(t.viewModel.NetworkId,t.viewModel.NodeAddress)},null,ko.computed(function(){return t.viewModel.HasDevice()})),new Command_Block("Detach","Detach assigned device",t.DetachDeviceFromNodeForm,null,ko.computed(function(){return t.viewModel.HasDevice()})),new Command_Block("View","View device details",null,function(){return views.Device_Details.Load(t.viewModel.DeviceExtAddress)},ko.computed(function(){return t.viewModel.HasDevice()})),new Command_Block("Attach","Attach a device to this node",null,function(){return page.OpenFormDialog(t.AttachDeviceToNodeForm(t.viewModel.NetworkId,t.viewModel.NodeAddress,page.Update))},ko.computed(function(){return!t.viewModel.HasDevice()})),new Command_Block("Query","Query the node for current version",t.QueryNodeFirmwareVersionForm,null,ko.computed(function(){return t.viewModel.IsLive()&&t.viewModel.HasDevice()&&page.HasCapability(Capability.Network_QueryNode)}))]),tiles.createTile().setEnabled(page.HasCapabilityComputed(Capability.Network_ManageDevices)).setState(ko.computed(function(){return t.viewModel.AppName()?"Idle":"Faulted"})).addBlockSet([new Header_Block("logic-application",new Header_Text("Application",ko.computed(function(){return t.viewModel.AppVersionNumber()?"version "+t.viewModel.AppVersionNumber():""}),ko.computed(function(){return t.viewModel.AppName()?t.viewModel.AppName():"None"}),"Assigned Application")),new Command_Block("Update","Update node application",t.UpdateNetworkNodeApplicationForm,null,ko.computed(function(){return t.viewModel.AppName()!=null})),new Command_Block("Config","Trigger configuration update",t.UpdateNetworkNodeConfigForm),new Command_Block("View","View application details",null,function(){return views.Application_AppVersion.Load(t.viewModel.AppId,t.viewModel.AppVersionNumber,null)},ko.computed(function(){return t.viewModel.AppVersionNumber()!=null&&t.viewModel.AppVersionNumber()!=null})),new Command_Block("Change","Change the assigned application",function(){return t.ChangeAssignedApplicationForm(t.viewModel.NetworkId,t.viewModel.NodeAddress,t.viewModel.DeviceTypeId)},null,ko.computed(function(){return page.HasCapability(Capability.Network_CreateNode)&&t.viewModel.DeviceTypeId()!=null}))]),tiles.createTile().setEnabled(ko.computed(function(){return t.viewModel.IsLive()&&page.HasCapability(Capability.Network_Diagnostics)||page.HasCapability(Capability.Network_RemoteReboot)||page.HasCapability(Capability.Network_CreateNode)})).addBlockSet([new Header_Block("tools",new Header_Text("Tools")),new Command_Block("Ping","Ping the network node",t.LivePingNetworkNodeForm,null,ko.computed(function(){return t.viewModel.IsLive()&&(page.HasCapability(Capability.Network_Diagnostics)||page.HasCapability(Capability.Network_PingNode))})),new Command_Block("Reboot","Reboot the network node",t.LiveRebootNetworkNodeForm,null,ko.computed(function(){return t.viewModel.IsLive()&&page.HasCapability(Capability.Network_RemoteReboot)})),new Command_Block("Reboot","Reboot the network node",t.RebootNodeForm,null,ko.computed(function(){return!t.viewModel.IsLive()&&page.HasCapability(Capability.Network_RemoteReboot)})),new Command_Block("Move","Move the node to a network",t.MoveNodeForm,null,page.HasCapabilityComputed(Capability.Network_CreateNode))]),tiles.createTile().addBlockSet([new Header_Block("module",new Header_Text("Modules",null,ko.computed(function(){return t.viewModel.ModuleTiles().length}),"Total number of modules")),new Command_Block("Show","Show disabled modules",null,function(){return t.showDisabledModules(!0)},ko.computed(function(){return!t.showDisabledModules()})),new Command_Block("Hide","Hide disabled modules",null,function(){return t.showDisabledModules(!1)},t.showDisabledModules),new Command_Block("Modules","Apply a template to this node",function(){return t.ApplyApplicationTemplateForm(t.viewModel.NetworkId(),t.viewModel.NodeAddress(),t.viewModel.DeviceTypeId(),page.Update)},null,ko.computed(function(){return page.HasCapability(Capability.Network_Edit)&&page.HasCapability(Capability.Network_CreateNode)&&t.viewModel.ModuleTiles().length===0})),new Command_Block("Upgrade","Upgrade modules from a template",t.ApplyTemplateUpgradeForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_Edit)&&page.HasCapability(Capability.Network_CreateNode)&&t.viewModel.ModuleTiles().length>0})),new Command_Block("Create","Create a module on this node",t.CreateModuleForm,null,page.HasCapabilitySetAllComputed([Capability.Network_Edit,Capability.Module_Create])),new Command_Block("Delete","Remove all modules from node",t.DeleteModulesForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_Edit)&&page.HasCapability(Capability.Module_Delete)&&t.viewModel.ModuleTiles().length>0})),new Command_Block("Suppress","Suppress module alerts on node",t.SuppressAlertsForm,null,page.HasCapabilityComputed(Capability.Module_SuppressAlerts)),new Command_Block("Setup","Setup application",t.SetupApplicationForm,null,ko.computed(function(){return t.viewModel.AppContainsSupplierIdTag()&&page.HasCapability(Capability.Network_SetupApplication)}))]),tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text("Network",null,t.viewModel.NetworkName,"Network Name"),new Header_Actions(function(){return views.Network_Details.Load(t.viewModel.NetworkId)}))])]);t.moduleCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Clear All","Clear all module alert suppressions",t.ClearSuppressAlertsForm,null,ko.computed(function(){return page.HasCapability(Capability.Module_SuppressAlerts)&&t.viewModel.SuppressedModules().length>0}))])]);t.nodeTasksTable=new AjaxFilterTableViewModel(null,"SortOrder",!0,function(){return null},25,ko.computed(function(){return t.expandedTaskList()}),!1,!0);t.nodeTasksTable.AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return n.SourceType()==="User"?"profile":n.SourceType()==="Network"?"network":n.SourceType()==="Node"?"node":n.SourceType()==="Module"?"firmware":""},function(n){return n.SourceType()},function(n){return n.SourceType()==="User"?views.User_Details.Load(n.Parameters.UserId):n.SourceType()==="Network"?views.Network_Details.Load(n.Parameters.NetworkId):n.SourceType()==="Node"?views.Network_Node.Load(n.Parameters.NetworkId,n.Parameters.NodeAddress):null})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Status",!0,!0,function(n){return n.IsCompleted()?"Complete":n.Type()==="Problem"?"Node Problem":n.Type()==="Task"?"Required Task":"Optional Task"})).AddColumn(new FilterTableColumnViewModel("Problem","Problem",!1,!0,function(n){return TaskTypes[n.Description()].Desc(n.IsCompleted(),n.Parameters)})).AddColumn(new MultipleFixHyperlinkTextTableColumnViewModel("Actions","Actions",function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks");ko.computed(function(){t.nodeTasksTable.initialLoadComplete(!0);t.nodeTasksTable.SetData({Items:t.viewModel.NetworkNodeTasks(),Success:!0})});t.suppressedModulesTable=new AjaxFilterTableViewModel(null,"SuppressedAlertsUtc",!1,function(n){return views.Module_Details.Load(n.ModuleId)},25,ko.computed(function(){return t.viewModel.SuppressedModules().length>0}));t.suppressedModulesTable.AddColumn(new FilterTableColumnViewModel("ModuleIndex","Index",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("SuppressedAlertsUtc","Suppressed Until",!1,!0)).AddColumn(new CommandTableColumnViewModel("Clear Suppression","delete",function(n){return page.OpenFormDialog(t.ClearSuppressAlertsModuleForm(n.ModuleId))},page.HasCapabilityComputed(Capability.Module_SuppressAlerts))).AddTitle("Modules With Suppressed Alerts");ko.computed(function(){t.suppressedModulesTable.initialLoadComplete(!0);t.suppressedModulesTable.SetData({Items:t.viewModel.SuppressedModules(),Success:!0})});t.moduleTiles=tiles.createPageItem().addTileSet(t.viewModel.ModuleTiles);t.ioModuleCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("module",new Header_Text("I/O Modules",null,ko.computed(function(){return t.viewModel.UsedSlotCount()+"/"+t.viewModel.MaxIoModules()}),"Total slots used")),new SingleValue_Block("Device"+(t.viewModel.AttachedIoModules()!==1?"s":"")+" Attached",ko.computed(function(){return t.viewModel.AttachedIoModules().toString()})),new Command_Block("Add","Add I/O module",t.AddIoModuleForm,null,ko.computed(function(){return t.viewModel.MaxIoModules()>0}))]).setEnabled(page.HasCapabilityComputed(Capability.Network_ManageDevices))]);t.ioModulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodeIoModulesTable",{nodeAddress:t.viewModel.NodeAddress}),"SlotIndex",!0,function(n){return page.OpenFormDialog(t.ShowDeviceDetailsForm(n))},10,page.HasCapabilityComputed(Capability.Network_ManageDevices));t.ioModulesTable.AddColumn(new FilterTableColumnViewModel("SlotIndex","Slot",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Ext Address",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Device Type","edit",function(n){return page.OpenFormDialog(t.ChangeDeviceTypeForm(n))},!0,function(n){return n.SlotIndex>0})).AddColumn(new CommandTableColumnViewModel("Update Firmware","firmware",function(n){return t.UpdateIoModuleFirmware(n.SlotIndex,n.DeviceTypeId,n.DeviceExtAddress)})).AddColumn(new CommandTableColumnViewModel("Ping IO Module","ping",function(n){return page.OpenFormDialog(n.SlotIndex===0?t.LivePingNetworkNodeForm():t.LivePingIoModuleForm(n))},page.HasCapabilityComputed(Capability.Network_QueryNode))).AddColumn(new CommandTableColumnViewModel("Configure Ports","network-address",function(){return views.Network_NodePortConfig.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)},page.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return n.SlotIndex===0&&n.HasConfigurableSerialPorts})).AddColumn(new CommandTableColumnViewModel("IO Module State","config",function(n){return views.Network_NodeIoModuleDetails.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress,n.SlotIndex)},page.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return n.IsLive})).AddColumn(new CommandTableColumnViewModel("Temperatures","temperature",function(n){return views.Network_NodeIoModuleTemperatureDetails.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress,n.SlotIndex)},page.HasCapabilityComputed(Capability.Network_QueryTemperatureProbe),function(n){return DeviceSupportsTemperatureProbes(n.DeviceType)})).AddColumn(new CommandWithDynamicIconTableColumnViewModel("Manage Device",function(n){return ko.computed(function(){return n.DeviceExtAddress==null?"add":"error"})},function(n){return ko.computed(function(){return n.DeviceExtAddress==null?"Attach IO Module to slot":"Detach IO Module from slot"})},function(n){return n.DeviceExtAddress==null?page.OpenFormDialog(t.AttachDeviceToIoModuleForm(n)):page.OpenFormDialog(t.DetachDeviceFromIoModuleForm(n))},page.HasCapabilityComputed(Capability.Network_ManageDevices),function(n){return n.SlotIndex>0})).AddColumn(new CommandTableColumnViewModel("Delete Device","delete",function(n){return page.OpenFormDialog(t.DeleteIoModuleForm(n))},page.HasCapabilityComputed(Capability.Network_ManageDevices),function(n){return n.SlotIndex>0&&page.HasCapabilityComputed(Capability.Network_PortConfigure)})).AddTitle("Network Node I/O Modules");t.networkNodeEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodeEventsTable",{nodeAddress:t.viewModel.NodeAddress}),"TimeUtc",!1,null,10);t.networkNodeEventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Network Node Events");page.Add(t.statusHeader);page.Add(t.nodeTasksTable);page.Add(t.nodeTiles);page.Add(new HeaderPageItem("Modules"));page.Add(t.moduleCommands);page.Add(t.suppressedModulesTable);page.Add(t.moduleTiles);page.Add(new HeaderPageItem("I/O Modules",null,null,null,null,null,null,page.HasCapabilityComputed(Capability.Network_ManageDevices)));page.Add(t.ioModuleCommands);page.Add(t.ioModulesTable);page.Add(t.networkNodeEventsTable);BaseUpdate(t,[t.networkNodeEventsTable,t.ioModulesTable])},t.UpdateIoModuleFirmware=function(n,i,r){r==null?page.OpenFormDialog(t.AttachDeviceBeforeUpdatingFirmwareForm(n,i)):page.OpenFormDialog(t.UpdateIoModuleFirmwareForm(n,r))},t.AttachDeviceBeforeUpdatingFirmwareForm=function(n,i){var r={deviceExtAddress:ko.observable(""),displayName:ko.observable("Query Device"),unattached:ko.observable(!1),message:ko.observable("")},u=new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,n==0?"AttachDevice":"AttachDeviceToIoModule",{nodeAddress:t.viewModel.NodeAddress(),slotIndex:n}),"Attach Device to IO Module","Attach",r).SubmitData(function(n){return{deviceExtAddress:n.deviceExtAddress()}}).Done(function(i){t.ioModulesTable.LoadData();page.OpenFormDialog(t.UpdateIoModuleFirmwareForm(n,i.deviceExtAddress()))});return u.MessageField("Select a device to attach to this node, or query the device to get the extended address.").CheckBoxField("unattached","Include assigned devices in list").AjaxFilterDropDownListField("deviceExtAddress","Device",function(n){return n.DeviceExtAddress+" ("+n.Type+")"},function(n){return n.DeviceExtAddress},ko.computed(function(){return route.forControllerItemAction("Network",t.viewModel.NetworkId,n>0?"AvailableIoModulesToAttach":t.viewModel.NodeAddress()==0?"AvailableGatewayDevices":"AvailableNonGatewayDevices",{unattached:!r.unattached(),deviceTypeId:i})}),!1,null,"DeviceExtAddress",1).MessageField(r.message).CommandButtonField("queryDevice",r.displayName,function(){r.unattached(!0);r.displayName("Querying device, please wait...");$.ajax({url:route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveQueryNodeDeviceExtAddress",{nodeAddress:t.viewModel.NodeAddress(),slotIndex:n}),type:"POST",dataType:"json",success:function(n){if(n.Response==null){r.message("Device query could not obtain the device extended address");return}r.message(n.Message);u.dialogModel.fields()[2].filterString(n.Response)},complete:function(){return r.displayName("Query Device")}})},!0),u.Create()},t.UpdateIoModuleFirmwareForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdateNetworkNodeIoModuleFirmware"),"Update I/O Module Firmware","Update",{firmwareId:ko.observable()}).SubmitData(function(i){return{nodeAddress:t.viewModel.NodeAddress(),firmwareId:i.firmwareId(),slotIndex:n}}).Done(function(){page.Update()}).AjaxFilterDropDownListField("firmwareId","Firmware Image",function(n){return"v"+n.FirmwareVersion+" created "+FormatDate(moment.utc(n.CreatedUtc))},function(n){return n.FirmwareId},route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableFirmwareForIoModule",{nodeAddress:t.viewModel.NodeAddress(),slotIndex:n}),!1,null,"FirmwareVersion",10,10).Create()},t.SetupApplicationForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SetupApplication",{nodeAddress:t.viewModel.NodeAddress}),"Setup Application","Setup",{supplierId:ko.observable(t.viewModel.SupplierIdTagValue())}).SubmitData(function(n){return{supplierId:""+n.supplierId()}}).Done(function(){page.Update()}).MessageField("Enter the supplier ID for this system").IntNumberField("supplierId","Supplier Id",null,null,!1).Create()},t.RenameNetworkNodeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"RenameNetworkNode"),"Rename Network Node","Rename",{name:ko.observable(t.viewModel.Name())}).SubmitData(function(n){return{name:n.name(),nodeAddress:t.viewModel.NodeAddress()}}).Done(function(n,i){t.viewModel.Name(i.Name)}).MessageField("Assign a unique name to this network node.").TextField("name","Name",50).Create()},t.ShowDeviceDetailsForm=function(n){return new DialogViewModelBuilder(null,"Device Details","Close",{}).DisplayField("Slot Index","Slot Index: "+n.SlotIndex).DisplayField("Device Type","Device Type: "+n.DeviceType).DisplayField("Device Ext Address",n.DeviceExtAddress!=null?"Device Ext Address: "+n.DeviceExtAddress:"").DisplayField("TemperatureSupport",DeviceSupportsTemperatureProbes(n.DeviceType)?"Supports Temperature Probes":"").DisplayField("ConfigurableSerialPorts",n.HasConfigurableSerialPorts?"Has Configurable Serial Ports":"").Create()},t.ChangeAssignedApplicationForm=function(n,i,r,u){var f={applicationGuid:ko.observable(t.viewModel.ApplicationGuid()),appBinaryId:ko.observable(t.viewModel.AppBinaryId()),includeAll:ko.observable(!1),latestVersions:ko.observable(!0)};return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"ChangeAssignedApplication",{nodeAddress:i}),"Change Assigned Application","Change",f).SubmitData(function(n){return{appBinaryId:n.appBinaryId()}}).Done(function(){typeof u=="function"&&u()}).MessageField("Select a new version to assign to the network node?").CheckBoxField("includeAll","Include other applications").CheckBoxField("latestVersions","Include latest versions only").AjaxCompactFilterDropDownListField("appBinaryId","Application Version",function(n){return n.Name+" (v"+n.AppVersionNumber+")"},function(n){return n.AppBinaryId},ko.computed(function(){return route.forControllerItemAction("Network",n,"AvailableApplications",{nodeAddress:i,applicationGuid:f.applicationGuid,includeAll:f.includeAll,latestVersions:f.latestVersions,deviceTypeId:r})}),!1,t.viewModel.AppName()==null?null:{AppBinaryId:t.viewModel.AppBinaryId(),Name:t.viewModel.AppName(),AppVersionNumber:t.viewModel.AppVersionNumber()},"Name",3,1).Create()},t.SetLocationMapForm=function(n,t,i,r,u,f){var e={latitude:ko.observable(ko.unwrap(i)),longitude:ko.observable(ko.unwrap(r)),distance:ko.observable("0.00m"),locationMessage:ko.observable("")},o=new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetNetworkNodeLocation",{nodeAddress:t}),"Update Location","Update",e),s;return o.SubmitData(function(n){return{latitude:n.latitude(),longitude:n.longitude(),distance:n.distance()}}).Done(function(n){f(Number(n.latitude()),Number(n.longitude()))}),o.MapField(e,"nodeMarker",u),o.MessageField(ko.computed(function(){return e.locationMessage()})).NumberField("latitude","Latitude (decimal degrees)",-90,90).NumberField("longitude","Longitude (decimal degrees)",-180,180).DisplayFieldWithHeading("distance","Distance",e.distance),s=o.Create(),ko.computed(function(){e.latitude();e.longitude();var n=o.dialogModel.fields()[0],t=n.mapMarker;t!=null&&(n.dragging()||(t.setPosition(new google.maps.LatLng(e.latitude(),e.longitude())),e.distance(n.distanceBetweenMarkerAndNode())))}).extend({throttle:250}),s},t.UpdateNetworkNodeConfigForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdateNetworkNodeConfig"),"Update Node Config","Update",{}).SubmitData(function(){return{nodeAddress:t.viewModel.NodeAddress()}}).Done(function(){}).MessageField("Are you sure you want to update the configuration of all modules running on this network node?").Create()},t.UpdateNetworkNodeFirmwareForm=function(n,t,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"UpdateNetworkNodeFirmware"),"Update Node Firmware","Update",{}).SubmitData(function(){return{nodeAddress:ko.unwrap(t)}}).Done(function(){typeof i=="function"&&i()}).MessageField("Are you sure you want to update the firmware in this node?").Create()},t.UpdateNetworkNodeLiveFirmwareForm=function(n,t,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"UpdateNetworkNodeLiveFirmware"),"Update Node Firmware","Update",{firmwareId:ko.observable(),autoReboot:ko.observable(!0)}).SubmitData(function(n){return{nodeAddress:ko.unwrap(t),firmwareId:n.firmwareId(),autoReboot:n.autoReboot()}}).Done(function(){typeof i=="function"&&i()}).AjaxFilterDropDownListField("firmwareId","Firmware Image",function(n){return"v"+n.FirmwareVersion+" created "+FormatDate(moment.utc(n.CreatedUtc))},function(n){return n.FirmwareId},route.forControllerItemAction("Network",n,"AvailableFirmwareForNode",{nodeAddress:t}),!1,null,"FirmwareVersion",10,10).CheckBoxField("autoReboot","Automatically reboot when done.").Create()},t.UpdateNetworkNodeApplicationForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdateNetworkNodeApplication"),"Update Node Application","Update",{}).SubmitData(function(){return{nodeAddress:t.viewModel.NodeAddress()}}).Done(function(){t.networkNodeEventsTable.LoadData()}).MessageField("Are you sure you want to update the application in this node?").Create()},t.RebootNodeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"RebootNetworkNode"),"Reboot Network Node","Reboot",{}).SubmitData(function(){return{nodeAddress:t.viewModel.NodeAddress()}}).Done(function(){t.networkNodeEventsTable.LoadData()}).MessageField("Are you sure you want to reboot this node?").Create()},t.MoveNodeForm=function(){var n={newNetworkId:ko.observable(t.viewModel.NetworkId()),newNodeAddress:ko.observable(t.viewModel.NodeAddress()),confirm:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdateNodeNetworkAndAddress",{nodeAddress:t.viewModel.NodeAddress}),"Move Node","Move",n).SubmitData(function(n){return{newNetworkId:n.newNetworkId(),newNodeAddress:n.newNodeAddress(),confirm:n.confirm()}}).Done(function(n){views.Network_Node.Load(n.newNetworkId(),n.newNodeAddress())}).MessageField("Specify the network and node address to move this node to.").AjaxCompactFilterDropDownListField("newNetworkId","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerAction("Network","GetNetworksForNewNode"),!1,{NetworkId:t.viewModel.NetworkId,Name:t.viewModel.NetworkName},"Name",3,1).AjaxDropDownListField("newNodeAddress","Node Address",function(n){return FormatNodeAddress(n)+" ("+n+")"},function(n){return n},ko.computed(function(){return route.forControllerItemAction("Network",n.newNetworkId,"AvailableNodeAddresses",{max:255})}),!1).CheckBoxField("confirm","Please confirm you want to move this node").Create()},t.ChangeNodeStatusForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetNetworkNodeStatus"),"Set Node Status","Update",{statusId:ko.observable(t.viewModel.StatusId()),reason:ko.observable("")}).SubmitData(function(n){return{nodeAddress:ko.unwrap(i),statusId:n.statusId(),reason:n.reason()}}).Done(function(){page.Update()}).MessageField("Please provide a reason for this status change").MultilineTextField("reason","Reason",null,!1).AjaxDropDownListField("statusId","Node Status",function(n){return n.Name},function(n){return n.StatusId},ko.computed(function(){return route.forControllerItemAction("Network",n,"AvailableNodeStatus")}),!1,{StatusId:t.viewModel.StatusId(),Name:t.viewModel.StatusName()}).Create()},t.ConfirmNodeStatusChangeForm=function(n,i){var r=ko.observable("All required tasks completed, changing status from "+t.viewModel.StatusName()+" to "+ko.unwrap(t.viewModel.NextStatusName));return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetNetworkNodeStatus"),"Set Network Status","Update",{}).SubmitData(function(){return{nodeAddress:ko.unwrap(i),statusId:ko.unwrap(t.viewModel.NextStatusId),reason:r(),overrideTaskCompletion:!0}}).Done(function(){page.Update()}).MessageField(r()).Create()},t.ConfirmIncompleteNodeStatusChangeForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"SetNetworkNodeStatus"),"Set Network Status","Update",{confirmOverride:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(n){return{nodeAddress:ko.unwrap(i),statusId:ko.unwrap(t.viewModel.NextStatusId),reason:n.reason(),overrideTaskCompletion:!0}}).Done(function(){page.Update()}).MessageField("You have tasks outstanding, please provide a reason for advancing with incomplete tasks").MultilineTextField("reason","Reason",null,!1).Create()},t.LivePingNetworkNodeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LivePingNode"),"Ping Network Node","Ping",{}).SubmitData(function(){return{nodeAddress:t.viewModel.NodeAddress()}}).Done(function(){}).MessageField("Press Ping to send a ping request to this network node.").Create()},t.LivePingIoModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LivePingIOModule"),"Ping IO Module","Ping",{}).SubmitData(function(){return{nodeAddress:t.viewModel.NodeAddress(),slotIndex:n.SlotIndex}}).Done(function(){}).MessageField("Press Ping to send a ping request to this IO module.").Create()},t.LiveRebootNetworkNodeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveRebootNode"),"Reboot Network Node","Reboot",{}).SubmitData(function(){return{nodeAddress:t.viewModel.NodeAddress()}}).Done(function(){}).MessageField("Press Reboot to send a reboot request to this network node.").Create()},t.AttachDeviceToNodeForm=function(n,i,r){var u={deviceExtAddress:ko.observable(),unattached:ko.observable()};return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AttachDevice",{nodeAddress:i}),"Attach Device to Node","Attach",u).SubmitData(function(n){return{deviceExtAddress:n.deviceExtAddress()}}).Done(function(){typeof r=="function"&&r()}).MessageField("Select a device to attach to this node.").CheckBoxField("unattached","Include assigned devices in list").AjaxFilterDropDownListField("deviceExtAddress","Device",function(n){return n.DeviceExtAddress+" ("+n.Type+")"},function(n){return n.DeviceExtAddress},ko.computed(function(){return route.forControllerItemAction("Network",t.viewModel.NetworkId,t.viewModel.NodeAddress()===0?"AvailableGatewayDevices":"AvailableNonGatewayDevices",{unattached:!u.unattached()})}),!1,null,"DeviceExtAddress",1).Create()},t.DetachDeviceFromNodeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DetachDevice",{nodeAddress:t.viewModel.NodeAddress}),"Detach Device","Detach",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to detach this Device?").Create()},t.DetachDeviceFromIoModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DetachDeviceFromIoModule",{nodeAddress:t.viewModel.NodeAddress,slotIndex:n.SlotIndex,deviceExtAddress:n.DeviceExtAddress}),"Detach Device","Detach",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to detach this Device?").Create()},t.QueryNodeFirmwareVersionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveQueryNodeFirmwareVersion",{nodeAddress:t.viewModel.NodeAddress}),"Query Device","Query",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Press Query to request the firmware version for this network node.").Create()},t.DeleteNetworkNodeForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DeleteNetworkNode"),"Delete Network","Delete",{nodeAddress:ko.observable(),confirm:ko.observable(!1)}).SubmitData(function(n){return{nodeAddress:t.viewModel.NodeAddress(),confirm:n.confirm()}}).Done(function(){views.Network_Details.Load(t.viewModel.NetworkId)}).MessageField("Are you sure you want to permanently delete this node?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Node").Create()},t.DeleteIoModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DeleteIoModuleSlot"),"Delete I/O Module","Delete",{nodeAddress:ko.observable(),confirm:ko.observable(!1)}).SubmitData(function(i){return{nodeAddress:t.viewModel.NodeAddress(),slotIndex:n.SlotIndex,confirm:i.confirm()}}).Done(function(){t.ioModulesTable.LoadData()}).MessageField("Are you sure you want to permanently delete this I/O module?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of I/O module").Create()},t.ChangeDeviceTypeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ChangeIoModuleDeviceType",{nodeAddress:t.viewModel.NodeAddress}),"Change IO Module","Change",{deviceTypeId:ko.observable(n.DeviceTypeId),slotIndex:ko.observable(n.SlotIndex)}).SubmitData(function(t){return{deviceTypeId:t.deviceTypeId(),ioModuleSlot:n.SlotIndex,newIoModuleSlot:t.slotIndex()}}).Done(function(){t.ioModulesTable.LoadData()}).MessageField("Select a new device type and / or slot for this IO module.").AjaxFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerItemAction("DeviceType",t.viewModel.DeviceTypeId,"GetAvailableIoModules",{ioTypeId:t.viewModel.IoTypeId}),!1,{DeviceTypeId:n.DeviceTypeId},"DeviceType").AjaxDropDownListField("slotIndex","Slot Index",function(n){return n},function(n){return n},route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableIoModuleSlots",{nodeAddress:t.viewModel.NodeAddress,slotIndex:n.SlotIndex,max:t.viewModel.MaxIoModules()}),!1,n.SlotIndex).Create()},t.CreateModuleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"CreateNetworkNodeModule",{nodeAddress:t.viewModel.NodeAddress}),"Create Module","Create & Continue",{moduleIndex:ko.observable(),moduleType:ko.observable(),icon:ko.observable(),name:ko.observable(),shortName:ko.observable()}).SubmitData(function(n){return{moduleIndex:n.moduleIndex(),moduleType:n.moduleType(),icon:n.icon(),name:n.name(),shortName:n.shortName()}}).Done(function(){page.Update()}).IntNumberField("moduleIndex","Module Index",0,255).AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableModuleTypes"),!1,null,null,5,1).AjaxCompactFilterDropDownListField("icon","Icon",function(n){return n},function(n){return n},route.forControllerAction("Module","AvailableIconNames"),!1,null,null,5,1).TextField("name","Name",100).TextField("shortName","Short Name",50).CreateMulti()},t.DeleteModulesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DeleteNetworkNodeModules"),"Delete Modules","Delete",{nodeAddress:ko.observable(),confirm:ko.observable(!1)}).SubmitData(function(n){return{nodeAddress:t.viewModel.NodeAddress(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to permanently delete ALL Modules from this node?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of node modules").Create()},t.ApplyApplicationTemplateForm=function(n,t,i,r){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"ApplyApplicationTemplateToNode",{nodeAddress:t}),"Apply Application Template","Apply",{applicationTemplateId:ko.observable()}).SubmitData(function(n){return{applicationTemplateId:n.applicationTemplateId()}}).Done(function(){typeof r=="function"&&r()}).MessageField("Select an application template to apply to this node.").AjaxCompactFilterDropDownListField("applicationTemplateId","Application Template",function(n){return n.Name},function(n){return n.ApplicationTemplateId},ko.computed(function(){return route.forControllerItemAction("Network",n,"AvailableApplicationTemplates",{deviceTypeId:i})}),!1,null,"Name",3,1).Create()},t.ApplyTemplateUpgradeForm=function(){var n={applicationTemplateId:ko.observable(),moduleMap:ko.observable(),confirm:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ApplyApplicationTemplateUpdateToNode",{nodeAddress:t.viewModel.NodeAddress}),"Apply Application Template Upgrade","Apply",n).SubmitData(function(n){var t;return this.fields().forEach(function(n){n.fieldName==="moduleMap"&&(t=n)}),{applicationTemplateId:n.applicationTemplateId(),mappedModules:t.indexMap(),deleteModules:t.indexDel(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Select an application template to apply to this node.").AjaxCompactFilterDropDownListField("applicationTemplateId","Application Template",function(n){return n.Name},function(n){return n.ApplicationTemplateId},ko.computed(function(){return route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableApplicationTemplates")}),!1,null,"Name",3,1).OptionalCheckBoxField("confirm","Confirm irreversible deletion of node modules").AjaxModuleUpgradeField("moduleMap","Modules",ko.computed(function(){return route.forControllerItemAction("ApplicationTemplate",n.applicationTemplateId,"TemplateModules")}),route.forControllerItemAction("Network",t.viewModel.NetworkId,"CurrentNodeModules",{nodeAddress:t.viewModel.NodeAddress}),n.applicationTemplateId).Create()},t.SuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"SuppressAlertsOnNode",{nodeAddress:t.viewModel.NodeAddress}),"Suppress Alerts","Suppress",{suppressUntil:ko.observable(moment().add("d",1).format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{suppressUntilUtc:moment(n.suppressUntil()).utc().toISOString()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to suppress alerts for this network node?").DateTimeField("suppressUntil","Suppress Until").Create()},t.ClearSuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ClearSuppressAlertsOnNode",{nodeAddress:t.viewModel.NodeAddress}),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts for this network node?").Create()},t.ClearSuppressAlertsModuleForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Module",n,"ClearSuppressAlerts"),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts for this module?").Create()},t.AssignTagToNodeForm=function(n,t,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",n,"AssignTagToNode",{nodeAddress:t}),"Assign Tag To Node","Assign",{tagValueId:ko.observable(0)}).SubmitData(function(n){return{tagValueId:n.tagValueId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to assign this tag to this node?").DropDownListField("tagValueId","Tag",function(n){return n.Value},function(n){return n.Id},i).Create()},t.AttachDeviceToIoModuleForm=function(n){var u={deviceExtAddress:ko.observable("")},i=new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"AttachDeviceToIoModule"),"Attach Device to Slot","Attach",u).SubmitData(function(i){return{nodeAddress:t.viewModel.NodeAddress(),slotIndex:n.SlotIndex,deviceExtAddress:i.deviceExtAddress()}}).Validate(function(n){return n.deviceExtAddress()==null&&r.filterString().length>0?"The device ext address you entered is not a valid option shown in the list.":null}).Done(function(){page.Update()}).MessageField("Attach "+n.DeviceType+" to slot").Create(),r=new DialogCompactFilterAjaxDropDownListFieldViewModel(i,"deviceExtAddress","Device",function(n){return n.DeviceExtAddress},function(n){return n.DeviceExtAddress},ko.computed(function(){return route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableIoModulesToAttach",{deviceTypeId:n.DeviceTypeId})}),!0,null,"DeviceExtAddress",1,1,"ajax-compactfilter-drop-down-list");return i.fields.push(r),i},t.AddIoModuleForm=function(){var i={maxIoModules:ko.observable(0),deviceExtAddress:ko.observable(""),deviceTypeId:ko.observable(0),slotIndex:ko.observable(0)},n=new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"AddIoModuleToNode"),"Add I/O Module to Network Node","Add",i).SubmitData(function(n){return{nodeAddress:t.viewModel.NodeAddress(),deviceTypeId:n.deviceTypeId(),slotIndex:n.slotIndex(),deviceExtAddress:n.deviceExtAddress()}}).Validate(function(n){return n.deviceExtAddress()==null&&u.filterString().length>0?"The device ext address you entered is not a valid option shown in the list.":null}).Done(function(){page.Update()}).AjaxFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},route.forControllerItemAction("DeviceType",t.viewModel.DeviceTypeId,"GetAvailableIoModules",{ioTypeId:t.viewModel.IoTypeId}),!1,null,"DeviceType").AjaxDropDownListField("slotIndex","Slot Index",function(n){return n},function(n){return n},route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableIoModuleSlots",{nodeAddress:t.viewModel.NodeAddress,max:t.viewModel.MaxIoModules()}),!1).MessageField("Attach device to slot").Create(),u=new DialogCompactFilterAjaxDropDownListFieldViewModel(n,"deviceExtAddress","Device",function(n){return n.DeviceExtAddress},function(n){return n.DeviceExtAddress},ko.computed(function(){return route.forControllerItemAction("Network",t.viewModel.NetworkId,"AvailableIoModulesToAttach",{ioTypeId:t.viewModel.IoTypeId,deviceTypeId:i.deviceTypeId()||0})}),!0,null,"DeviceExtAddress",1,1,"ajax-compactfilter-drop-down-list"),r;return n.fields.push(u),r=-1,n.fields().forEach(function(n,t){n.fieldName==="deviceTypeId"&&(r=t)}),ko.computed(function(){var t=i.deviceTypeId();r>-1&&n.fields()[r].options().forEach(function(n){n.DeviceTypeId===t&&i.maxIoModules(n.MaxIoModules)})}),n},t.DeleteTagFromNodeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"DeleteTagFromNode",{nodeAddress:t.viewModel.NodeAddress}),"Delete Tag From Node","Delete",{tagValueId:ko.observable(n.Parameters.SelectedTagValue.TagValueId())}).SubmitData(function(n){return{tagValueId:n.tagValueId()}}).Done(function(){page.Update()}).MessageField("You are about to remove the tag "+n.Parameters.SelectedTagValue.Value()+" from the node.").Create()},t.mappingOptions=new MappingOptions,tiles.applyModuleTileMapping(t.mappingOptions,"ModuleTiles",function(n){return n.IsEnabled()||t.showDisabledModules()}),t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeIoModuleDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodeIoModuleDetails_Model,t.stateHandler=function(){return new Network_NodeIoModuleDetails_State(t)},t.titleHandler=function(){return page.SetTitle("I/O Module "+t.viewModel.SlotIndex()+" Details",t.viewModel.NodeName,views.Network_Node.routeHandler(t.viewModel.NetworkId,t.viewModel.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)})},t.routeHandler=function(n,t,i){return route.forControllerItemAction("Network",n,"NodeIoModuleDetails",{nodeAddress:t,slotIndex:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.ioModuleDetailsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"QueryIoState",{nodeAddress:t.viewModel.NodeAddress,ioModuleSlot:t.viewModel.SlotIndex,ioTypeId:t.viewModel.IoTypeId,deviceType:t.viewModel.DeviceType}),"Name",!0,null,50);t.ioModuleDetailsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Value","State",!1,!0)).AddColumn(new FilterTableColumnViewModel("Status","Notes",!1,!0)).AddTitle("State");t.attachedNodesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveQueryNodeGetAttachedNodes",{nodeAddress:t.viewModel.NodeAddress}),"NodeAddress",!0,function(n){return n.NodeAddress<240?views.Network_Node.Load(t.viewModel.NetworkId,n.NodeAddress):null},10);t.attachedNodesTable.AddColumn(new FilterTableColumnViewModel("NodeAddress","Node Address",!1,!0,function(n){return FormatNodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Ext Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("StatusName","Status",!1,!0)).AddColumn(new CommandTableColumnViewModel("Query Node","command",function(n){return views.Network_NodeQueryDetails.Load(t.viewModel.NetworkId,n.NodeAddress)},page.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return ko.computed(function(){return n.NodeAddress<240})()})).AddTitle("Attached Nodes");page.Add(t.ioModuleDetailsTable);page.Add(t.attachedNodesTable);BaseUpdate(t,[t.ioModuleDetailsTable,t.attachedNodesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeIoModuleTemperatureDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodeIoModuleTemperatureDetails_Model,t.stateHandler=function(){return new Network_NodeIoModuleTemperatureDetails_State(t)},t.titleHandler=function(){return page.SetTitle("I/O Module Temperature Details",t.viewModel.NodeName,views.Network_Node.routeHandler(t.viewModel.NetworkId,t.viewModel.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)})},t.routeHandler=function(n,t,i){return route.forControllerItemAction("Network",n,"NodeIoModuleTemperatureDetails",{nodeAddress:t,slotIndex:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.availableSlotData=ko.observableArray([]);t.showSnapshotButton=ko.observable(!1);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Snapshot","Create a snapshot",t.SnapshotForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_EnrolTemperatureProbe)&&!page.powerGeniusBranding()&&t.showSnapshotButton()}))])]);t.pageTiles=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text(t.viewModel.DeviceType(),t.viewModel.DeviceExtAddress(),ComputedFormatNodeAddress(t.viewModel.NodeAddress),"Node Address")),new SingleValue_Block("Slot Index",t.viewModel.SlotIndex()),new Command_Block("View","View device",null,function(){return views.Device_Details.Load(t.viewModel.DeviceExtAddress())},ko.computed(function(){return t.viewModel.DeviceExtAddress()!==""&&t.viewModel.DeviceExtAddress()!=null}))])]);t.temperatureTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveQueryTemperatures",{nodeAddress:t.viewModel.NodeAddress,ioModuleSlot:t.viewModel.SlotIndex,ioTypeId:t.viewModel.IoTypeId}),"Channel",!0,null,32);t.temperatureTable.AddColumn(new FilterTableColumnViewModel("Channel","Channel",!1,!0)).AddColumn(new FilterTableColumnViewModel("Index","Slot",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Fixed / Transient",!1,!0,function(n){return n.IsFixed?"Fixed":!n.IsFixed&&n.DeviceExtAddress==="0"?"Unknown":"Transient"})).AddColumn(new FilterTableColumnViewModel("Age","Age",!1,!0,function(n){return n.IsValid?n.Age:"-"})).AddColumn(new FilterTableColumnViewModel("Temperature","Temperature",!1,!0,function(n){return n.IsValid?n.Temperature.toFixed(1)+"°C":"-"})).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Device Ext Address",!1,!0,function(n){return n.DeviceExtAddress!=="0"?n.DeviceExtAddress:"-"})).AddColumn(new CommandTableColumnViewModel("Re-enrol","sort",function(n){t.PopulateSlotList(n.Channel);page.OpenFormDialog(t.ChangeSlotForm(n))},page.HasCapabilityComputed(Capability.Network_EnrolTemperatureProbe))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveProbeForm(n))},page.HasCapabilityComputed(Capability.Network_EnrolTemperatureProbe))).AddTitle("Probes");t.changelogTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"OneWireTempProbeChangelogs",{nodeAddress:t.viewModel.NodeAddress,ioModuleSlot:t.viewModel.SlotIndex,ioTypeId:t.viewModel.IoTypeId}),"CreatedUtc",!1,null,10);t.changelogTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedByUser","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Channel","Channel",!1,!0)).AddColumn(new FilterTableColumnViewModel("TargetSlot","Target Slot",!1,!0)).AddColumn(new FilterTableColumnViewModel("Comment","Action",!1,!0)).AddColumn(new CommandTableColumnViewModel("Apply","command",function(n){return page.OpenFormDialog(t.ReEnrolTemperatureProbeForm(n))},page.HasCapabilityComputed(Capability.Network_EnrolTemperatureProbe))).AddTitle("Temperature Probe Changes");t.snapshotTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"OneWireTempProbeSnapshots",{nodeAddress:t.viewModel.NodeAddress}),"CreatedUtc",!1,function(n){return page.OpenFormDialog(t.ReapplySnapshotForm(n))},10);t.snapshotTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedByUser","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Comment","Comment",!1,!0)).AddColumn(new FilterTableColumnViewModel("IoModuleSlot","IO Module Slot",!1,!0)).AddColumn(new FilterTableColumnViewModel("NumberOfProbes","# Probes",!1,!0)).AddTitle("Temperature Probe Snapshots");ko.computed(function(){t.temperatureTable.data();t.showSnapshotButton(t.temperatureTable.data().length>0)});page.Add(t.pageTiles);page.Add(t.pageCommands);page.Add(t.temperatureTable);page.Add(t.changelogTable);page.Add(t.snapshotTable);BaseUpdate(t,[t.temperatureTable])},t.SnapshotForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"TakeSnapshotOfFixedProbes"),"Snapshot Fixed Probes","Create",{newSlot:ko.observable(0),comment:ko.observable("")}).SubmitData(function(n){var i=[];return t.temperatureTable.data().forEach(function(n){n.IsFixed&&i.push({Channel:n.Channel,TargetSlot:n.Index,IsFixed:n.IsFixed,DeviceExtAddress:n.DeviceExtAddress})}),{nodeAddress:t.viewModel.NodeAddress(),ioTypeId:t.viewModel.IoTypeId(),ioModuleSlot:t.viewModel.SlotIndex(),comment:n.comment(),snapshotData:i}}).Done(function(){t.temperatureTable.LoadData();t.changelogTable.LoadData();t.snapshotTable.LoadData()}).MessageField("This will create a snapshot of all fixed probes as they are currently shown in the probes table.").TextField("comment","Please enter a comment",null,!1,!0,!0).Create()},t.ChangeSlotForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"EnrolTemperatureProbe"),"Move Temperature Probe","Move Probe",{newSlot:ko.observable(0)}).SubmitData(function(i){var r=[];return t.temperatureTable.data().forEach(function(n){r.push({Channel:n.Channel,SourceSlot:n.Index,IsFixed:n.IsFixed,IsValid:!0,DeviceExtAddress:n.DeviceExtAddress})}),{oldSlot:n.Index,newSlot:i.newSlot(),nodeAddress:t.viewModel.NodeAddress(),channel:n.Channel,ioTypeId:t.viewModel.IoTypeId(),ioModuleSlot:t.viewModel.SlotIndex(),deviceExtAddress:n.DeviceExtAddress}}).Done(function(){t.temperatureTable.LoadData();t.changelogTable.LoadData()}).MessageField("Temperature probe details").DisplayField("Slot","Slot: "+n.Index).DisplayField("Type","Type: "+(n.IsFixed?"Fixed":!n.IsFixed&&n.DeviceExtAddress==="0"?"Unknown":"Transient")).DisplayField("DeviceExtAddress","Ext Address: "+(n.DeviceExtAddress!=="0"?n.DeviceExtAddress:"")).DisplayField("Temperature","Temp: "+n.Temperature.toFixed(1)+"°C").MessageField("Select a new slot to move this probe to").DropDownListField("newSlot","New Slot",function(n){return n.Index+"  ("+n.Type+" - "+n.DeviceExtAddress+")"},function(n){return n.Index},t.availableSlotData()).Create()},t.RemoveProbeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"RemoveTemperatureProbe"),"Remove Temperature Probe","Remove Probe",{confirm:ko.observable(!1)}).SubmitData(function(i){var r=[];return t.temperatureTable.data().forEach(function(n){r.push({Channel:n.Channel,SourceSlot:n.Index,IsFixed:n.IsFixed,IsValue:!0,DeviceExtAddress:n.DeviceExtAddress})}),{nodeAddress:t.viewModel.NodeAddress(),slot:n.Index,channel:n.Channel,ioTypeId:t.viewModel.IoTypeId(),confirm:i.confirm(),ioModuleSlot:t.viewModel.SlotIndex(),snapshotData:r}}).Done(function(){t.temperatureTable.LoadData();t.changelogTable.LoadData()}).MessageField("Temperature probe details").DisplayField("Slot","Slot: "+n.Index).DisplayField("Type","Type: "+(n.IsFixed?"Fixed":!n.IsFixed&&n.DeviceExtAddress==="0"?"Unknown":"Transient")).DisplayField("DeviceExtAddress","Ext Address: "+(n.DeviceExtAddress!=="0"?n.DeviceExtAddress:"")).DisplayField("Temperature","Temp: "+n.Temperature.toFixed(1)+"°C").MessageField("Remove probe from this slot").CheckBoxField("confirm","Confirm removal of temperature probe").Create()},t.PopulateSlotList=function(n){var u,i,r;for(t.availableSlotData([]),u=32,i=0;i<u;i++)r=t.temperatureTable.data().filter(function(t){return t.Index===i&&t.Channel===n}),r.length>0?t.availableSlotData.push({Index:i,Type:r[0].IsFixed?"Fixed":"Transient",DeviceExtAddress:r[0].DeviceExtAddress}):t.availableSlotData.push({Index:i,Type:"",DeviceExtAddress:""})},t.ReEnrolTemperatureProbeForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ApplyChangeset"),"Apply Change","Apply",{}).SubmitData(function(){var i=[];return t.temperatureTable.data().forEach(function(n){i.push({Channel:n.Channel,SourceSlot:n.Index,IsFixed:n.IsFixed,IsValue:!0,DeviceExtAddress:n.DeviceExtAddress})}),{newSlot:n.TargetSlot,nodeAddress:t.viewModel.NodeAddress(),channel:n.Channel,ioTypeId:t.viewModel.IoTypeId(),ioModuleSlot:t.viewModel.SlotIndex(),deviceExtAddress:n.DeviceExtAddress}}).Done(function(){t.temperatureTable.LoadData();t.changelogTable.LoadData()}).MessageField("Temperature probe details").DisplayField("Comment",n.Comment).DisplayField("Target Slot","Target Slot: "+n.TargetSlot).Create()},t.ReapplySnapshotForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ApplySnapshot"),"Apply Snapshot","Apply",{}).SubmitData(function(){return{snapshotId:n.OneWireTempSnapshotId,nodeAddress:t.viewModel.NodeAddress(),ioTypeId:t.viewModel.IoTypeId(),ioModuleSlot:t.viewModel.SlotIndex()}}).Done(function(){t.temperatureTable.LoadData();t.changelogTable.LoadData()}).MessageField("All probes in this changeset will be re enrolled.").ListField("Probes to fix",n.SnapshotData,function(n){return"Ch/Slot: "+n.Channel+"/"+n.Slot+" Serial: "+n.DeviceExtAddress}).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeMap=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodeMap_Model,t.stateHandler=function(){return new Network_NodeMap_State(t)},t.titleHandler=function(){return page.SetTitle("Node Map",t.viewModel.Name,views.Network_Node.routeHandler(t.viewModel.NetworkId,t.viewModel.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Network",n,"NodeMap",{NodeAddress:t})},t.markersUrl=route.forControllerAction("Images","markers-v3.png"),t.dependsOnMarkerState=ko.observable(!1),t.showModules=ko.observable(!1),t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.dependsOnMarkerState(!1);t.showModules(!1);t.icons={nodeMarker:{url:t.markersUrl,size:new google.maps.Size(28,28),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(14,14)},dragMarker:{url:t.markersUrl,size:new google.maps.Size(28,32),origin:new google.maps.Point(0,84)}};t.mapModel=new MapPageItem(!0);t.mapMarker&&t.mapMarker.setMap(null);t.mapMarker=null;t.StaticMap();BaseUpdate(t)},t.StaticMap=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text("Network",t.viewModel.NetworkName,t.viewModel.Name,"Node")),new SingleValue_Block("Latitude",ko.computed(function(){return t.viewModel.Latitude()!=null?t.viewModel.Latitude().toFixed(6):"none"})),new SingleValue_Block("Longitude",ko.computed(function(){return t.viewModel.Longitude()!=null?t.viewModel.Longitude().toFixed(6):"none"})),new Command_Block("Set Location","Set the node location",null,function(){return page.OpenFormDialog(views.Network_Node.SetLocationMapForm(t.viewModel.NetworkId(),t.viewModel.NodeAddress(),t.viewModel.Latitude()||t.viewModel.FirstNodeLatitude(),t.viewModel.Longitude()||t.viewModel.FirstNodeLongitude(),!(t.viewModel.Latitude()==null&&t.viewModel.Longitude()==null),function(n,i){t.viewModel.Latitude(n);t.viewModel.Longitude(i);views.Network_NodeMap.mapModel.zoomToBounds()}))},page.HasCapabilityComputed(Capability.Network_SetLocation))])]);page.Add(t.pageCommands);t.mapOptions=new MapItemsInfo;t.mapOptions.items=ko.observableArray([t.viewModel]);t.mapOptions.getLatLng=function(n){return n.Latitude()&&n.Longitude()?new google.maps.LatLng(n.Latitude(),n.Longitude()):null};t.mapOptions.getText=function(n){return n.Latitude()==null||n.Longitude()==null?"":n.Name()+": "+n.Latitude().toFixed(6)+", "+n.Longitude().toFixed(6)};t.mapOptions.getInfo=function(n){return n.Latitude()==null||n.Longitude()==null?"":n.Name()+" - lat:"+n.Latitude().toFixed(6)+", lng:"+n.Longitude().toFixed(6)};t.mapOptions.getIcon=function(){return t.icons.nodeMarker};t.mapOptions.getZIndex=function(){return 1};t.mapModel.AddItems(t.mapOptions);page.Add(t.mapModel)},t.CanConfigure=function(){return page.HasCapabilityComputed(Capability.Network_SetLocation)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeModuleEvents=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodeModuleEvents_Model,t.stateHandler=function(){return new Network_NodeModuleEvents_State(t)},t.titleHandler=function(){return page.SetTitle("Node Module Events",t.viewModel.NodeName,views.Network_Node.routeHandler(t.viewModel.NetworkId,t.viewModel.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Network",n,"NodeModuleEvents",{nodeAddress:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.networkModuleEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodeModuleEventsTable",{nodeAddress:t.viewModel.NodeAddress}),"TimeUtc",!1,function(n){return page.OpenFormDialog(t.ModuleEventDetailsDialog(n))},25);t.networkModuleEventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return views.Module_Details.routeHandler(n.ModuleId)},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("AcknowledgedUtc","Acknowledged",!0,!0)).AddColumn(new FilterTableColumnViewModel("Delay","Delay",!0,!0,function(n){return n.AcknowledgedUtc!=null?FormatDuration(moment.duration(moment(n.AcknowledgedUtc).diff(moment(n.TimeUtc)))):""})).AddColumn(new HyperlinkTableColumnViewModel("Details","alert",function(n){return views.Module_AlertEventDetails.routeHandler(n.ModuleId,n.ModuleEventId)},function(n){return views.Module_AlertEventDetails.Load(n.ModuleId,n.ModuleEventId)},!0,function(n){return n.AlertAndStatus!=null})).AddTitle("Recent Node Module Events");page.Add(t.networkModuleEventsTable);BaseUpdate(t,[t.networkModuleEventsTable])},t.ModuleEventDetailsDialog=function(n){var t={details:n},i=ko.observable(!0),r=ko.observable(!1),u=function(n,t){return ko.computed(function(){return i()?n+": Loading...":r()?n+": Failed to load":n+": "+t()})};return page.ViewRequests.push($.ajax(route.forControllerItemAction("Module",n.ModuleId,"EventDetails"),{data:{moduleEventId:n.ModuleEventId},type:"POST"}).done(function(n){t.details=n;r(!1);i(!1)}).fail(function(){r(!0);i(!1)})),new DialogViewModelBuilder(undefined,"Event details","Close",{}).MessageField(u("Details",function(){return t.details.Details})).MessageField(u("Time",function(){return FormatDateTime(moment.utc(t.details.TimeUtc))})).MessageField(u("Acknowledgement",function(){return t.details.AcknowledgeUtc?FormatDateTime(moment.utc(t.details.AcknowledgeUtc))+" "+t.details.AcknowledgeUser:"Not Acknowledged"})).ListField("Messages",ko.computed(function(){return i()?["Loading..."]:r()?["Failed to load"]:t.details.Messages}),function(n){return typeof n=="string"?n:FormatDateTime(moment.utc(n.TimeUtc))+(n.Sms?" Sms":"")+(n.Email?" Email":"")+" "+n.User+" "+n.Content}).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodePortConfig=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodePortConfig_Model,t.stateHandler=function(){return new Network_NodePortConfig_State(t)},t.titleHandler=function(){return page.SetTitle("Node Port Configuration",t.viewModel.Name,views.Network_Node.routeHandler(t.viewModel.NetworkId,t.viewModel.NodeAddress),function(){return views.Network_Node.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Network",n,"NodePortConfig",{nodeAddress:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.CanConfigure=function(){return ko.computed(function(){return t.viewModel.IsLive()&&t.viewModel.HasDevice()&&t.viewModel.ConfigurablePorts().length>0&&page.HasCapability(Capability.Network_PortConfigure)})()},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return t.viewModel.DeviceType()&&t.viewModel.DeviceModel()?t.viewModel.DeviceType()+" v"+t.viewModel.DeviceModel():"No Device"}),t.viewModel.DeviceExtAddress,ComputedFormatNodeAddress(t.viewModel.NodeAddress),"Node Address"),new Header_Actions(null,function(){return t.viewModel.DeviceType()&&t.viewModel.DeviceModel()?CopyToClipboard(t.viewModel.DeviceType()+" v"+t.viewModel.DeviceModel()):null},null,null,"Click to copy to clipboard",null,function(){return CopyToClipboard(t.viewModel.DeviceExtAddress)})),new SingleValue_Block("Network",ko.computed(function(){return t.viewModel.IsLinkUp()?"Online":"Offline"}),null,null,ko.computed(function(){return GetStateClass(t.viewModel.IsLinkUp()?TileState.Active:TileState.Faulted)})),new Command_Block("Configure","Configure port with new settings",null,function(){t.viewModel.IsLinkUp()?page.OpenFormDialog(t.CreatePortConfigForm(null)):page.SetMessage("Network is offline")},ko.computed(function(){return t.CanConfigure()}))])]);t.currentConfigurationTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodePortConfigTable",{nodeAddress:t.viewModel.NodeAddress}),"PortIndex",!0,function(n){return page.OpenFormDialog(t.DisplayPortConfigForm(n))},10);t.currentConfigurationTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Created By",!0,!0)).AddColumn(new FilterTableColumnViewModel("PortIndex","Port",!1,!0)).AddColumn(new FilterTableColumnViewModel("PortType","Port Type",!0,!0)).AddColumn(new FilterTableColumnViewModel("CommsSuccess","Result",!1,!0,function(n){return n.CommsSuccess?"Success":"Failed"})).AddColumn(new CommandTableColumnViewModel("Configure","config",function(n){return page.OpenFormDialog(t.CreatePortConfigForm(n))},ko.computed(function(){return t.CanConfigure()}))).AddTitle("Current Configuration");t.configurationHistoryTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodePortConfigHistoryTable",{nodeAddress:t.viewModel.NodeAddress}),"CreatedUtc",!1,function(n){return page.OpenFormDialog(t.DisplayPortConfigForm(n))},25);t.configurationHistoryTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Created By",!0,!0)).AddColumn(new FilterTableColumnViewModel("PortIndex","Port",!1,!0)).AddColumn(new FilterTableColumnViewModel("PortType","Port Type",!0,!0)).AddColumn(new FilterTableColumnViewModel("CommsSuccess","Comms",!1,!0,function(n){return n.CommsSuccess?"Success":"Failed"})).AddColumn(new CommandTableColumnViewModel("Configure","config",function(n){return page.OpenFormDialog(t.CreatePortConfigForm(n))},ko.computed(function(){return t.CanConfigure()}))).AddTitle("Configuration History");page.Add(t.pageCommands);page.Add(t.currentConfigurationTable);page.Add(t.configurationHistoryTable);BaseUpdate(t,[t.configurationHistoryTable,t.currentConfigurationTable])},t.CreatePortConfigForm=function(n){return n==null&&(n={PortIndex:0,PortType:t.viewModel.CommsPortTypes().length>0?t.viewModel.CommsPortTypes()[0]:"",BaudRate:115200,DataBits:8,StopBits:t.viewModel.SerialStopBits().length>0?t.viewModel.SerialStopBits()[0]:"",Parity:t.viewModel.SerialParities().length>0?t.viewModel.SerialParities()[0]:"",LocalAddress:0}),new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"ApplyNodePortConfig",{nodeAddress:t.viewModel.NodeAddress}),"Configure Node Port","Configure",{portIndex:ko.observable(n.PortIndex),portType:ko.observable(n.PortType),baudRate:ko.observable(n.BaudRate),dataBit:ko.observable(n.DataBits),stopBit:ko.observable(n.StopBits),parity:ko.observable(n.Parity),localAddress:ko.observable(n.LocalAddress),reason:ko.observable("")}).SubmitData(function(n){return{portIndex:n.portIndex(),portType:n.portType(),baudRate:n.baudRate(),dataBit:n.dataBit(),stopBit:n.stopBit(),parity:n.parity(),localAddress:n.localAddress(),reason:n.reason()}}).Done(function(){page.Update()}).MultilineTextField("reason","Please supply a reason.",null,!1).DropDownListField("portIndex","Port Index",function(n){return n},function(n){return n},t.viewModel.ConfigurablePorts()).DropDownListField("portType","Comms Port Type",function(n){return n},function(n){return n},t.viewModel.CommsPortTypes()).NumberPresetField("baudRate","Baud Rate",[115200,57600,39400,19200,9600,4800,2400,1200],0).DropDownListField("dataBit","Data Bits",function(n){return n},function(n){return n},[5,6,7,8]).DropDownListField("stopBit","Stop Bits",function(n){return n},function(n){return n},t.viewModel.SerialStopBits()).DropDownListField("parity","Parity",function(n){return n},function(n){return n},t.viewModel.SerialParities()).NumberField("localAddress","Address",0,255,!1).Create()},t.DisplayPortConfigForm=function(n){return new DialogViewModelBuilder(null,"Port Configuration","Close",{}).MessageField("Configured at "+FormatDateTime(moment(ko.unwrap(n.CreatedUtc)))+" by "+ko.unwrap(n.CreatedUser)).DisplayField("Reason",ko.unwrap(n.Reason)).MessageField("Configuration").DisplayField("PortIndex","Port Index: "+ko.unwrap(n.PortIndex)).DisplayField("PortType","Comms Port Type: "+ko.unwrap(n.PortType)).DisplayField("BaudRate","Baud Rate: "+ko.unwrap(n.BaudRate)).DisplayField("DataBits","Data Bits: "+ko.unwrap(n.DataBits)).DisplayField("StopBits","Stop Bits: "+ko.unwrap(n.StopBits)).DisplayField("Parity","Parity: "+ko.unwrap(n.Parity)).DisplayField("Address","Address: "+ko.unwrap(n.LocalAddress)).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeQueryDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodeQueryDetails_Model,t.stateHandler=function(){return new Network_NodeQueryDetails_State(t)},t.titleHandler=function(){return page.SetTitle("Query Node",t.viewModel.Name()==null?"Unknown":t.viewModel.Name(),t.viewModel.Name()==null?views.Network_Details.routeHandler(t.viewModel.NetworkId):views.Network_Node.routeHandler(t.viewModel.NetworkId,t.viewModel.NodeAddress),function(){return t.viewModel.Name()==null?views.Network_Details.Load(t.viewModel.NetworkId):views.Network_Node.Load(t.viewModel.NetworkId,t.viewModel.NodeAddress)})},t.routeHandler=function(n,t){return route.forControllerItemAction("Network",n,"NodeQueryDetails",{nodeAddress:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return t.viewModel.DeviceType()&&t.viewModel.DeviceModel()?t.viewModel.DeviceType()+" v"+t.viewModel.DeviceModel():"No Device"}),t.viewModel.DeviceExtAddress,ComputedFormatNodeAddress(t.viewModel.NodeAddress),"Node Address"),new Header_Actions(null,function(){return t.viewModel.DeviceType()&&t.viewModel.DeviceModel()?CopyToClipboard(t.viewModel.DeviceType()+" v"+t.viewModel.DeviceModel()):null},null,null,"Click to copy to clipboard",null,function(){return CopyToClipboard(t.viewModel.DeviceExtAddress)}))])]);t.nodeDetailsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveQueryNode",{nodeAddress:t.viewModel.NodeAddress}),null,!1,null,50);t.nodeDetailsTable.AddColumn(new FilterTableColumnViewModel("Key","Property",!1,!0)).AddColumn(new FilterTableColumnViewModel("Value","Value",!1,!0)).AddTitle("Network Node Details");t.attachedNodesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"LiveQueryNodeGetAttachedNodes",{nodeAddress:t.viewModel.NodeAddress}),"NodeAddress",!0,function(n){return n.NodeAddress<240?views.Network_Node.Load(t.viewModel.NetworkId,n.NodeAddress):null},10);t.attachedNodesTable.AddColumn(new FilterTableColumnViewModel("NodeAddress","Node Address",!1,!0,function(n){return FormatNodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Ext Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("StatusName","Status",!1,!0)).AddColumn(new CommandTableColumnViewModel("Query Node","command",function(n){return views.Network_NodeQueryDetails.Load(t.viewModel.NetworkId,n.NodeAddress)},page.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return ko.computed(function(){return n.NodeAddress<240})()})).AddTitle("Attached Nodes");page.Add(t.pageCommands);page.Add(t.nodeDetailsTable);page.Add(t.attachedNodesTable);BaseUpdate(t,[t.nodeDetailsTable,t.attachedNodesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_NodeStatusHistory=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_NodeStatusHistory_Model,t.stateHandler=function(){return new Network_NodeStatusHistory_State(t)},t.titleHandler=function(){return page.SetTitle("Status History",t.viewModel.NetworkName,views.Network_Details.routeHandler(t.viewModel.NetworkId),function(){return views.Network_Details.Load(t.viewModel.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"NodeStatusHistory")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.historyTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"NodeStatusHistoryTable"),"DateUtc",!1,function(n){return views.Network_Node.Load(t.viewModel.NetworkId,n.NodeAddress)},25);t.historyTable.AddColumn(new DateFilterTableColumnViewModel("DateUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!1,!0,FormatNodeAddressAndName)).AddColumn(new FilterTableColumnViewModel("PrevStatus","Prev Status",!1,!0)).AddColumn(new FilterTableColumnViewModel("NewStatus","New Status",!1,!0)).AddColumn(new FilterTableColumnViewModel("Reason","Reason",!0,!1,function(n){return n.IncompleteTasksOverride?"Changed with incomplete tasks: "+n.Reason:n.Reason})).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Status History");page.Add(t.historyTable);BaseUpdate(t,[t.historyTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_OverdueSubscribers=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_OverdueSubscribers_Model,t.stateHandler=function(){return new Network_OverdueSubscribers_State(t)},t.titleHandler=function(){return page.SetTitle("Network Overdue Subscribers",t.viewModel.Network.NetworkName,views.Network_Details.routeHandler(t.viewModel.Network.NetworkId),function(){return views.Network_Details.Load(t.viewModel.Network.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"OverdueSubscribers")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text(t.viewModel.Network.NetworkName,"Network Name",t.viewModel.Network.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+FormatLastUpdate(moment.utc(t.viewModel.Network.LastSyncUtc()))})),new Header_Actions(function(){return views.Network_Details.Load(t.viewModel.Network.NetworkId)})),new SingleValue_Block("Status",ko.computed(function(){return t.viewModel.Network.NetworkStatus()}))]),tiles.createTile().addBlockSet([new Command_Block("Add User","Add a new User",t.AddExistingUserForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_AddStatusSubscribers)}))])]);t.subscribersTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"OverdueSubscribersTable"),"UserName",!0,function(n){return views.User_Details.Load(n.UserId)},50);t.subscribersTable.AddColumn(new FilterTableColumnViewModel("Name","User",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveUserForm(n))},page.HasCapability(Capability.Network_RemoveStatusSubscribers))).AddTitle("Overdue Alert Subscribers");page.Add(t.pageCommands);page.Add(t.subscribersTable);BaseUpdate(t,[t.subscribersTable])},t.AddExistingUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"AddOverdueAlertUser"),"Add Overdue Subscriber","Add",{userId:ko.observableArray()}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t.subscribersTable.LoadData()}).MessageField("Select a user to add to this network overdue alert list.").AjaxFilterDropDownListField("userId","User",function(n){return n.Name+" (ID: "+n.UserId+")"},function(n){return n.UserId},route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"AlertUsersWhichCanBeAdded"),!1,null,"Name",5,5).Create()},t.RemoveUserForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"RemoveOverdueAlertUser"),"Remove User","Remove",{userId:ko.observable(n.UserId)}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t.subscribersTable.LoadData()}).MessageField("Are you sure you want to remove the user "+n.Name+" from this overdue alert list?").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Tags=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_Tags_Model,t.stateHandler=function(){return new Network_Tags_State(t)},t.titleHandler=function(){return page.SetTitle("Tags",t.viewModel.Network.NetworkName,views.Network_Details.routeHandler(t.viewModel.Network.NetworkId),function(){return views.Network_Details.Load(t.viewModel.Network.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"Tags")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Attach Tags","Add tags to Network",t.AttachTagsForm,null,page.HasCapabilityComputed(Capability.Tag_Attach))])]);t.tagsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"TagsTable"),"Name",!0,null,25,page.HasCapabilityComputed(Capability.Tag_View));t.tagsTable.AddColumn(new FilterTableColumnViewModel("Name","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("TagValue","Value",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Value","edit",function(n){return page.OpenFormDialog(t.EditTagsForm(n.TagId,n.TagValue))},page.HasCapabilityComputed(Capability.Tag_Update))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return page.OpenFormDialog(t.RemoveTagForm(n.TagId,n.Name,t.viewModel.Network.NetworkName()))},page.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Network Tags");t.historyTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"TagValueHistoryTable"),"CreatedUtc",!1,null,25,page.HasCapabilityComputed(Capability.Tag_View));t.historyTable.AddColumn(new FilterTableColumnViewModel("Tag","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("Value","Value",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Changed By",!0,!0)).AddTitle("Network Tag Value History");page.Add(t.pageCommands);page.Add(t.tagsTable);page.Add(t.historyTable);BaseUpdate(t,[t.tagsTable,t.historyTable])},t.RemoveTagForm=function(n,i,r){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"RemoveTag"),"Remove tag from network","Remove",{confirm:ko.observable(!1)}).SubmitData(function(t){return{tagId:n,confirm:t.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the tag "+i+" from network "+r+"? ").CheckBoxField("confirm","Confirm").Create()},t.AttachTagsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"AttachTag"),"Attach tags to network","Attach",{tagId:ko.observable(0),tagValue:ko.observable("")}).SubmitData(function(n){return{tagId:n.tagId(),tagValue:n.tagValue()}}).Done(function(){page.Update()}).MessageField("Select a tag to add to this network along with its value.").AjaxCompactFilterDropDownListField("tagId","Tag to add",function(n){return n.Name+" (TagId: "+n.TagId+")"},function(n){return n.TagId},route.forControllerActionParams("Tag","NetworkTagsWhichCanBeAdded",{networkId:t.viewModel.Network.NetworkId()}),!1,null,"Name").TextField("tagValue","Value").Create()},t.EditTagsForm=function(n,i){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Network.NetworkId,"UpdateTag"),"Update tag value","Update",{tagValue:ko.observable(i)}).SubmitData(function(t){return{tagId:n,tagValue:t.tagValue()}}).Done(function(){page.Update()}).TextField("tagValue","Value").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_UpdateQueue=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_UpdateQueue_Model,t.stateHandler=function(){return new Network_UpdateQueue_State(t)},t.titleHandler=function(){return page.SetTitle("Updates",t.viewModel.Name,views.Network_Details.routeHandler(t.viewModel.NetworkId),function(){return views.Network_Details.Load(t.viewModel.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"UpdateQueue")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.networkEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdatesTable"),"CreatedUtc",!1,function(n){return page.OpenFormDialog(t.UpdateDetailsForm(n))},25);t.networkEventsTable.AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("Completed","Status",!1,!0,function(n){return n.Completed?n.Cancelled?"Cancelled":n.Succeeded?"Complete":"Failed":"Pending"})).AddColumn(new FilterTableColumnViewModel("Description","Description",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddColumn(new CommandTableColumnViewModel("Cancel","close",function(n){return page.OpenFormDialog(t.CancelUpdateForm(n))},page.HasCapabilityComputed(Capability.Network_CancelUpdate),function(n){return!n.Completed})).AddTitle("Network Updates");page.Add(t.networkEventsTable);BaseUpdate(t,[t.networkEventsTable])},t.UpdateDetailsForm=function(n){var i=ko.observable(!0),r=ko.observable(!1),u=function(n,t){return ko.computed(function(){return i()?n+": Loading...":r()?n+": Failed to load":n+": "+t()})};return page.ViewRequests.push($.ajax(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UpdateDetails"),{data:{networkUpdateId:n.NetworkUpdateId},type:"POST"}).done(function(t){n=t;r(!1);i(!1)}).fail(function(){r(!0);i(!1)})),new DialogViewModelBuilder(undefined,"Update details","Close",{}).MessageField(u("Details",function(){return n.Description})).MessageField(u("Created",function(){return FormatDateTime(moment.utc(n.CreatedUtc))})).MessageField(u("Status",function(){return n.Cancelled?"Cancelled by "+n.CancelledUser:n.Completed?n.Succeeded?"Complete":"Failed":"Pending"})).ListField("Attempts",ko.computed(function(){return i()?["Loading..."]:r()?["Failed to load"]:n.Attempts}),function(n){return typeof n=="string"?n:"Started at "+FormatDateTime(moment.utc(n.StartUtc))+(n.CompletedUtc?" and "+(n.Succeeded?"succeeded":"failed")+" at "+FormatDateTime(moment.utc(n.CompletedUtc)):"")+(n.Message?": "+n.Message:"")}).Create()},t.CancelUpdateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.NetworkId,"CancelNetworkUpdate"),"Cancel Update","Cancel",{}).SubmitData(function(){return{networkUpdateId:n.NetworkUpdateId}}).Done(function(){t.networkEventsTable.LoadData()}).MessageField("Are you sure you want to cancel the following pending update?").MessageField(n.Description).Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Network_Users=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Network_Users_Model,t.stateHandler=function(){return new Network_Users_State(t)},t.titleHandler=function(){return page.SetTitle("Users with Access",t.viewModel.Name,views.Network_Details.routeHandler(t.viewModel.NetworkId),function(){return views.Network_Details.Load(t.viewModel.NetworkId)})},t.routeHandler=function(n){return route.forControllerItemAction("Network",n,"Users")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.usersRolesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Network",t.viewModel.NetworkId,"UsersTable"),"UserName",!0,function(n){return views.User_Details.Load(n.UserId)},50);t.usersRolesTable.AddColumn(new FilterTableColumnViewModel("UserName","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Roles","Roles",!1,!0,function(n){return n.Roles.map(function(n){return n.Name}).join(", ")})).AddTitle("User Access by Role");page.Add(t.usersRolesTable);BaseUpdate(t,[t.usersRolesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),NetworkSubscription_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new NetworkSubscription_Details_Model,t.stateHandler=function(){return new NetworkSubscription_Details_State(t)},t.titleHandler=function(){return page.SetTitle("Subscription Details","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("NetworkSubscription",n,"Details"):route.forControllerItemAction("NetworkSubscription",n,"Details",{groupId:t})},t.LoadView_Subscription=function(n){n.Init();page.ViewRequests.push($.ajax(n.sourceUrl,{data:{},type:"POST"}).done(function(i){(n.loading(!1),page.view()===n)&&IsSuccessResponse(i)&&(page.ClearItems(),BaseUpdateViewModel(n,i,!1),LoadView_Process(n),t.viewModel.Subscription.NetworkSubscriptionId()!==t.viewModel.RequestedSubscriptionId()&&history.replaceState(t.stateHandler(),"",t.routeHandler(t.viewModel.Subscription.NetworkSubscriptionId,t.viewModel.GroupId)))}))},t.UrlLoad=function(){t.sourceUrl=window.location.href;t.LoadView_Subscription(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&t.LoadView_Subscription(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text(t.viewModel.Subscription.NetworkName,"Network Name",t.viewModel.Subscription.CustomerName,"Customer")),new Command_Block("View","View network details",null,function(){return views.Network_Details.Load(t.viewModel.Subscription.NetworkId())}),new Command_Block("Billing Entity","Change billing entity",t.ChangeBillingEntity,null,page.HasCapabilityComputed(Capability.NetworkSubscriptions_Create))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Network Subscription"),new SingleValue_Block("Expires",ko.computed(function(){return FormatDueDate(moment(t.viewModel.Subscription.EndLocal()))+(t.viewModel.Subscription.Expired()?"(Expired)":"")})),new SingleValue_Block("Subscription",FormatCurrency(t.viewModel.Subscription.Fee())),new SingleValue_Block("Cancelled",FormatDueDate(moment(t.viewModel.Subscription.CancelledUtc())),ko.computed(function(){return t.viewModel.Subscription.IsCancelled()})),new SingleValue_Block("Cancelled By",t.viewModel.Subscription.CancelledByUser(),ko.computed(function(){return t.viewModel.Subscription.IsCancelled()})),new Command_Block("Renew","Renew expired subscription",t.RenewSubscriptionForm,null,ko.computed(function(){return t.viewModel.Subscription.Expired()&&page.HasCapability(Capability.NetworkSubscriptions_Renew)})),new Command_Block("Cancel","Cancel subscription",t.CancelSubscriptionForm,null,ko.computed(function(){return!t.viewModel.Subscription.IsCancelled()&&page.HasCapability(Capability.NetworkSubscriptions_Cancel)})),new Command_Block("Create","Create subscription for network",function(){return t.CreateNetworkSubscriptionForm(t.viewModel.Subscription.NetworkId)},null,ko.computed(function(){return t.viewModel.Subscription.NetworkSubscriptionId()==null&&page.HasCapability(Capability.NetworkSubscriptions_Create)}))]).setState(ko.computed(function(){return t.viewModel.Subscription.IsCancelled()?TileState.Faulted:t.viewModel.Subscription.Expired()?TileState.Warning:TileState.Active})),tiles.createTile().addBlockSet([new SmallHeader_Block("Xero Invoice"),new SingleValue_Block("Invoiced",FormatDateOnly(moment(t.viewModel.Subscription.XeroInvoicedUtc()))),new SingleValue_Block("Payment",t.viewModel.Subscription.XeroInvoiceIsPaid()?"PAID":"UNPAID"),new Command_Block("Download","Download invoice",t.DownloadInvoiceForm)]).setEnabled(ko.computed(function(){return t.viewModel.Subscription.XeroInvoiceGuid()!=null&&t.viewModel.Subscription.XeroInvoiceGuid()!=="00000000-0000-0000-0000-000000000000"}))]);t.subscriptionHistoryTable=new AjaxFilterTableViewModel(ko.computed(function(){return route.forControllerItemAction("NetworkSubscription",t.viewModel.Subscription.NetworkSubscriptionId,"SubscriptionHistoryTable",{networkId:t.viewModel.Subscription.NetworkId})}),"CreatedUtc",!1,null,25);t.subscriptionHistoryTable.AddColumn(new FilterTableColumnViewModel("CompanyName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUtc","Created",!1,!0,function(n){return FormatDueDate(moment(n.CreatedUtc))})).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!0,!0)).AddColumn(new FilterTableColumnViewModel("AnnualSubscription","Fee",!0,!1,function(n){return FormatCurrency(n.AnnualSubscription)})).AddColumn(new FilterTableColumnViewModel("EndLocal","End",!1,!0,function(n){return FormatDueDate(moment(n.EndLocal))})).AddColumn(new FilterTableColumnViewModel("CancelledUtc","Cancelled",!1,!0,function(n){return n.CancelledUtc!=null?FormatDueDate(moment(n.CancelledUtc)):""})).AddTitle("Subscription History");page.Add(t.pageCommands);page.Add(t.subscriptionHistoryTable);BaseUpdate(t,[t.subscriptionHistoryTable])},t.RenewSubscriptionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("NetworkSubscription",t.viewModel.Subscription.NetworkSubscriptionId,"RenewSubscription"),"Renew Subscription","Renew",{fee:ko.observable(t.viewModel.Subscription.Fee()),endLocal:ko.observable(FormatDueDate(moment(t.viewModel.Subscription.EndLocal()).add("year",1)))}).SubmitData(function(n){return{fee:n.fee(),endLocal:n.endLocal()}}).Done(function(n,i){views.NetworkSubscription_Details.Load(i.NetworkSubscriptionId,t.viewModel.GroupId)}).MessageField("Are you sure you want to renew this subscription?.").NumberField("fee","Subscription Fee",0,null,!1).DateField("endLocal","End Date").Create()},t.CreateNetworkSubscriptionForm=function(n,t){var i={fee:ko.observable(0),endLocal:ko.observable(moment().date(1).add("months",13).subtract("days",1).format("YYYY-MM-DD")),groupId:ko.observable(0),billingEntityId:ko.observable(0),confirm:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerAction("Group","CreateNetworkSubscription"),"Create Network Subscription","Create",i).SubmitData(function(t){return{id:t.groupId(),networkId:ko.unwrap(n),fee:t.fee(),endLocal:t.endLocal(),billingEntityId:t.billingEntityId()}}).Done(function(n,i){typeof t=="function"?t():views.NetworkSubscription_Details.Load(i.NetworkSubscriptionId,null)}).AjaxFilterDropDownListField("groupId","Subscription Group",function(n){return n.Name+" ("+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),!1,null,"Name").AjaxFilterDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},route.forControllerAction("BillingEntity","AvailableBillingEntities"),!1,null,"CompanyName").NumberField("fee","Annual Subscription Fee",0,null,!1).DateField("endLocal","Expiry Date").Create()},t.ChangeBillingEntity=function(){return new DialogViewModelBuilder(route.forControllerItemAction("NetworkSubscription",t.viewModel.Subscription.NetworkSubscriptionId,"UpdateBillingEntity"),"Change Billing Entity","Update",{billingEntityId:ko.observable(t.viewModel.Subscription.BillingEntityId())}).SubmitData(function(n){return{billingEntityId:n.billingEntityId()}}).Done(function(n,i){views.NetworkSubscription_Details.Load(i.NetworkSubscriptionId,t.viewModel.GroupId)}).AjaxDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},route.forControllerAction("BillingEntity","AvailableBillingEntities"),!1,{BillingEntityId:t.viewModel.Subscription.BillingEntityId}).Create()},t.CancelSubscriptionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("NetworkSubscription",t.viewModel.Subscription.NetworkSubscriptionId,"CancelSubscription"),"Cancel Subscription","Cancel",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to cancel this subscription?.").CheckBoxField("confirm","Confirm cancellation of subscription").Create()},t.DownloadInvoiceForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("NetworkSubscription",t.viewModel.Subscription.NetworkSubscriptionId,"DownloadPDFInvoiceFromXero"),"Download Invoice from Xero","Download",null).SubmitData(function(){return{}}).CreateDownload()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),PurchaseOrder_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new PurchaseOrder_Details_Model,t.stateHandler=function(){return new PurchaseOrder_Details_State(t)},t.titleHandler=function(){return t.viewModel.PurchaseOrder.BillingEntityId()==null||t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.PurchaseOrder.ReferenceNumber,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.PurchaseOrder.ReferenceNumber,t.viewModel.PurchaseOrder.BillingEntity,views.BillingEntity_Details.routeHandler(t.viewModel.PurchaseOrder.BillingEntityId,t.viewModel.GroupId),function(){return views.BillingEntity_Details.Load(t.viewModel.PurchaseOrder.BillingEntityId,t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("PurchaseOrder",n,"Details"):route.forControllerItemAction("PurchaseOrder",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.orderFilled=ko.observable(!1);t.isOpenPackingList=ko.observable(!1);t.purchaseOrderItemsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"ItemsTable",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId}),"",!0,function(n){return page.HasCapability(Capability.PurchaseOrder_Edit)&&t.viewModel.PurchaseOrder.CompletedById()==null?page.OpenFormDialog(t.UpdateOrderItemsForm(n)):page.OpenFormDialog(t.ViewOrderItemDetailForm(n))},25);t.purchaseOrderItemsTable.AddColumn(new FilterTableColumnViewModel("ItemName","Item",!1,!0)).AddColumn(new FilterTableColumnViewModel("Notes","Notes",!0,!0)).AddColumn(new FilterTableColumnViewModel("Quantity","Ordered",!1,!0)).AddColumn(new FilterTableColumnViewModel("Supplied","Supplied",!0,!0)).AddColumn(new FilterTableColumnViewModel("BackOrdered","Pending",!1,!0)).AddColumn(new CommandTableColumnViewModel("View source group","group",function(){return views.Group_Devices.Load(t.viewModel.PurchaseOrder.SourceGroupId)})).AddColumn(new FilterTableColumnViewModel("CountInSourceGroup","In Stock",!0,!0,null,function(){return page.HasCapability(Capability.PurchaseOrder_CanPickStockItems)})).AddColumn(new DueByDateFilterTableColumnViewModel("ExpectedDateUtc","Expected",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return page.OpenFormDialog(t.UpdateOrderItemsForm(n))},ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Edit)&&t.viewModel.PurchaseOrder.CompletedById()==null}))).AddColumn(new CommandTableColumnViewModel("Set Expected Date","event",function(n){return page.OpenFormDialog(t.UpdateExpectedDateForm(n))},ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Acknowledge)&&t.viewModel.PurchaseOrder.CompletedById()!=null}))).AddColumn(new CommandTableColumnViewModel("Remove Device","delete",function(n){return page.OpenFormDialog(t.RemoveDeviceFromPurchaseOrderForm(n))},ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Edit)&&t.viewModel.PurchaseOrder.CompletedById()==null}))).AddTitle("Ordered Items");t.openPackingListTable=new AjaxFilterTableViewModel(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"OpenPackingListTable",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId}),"",!0,function(n){return n.RequiresSerial?page.OpenFormDialog(t.ViewSerialNumbersForm(n)):null},25);t.openPackingListTable.AddColumn(new FilterTableColumnViewModel("ItemName","Item",!1,!0)).AddColumn(new FilterTableColumnViewModel("Supplied","Supplied",!1,!0)).AddColumn(new FilterTableColumnViewModel("Serials","Serials",!1,!0,function(n){var t="";return n.RequiresSerial===!1&&n.RequiresNonDeviceSerial===!1?"Not Required":(n.Serials.length>0&&n.Serials.length<4?n.Serials.forEach(function(n){return t+=n+", "}):n.Serials.length>3&&(n.Serials.forEach(function(n,i){return i<3?t+=n+", ":""}),t+=" + "+(n.Serials.length-3)+" more. "),t.substr(0,t.length-2))})).AddColumn(new CommandTableColumnViewModel("Remove Item","delete",function(n){return page.OpenFormDialog(n.RequiresSerial?t.RemoveSerialItemsFromPackingListForm(n):n.RequiresNonDeviceSerial?t.RemoveNonDeviceSerialItemsFromPackingListForm(n):t.RemoveItemsFromPackingListForm(n))},page.HasCapabilityComputed(Capability.PurchaseOrder_EditPackingSlip))).AddTitle("Current Packing List");t.packingListTable=new AjaxFilterTableViewModel(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"PackingListsTable",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId}),"DispatchedUtc",!1,function(n){return views.PurchaseOrder_PackingListDetails.Load(t.viewModel.PurchaseOrder.PurchaseOrderId,n.PackingListId,t.viewModel.GroupId)},25);t.packingListTable.AddColumn(new DateFilterTableColumnViewModel("DispatchedUtc","Date Dispatched",!1,!0)).AddColumn(new FilterTableColumnViewModel("DispatchedBy","Dispatched By",!0,!0)).AddColumn(new FilterTableColumnViewModel("ItemCount","Items Packed",!1,!1)).AddColumn(new FilterTableColumnViewModel("Status","Shipping Status",!1,!0,function(n){return n.ReceiptedUtc==null?"Dispatched":"Received"})).AddColumn(new FilterTableColumnViewModel("InvoiceStatus","Invoice Status",!0,!0)).AddTitle("Completed Packing Lists");t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("purchase-order",new Header_Text(t.viewModel.PurchaseOrder.ReferenceNumber,"Purchase Order Reference")),new SingleValue_Block("Created",FormatDateTime(moment.utc(t.viewModel.PurchaseOrder.CreatedUtc()))),new SingleValue_Block("Created By",t.viewModel.PurchaseOrder.CreatedBy),new Command_Block("Source",t.viewModel.PurchaseOrder.SourceGroup,null,function(){return views.Group_Details.Load(t.viewModel.PurchaseOrder.SourceGroupId)}),new Command_Block("Complete","Mark purchase order as completed",t.CompletePurchaseOrderForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Create)&&t.viewModel.PurchaseOrder.CompletedById()===null&&t.purchaseOrderItemsTable.data().length>0})),new Command_Block("Revoke","Revoke completion",t.RevokeCompletionPurchaseOrderForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_RevokeCompletion)&&t.viewModel.PurchaseOrder.CompletedById()!=null&&t.purchaseOrderItemsTable.data().length>0})),new Command_Block("Acknowledge","Mark order as acknowledged",t.AcknowledgePurchaseOrderForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Acknowledge)&&t.viewModel.PurchaseOrder.AcknowledgedById()==null&&t.viewModel.PurchaseOrder.CompletedById()!==null}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Order Items"),new Command_Block("Add Item(s)","Add items to purchase order",t.AddOrderItemTypesForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Edit)&&t.viewModel.PurchaseOrder.CompletedById()===null})),new SingleValue_Block("Completed",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.PurchaseOrder.CompletedUtc()))}),ko.computed(function(){return t.viewModel.PurchaseOrder.CompletedById()!=null})),new SingleValue_Block("Completed By",t.viewModel.PurchaseOrder.CompletedByUser,ko.computed(function(){return t.viewModel.PurchaseOrder.CompletedById()!=null})),new SingleValue_Block("Acknowledged",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.PurchaseOrder.AcknowledgedUtc()))}),ko.computed(function(){return t.viewModel.PurchaseOrder.AcknowledgedById()!=null})),new SingleValue_Block("Acknowledged By",t.viewModel.PurchaseOrder.AcknowledgedByUser,ko.computed(function(){return t.viewModel.PurchaseOrder.AcknowledgedById()!=null}))])]);t.noteHeader=new HeaderPageItem("Order Notes","edit","Edit Notes",function(){return page.OpenFormDialog(t.EditNotesForm())},ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Edit)&&t.viewModel.PurchaseOrder.CompletedById()===null}));t.orderCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Packing Lists"),new Command_Block("Scan","Scan items into packing list",t.AddSerialDeviceItemForm,null,ko.computed(function(){return t.viewModel.PurchaseOrder.ContainsSerialCostItems()&&!t.orderFilled()})),new Command_Block("Add","Add serial number to non device items",t.AddNonDeviceSerialItemForm,null,ko.computed(function(){return t.viewModel.PurchaseOrder.ContainsNonDeviceSerialCostItems()&&!t.orderFilled()})),new Command_Block("Pick","Add items into packing list",t.AddNonSerialedItemsForm,null,ko.computed(function(){return!t.orderFilled()&&t.viewModel.PurchaseOrder.ContainsNonSerialCostItems()})),new Command_Block("Complete","Packing List Completed",t.CompletePackingListForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_Authorise)&&(t.isOpenPackingList()||t.viewModel.PurchaseOrder.AcknowledgedById()!=null&&t.viewModel.PurchaseOrder.CompletedById()!=null&&t.isOpenPackingList()&&t.openPackingListTable.data().length>0)}))]).setEnabled(ko.computed(function(){return t.viewModel.PurchaseOrder.CompletedUtc()!=null&&t.viewModel.PurchaseOrder.AcknowledgedUtc()!=null&&page.HasCapability(Capability.PurchaseOrder_Authorise)}))]);ko.computed(function(){var n=0;t.purchaseOrderItemsTable.data().forEach(function(t){t.Quantity!==t.Supplied&&n++});t.orderFilled(n===0);t.isOpenPackingList(t.openPackingListTable.data().length>0)});var n=new commonmark.Parser,i=new commonmark.HtmlRenderer;t.markdown=new HtmlMessagePageItem(ko.computed(function(){return i.render(n.parse(t.viewModel.PurchaseOrder.Notes()))}));page.Add(t.pageCommands);page.Add(t.noteHeader);page.Add(t.markdown);page.Add(t.purchaseOrderItemsTable);page.Add(t.orderCommands);page.Add(t.openPackingListTable);page.Add(t.packingListTable);BaseUpdate(t,[t.purchaseOrderItemsTable,t.openPackingListTable,t.packingListTable])},t.AddOrderItemTypesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"AddItem",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Add items to order","Add  & Continue",{quantity:ko.observable(1),costItemId:ko.observable(0),notes:ko.observable("")}).SubmitData(function(n){return{quantity:n.quantity(),costItemId:n.costItemId(),notes:n.notes()}}).Done(function(){t.purchaseOrderItemsTable.LoadData()}).IntNumberField("quantity","Quantity",1,999999).MessageField("Please note, this quantity will be applied to all items you select from the list below.  If you require different quantities for different items, please do them individually.").AjaxFilterDropDownListField("costItemId","Order-able Items",function(n){return n.ItemDesc!==null&&n.ItemDesc!==""?n.ItemName+" ("+n.ItemDesc+")":n.ItemName},function(n){return n.CostItemId},route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"CostItemsWhichCanBeAdded",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId}),!1,null,"ItemName",null,10,!0).MultilineTextField("notes","Notes",null,!0,!0).CreateMulti()},t.UpdateOrderItemsForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"UpdateOrderItem",{purchaseOrderItemId:n.PurchaseOrderItemId,billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Update order items","Update",{quantity:ko.observable(n.Quantity),notes:ko.observable(n.Notes),expectedUtc:ko.observable(n.ExpectedDateUtc)}).SubmitData(function(n){return{quantity:n.quantity(),notes:n.notes(),expectedUtc:n.expectedUtc()}}).Done(function(){t.purchaseOrderItemsTable.LoadData()}).DisplayField("ItemName",n.ItemName).DisplayField("ItemDescription",n.ItemDescription).DisplayField("PriceEstimate","Unit Price $"+n.PriceEstimate.toFixed(2)).IntNumberField("quantity","Quantity",1,999999).MultilineTextField("notes","Notes",null,!0,!0).Create()},t.ViewOrderItemDetailForm=function(n){return new DialogViewModelBuilder(null,"Serial Number added to item","Close",null).DisplayField("ItemName",n.ItemName).DisplayField("ItemDescription",n.ItemDescription).DisplayField("PriceEstimate","Unit Price $"+n.PriceEstimate.toFixed(2)).DisplayField("Quantity","Quantity: "+n.Quantity).DisplayField("Notes","Notes: "+n.Notes).Create()},t.UpdateExpectedDateForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"UpdateOrderItem",{purchaseOrderItemId:n.PurchaseOrderItemId,billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Set Expected Date","Set Date",{quantity:ko.observable(n.Quantity),notes:ko.observable(n.Notes),expectedDateUtc:ko.observable(n.ExpectedDateUtc!=null?moment(n.ExpectedDateUtc).format("YYYY-MM-DD"):null)}).SubmitData(function(n){return{quantity:n.quantity(),notes:n.notes(),expectedDateUtc:moment(n.expectedDateUtc()).utc().toISOString()}}).Done(function(){t.purchaseOrderItemsTable.LoadData()}).DateField("expectedDateUtc","Expected Date").Create()},t.RemoveDeviceFromPurchaseOrderForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"DeleteItem",{purchaseOrderItemId:n.PurchaseOrderItemId,billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Delete item from Purchase Order","Delete",{}).SubmitData(function(){}).Done(function(){t.purchaseOrderItemsTable.LoadData()}).MessageField("Are you sure you want to delete this item from the purchase order?").Create()},t.CompletePackingListForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"CompletePackingList",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Complete Packing List","Update",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(n,i){views.PurchaseOrder_PackingListDetails.Load(t.viewModel.PurchaseOrder.PurchaseOrderId,i.PackingListId,t.viewModel.GroupId)}).MessageField("Completing the packing list is in irreversible action.  Please confirm this is what you want to do").CheckBoxField("confirm","Confirm Completion").Create()},t.CompletePurchaseOrderForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"Complete",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Complete Purchase Order","Completed",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("This order must be marked as completed before it will be acknowledged and processed.  Only mark it as completed when it is ready for processing.").Create()},t.RevokeCompletionPurchaseOrderForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"RevokeCompletion",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId()}),"Revoke Purchase Order","Revoke",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Revoking completion on this order will enable the client to edit this purchase order.").CheckBoxField("confirm","Confirm revocation").Create()},t.AcknowledgePurchaseOrderForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"Acknowledge"),"Complete Purchase Order","Completed",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Acknowledge order and begin processing.").Create()},t.ViewSerialNumbersForm=function(n){return new DialogViewModelBuilder(null,"Item Serial Numbers","Close",null).ListField("Serial Number",n.Serials,function(n){return n.toUpperCase()}).Create()},t.RemoveSerialItemsFromPackingListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"RemoveSerialNumbersFromPackingList"),"Remove item(s) from packing list","Remove",{serialNumbers:ko.observableArray([])}).SubmitData(function(n){return{serialNumbers:n.serialNumbers()}}).Done(function(){page.Update()}).MessageField("Select "+n.ItemName+" serial numbers to remove").MultiSelectListField("serialNumbers","Select items to remove (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.Value},n.Serials.map(function(n){return{Name:n,Value:n}}),25,!0).Create()},t.RemoveNonDeviceSerialItemsFromPackingListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"RemoveNonDeviceSerialNumbersFromPackingList"),"Remove item(s) from packing list","Remove",{serialNumbers:ko.observableArray([])}).SubmitData(function(n){return{serialNumbers:n.serialNumbers()}}).Done(function(){page.Update()}).MessageField("Select "+n.ItemName+" serial numbers to remove").MultiSelectListField("serialNumbers","Select items to remove (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.Value},n.Serials.map(function(n){return{Name:n,Value:n}}),25,!0).Create()},t.RemoveItemsFromPackingListForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"RemoveNonSerialItemsFromPackingList",{purchaseOrderItemId:n.PurchaseOrderItemId}),"Remove item(s) from packing list","Remove",{quantity:ko.observable(0)}).SubmitData(function(n){return{quantity:n.quantity()}}).Done(function(){page.Update()}).MessageField("Select the quantity of "+n.ItemName+" to remove").IntNumberField("quantity","Quantity",1,n.Supplied,!1).Create()},t.AddNonDeviceSerialItemForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"AddNonDeviceSerialItemToOpenPackingList"),"Add item(s) to packing list","Add Item(s)",{serialNumber:ko.observable(),costItemId:ko.observable(0)}).SubmitData(function(n){return{serialNumber:n.serialNumber(),costItemId:n.costItemId()}}).Done(function(n){n.serialNumber("");page.Update();t.openPackingListTable.LoadData()}).AjaxFilterDropDownListField("costItemId","Order Item",function(n){return n.ItemName},function(n){return n.CostItemId},route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"GetNonDeviceCostItemsRequiringSerial"),!1,null,"ItemName").TextField("serialNumber","Scan or enter serial",null,!0,!0,!0).CreateMulti()},t.AddSerialDeviceItemForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"AddSerialDeviceToOpenPackingList"),"Add item(s) to packing list","Add Item(s)",{serialNumber:ko.observable()}).SubmitData(function(n){return{serialNumber:n.serialNumber()}}).Done(function(n){n.serialNumber("");page.Update()}).TextField("serialNumber","Scan barcode to add",null,!0,!0,!0).CreateMulti()},t.AddNonSerialedItemsForm=function(){var n=[];return t.purchaseOrderItemsTable.data().forEach(function(t){return t.RequiresSerial?null:t.BackOrdered>0?n.push(t):null}),new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"AddNonSerialDeviceToOpenPackingList"),"Add item(s) to packing list","Add Item(s)",{orderItems:ko.observableArray(n)}).SubmitData(function(n){var t=[];return n.orderItems().forEach(function(n){t.push({PurchaseOrderItemId:n.PurchaseOrderItemId,Quantity:n.BackOrdered,UnitPrice:n.UnitPrice})}),{orderItems:t}}).Done(function(){t.openPackingListTable.LoadData();page.Update()}).MessageField("Select items to add from list below").PackingListField("Items to be added to packing list",n).Create()},t.EditNotesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("PurchaseOrder",t.viewModel.PurchaseOrder.PurchaseOrderId,"EditOrderNotes",{billingEntityId:t.viewModel.PurchaseOrder.BillingEntityId}),"Edit Order Notes","Save",{orderNotes:ko.observable(t.viewModel.PurchaseOrder.Notes())}).SubmitData(function(n){return{orderNotes:n.orderNotes()}}).Done(function(){page.Update()}).MultilineTextField("orderNotes","Notes  (markdown enabled)").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),PurchaseOrder_PackingListDetails=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new PurchaseOrder_PackingListDetails_Model,t.stateHandler=function(){return new PurchaseOrder_PackingListDetails_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.PackingList.PurchaseOrderReference()+" - Packing List","Purchase Order",views.PurchaseOrder_Details.routeHandler(t.viewModel.PackingList.PurchaseOrderId,t.viewModel.GroupId),function(){return views.PurchaseOrder_Details.Load(t.viewModel.PackingList.PurchaseOrderId,t.viewModel.GroupId)})},t.routeHandler=function(n,t,i){return ko.unwrap(i)==null?route.forControllerItemAction("PurchaseOrder",n,"PackingListDetails",{packingListId:t}):route.forControllerItemAction("PurchaseOrder",n,"PackingListDetails",{packingListId:t,groupId:i})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r){(t.sourceUrl=t.routeHandler(n,i,r),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.hasAssignedSerials=ko.observable(!1);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Purchase Order"),new SingleValue_Block("Reference",t.viewModel.PackingList.PurchaseOrderReference),new SingleValue_Block("Created",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.PackingList.PurchaseOrderCreatedUtc()))}))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Delivery Address"),new SingleValue_Block("Address",t.viewModel.PackingList.AddressDetails.Address),new SingleValue_Block("City",t.viewModel.PackingList.AddressDetails.City),new SingleValue_Block("State/Province",t.viewModel.PackingList.AddressDetails.StateProvince),new SingleValue_Block("Post Code",t.viewModel.PackingList.AddressDetails.Code),new SingleValue_Block("Country",t.viewModel.PackingList.AddressDetails.Country)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Packing List"),new SingleValue_Block("Dispatched",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.PackingList.DispatchedUtc()))}),ko.computed(function(){return t.viewModel.PackingList.DispatchedUtc()!=null})),new SingleValue_Block("Dispatched By",t.viewModel.PackingList.DispatchedBy,ko.computed(function(){return t.viewModel.PackingList.DispatchedUtc()!=null})),new Command_Block("Tracking","Add tracking to order",t.AddTrackingForm,null,ko.computed(function(){return t.viewModel.PackingList.XeroInvoiceGuid()==null&&page.HasCapability(Capability.PurchaseOrder_Authorise)})),new Command_Block("Packing","Print packing slip",null,function(){return window.open(route.forControllerItemAction("PurchaseOrder",t.viewModel.PackingList.PurchaseOrderId,"PrintPackingSlip",{packingListId:t.viewModel.PackingList.PackingListId}),"_blank")},page.HasCapabilityComputed(Capability.PurchaseOrder_Authorise)),new Command_Block("Shipping","Print shipping label",null,function(){return window.open(route.forControllerItemAction("PurchaseOrder",t.viewModel.PackingList.PurchaseOrderId,"PrintShippingLabel",{packingListId:t.viewModel.PackingList.PackingListId}),"_blank")},page.HasCapabilityComputed(Capability.PurchaseOrder_Authorise))]),tiles.createTile().addBlockSet([new SmallHeader_Block("Invoicing",page.HasCapabilityComputed(Capability.PurchaseOrder_CreateInvoice)),new Command_Block("Create","Create Invoice",t.CreateInvoiceInXeroForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_CreateInvoice)&&t.viewModel.PackingList.XeroInvoiceGuid()==null&&t.viewModel.Invoiceable()&&t.viewModel.PackingList.DispatchedUtc!=null}))]).setEnabled(ko.computed(function(){return t.viewModel.PackingList.XeroInvoiceGuid()==null&&page.HasCapability(Capability.PurchaseOrder_ViewInvoice)})),tiles.createTile().addBlockSet([new SmallHeader_Block("Invoice Details"),new SingleValue_Block("Invoice #",t.viewModel.PackingList.XeroInvoiceNumber),new SingleValue_Block("Created",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.PackingList.InvoicedUtc()))})),new SingleValue_Block("Billing Entity",t.viewModel.PackingList.BillingEntity),new SingleValue_Block("Invoice Status",t.viewModel.PackingList.XeroInvoiceStatus),new Command_Block("Download","Download invoice",t.DownloadInvoiceForm,null,ko.computed(function(){return t.viewModel.PackingList.CanDownloadInvoice()&&page.HasCapability(Capability.PurchaseOrder_ViewInvoice)}))]).setEnabled(ko.computed(function(){return t.viewModel.PackingList.XeroInvoiceGuid()!=null&&page.HasCapability(Capability.PurchaseOrder_ViewInvoice)})),tiles.createTile().addBlockSet([new SmallHeader_Block("Delivery Receipt"),new SingleValue_Block("Received",ko.computed(function(){return FormatDateTime(moment.utc(t.viewModel.PackingList.ReceiptedUtc()))}),ko.computed(function(){return t.viewModel.PackingList.ReceiptedUtc()!=null})),new SingleValue_Block("Received By",ko.computed(function(){return t.viewModel.PackingList.ReceiptedBy()}),ko.computed(function(){return t.viewModel.PackingList.ReceiptedUtc()!=null})),new Command_Block("Receive","Mark order as received",t.ReceiveOrderForm,null,ko.computed(function(){return page.HasCapability(Capability.PurchaseOrder_AcknowledgeReceipt)&&t.viewModel.PackingList.DispatchedUtc()!=null&&t.viewModel.PackingList.ReceiptedUtc()==null}))]).setState(ko.computed(function(){return t.viewModel.PackingList.ReceiptedUtc()==null?TileState.Warning:TileState.Idle})).setEnabled(ko.computed(function(){return t.viewModel.PackingList.InvoicedUtc()!=null}))]);t.deliveryNoteCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block("Packing List Notes",ko.computed(function(){return t.viewModel.PackingList.DeliveryNotes()!==""||page.HasCapability(Capability.PurchaseOrder_Authorise)})),new Command_Block("Edit","Edit packing list notes",t.EditDeliveryNotesForm,null,page.HasCapabilityComputed(Capability.PurchaseOrder_EditPackingSlip))])]);t.packingListTable=new AjaxFilterTableViewModel(route.forControllerItemAction("PurchaseOrder",t.viewModel.PackingList.PurchaseOrderId,"PackingListItemsTable",{packingListId:t.viewModel.PackingList.PackingListId,billingEntityId:t.viewModel.PackingList.BillingEntityId}),null,!1,function(n){return n.RequiresSerial?page.OpenFormDialog(t.ViewSerialNumbersForm(n)):null},25);t.packingListTable.AddColumn(new FilterTableColumnViewModel("Quantity","Qty",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemName","Item",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemDescription","Descr",!0,!0)).AddColumn(new FilterTableColumnViewModel("Notes","Notes",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("PriceEstimate","Unit Price",!1,!0,function(n){return n.PriceEstimate===n.UnitPrice?FormatCurrency(n.PriceEstimate):FormatCurrency(n.UnitPrice)+" (was "+FormatCurrency(n.PriceEstimate)+")"},page.HasCapabilityComputed(Capability.PurchaseOrder_CreateInvoice))).AddColumn(new FilterTableColumnViewModel("Serials","Serials",!1,!0,function(n){return n.Serials!=null&&n.Serials.length>0?n.Serials.length:n.RequiresSerial===!0?"Serials Required":"Not Required"})).AddColumn(new CommandTableColumnViewModel("Edit Pricing","edit",function(n){return page.OpenFormDialog(t.EditPricingForm(n))},ko.computed(function(){return t.viewModel.PackingList.XeroInvoiceGuid()==null&&page.HasCapability(Capability.PurchaseOrder_CreateInvoice)}))).AddTitle("Packing List Items");t.trackingListTable=new AjaxFilterTableViewModel(route.forControllerItemAction("PurchaseOrder",t.viewModel.PackingList.PurchaseOrderId,"FreightTrackingTable",{packingListId:t.viewModel.PackingList.PackingListId,billingEntityId:t.viewModel.PackingList.BillingEntityId}),null,!1,null,25);t.trackingListTable.AddColumn(new FilterTableColumnViewModel("FreightProvider","Freight Provider",!1,!0)).AddColumn(new HyperlinkTextTableColumnViewModel("TrackingNumber","Tracking Number",function(n){return n.TrackingNumber!=null&&n.TrackingNumber!==""&&n.TrackingUrl!=null&&n.TrackingUrl!==""?n.TrackingNumber:n.FreightProvider!=null?n.FreightProvider+": "+n.TrackingNumber:n.TrackingNumber},function(n){return n.TrackingUrl})).AddColumn(new FilterTableColumnViewModel("FreightCost","Freight Price",!1,!0,function(n){return FormatCurrency(n.FreightCost)},page.HasCapabilityComputed(Capability.PurchaseOrder_ViewInvoice))).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return page.OpenFormDialog(t.EditTrackingForm(n))},ko.computed(function(){return t.viewModel.PackingList.XeroInvoiceGuid()==null&&page.HasCapability(Capability.PurchaseOrder_CreateInvoice)}))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return page.OpenFormDialog(t.DeleteTrackingForm(n))},ko.computed(function(){return t.viewModel.PackingList.XeroInvoiceGuid()==null&&page.HasCapability(Capability.PurchaseOrder_CreateInvoice)}))).AddTitle("Tracking Numbers");t.hasAssignedSerials=ko.computed(function(){var n=0,i=0,r;return t.packingListTable.data().forEach(function(t){n+=t.RequiresSerial?t.Quantity:0;i+=t.Serials.length}),r=n-i,r===0});var n=new commonmark.Parser,i=new commonmark.HtmlRenderer;t.markdown=new HtmlMessagePageItem(ko.computed(function(){return i.render(n.parse(t.viewModel.PackingList.DeliveryNotes()))}));page.Add(t.pageCommands);page.Add(t.deliveryNoteCommands);page.Add(t.markdown);page.Add(t.packingListTable);page.Add(t.trackingListTable);BaseUpdate(t,[t.packingListTable,t.trackingListTable])},t.AddTrackingForm=function(){return new DialogViewModelBuilder(route.forControllerAction("PurchaseOrder","UpdatePackingListAddTracking"),"Add Tracking info to Packing Slip","Save",{trackingNumber:ko.observable(""),freightProviderId:ko.observable(null),freightCost:ko.observable(0)}).SubmitData(function(n){return{packingListId:t.viewModel.PackingList.PackingListId(),trackingNumber:n.trackingNumber(),freightProviderId:n.freightProviderId(),freightCost:n.freightCost()}}).Done(function(){page.Update()}).MessageField("Tracking Info").TextField("trackingNumber","Tracking Number").AjaxFilterDropDownListField("freightProviderId","Freight Provider",function(n){return n.FreightProviderName},function(n){return n.FreightProviderId},route.forControllerAction("PurchaseOrder","AvailableFreightProviders"),!1,null,"FreightProviderName").NumberField("freightCost","Cost",0,1e3,!1).Create()},t.ReceiveOrderForm=function(){return new DialogViewModelBuilder(route.forControllerActionParams("PurchaseOrder","UpdatePackingListReceipted",{packingListId:t.viewModel.PackingList.PackingListId}),"Receive Order","Confirm",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Click confirm to mark this order as received.").Create()},t.EditDeliveryNotesForm=function(){return new DialogViewModelBuilder(route.forControllerAction("PurchaseOrder","UpdatePackingListDeliveryNotes"),"Dispatch Order","Confirm",{deliveryNotes:ko.observable(t.viewModel.PackingList.DeliveryNotes())}).SubmitData(function(n){return{packingListId:t.viewModel.PackingList.PackingListId(),deliveryNotes:n.deliveryNotes()}}).Done(function(){page.Update()}).MultilineTextField("deliveryNotes","Delivery notes  (markdown enabled)").Create()},t.EditPricingForm=function(n){return new DialogViewModelBuilder(route.forControllerAction("PurchaseOrder","UpdateItemPrice"),"Update Pricing for Item","Update",{unitPrice:ko.observable(n.UnitPrice.toFixed(2)),notes:ko.observable(n.Notes)}).SubmitData(function(i){return{packingListId:t.viewModel.PackingList.PackingListId(),purchaseOrderItemId:n.PurchaseOrderItemId,unitPrice:i.unitPrice(),notes:i.notes()}}).Done(function(){t.packingListTable.LoadData()}).NumberField("unitPrice","Unit Price",null,null,!1).MultilineTextField("notes","Notes",null,!0,!0).Create()},t.CreateInvoiceInXeroForm=function(){return new DialogViewModelBuilder(route.forControllerAction("PurchaseOrder","CreateInvoiceInXero"),"Create Invoice In Xero","Create",{invoiceDate:ko.observable(moment().format("YYYY-MM-DD")),confirm:ko.observable(!1)}).SubmitData(function(n){return{packingListId:t.viewModel.PackingList.PackingListId(),invoiceDate:n.invoiceDate(),confirm:n.confirm()}}).Validate(function(){return t.trackingListTable.data().length===0?"You must add tracking to this packing list before you can create an invoice":null}).Done(function(){page.Update()}).MessageField("Only create an invoice once all pricing is set correctly.").DateField("invoiceDate","Invoice Date").CheckBoxField("confirm","Confirm Create").Create()},t.EditTrackingForm=function(n){return new DialogViewModelBuilder(route.forControllerAction("PurchaseOrder","UpdateTrackingItem"),"Update Tracking Info","Update",{trackingNumber:ko.observable(n.TrackingNumber),freightProviderId:ko.observable(n.FreightProviderId),freightCost:ko.observable(n.FreightCost)}).SubmitData(function(t){return{trackingListId:n.FreightTrackingId,trackingNumber:t.trackingNumber(),freightProviderId:t.freightProviderId(),freightCost:t.freightCost()}}).Done(function(){page.Update()}).MessageField("Tracking Info").TextField("trackingNumber","Tracking Number").AjaxFilterDropDownListField("freightProviderId","Freight Provider",function(n){return n.FreightProviderName},function(n){return n.FreightProviderId},route.forControllerAction("PurchaseOrder","AvailableFreightProviders"),!1,{FreightProviderId:n.FreightProviderId,FreightProviderName:n.FreightProviderName},"FreightProviderName").NumberField("freightCost","Cost",0,1e3,!1).Create()},t.DeleteTrackingForm=function(n){return new DialogViewModelBuilder(route.forControllerActionParams("PurchaseOrder","DeleteTrackingFromPackingList",{freightTrackingId:n.FreightTrackingId}),"Delete Tracking Info","Delete",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Click delete to delete this tracking item.").Create()},t.ViewSerialNumbersForm=function(n){return new DialogViewModelBuilder(null,"Serial Number added to item","Close",null).ListField("Serial Number",n.Serials,function(n){return n}).Create()},t.DownloadInvoiceForm=function(){return new DialogViewModelBuilder(route.forControllerActionParams("PurchaseOrder","DownloadPDFInvoiceFromXero",{packingListId:t.viewModel.PackingList.PackingListId}),"Download Invoice from Xero","Download",null).SubmitData(function(){return{}}).CreateDownload()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Rfid_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Rfid_Details_Model,t.stateHandler=function(){return new Rfid_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.RfidTag.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Rfid",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("rfid-tag",new Header_Text(t.viewModel.RfidTag.Name,ko.computed(function(){return"Assigned Groups: "+t.viewModel.RfidTag.GroupCount()}),ko.computed(function(){return t.viewModel.RfidTag.OpensCabinet()?"Maintenance":"User"}),"Access Level")),new SingleValue_Block("Tag Number",ko.computed(function(){return t.viewModel.RfidTag.SectionCode()+"/"+t.viewModel.RfidTag.SerialCode()}))]),tiles.createTile().addBlockSet([new Command_Block("Rename","Rename this tag",t.RenameTagForm,null,page.HasCapabilityComputed(Capability.RfidTag_Edit)),new Command_Block("Access","Change this tags access level",t.ChangeTagAccessLevelForm,null,page.HasCapabilityComputed(Capability.RfidTag_Edit)),new Command_Block("Delete","Delete this tag",t.DeleteTagForm,null,page.HasCapabilityComputed(Capability.RfidTag_Delete))])]);t.groupsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Rfid",t.viewModel.RfidTag.RfidTagId,"MemberGroupsTable"),"Name",!0,function(n){return views.Group_RfidTags.Load(n.GroupId)},10);t.groupsTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Member Groups");t.modulesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Rfid",t.viewModel.RfidTag.RfidTagId,"MemberModulesTable"),"Name",!0,function(n){return views.Module_Details.Load(n.ModuleId)},10);t.modulesTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Module",!1,!0)).AddTitle("Assigned Modules");page.Add(t.pageCommands);page.Add(t.groupsTable);page.Add(t.modulesTable);BaseUpdate(t)},t.RenameTagForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Rfid",t.viewModel.RfidTag.RfidTagId,"RenameTag"),"Rename Tag","Rename",{name:ko.observable(t.viewModel.RfidTag.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.RfidTag.Name(i.Name)}).MessageField("Specify a unique name for this RFID tag.").TextField("name","Name").Create()},t.ChangeTagAccessLevelForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Rfid",t.viewModel.RfidTag.RfidTagId,"SetTagAccessLevel"),"Set Tag Access Level","Update",{opensCabinet:ko.observable(t.viewModel.RfidTag.OpensCabinet())}).SubmitData(function(n){return{opensCabinet:n.opensCabinet()}}).Done(function(n,i){t.viewModel.RfidTag.OpensCabinet(i.OpensCabinet)}).MessageField("Specify the access level for this tag.").CheckBoxField("opensCabinet","Maintenance Access").Create()},t.DeleteTagForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Rfid",t.viewModel.RfidTag.RfidTagId,"Delete"),"Delete Tag","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){window.history.back()}).MessageField("Are you sure you want to delete this Rfid Tag?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Rfid Tag").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Role_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Role_Details_Model,t.stateHandler=function(){return new Role_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Role.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Role",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.showContainingGroups=ko.observable(!1);t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Rename","Change the name of this role",t.RenameRoleForm,null,page.HasCapabilityComputed(Capability.Role_Rename))]),tiles.createTile().addBlockSet([new Command_Block("Delete","Delete this role",t.DeleteRoleForm,null,page.HasCapabilityComputed(Capability.Role_Delete))]),tiles.createTile().addBlockSet([new Command_Block("Capability","Add a capability",t.AddCapabilityForm,null,page.HasCapabilityComputed(Capability.Role_Edit))]),tiles.createTile().addBlockSet([new Command_Block("Groups","Groups containing role",null,function(){return views.Role_ContainingGroups.Load(t.viewModel.Role.RoleId)})])]);t.capabilitiesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"CapabilitiesTable"),"Name",!0,null,25);t.capabilitiesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!1,!1)).AddColumn(new CommandTableColumnViewModel("Remove Capability","delete",function(n){return page.OpenFormDialog(t.RemoveCapabilityForm(n))},page.HasCapabilityComputed(Capability.Role_Edit))).AddTitle("Role Capabilities");t.grantsForRoleTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"GrantsForRoleTable"),"SourceGroupName",!0,null,25,page.HasCapabilityComputed(Capability.System_Admin));t.grantsForRoleTable.AddColumn(new HyperlinkTableColumnViewModel("Source Group","group",function(n){return views.Group_Details.routeHandler(n.SourceGroupId)},function(n){return views.Group_Details.Load(n.SourceGroupId)})).AddColumn(new FilterTableColumnViewModel("SourceGroupName","Source Group",!1,!0,function(n){return n.SourceParentName+" / "+n.SourceGroupName})).AddColumn(new HyperlinkTableColumnViewModel("Target Group","group",function(n){return views.Group_Details.routeHandler(n.TargetGroupId)},function(n){return views.Group_Details.Load(n.TargetGroupId)})).AddColumn(new FilterTableColumnViewModel("TargetGroupName","Target Group",!1,!0,function(n){return n.TargetParentName+" / "+n.TargetGroupName})).AddTitle("Grants For Role");t.groupsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"ContainingGroupsTable"),"CreatedUtc",!1,function(n){return views.Group_Details.Load(n.GroupId)},10,ko.computed(function(){return t.showContainingGroups()}));t.groupsTable.AddColumn(new FilterTableColumnViewModel("Name","Group",!1,!0)).AddTitle("Groups containing role");page.Add(t.pageCommands);page.Add(t.capabilitiesTable);page.Add(t.grantsForRoleTable);page.Add(t.groupsTable);BaseUpdate(t,[t.capabilitiesTable,t.grantsForRoleTable,t.groupsTable])},t.RenameRoleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"Rename"),"Rename Role","Rename",{name:ko.observable(t.viewModel.Role.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.Role.Name(i.Name)}).TextField("name","Name").Create()},t.DeleteRoleForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"Delete"),"Delete Role","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Group_Index.Load()}).MessageField("Are you sure you want to delete this role?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of role").Create()},t.AddCapabilityForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"AddExistingCapability"),"Add Capability to Role","Add",{capabilityIds:ko.observableArray()}).SubmitData(function(n){return{capabilityIds:n.capabilityIds()}}).Done(function(){t.capabilitiesTable.LoadData()}).MessageField("Select one or more existing capabilities to add to this role.").AjaxMultiSelectListField("capabilityIds","Capability (ctrl-click or drag for multi select)",function(n){return n.Name+" (Id: "+n.CapabilityId+")"},function(n){return n.CapabilityId},route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"CapabilitiesWhichCanBeAdded"),15,!0).Create()},t.RemoveCapabilityForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("Role",t.viewModel.Role.RoleId,"RemoveCapability"),"Remove Capability","Remove",{capabilityId:ko.observable(n.CapabilityId)}).SubmitData(function(n){return{capabilityId:n.capabilityId()}}).Done(function(){t.capabilitiesTable.LoadData()}).MessageField("Are you sure you want to remove the capability "+n.Name+" from this role?").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),SharedCollection_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new SharedCollection_Details_Model,t.stateHandler=function(){return new SharedCollection_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.SharedCollection.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("SharedCollection",n,"Details")},t.config=new Chart_Index_Config,t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Chart(t,!0)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Chart(t,!0)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Configure","Configure chart report",t.ConfigureCollectionForm,null,page.HasCapabilityComputed(Capability.SharedChart_Edit))]),tiles.createTile().addBlockSet([new Command_Block("Add","Add chart to report",t.AddChartToCollectionForm,null,page.HasCapabilityComputed(Capability.SharedChart_Edit))]),tiles.createTile().addBlockSet([new Command_Block("Download","Download Trend Data",t.DownloadDataForm)]),tiles.createTile().addBlockSet([new Command_Block("Save As...","Save a private copy of this report",t.CloneToPrivateForm)])]);t.pageCommands.lowMargin="true";page.Add(t.pageCommands);page.Add(t.chartCollection);ChartUpdate(t,!0)},t.ConfigureCollectionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"ConfigureCollection"),"Configure Chart Report","Update",{name:ko.observable(t.viewModel.SharedCollection.Name()),daysToDisplay:ko.observable(t.viewModel.SharedCollection.DaysToDisplay())}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,i){t.viewModel.SharedCollection.Name(i.Name);t.viewModel.SharedCollection.DaysToDisplay(n.daysToDisplay())}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.AddChartToCollectionForm=function(){var n={name:ko.observable("New Chart"),type:ko.observable("line"),sortIndex:ko.observable(t.chartCollection.highestIndex()+1),height:ko.observable(250),timescale:ko.observable(!0),tsHeight:t.config.chartTypeOptions.timescale.Heights[0].Value},r;ko.computed(function(){n.type();ko.computedContext.isInitial()||(n.height(t.config.chartTypeOptions[n.type()].Default),n.type()==="timescale"?($('input[name="name"]').prop("disabled",!0),$('input[name="timescale"]').prop("disabled",!0),n.name("")):($('input[name="name"]').prop("disabled",!1),$('input[name="timescale"]').prop("disabled",!1)))});var i=new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"AddChartToCollection"),"Add Chart To Report","Add",n),u=function(n){i.dialogModel.showOptionalCheckbox(n)},f=function(n){u(n)};return ko.computed(function(){t.chartCollection.charts().length===0&&f(!0)}),i.SubmitData(function(n){var t=[];return Object.keys(n).forEach(function(i){i.substring(0,7)==="option."&&n[i]===!0&&t.push(i.substr(7))}),{name:n.name(),type:n.type(),sortIndex:n.sortIndex(),height:n.height(),timescale:n.timescale(),tsHeight:n.tsHeight,options:t}}).Done(function(){page.Update()}).MessageField("Add a new chart to this report?").DropDownListField("type","Chart Type",function(n){return n.Name},function(n){return n.Value},t.config.chartTypes).TextField("name","Name",50,!0).DropDownListField("height","Display Height",function(n){return n.Name},function(n){return n.Value},ko.computed(function(){return t.config.chartTypeOptions[n.type()].Heights})).OptionalCheckBoxField("timescale","Add a timescale with the new chart?"),i.MessageField("Chart Options"),r=new ChartOptions,r.List().forEach(function(t){var r="option."+t.Field;i.CheckBoxField(r,t.Name);n[r]=t.Value}),i.Create()},t.DeleteChartFromCollectionForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"DeleteChartFromCollection"),"Remove Chart from Report","Remove",{chartId:ko.observable(n.chartId()),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to permanently delete this chart?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of chart:").MessageField(n.chartSvg().GetType()+" - "+n.chartName()).Create()},t.AddItemToChartForm=function(n){var i={chartId:ko.observable(n.chartId()),network:ko.observable(0),node:ko.observable({}),module:ko.observable({}),trendName:ko.observable(""),displayName:ko.observable(""),offsetValue:ko.observable(0),offsetUnit:ko.observable(""),itemCount:ko.observable(n.chartItems().length),colour:ko.observable(""),colorOffset:ko.observable(0),chart:{},trends:{}},r;return i.chart=ko.computed(function(){i.chartId();var r=n;return n.collection.charts().forEach(function(n){n.chartId()===i.chartId()&&(r=n,i.colour(t.config.colorScale(""+r.chartItems().length%t.config.colorCount).substring(1)),i.itemCount(r.chartItems().length))}),r}),ko.computed(function(){i.colour(t.config.colorScale(""+i.colorOffset()).substring(1))}),r=[],n.collection.charts().forEach(function(n,t){if(n.chartType()!=="timescale"){var i=n.chartName();(i==null||i.length===0)&&(i="(unnamed chart "+t+")");i+=n.chartType()?" ["+n.chartType()+"]":"";r.push({name:i,chartId:n.chartId()})}}),i.trends=ko.computed(function(){var t=i.module(),n;return t&&isArray(t.Trends)?(n=[],t.Trends.forEach(function(t){if(t.IsCumulative){var r;i.chart().chartType()==="histogram"?(r={Name:t.Name,Type:"histogram",Units:t.Units,IsCumulative:t.IsCumulative},n.push(r)):(t.Type="line",n.push(t),r={Name:t.Name,Type:"cumulative",Units:t.Units,IsCumulative:t.IsCumulative},n.push(r))}else n.push(t)}),d3.select("#trendName").attr("size",Math.min(5,n.length)),n):[]}),ko.computed(function(){var r=i.module(),t=i.trendName(),n;t&&(t=t.replace("[line]",""),t=t.replace("[cumulative]",""),t=t.replace("[histogram]",""));r&&t&&(n=r.Name+" - "+t,n.length>50&&n.indexOf(":")>-1&&(n=n.substr(n.indexOf(":")+1)),n.length>50&&(n="..."+n.substr(-47)),i.displayName(n))}),new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"AddItemToChart"),"Add Item To Chart","Add & Continue",i).SubmitData(function(n){return{chartId:n.chartId(),moduleId:n.module().ModuleId,trendName:n.trendName(),displayName:n.displayName(),offsetValue:n.offsetValue(),offsetUnit:n.offsetUnit(),colour:n.colour()}}).Done(function(n){n.itemCount(n.itemCount()+1);page.Update()}).DropDownListField("chartId","Add to chart",function(n){return n.name},function(n){return n.chartId},r).AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerAction("Chart","GetUserNetworks"),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return FormatNodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return i.network()?route.forControllerItemAction("Chart",i.network(),"GetUserNetworkNodes"):null}),!0,null,"Name",3,1).AjaxCompactFilterDropDownListField("module","Module",function(n){return n.Name},function(n){return n},ko.computed(function(){return i.network()&&i.node()?route.forControllerItemAction("Chart",i.network(),"GetUserNetworkModules",{nodeAddress:i.node().NodeAddress,type:i.chart().chartType()}):null}),!0,null,"Name",3,1).DropDownListField("trendName","Trend",function(n){return n.Name+(n.Units!=null&&n.Units!==""?" ("+(n.Type==="cumulative"?"Cumulative ":"")+n.Units+")":"")},function(n){return n.Name+(n.Type?"["+n.Type+"]":"")},i.trends).TextField("displayName","Display Name",50).ColorField("colour","Colour",6,!1,i.colorOffset,t.config.chartColors).MessageField("Specify the date offset (0 for none)").IntNumberField("offsetValue","Offset Period Amount",0,365).DropDownListField("offsetUnit","Offset Period Units",function(n){return n.Name},function(n){return n.Value},t.config.offsetUnits).CreateMulti()},t.ConfigureChartInCollectionForm=function(n){var i={chartId:ko.observable(n.chartId()),name:ko.observable(n.chartName()),type:ko.observable(n.chartType()),height:ko.observable(n.configHeight()),types:{}},u=ko.observable(0),f=0,e=function(){var n=!0;t.config.chartTypeOptions[i.type()].Heights.forEach(function(t){f===t.Value&&(n=!1)});n&&i.height(t.config.chartTypeOptions[i.type()].Default)},r;return ko.computed(function(){if(i.type(),u(u()+1),!ko.computedContext.isInitial()){var n=function(){return e()};typeof e=="function"&&ko.ignoreDependencies(n)}}),i.types=ko.computed(function(){var t=[];return i.type()==="line"?(t.push({Name:"Line",Value:"line"}),t.push({Name:"Histogram",Value:"histogram"}),n.chartItems().length===0&&(t.push({Name:"Tape",Value:"tape"}),t.push({Name:"Timescale",Value:"timescale"}))):i.type()==="histogram"?(t.push({Name:"Histogram",Value:"histogram"}),t.push({Name:"Line",Value:"line"}),n.chartItems().length===0&&(t.push({Name:"Tape",Value:"tape"}),t.push({Name:"Timescale",Value:"timescale"}))):i.type()==="tape"?(t.push({Name:"Tape",Value:"tape"}),n.chartItems().length===0&&(t.push({Name:"Line",Value:"line"}),t.push({Name:"Histogram",Value:"histogram"}),t.push({Name:"Timescale",Value:"timescale"}))):i.type()==="timescale"&&(t.push({Name:"Timescale",Value:"timescale"}),t.push({Name:"Line",Value:"line"}),t.push({Name:"Histogram",Value:"histogram"}),t.push({Name:"Tape",Value:"tape"})),t}),r=new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"ConfigureChartInCollection"),"Configure Chart","Update",i).SubmitData(function(n){var t=[];return Object.keys(n).forEach(function(i){i.substring(0,7)==="option."&&n[i]===!0&&t.push(i.substr(7))}),{chartId:n.chartId(),name:n.name(),type:n.type(),height:n.height(),options:t}}).Done(function(){page.Update()}).TextField("name","Name",50).MessageField("Change the type of this chart. Note: where possible existing chart items will be converted").DropDownListField("type","Chart Type",function(n){return n.Name},function(n){return n.Value},i.types).DropDownListField("height","Display Height",function(n){return n.Name},function(n){return n.Value},ko.computed(function(){return u(),f=i.height.peek(),t.config.chartTypeOptions[i.type.peek()].Heights})),r.MessageField("Chart Options"),n.options().List().forEach(function(n){var t="option."+n.Field;r.CheckBoxField(t,n.Name);i[t]=n.Value}),r.Create()},t.ConfigureItemInChartForm=function(n){var r={chartId:ko.observable(n.chartId()),chartItemId:ko.observable(n.chartItemId()),displayName:ko.observable(n.name()),offsetValue:ko.observable(n.offsetValue()),offsetUnit:ko.observable(n.offsetUnit()),axisTitle:ko.observable(n.axisTitle()),colour:ko.observable(n.colour()),colorOffset:ko.observable(0),itemType:ko.observable(n.itemType())},i;return ko.computed(function(){r.colorOffset();ko.computedContext.isInitial()||r.colour(t.config.colorScale(""+r.colorOffset()).substring(1))}),i=new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"ConfigureItemInChart",{chartId:n.chartId,chartItemId:n.chartItemId}),"Configure Chart Item","Update",r).SubmitData(function(n){return{chartId:n.chartId(),chartItemId:n.chartItemId(),name:n.displayName(),offsetValue:n.offsetValue(),offsetUnit:n.offsetUnit(),axisTitle:n.axisTitle(),colour:n.colour(),itemType:n.itemType()}}).Done(function(t){var r,i,u;if(n.offsetValue()!==+t.offsetValue()||n.offsetUnit()!==t.offsetUnit()||n.itemType()!==t.itemType())for(r in n.collection.dataCollection.data)if(n.collection.dataCollection.data.hasOwnProperty(r)){i=n.collection.dataCollection.data[r];for(u in i)i.hasOwnProperty(u)&&+u===n.chartItemId()&&(i[n.chartItemId()]=null)}page.Update()}),i.TextField("displayName","Display Name",50),i.ColorField("colour","Colour",6,!1,r.colorOffset,t.config.chartColors),i.MessageField("Specify the date offset (0 for none)."),(n.itemType()==="cumulative"||n.itemType()==="line"&&n.isCumulative())&&i.DropDownListField("itemType","Item Type",function(n){return n.Name},function(n){return n.Value},[{Name:"Line",Value:"line"},{Name:"Cumulative",Value:"cumulative"}]),i.IntNumberField("offsetValue","Offset Period Amount",0,365),i.DropDownListField("offsetUnit","Offset Period Units",function(n){return n.Name},function(n){return n.Value},t.config.offsetUnits),i.Create()},t.DeleteItemFromChartForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"DeleteItemFromChart",{chartId:n.chartId,chartItemId:n.chartItemId}),"Delete Chart Item","Delete",{chartId:ko.observable(n.chartId()),chartItemId:ko.observable(n.chartItemId()),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),chartItemId:n.chartItemId(),confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to permanently delete this item?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of item from chart").MessageField(n.networkName()+" - "+n.nodeName()+" - "+n.name()).Create()},t.DownloadDataForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"DownloadChartData"),"Download Data","Download",{chartId:ko.observable(n==null?0:n),collectionName:ko.observable(t.viewModel.SharedCollection.Name()),startLocal:ko.observable(moment(t.chartCollection.datesUtc.start()).format("YYYY-MM-DD")),endLocal:ko.observable(moment(t.chartCollection.datesUtc.end()).format("YYYY-MM-DD"))}).SubmitData(function(n){return{chartId:n.chartId(),collectionName:n.collectionName(),startLocal:moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).toISOString(),endLocal:moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).toISOString()}}).Done(function(){}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":null:"End date is invalid.":"Start date is invalid."}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()},t.CloneToPrivateForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("SharedCollection",t.viewModel.SharedCollection.ChartCollectionId,"PrivatiseSharedChart"),"Create Chart Report Copy","Create Copy",{name:ko.observable(t.viewModel.SharedCollection.Name()),daysToDisplay:ko.observable(t.viewModel.SharedCollection.DaysToDisplay())}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,t){t.ChartCollectionId!=null&&views.Chart_Details.Load(t.ChartCollectionId)}).MessageField("Specify a unique name for this chart report.").TextField("name","Name",50).MessageField("Specify the default number of days to display.").IntNumberField("daysToDisplay","Days to Display",1,365).Create()},t.mappingOptions={arrayChildId:{"{root}.SharedCollection.Charts":"ChartId","{root}.SharedCollection.Charts[i].ChartItems":"ChartItemId"},extend:{}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Sim_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Sim_Details_Model,t.stateHandler=function(){return new Sim_Details_State(t)},t.titleHandler=function(){t.viewModel.Sim.NetworkId()>0?page.SetTitle("Sim "+t.viewModel.Sim.SimNumber(),t.viewModel.Sim.NetworkName,views.Network_Details.routeHandler(t.viewModel.Sim.NetworkId),function(){return views.Network_Details.Load(t.viewModel.Sim.NetworkId)}):page.SetTitle("Sim "+t.viewModel.Sim.SimNumber(),"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Sim",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("sim",new Header_Text(t.viewModel.Sim.SimNumber,"Sim Number",ComputedFormatPhoneNumber(t.viewModel.Sim.PhoneNumber),"Phone Number",t.viewModel.Sim.CellularNetworkName),new Header_Actions(null,function(){return CopyToClipboard(t.viewModel.Sim.SimNumber)},function(){return CopyToClipboard(t.viewModel.Sim.PhoneNumber)},null,"Click to copy to clipboard","Click to copy to clipboard")),new SingleValue_Block("Status",t.viewModel.Sim.SimStatus),new Command_Block("Edit","Change the details of this sim",t.EditSimForm,null,page.HasCapabilityComputed(Capability.Sim_Update)),new Command_Block("Groups","Display groups containing sim",null,function(){return views.Sim_ContainingGroups.Load(t.viewModel.Sim.SimId)}),new Command_Block("Cellular","Change the cellular network",t.SetSimCellularNetworkForm,null,page.HasCapabilityComputed(Capability.Sim_Update)),new Command_Block("Delete","Delete this sim",t.DeleteSimForm,page.HasCapabilityComputed(Capability.Sim_Delete))]),tiles.createTile().addBlockSet([new Header_Block("network",new Header_Text("Network",null,ko.computed(function(){return t.viewModel.Sim.NetworkId()!=null?t.viewModel.Sim.NetworkName():"None Assigned"}),"Assigned Network"),new Header_Actions(function(){return t.viewModel.Sim.NetworkId()!=null?views.Network_Details.Load(t.viewModel.Sim.NetworkId):null})),new Command_Block("View Network",ko.computed(function(){return t.viewModel.Sim.NetworkId()!=null?t.viewModel.Sim.NetworkName():"None Assigned"}),null,function(){return t.viewModel.Sim.NetworkId()!=null?views.Network_Details.Load(t.viewModel.Sim.NetworkId):null}),new Command_Block("View Device",ko.computed(function(){return t.viewModel.Sim.DeviceExtAddress()!=null?t.viewModel.Sim.DeviceExtAddress():"None Assigned"}),null,function(){return t.viewModel.Sim.DeviceExtAddress()!=null?views.Device_Details.Load(t.viewModel.Sim.DeviceExtAddress):null}),new Command_Block("Assign","Assign to a network device",t.SetSimNetworkForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_ManageSim)&&t.viewModel.Sim.DeviceExtAddress()==null})),new Command_Block("Remove","Remove the network assignment",t.RemoveSimFromNetworkForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_ManageSim)&&t.viewModel.Sim.DeviceExtAddress()!=null&&t.viewModel.Sim.NetworkId()!=null})),new Command_Block("Remove","Remove the device assignment",t.RemoveSimFromDeviceForm,null,ko.computed(function(){return page.HasCapability(Capability.Network_ManageSim)&&t.viewModel.Sim.DeviceExtAddress()!=null&&t.viewModel.Sim.NetworkId()==null}))])]);page.Add(t.pageCommands);BaseUpdate(t)},t.EditSimForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Sim",t.viewModel.Sim.SimId,"Update"),"Update Sim","Save",{simNumber:ko.observable(t.viewModel.Sim.SimNumber()),phoneNumber:ko.observable(t.viewModel.Sim.PhoneNumber()),cancelled:ko.observable(t.viewModel.Sim.Cancelled())}).SubmitData(function(n){return{simNumber:n.simNumber(),phoneNumber:n.phoneNumber(),cancelled:n.cancelled()}}).Done(function(){page.Update()}).TextField("simNumber","Sim Number").TextField("phoneNumber","Phone Number").CheckBoxField("cancelled","Cancelled").Create()},t.SetSimNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Sim",t.viewModel.Sim.SimId,"SetNetwork"),"Assign Sim","Save",{networkId:ko.observable(t.viewModel.Sim.NetworkId())}).SubmitData(function(n){return{networkId:n.networkId()}}).Done(function(){page.Update()}).AjaxCompactFilterDropDownListField("networkId","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerItemAction("Sim",t.viewModel.Sim.SimId,"AvailableNetworksWithGatewayDevice"),!1,t.viewModel.Sim.NetworkId()==null?null:{Name:t.viewModel.Sim.NetworkName(),NetworkId:t.viewModel.Sim.NetworkId()},"Name",5,1).Create()},t.RemoveSimFromNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Network",t.viewModel.Sim.NetworkId,"RemoveSim"),"Remove Sim","Remove",{simId:ko.observable(t.viewModel.Sim.SimId())}).SubmitData(function(n){return{simId:n.simId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove this sim?").Create()},t.RemoveSimFromDeviceForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Device",t.viewModel.Sim.DeviceExtAddress,"RemoveSim"),"Remove Sim","Remove",{simId:ko.observable(t.viewModel.Sim.SimId())}).SubmitData(function(n){return{simId:n.simId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove this sim?").Create()},t.SetSimCellularNetworkForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Sim",t.viewModel.Sim.SimId,"SetCellularNetwork"),"Update Cellular Network","Save",{cellularNetworkId:ko.observable(t.viewModel.Sim.CellularNetworkId())}).SubmitData(function(n){return{cellularNetworkId:n.cellularNetworkId()}}).Done(function(){page.Update()}).AjaxFilterDropDownListField("cellularNetworkId","Cellular Network",function(n){return n.Name},function(n){return n.CellularNetworkId},route.forControllerItemAction("Sim",t.viewModel.Sim.SimId,"AvailableCellularNetworks"),!1,{Name:t.viewModel.Sim.CellularNetworkName(),CellularNetworkId:t.viewModel.Sim.CellularNetworkId()},"Name",10,10).Create()},t.DeleteSimForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Sim",t.viewModel.Sim.SimId,"Delete"),"Delete Sim","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){views.Group_Index.Load()}).MessageField("Are you sure you want to delete this sim?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of sim").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Tag_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Tag_Details_Model,t.stateHandler=function(){return new Tag_Details_State(t)},t.titleHandler=function(){t.viewModel.GroupId()==null?page.SetTitle(t.viewModel.Tag.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()}):page.SetTitle(t.viewModel.Tag.Name,"Tags",views.Group_Tags.routeHandler(t.viewModel.GroupId),function(){return views.Group_Tags.Load(t.viewModel.GroupId)})},t.routeHandler=function(n,t){return ko.unwrap(t)==null?route.forControllerItemAction("Tag",n,"Details"):route.forControllerItemAction("Tag",n,"Details",{groupId:t})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i){(t.sourceUrl=t.routeHandler(n,i),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.tagsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Tag",t.viewModel.Tag.TagId,"TagAttachmentsTable"),"Name",!0,null,25);t.tagsTable.AddColumn(new CommandWithDynamicIconTableColumnViewModel("View",function(n){return TagAttachmentTypes[n.TargetInfo.TargetType].Icon},function(n){return"View "+TagAttachmentTypes[n.TargetInfo.TargetType].Type},function(n){return TagAttachmentTypes[n.TargetInfo.TargetType].Action(n.TargetInfo)})).AddColumn(new FilterTableColumnViewModel("AttachmentType","Type",!1,!0,function(n){return TagAttachmentTypes[n.TargetInfo.TargetType].Type})).AddColumn(new FilterTableColumnViewModel("AttachmentName","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("TagValue","Value",!1,!0)).AddTitle("Tag Values");page.Add(t.tagsTable);BaseUpdate(t,[t.tagsTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new User_Details_Model,t.stateHandler=function(){return new User_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.User.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("User",n,"Details")},t.allTasksComplete=ko.observable(!1),t.expandedTaskList=ko.observable(!1),t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.allTasksComplete=ko.computed(function(){return t.viewModel.UserTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()?!0:!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})});t.expandedTaskList(!t.allTasksComplete());t.statusHeader=new DashboardHeaderPageItem(0,ko.computed(function(){return"User "+(t.allTasksComplete()?"":" - Required tasks outstanding")}),ko.computed(function(){return t.allTasksComplete()?TileState.Idle:TileState.Faulted}),function(){return t.expandedTaskList(!t.expandedTaskList())});t.statusHeader.addButton(new DashboardActionButton(0,ko.computed(function(){return t.expandedTaskList()?"collapse":"expand"}),ko.computed(function(){return t.expandedTaskList()?"Hide":"Show"}),function(){return t.expandedTaskList(!t.expandedTaskList())},!0));t.userTasksTable=new AjaxFilterTableViewModel(null,"SortOrder",!0,function(){return null},25,ko.computed(function(){return t.expandedTaskList()}),!1,!0);t.userTasksTable.AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return n.SourceType()==="User"?"profile":n.SourceType()==="Network"?"network":n.SourceType()==="Node"?"node":n.SourceType()==="Module"?"module":""},function(n){return n.SourceType()},function(n){return n.SourceType()==="User"?views.User_Details.Load(n.Parameters.UserId):n.SourceType()==="Network"?views.Network_Details.Load(n.Parameters.NetworkId):n.SourceType()==="Node"?views.Network_Node.Load(n.Parameters.NetworkId,n.Parameters.NodeAddress):null})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Status",!0,!0,function(n){return n.IsCompleted()?"Complete":n.Type()==="Problem"?"User Problem":n.Type()==="Task"?"Required Task":"Optional Task"})).AddColumn(new FilterTableColumnViewModel("Problem","Problem",!1,!0,function(n){return TaskTypes[n.Description()].Desc(n.IsCompleted(),n.Parameters)})).AddColumn(new MultipleFixHyperlinkTextTableColumnViewModel("Actions","Actions",function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks");ko.computed(function(){t.userTasksTable.initialLoadComplete(!0);t.userTasksTable.SetData({Items:t.viewModel.UserTasks(),Success:!0})});t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("profile",new Header_Text(t.viewModel.User.Name,t.viewModel.User.TimeZoneName,ko.computed(function(){return t.viewModel.User.IsLockedOut()?"Locked Out":t.viewModel.User.IsActive()?"Active":"Disabled"}),"State")),new SingleValue_Block("Account",ko.computed(function(){return t.viewModel.User.HasAccount()?t.viewModel.User.Branding():"No Account"})),new Command_Block("Unlock","Unlock user account",t.UnlockAccountForm,null,ko.computed(function(){return page.HasCapability(Capability.User_UnlockUserAccount)&&t.viewModel.User.IsLockedOut()})),new SingleValue_Block("Created",ComputedDateTime(t.viewModel.User.CreationDateUtc))]).setState(ko.computed(function(){return t.viewModel.User.IsLockedOut()?TileState.Faulted:TileState.Idle})),tiles.createTile().addBlockSet([new Command_Block("Name","Change the name of this user",t.ChangeNameForm,null,page.HasCapabilityComputed(Capability.User_ManageDetails)),new Command_Block("Timezone","Change timezone",t.ChangeTimezoneForm,null,page.HasCapabilityComputed(Capability.User_ManageDetails)),new Command_Block("Add Phone","Add a new phone number",function(){return t.AddPhoneNumberForm(t.viewModel.User.UserId(),function(){return page.Update()})},null,page.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Add Email","Add a new email address",function(){return t.AddEmailAddressForm(t.viewModel.User.UserId(),function(){return page.Update()})},null,page.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Impersonate","Log in as this user",t.ImpersonateUserForm,null,ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_Impersonate)})),new Command_Block("Dashboard","Copy dashboard sections",t.CopyDashboardSectionsForm,null,ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_Impersonate)})),new Command_Block("Password","Reet the users password",t.ResetPasswordForm,null,ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_SetPassword)})),new Command_Block("Create","Create an account for this user",function(){return t.CreateAccountForm(t.viewModel.User.UserId,function(){return page.Update()})},null,ko.computed(function(){return!t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_Create)})),new Command_Block("Remove","Remove the account for this user",t.RemoveAccountForm,null,ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_Create)})),new Command_Block("Disable","Disable this user",function(){return t.DisableForm(t.viewModel.User.UserId(),function(){return page.Update()})},null,ko.computed(function(){return page.HasCapability(Capability.User_ChangeActive)&&t.viewModel.User.IsActive()})),new Command_Block("Enable","Enable this user",function(){return t.EnableForm(t.viewModel.User.UserId(),function(){return page.Update()})},null,ko.computed(function(){return page.HasCapability(Capability.User_ChangeActive)&&!t.viewModel.User.IsActive()})),new Command_Block("Groups","Display groups containing the user",null,function(){return views.User_ContainingGroups.Load(t.viewModel.User.UserId)},ko.computed(function(){return page.HasCapability(Capability.User_Impersonate)})),new Command_Block("Access","Display the groups user can access",null,function(){return views.User_GrantedRoles.Load(t.viewModel.User.UserId)},ko.computed(function(){return page.HasCapability(Capability.User_Impersonate)})),new Command_Block("Subscription","Alert and network subscriptions",null,function(){return views.User_Subscriptions.Load(t.viewModel.User.UserId)},ko.computed(function(){return page.HasCapability(Capability.User_Impersonate)})),new Command_Block("Events","View module event notifications",null,function(){return views.User_ModuleEventNotifications.Load(t.viewModel.User.UserId)},ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_ViewEvent)})),new Command_Block("Account","View message account",null,function(){return views.MessageAccount_Details.Load(t.viewModel.User.MessageAccountId,null)},ko.computed(function(){return t.viewModel.User.MessageAccountId()!=null})),new Command_Block("Message","Send a test message",t.SendTestMessageForm,null,ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.User_SendTestMessage)})),new Command_Block("Suppress","Suppress alerts until a time",t.SuppressAlertsForm,null,ko.computed(function(){return t.viewModel.User.HasAccount()&&page.HasCapability(Capability.Module_SuppressAlerts)})),new Command_Block("Clear","Clear alert suppression",t.ClearSuppressAlertsForm,null,ko.computed(function(){return t.viewModel.User.SuppressAlertsUtc()!=null&&moment(t.viewModel.User.SuppressAlertsUtc())>moment()&&page.HasCapability(Capability.Module_SuppressAlerts)})),new SingleValue_Block("Suppressed Until",ko.computed(function(){return t.viewModel.User.SuppressAlertsUtc()==null?"None Set":moment(t.viewModel.User.SuppressAlertsUtc())<moment()?"Expired":FormatDateTime(moment.utc(t.viewModel.User.SuppressAlertsUtc()))}),ko.computed(function(){return moment(t.viewModel.User.SuppressAlertsUtc())>=moment()&&t.viewModel.User.SuppressAlertsUtc()!=null})),new SingleValue_Block("Expires",ko.computed(function(){return moment.utc(t.viewModel.User.SuppressAlertsUtc())==null?"":FormatOverdueBy(moment.duration(moment.utc(t.viewModel.User.SuppressAlertsUtc()).diff(moment())))}),ko.computed(function(){return t.viewModel.User.SuppressAlertsUtc()!=null&&moment(t.viewModel.User.SuppressAlertsUtc())>=moment()}))]),tiles.createTile().addBlockSet([new Header_Block("legal-terms",new Header_Text(ko.computed(function(){return t.viewModel.User.LegalTermsName()||"None"}),ko.computed(function(){return t.viewModel.User.LegalTermsName()?"Assigned Terms":"No terms assigned"}),ko.computed(function(){return t.viewModel.User.LegalTermsAcceptanceUtc()?FormatDateTime(moment.utc(t.viewModel.User.LegalTermsAcceptanceUtc())):"Never"}),"Acceptance date"),new Header_Actions(function(){return t.viewModel.User.LegalTermsName()!=null?views.LegalTerms_View.Load(t.viewModel.User.LegalTermsId):null}))]).setState(ko.computed(function(){return t.viewModel.User.LegalTermsAcceptanceUtc()?TileState.Active:TileState.Faulted})),tiles.createTile().addBlockSet([new Header_Block("brand",new Header_Text(ko.computed(function(){return t.viewModel.User.Branding()||"None"}),"Branding Name",ko.computed(function(){return t.viewModel.User.BrandingDashboard()||""}),"Dashboard")),new Command_Block("Edit","Edit branding for user",t.EditBrandingForm,null,page.HasCapabilityComputed(Capability.User_Create))])]);t.pageCommands.addTileSet(t.viewModel.User.EmailAddresses);t.pageCommands.addTileSet(t.viewModel.User.PhoneNumbers);t.noteCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Add Note","Add a new Note",t.CreateNoteForm,null,page.HasCapabilityComputed(Capability.Note_Create))])]);t.userEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"EventsTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewEvent));t.userEventsTable.AddColumn(new IconTableColumnViewModel("EventType",function(){return""},!0,!1,function(n){return EventIcon(n.EventType)})).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("SourceUser","User",!0,!0)).AddTitle("User Events");t.userNotesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"NotesTable"),"TimeUtc",!1,null,10);t.userNotesTable.AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return views.Note_Details.Load(n.NoteId)})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new CommandWithDynamicIconTableColumnViewModel("TargetIcon",function(n){return NoteInfoBuilder(n,"User").icon()},function(n){return NoteInfoBuilder(n,"User").tooltip()},function(n){return NoteInfoBuilder(n,"User").action()},!0,function(n){return NoteInfoBuilder(n,"User").actionEnabled()})).AddColumn(new FilterTableColumnViewModel("Target","Target",!1,!1,function(n){return NoteInfoBuilder(n,"User").type()})).AddColumn(new FilterTableColumnViewModel("Title","Title",!1,!0)).AddColumn(new CommandTableColumnViewModel("Created By","profile",function(n){return views.User_Details.Load(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("User Notes");t.userActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"UserActionsTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.userActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("User Actions");t.targetUserActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"UserActionsForTargetUserTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.targetUserActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("Target User Actions");page.Add(t.statusHeader);page.Add(t.userTasksTable);page.Add(t.pageCommands);page.Add(t.userEventsTable);page.Add(t.noteCommands);page.Add(t.userNotesTable);page.Add(t.userActionsTable);page.Add(t.targetUserActionsTable);BaseUpdate(t,[t.userEventsTable,t.userNotesTable,t.userActionsTable,t.targetUserActionsTable])},t.CreateNoteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"CreateNote"),"Create Note","Create",{groupId:ko.observable(),title:ko.observable(),details:ko.observable()}).SubmitData(function(n){return{groupId:n.groupId(),title:n.title(),details:n.details()}}).Done(function(){t.userNotesTable.LoadData()}).MessageField("Select the group in which to create the note. Only users with access to this group will be able to view the note.").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},route.forControllerAction("Group","GroupsToContainNote"),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()},t.ChangeNameForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"ChangeName"),"Change Name","Update",{name:ko.observable(t.viewModel.User.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.User.Name(i.Name);t.userEventsTable.LoadData()}).MessageField("Update the users name as it should be displayed on the Dashboard.").TextField("name","Name",255).Create()},t.ChangeTimezoneForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"ChangeTimezone"),"Change Timezone","Update",{timeZoneName:ko.observable(t.viewModel.User.TimeZoneName())}).SubmitData(function(n){return{timeZoneName:n.timeZoneName()}}).Done(function(n,i){t.viewModel.User.TimeZoneName(i.TimeZoneName);t.userEventsTable.LoadData()}).MessageField("Update your timezone as you want it to be used on the Dashboard.").AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{BaseUtcOffset:0,TimeZoneName:t.viewModel.User.TimeZoneName()},"TimeZoneName",5,1).Create()},t.AddPhoneNumberForm=function(n,t){var i={phoneNumber:ko.observable(),formattedPhoneNumber:ko.observable(null),primary:ko.observable(!1),confirmFormatChange:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"AddPhoneNumber"),"Add Phone Number","Add",i).SubmitData(function(n){return{phoneNumber:n.phoneNumber(),primary:n.primary(),confirmFormatChange:n.confirmFormatChange()}}).Done(function(){typeof t=="function"&&t()}).Error(function(n,t){t!=null&&i.formattedPhoneNumber(t.PhoneNumber)}).MessageField("Enter the new phone number in international format in the box below. For example, the phone number 021 555 1234 would become 64215551234").DisplayField("formattedPhoneNumber",ko.computed(function(){return i.formattedPhoneNumber()?"Formatted phone number: "+i.formattedPhoneNumber():null})).OptionalCheckBoxField("confirmFormatChange","Confirm phone number is correct after formatting.").TextField("phoneNumber","Phone Number",50).MessageField("Each user can have one phone number configured as the primary number at a time. If you make the new number the primary number, any old primary number will be changed to secondary.").CheckBoxField("primary","Primary Phone Number").Create()},t.EditPhoneNumberForm=function(n,t,i){var r={newPhoneNumber:ko.observable(t),formattedPhoneNumber:ko.observable(null),confirmFormatChange:ko.observable(!1)};return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"UpdatePhoneNumber"),"Update Phone Number","Update",r).SubmitData(function(n){return{phoneNumber:t,newPhoneNumber:n.newPhoneNumber(),confirmFormatChange:n.confirmFormatChange()}}).Done(function(){typeof i=="function"&&i()}).Error(function(n,t){t!=null&&r.formattedPhoneNumber(t.NewPhoneNumber)}).MessageField("Enter the phone number in international format in the box below. For example, the phone number 021 555 1234 would become 64215551234").DisplayField("formattedPhoneNumber",ko.computed(function(){return r.formattedPhoneNumber()?"Formatted phone number: "+r.formattedPhoneNumber():null})).OptionalCheckBoxField("confirmFormatChange","Confirm phone number is correct after formatting.").TextField("newPhoneNumber","Phone Number",50).Create()},t.AddEmailAddressForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"AddEmailAddress"),"Add Email Address","Add",{emailAddress:ko.observable(),primary:ko.observable(!1)}).SubmitData(function(n){return{emailAddress:n.emailAddress(),primary:n.primary()}}).Done(function(){typeof t=="function"&&t()}).MessageField("Enter the new email address in the box below.").TextField("emailAddress","Email Address",255).MessageField("Each user can have one email address configured as the primary address at a time. If you make the new address the primary address, any old primary address will be changed to secondary.").CheckBoxField("primary","Primary Email Address").Create()},t.RemoveEmailAddressForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"RemoveEmailAddress"),"Remove Email Address","Remove",{emailAddress:n}).SubmitData(function(n){return{emailAddress:n.emailAddress}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the email address "+n+" from this user?").Create()},t.RemovePhoneNumberForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"RemovePhoneNumber"),"Remove Phone Number","Remove",{phoneNumber:n}).SubmitData(function(n){return{phoneNumber:n.phoneNumber}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the phone number "+FormatPhoneNumber(n)+" from this user?").Create()},t.SetPrimaryEmailAddressForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"SetPrimaryEmailAddress"),"Set Primary Email Address","Set Primary",{emailAddress:n}).SubmitData(function(n){return{emailAddress:n.emailAddress}}).Done(function(){page.Update()}).MessageField("Are you sure you want to set the email address "+n+" as the primary email address for this user?").Create()},t.SetPrimaryPhoneNumberForm=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"SetPrimaryPhoneNumber"),"Set Primary Phone Number","Set Primary",{phoneNumber:n}).SubmitData(function(n){return{phoneNumber:n.phoneNumber}}).Done(function(){page.Update()}).MessageField("Are you sure you want to set the phone number "+FormatPhoneNumber(n)+" as the primary phone number for this user?").Create()},t.ImpersonateUserForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"Impersonate"),"Impersonate User","Impersonate",{}).SubmitData(function(n){return n}).Done(function(){views.Home_Index.Load()}).MessageField("Are you sure you want to impersonate this user?").Create()},t.CopyDashboardSectionsForm=function(){var n={userId:ko.observable(),dashboardGroupIds:ko.observableArray(),overrideWarning:ko.observable()};return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"CopyDashboardSections"),"Copy Dashboard Sections","Copy & Continue",n).SubmitData(function(n){return{sourceUserId:n.userId(),dashboardGroupIds:n.dashboardGroupIds(),overrideWarning:n.overrideWarning()}}).Done(function(){}).MessageField("Select sections from source user to copy to this user.").AjaxFilterDropDownListField("userId","Select User",function(n){return n.Name},function(n){return n.UserId},route.forControllerItemAction("User",t.viewModel.User.UserId,"GetUsersWithDashboardGroups"),!1,null,"Name",5,5).AjaxMultiSelectListField("dashboardGroupIds","Dashboard Sections (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.DashboardGroupId},ko.computed(function(){return n.userId()?route.forControllerItemAction("User",n.userId(),"GetUserDashboardSections"):null}),5,!0).OptionalCheckBoxField("overrideWarning","Override Module Capability Validation?").CreateMulti()},t.SetPasswordForm=function(){var n={password:ko.observable(""),confirmPassword:ko.observable(""),score:ko.observable(0)};return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"SetPassword"),"Set User Password","Update",n).SubmitData(function(n){return{newPassword:n.password()}}).Validate(function(n){return ComparePasswords(n.password(),n.confirmPassword())?null:"Passwords do not match"}).Done(function(){page.Update()}).MessageField("Set the password for the user.").PasswordStrenghtField("strength",ko.computed(function(){return"Strength: "+CheckPassStrength(n.password())}),ko.computed(function(){return n.score(ScorePassword(n.password())),n.score()>80?"green":n.score()>50?"orange":"red"})).PasswordField("password","Password").PasswordField("confirmPassword","Confirm Password").Create()},t.ResetPasswordForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"ResetPassword"),"Reset User Password","Reset",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){page.Update()}).MessageField("Resetting the user password will result in an email being sent to the user with a password reset token.").CheckBoxField("confirm","Confirm resetting users password").Create()},t.CreateAccountForm=function(n,t){var i={password:ko.observable(""),confirmPassword:ko.observable(""),score:ko.observable(0)};return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"CreateAccount"),"Create User Account","Create",i).SubmitData(function(n){return{password:n.password(),confirmPassword:n.confirmPassword()}}).Validate(function(n){return ComparePasswords(n.password(),n.confirmPassword())?null:"Passwords do not match"}).Done(function(){typeof t=="function"&&t()}).MessageField("Set the password for the user.").PasswordStrenghtField("strength",ko.computed(function(){return"Strength: "+CheckPassStrength(i.password())}),ko.computed(function(){return i.score(ScorePassword(i.password())),i.score()>80?"green":i.score()>50?"orange":"red"})).PasswordField("password","Password").PasswordField("confirmPassword","Confirm Password").Create()},t.RemoveAccountForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"RemoveAccount"),"Remove User Account","Remove",{}).SubmitData(function(){}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the account for this user? The user will still exists, but will no longer be able to log in to the Dashboard.").Create()},t.DisableForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"Disable"),"Disable User","Disable",{removeAll:ko.observable(!1)}).SubmitData(function(n){return{removeAll:n.removeAll()}}).Done(function(){typeof t=="function"&&t()}).MessageField("Are you sure you want to disable this user? The user will no longer be able to log in to the Dashboard or receive alerts.").CheckBoxField("removeAll","Remove all subscriptions").Create()},t.EnableForm=function(n,t){return new DialogViewModelBuilder(route.forControllerItemAction("User",n,"Enable"),"Enable User","Enable",{}).SubmitData(function(){}).Done(function(){typeof t=="function"&&t()}).MessageField("Are you sure you want to enable this user? The user will be able to log in to the Dashboard and receive alerts.").Create()},t.SendTestMessageForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"SendTestMessage"),"Send Test Message","Send",{sendSms:ko.observable(!1),sendEmail:ko.observable(!0)}).SubmitData(function(n){return{sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){page.Update()}).MessageField("Select the type of messages to send:").CheckBoxField("sendSms","SMS").CheckBoxField("sendEmail","Email").Create()},t.SuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"SuppressAlerts"),"Suppress Alerts","Suppress",{suppressUntil:ko.observable(moment().add("d",1).format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{suppressUntilUtc:moment(n.suppressUntil()).utc().toISOString()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to suppress alerts?").DateTimeField("suppressUntil","Suppress Until").Create()},t.ClearSuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"ClearSuppressAlerts"),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts?").Create()},t.EditBrandingForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"EditBranding"),"Update User Branding","Update",{brandingId:ko.observable(t.viewModel.User.BrandingId())}).SubmitData(function(n){return{brandingId:n.brandingId()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to change the users branding?").AjaxFilterDropDownListField("brandingId","Branding",function(n){return n.Name+" (ID: "+n.BrandingId+")"},function(n){return n.BrandingId},route.forControllerAction("Branding","AvailableBrandings"),!1,{BrandingId:t.viewModel.User.BrandingId},"BrandingId").Create()},t.UnlockAccountForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"UnlockUserAccount"),"Unlock user account","Unlock",{}).SubmitData(function(){}).Done(function(){page.Update()}).MessageField("Are you sure you want to unlock this users account?").Create()},t.mappingOptions={arrayChildId:{EmailAddresses:"EmailAddress",PhoneNumbers:"PhoneNumber"},extend:{"EmailAddresses[i]":function(n){tiles.makeTile(n);n.state=ko.computed(function(){return n.IsPrimary()?TileState.Active:TileState.Idle});n.blockSets.push([new Header_Block("email",new Header_Text("Email Address",ko.computed(function(){return n.IsPrimary()?"Primary":""}),n.EmailAddress,null,null,"email")),new Command_Block("Remove","Remove this email address",function(){return t.RemoveEmailAddressForm(n.EmailAddress())},null,page.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Set Primary","Set this email address as primary",function(){return t.SetPrimaryEmailAddressForm(n.EmailAddress())},null,ko.computed(function(){return!n.IsPrimary()&&page.HasCapability(Capability.User_ManageContact)}))])},"PhoneNumbers[i]":function(n){tiles.makeTile(n);n.state=ko.computed(function(){return n.IsPrimary()?TileState.Active:TileState.Idle});n.blockSets.push([new Header_Block("phone",new Header_Text("Phone Number",ko.computed(function(){return n.IsPrimary()?"Primary":""}),ComputedFormatPhoneNumber(n.PhoneNumber),null,null,"phone")),new Command_Block("Edit","Edit this phone number",function(){return t.EditPhoneNumberForm(t.viewModel.User.UserId,n.PhoneNumber(),function(){return page.Update()})},null,page.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Remove","Remove this phone number",function(){return t.RemovePhoneNumberForm(n.PhoneNumber())},null,page.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Set Primary","Set this phone number as primary",function(){return t.SetPrimaryPhoneNumberForm(n.PhoneNumber())},null,ko.computed(function(){return!n.IsPrimary()&&page.HasCapability(Capability.User_ManageContact)}))])}}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_GrantedRoles=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new User_GrantedRoles_Model,t.stateHandler=function(){return new User_GrantedRoles_State(t)},t.titleHandler=function(){return page.SetTitle("Granted Roles",t.viewModel.User.Name,views.User_Details.routeHandler(t.viewModel.User.UserId),function(){return views.User_Details.Load(t.viewModel.User.UserId)})},t.routeHandler=function(n){return route.forControllerItemAction("User",n,"GrantedRoles")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.userGroupRolesTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"GroupRolesTable"),"TargetGroupName",!0,function(n){return views.Group_Details.Load(n.TargetGroupId)},10,page.HasCapabilityComputed(Capability.User_Impersonate));t.userGroupRolesTable.AddColumn(new FilterTableColumnViewModel("TargetGroupName","Group",!1,!0)).AddColumn(new FilterTableColumnViewModel("RoleName","Role",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("Role","password",function(n){return route.forControllerItemAction("Role",n.RoleId,"Details")},function(n){return views.Role_Details.Load(n.RoleId)},!0)).AddTitle("Granted Group Roles");page.Add(t.userGroupRolesTable);BaseUpdate(t,[t.userGroupRolesTable])},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_ModuleEventNotifications=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new User_ModuleEventNotifications_Model,t.stateHandler=function(){return new User_ModuleEventNotifications_State(t)},t.titleHandler=function(){return page.SetTitle("Module Notifications",t.viewModel.User.Name,views.User_Details.routeHandler(t.viewModel.User.UserId),function(){return views.User_Details.Load(t.viewModel.User.UserId)})},t.routeHandler=function(n){return route.forControllerItemAction("User",n,"ModuleEventNotifications")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.userModuleEventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"ModuleEventsTable"),"CreatedUtc",!1,function(n){return views.Module_AlertEventDetails.Load(n.ModuleId,n.ModuleEventId)},25);t.userModuleEventsTable.AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return route.forControllerItemAction("Module",n.ModuleId,"Details")},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Alert Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("ContactMode","Mode",!0,!0,function(n){return(n.SendSms?"SMS":"")+(n.SendEmail?(n.SendSms?" - ":"")+"Email":"")})).AddTitle("Module Events Notifications");page.Add(t.userModuleEventsTable);BaseUpdate(t)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),User_Subscriptions=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new User_Subscriptions_Model,t.stateHandler=function(){return new User_Subscriptions_State(t)},t.titleHandler=function(){return page.SetTitle("Subscriptions",t.viewModel.User.Name,views.User_Details.routeHandler(t.viewModel.User.UserId),function(){return views.User_Details.Load(t.viewModel.User.UserId)})},t.routeHandler=function(n){return route.forControllerItemAction("User",n,"Subscriptions")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.alertsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"SubscriptionAlertsTable"),null,!0,function(n){return views.Module_AlertDetails.Load(n.ModuleId,n.AlertAndStatus)},25);t.alertsTable.AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return route.forControllerItemAction("Network",n.NetworkId,"Details")},function(n){return views.Network_Details.Load(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return route.forControllerItemAction("Module",n.ModuleId,"Details")},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return route.forControllerItemAction("Network",n.NetworkId,"Node",{nodeAddress:n.NodeAddress})},function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return"("+FormatNodeAddress(n.NodeAddress)+") "+n.NodeName})).AddColumn(new FilterTableColumnViewModel("EventName","Alert",!1,!0,function(n){return"("+pad(n.AlertAndStatus,3)+") "+n.EventName})).AddColumn(new FilterTableColumnViewModel("ContactMode","Mode of Contact",!1,!0,function(n){return(n.SendSms?"SMS":"")+(n.SendEmail?(n.SendSms?" - ":"")+"Email":"")})).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return page.OpenFormDialog(t.DeleteSubscription(n))})).AddTitle("Alert Subscriptions");t.overdueTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"SubscriptionOverdueNetworksTable"),"Name",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25);t.overdueTable.AddColumn(new FilterTableColumnViewModel("Name","Network",!1,!0)).AddColumn(new SyncTimespanFilterTableColumnViewModel("SyncInterval","Sync Interval",!1,!0)).AddColumn(new FilterTableColumnViewModel("IsOverdue","Network Status",!1,!0,function(n){return n.IsOverdue?"Overdue":"Up to date"})).AddTitle("Overdue Network Subscriptions");page.Add(t.alertsTable);page.Add(t.overdueTable);BaseUpdate(t,[t.alertsTable,t.overdueTable])},t.DeleteSubscription=function(n){return new DialogViewModelBuilder(route.forControllerItemAction("User",t.viewModel.User.UserId,"DeleteSubscription"),"Delete User Alert","Delele",{}).SubmitData(function(){return{moduleId:n.ModuleId,alertAndStatus:n.AlertAndStatus}}).Done(function(){t.alertsTable.LoadData()}).MessageField("Delete this alert from the user").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),VirtualModule_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new VirtualModule_Details_Model,t.stateHandler=function(){return new VirtualModule_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Module.Name,t.viewModel.Module.Name,views.Module_Details.routeHandler(t.viewModel.Module.ModuleId),function(){return views.Module_Details.Load(t.viewModel.Module.ModuleId)})},t.routeHandler=function(n){return route.forControllerItemAction("VirtualModule",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.measurementCount=ko.observable(0);t.sensorName=ko.observable("");t.sensorType=ko.observable("");t.battery=ko.observable(0);t.signalLevel=ko.observable(0);t.linkQuality=ko.observable("");t.lastMeasure=ko.observable(0);t.lastMeasureTime=ko.observable(new Date);t.QueryWaterWatchModule();t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("config",new Header_Text(ko.computed(function(){return t.sensorName()}),"Water Watch",ko.computed(function(){return t.lastMeasure()/1e3+"m"}),"Last Measure")),new SingleValue_Block("Battery",ko.computed(function(){return t.battery().toFixed(2)+"%"})),new SingleValue_Block("Link",ko.computed(function(){return t.linkQuality()})),new SingleValue_Block("Signal",ko.computed(function(){return t.signalLevel()+"dB"})),new SingleValue_Block("Updated",ko.computed(function(){return FormatDate(moment(t.lastMeasureTime()))})),new Command_Block("View","Pull available live data",null,t.QueryWaterWatchModule,page.HasCapabilityComputed(Capability.System_Admin))]).setEnabled(ko.computed(function(){return t.viewModel.Module.WaterWatchInfo!=null&&t.viewModel.Module.WaterWatchInfo.Serial!=null}))]);page.Add(t.pageCommands);BaseUpdate(t)},t.QueryWaterWatchModule=function(){page.ViewRequests.push($.ajax(route.forControllerItemAction("VirtualModule",t.viewModel.Module.ModuleId,"QueryWaterWatchSensor",{sensorId:t.viewModel.Module.WaterWatchInfo.Serial}),{data:{},type:"POST"}).done(function(n){if(n.Success===!1){page.SetMessage(n.Message);return}t.measurementCount(n.measurements.length);t.battery(n.latestData.battery);t.sensorName(n.name);t.linkQuality(n.latestData.linkQuality);t.signalLevel(n.latestData.signalLevel);t.lastMeasure(n.latestData.lastMeasurement.rawDistance);t.lastMeasureTime(n.latestData.lastMeasurement.time)}))},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Note_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Note_Details_Model,t.stateHandler=function(){return new Note_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Note.Title,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Note",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.Note.NetworkName()),new Command_Block("View","View network",null,function(){return views.Network_Details.Load(t.viewModel.Note.NetworkId)})]).setEnabled(ko.computed(function(){return t.viewModel.Note.NetworkId()!=null})),tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.Note.ModuleName()),new Command_Block("View","View module",null,function(){return views.Module_Details.Load(t.viewModel.Note.ModuleId)})]).setEnabled(ko.computed(function(){return t.viewModel.Note.ModuleId()!=null})),tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.Note.CumulativeMeterName()),new Command_Block("View","View cumulative meter",null,function(){return views.CumulativeMeter_Details.Load(t.viewModel.Note.CumulativeMeterId)})]).setEnabled(ko.computed(function(){return t.viewModel.Note.CumulativeMeterId()!=null})),tiles.createTile().addBlockSet([new SmallHeader_Block(t.viewModel.Note.UserName()),new Command_Block("View","View user",null,function(){return views.User_Details.Load(t.viewModel.Note.UserId)})]).setEnabled(ko.computed(function(){return t.viewModel.Note.UserId()!=null})),tiles.createTile().addBlockSet([new Command_Block("Edit","Edit this note",t.EditNoteForm,null,page.HasCapabilityComputed(Capability.Note_Create)),new Command_Block("Delete","Delete this note",t.DeleteNoteForm,null,page.HasCapabilityComputed(Capability.Note_Create)),new Command_Block("Markdown","Markdown tutorial - External website",null,function(){return window.open("http://commonmark.org/help/","_blank")})])]);var n=new commonmark.Parser,i=new commonmark.HtmlRenderer;t.markdown=new HtmlMessagePageItem(ko.computed(function(){return i.render(n.parse(t.viewModel.Note.Details()))}));t.eventsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("Note",t.viewModel.Note.NoteId,"EventsTable"),"TimeUtc",!1,null,25);t.eventsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!1)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!1)).AddTitle("Events");page.Add(t.pageCommands);page.Add(new HeaderPageItem(t.viewModel.Note.Title));page.Add(t.markdown);page.Add(t.eventsTable);BaseUpdate(t,[t.eventsTable])},t.EditNoteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Note",t.viewModel.Note.NoteId,"Edit"),"Edit Note","Update",{title:ko.observable(t.viewModel.Note.Title()),details:ko.observable(t.viewModel.Note.Details())}).SubmitData(function(n){return{title:n.title(),details:n.details()}}).Done(function(n,i){t.viewModel.Note.Title(i.Title);t.viewModel.Note.Details(i.Details);t.eventsTable.LoadData()}).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()},t.DeleteNoteForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Note",t.viewModel.Note.NoteId,"Delete"),"Delete Note","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){history.go(-1)}).MessageField("Are you sure you want to delete this note?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_Index=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Profile_Index_Model,t.stateHandler=function(){return new Profile_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Profile","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(){return route.forControllerAction("Profile","Index")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("profile",new Header_Text(t.viewModel.User.Name,t.viewModel.User.TimeZoneName,ko.computed(function(){return t.viewModel.User.IsLockedOut()?"Locked Out":t.viewModel.User.IsActive()?"Active":"Disabled"}),"State"),new Header_Actions(function(){return views.User_Details.Load(t.viewModel.User.UserId)})),new Command_Block("Password","Change your password",t.ChangePasswordForm),new Command_Block("Name","Change your name",t.ChangeNameForm),new Command_Block("Timezone","Change your timezone",t.ChangeTimezoneForm),new Command_Block("Add Phone","Add a new phone number",t.AddPhoneNumberForm),new Command_Block("Add Email","Add a new email address",t.AddEmailAddressForm)]).setState(ko.computed(function(){return t.viewModel.User.IsLockedOut()?TileState.Faulted:TileState.Idle})),tiles.createTile().addBlockSet([new Header_Block("warning",new Header_Text(t.viewModel.User.ModuleEventSubscriptionCount,"Module Events",t.viewModel.User.NetworkAlertSubscriptionCount,"Network Alerts")),new Command_Block("Module","Manage module subscriptions",null,function(){return views.Profile_ModuleEventSubscriptions.Load()}),new Command_Block("Network","Manage network subscriptions",null,function(){return views.Profile_NetworkAlertSubscriptions.Load()}),new Command_Block("Events","View module event notifications",null,function(){return views.Profile_ModuleEventNotifications.Load()}),new Command_Block("Account","View message account",null,function(){return views.MessageAccount_Details.Load(t.viewModel.User.MessageAccountId,null)},ko.computed(function(){return t.viewModel.User.MessageAccountId()!=null})),new Command_Block("Suppress","Suppress alerts until a time",t.SuppressAlertsForm),new Command_Block("Clear","Clear alert suppression",t.ClearSuppressAlertsForm,null,ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.User.SuppressAlertsUtc()!=null&&moment(t.viewModel.User.SuppressAlertsUtc())>moment()})),new SingleValue_Block("Suppressed Until",ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.User.SuppressAlertsUtc()==null?"None Set":moment(t.viewModel.User.SuppressAlertsUtc())<moment()?"Expired":FormatDateTime(moment.utc(t.viewModel.User.SuppressAlertsUtc()))}),ko.computed(function(){return page.currentTimeSeconds(),moment(t.viewModel.User.SuppressAlertsUtc())>=moment()&&t.viewModel.User.SuppressAlertsUtc()!=null})),new SingleValue_Block("Expires",ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.User.SuppressAlertsUtc()==null?"":FormatOverdueBy(moment.duration(moment.utc(t.viewModel.User.SuppressAlertsUtc()).diff(moment())))}),ko.computed(function(){return page.currentTimeSeconds(),t.viewModel.User.SuppressAlertsUtc()!=null&&moment(t.viewModel.User.SuppressAlertsUtc())>=moment()}))]),tiles.createTile().addBlockSet([new Header_Block("legal-terms",new Header_Text(t.viewModel.User.LegalTermsName,"Click to view",ko.computed(function(){return t.viewModel.User.LegalTermsAcceptanceUtc()?FormatDateTime(moment.utc(t.viewModel.User.LegalTermsAcceptanceUtc())):"Never"}),"Acceptance date"),new Header_Actions(function(){return views.LegalTerms_View.Load(t.viewModel.User.LegalTermsId)}),ko.computed(function(){return t.viewModel.User.LegalTermsName()!=null}))])]);t.pageCommands.addTileSet(t.viewModel.User.EmailAddresses);t.pageCommands.addTileSet(t.viewModel.User.PhoneNumbers);t.userEventsTable=new AjaxFilterTableViewModel(route.forControllerAction("Profile","EventsTable"),"TimeUtc",!1,null,10);t.userEventsTable.AddColumn(new IconTableColumnViewModel("EventType",function(){return""},!0,!1,function(n){return EventIcon(n.EventType)})).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("SourceUser","User",!0,!0)).AddTitle("User Events");t.userActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"UserActionsTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.userActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("User Actions");t.targetUserActionsTable=new AjaxFilterTableViewModel(route.forControllerItemAction("User",t.viewModel.User.UserId,"UserActionsForTargetUserTable"),"TimeUtc",!1,null,10,page.HasCapabilityComputed(Capability.User_ViewActions));t.targetUserActionsTable.AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddColumn(new MultipleHyperlinkTextTableColumnViewModel("TargetInfo","",function(n){return n.TargetInfo})).AddTitle("Target User Actions");page.Add(new HeaderPageItem("Profile"));page.Add(t.pageCommands);page.Add(t.userEventsTable);page.Add(t.userActionsTable);page.Add(t.targetUserActionsTable);BaseUpdate(t,[t.userEventsTable,t.userActionsTable,t.targetUserActionsTable])},t.ChangeNameForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Profile","ChangeName"),"Change Name","Update",{name:ko.observable(t.viewModel.User.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.User.Name(i.Name);t.userEventsTable.LoadData()}).MessageField("Update your name as you want it to be displayed on the Dashboard.").TextField("name","Name",255).Create()},t.ChangeTimezoneForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Profile","ChangeTimezone"),"Change Timezone","Update",{timeZoneName:ko.observable(t.viewModel.User.TimeZoneName())}).SubmitData(function(n){return{timeZoneName:n.timeZoneName()}}).Done(function(n,i){t.viewModel.User.TimeZoneName(i.TimeZoneName);t.userEventsTable.LoadData()}).MessageField("Update your timezone as you want it to be used on the Dashboard.").AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},route.forControllerAction("Home","TimeZoneNames"),!1,{BaseUtcOffset:0,TimeZoneName:t.viewModel.User.TimeZoneName()},"TimeZoneName",5,1).Create()},t.AddPhoneNumberForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Profile","AddPhoneNumber"),"Add Phone Number","Add",{phoneNumber:ko.observable(),primary:ko.observable(!1)}).SubmitData(function(n){return{phoneNumber:n.phoneNumber(),primary:n.primary()}}).Done(function(){page.Update()}).MessageField("Enter the new phone number in international format in the box below. For example, the phone number 021 555 1234 would become 64215551234").TextField("phoneNumber","Phone Number",50).MessageField("You can have one phone number configured as the primary number at a time. If you make the new number your primary number, any old primary number will be changed to secondary.").CheckBoxField("primary","Primary Phone Number").Create()},t.AddEmailAddressForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Profile","AddEmailAddress"),"Add Email Address","Add",{emailAddress:ko.observable(),primary:ko.observable(!1)}).SubmitData(function(n){return{emailAddress:n.emailAddress(),primary:n.primary()}}).Done(function(){page.Update()}).MessageField("Enter the new email address in the box below.").TextField("emailAddress","Email Address",255).MessageField("You can have one email address configured as the primary address at a time. If you make the new address your primary address, any old primary address will be changed to secondary.").CheckBoxField("primary","Primary Email Address").Create()},t.RemoveEmailAddressForm=function(n){return new DialogViewModelBuilder(route.forControllerAction("Profile","RemoveEmailAddress"),"Remove Email Address","Remove",{}).SubmitData(function(){return{emailAddress:n}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the email address "+n+"?").Create()},t.RemovePhoneNumberForm=function(n){return new DialogViewModelBuilder(route.forControllerAction("Profile","RemovePhoneNumber"),"Remove Phone Number","Remove",{}).SubmitData(function(){return{phoneNumber:n}}).Done(function(){page.Update()}).MessageField("Are you sure you want to remove the phone number "+FormatPhoneNumber(n)+"?").Create()},t.SetPrimaryEmailAddressForm=function(n){return new DialogViewModelBuilder(route.forControllerAction("Profile","SetPrimaryEmailAddress"),"Set Primary Email Address","Set Primary",{}).SubmitData(function(){return{emailAddress:n}}).Done(function(){page.Update()}).MessageField("Are you sure you want to set the email address "+n+" as your primary email address?").Create()},t.SetPrimaryPhoneNumberForm=function(n){return new DialogViewModelBuilder(route.forControllerAction("Profile","SetPrimaryPhoneNumber"),"Set Primary Phone Number","Set Primary",{}).SubmitData(function(){return{phoneNumber:n}}).Done(function(){page.Update()}).MessageField("Are you sure you want to set the phone number "+FormatPhoneNumber(n)+" as your primary phone number?").Create()},t.ChangePasswordForm=function(){var n={oldPassword:ko.observable(""),newPassword:ko.observable(""),confirmPassword:ko.observable(""),score:ko.observable(0)};return new DialogViewModelBuilder(route.forControllerAction("Account","ChangePassword"),"Change Password","Update",n).SubmitData(function(n){return{oldPassword:n.oldPassword(),newPassword:n.newPassword()}}).Done(function(){t.userEventsTable.LoadData()}).MessageField("Verify your identity:").PasswordField("oldPassword","Old Password").MessageField("Enter your new password, then again to confirm:").PasswordStrenghtField("strength",ko.computed(function(){return"Strength: "+CheckPassStrength(n.newPassword())}),ko.computed(function(){return n.score(ScorePassword(n.newPassword())),n.score()>80?"green":n.score()>50?"orange":"red"})).NewPasswordField("newPassword","New Password","confirmPassword","Confirm Password").Create()},t.SuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Profile","SuppressAlerts"),"Suppress Alerts","Suppress",{suppressUntil:ko.observable(moment().add("d",1).format("YYYY-MM-DDTHH:mm:ss"))}).SubmitData(function(n){return{suppressUntilUtc:moment(n.suppressUntil()).utc().toISOString()}}).Done(function(){page.Update()}).MessageField("Are you sure you want to suppress alerts?").DateTimeField("suppressUntil","Suppress Until").Create()},t.ClearSuppressAlertsForm=function(){return new DialogViewModelBuilder(route.forControllerAction("Profile","ClearSuppressAlerts"),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){page.Update()}).MessageField("Are you sure you want to clear suppressing alerts?").Create()},t.mappingOptions={arrayChildId:{EmailAddresses:"EmailAddress",PhoneNumbers:"PhoneNumber"},extend:{"EmailAddresses[i]":function(n){tiles.makeTile(n);n.state=ko.computed(function(){return n.IsPrimary()?TileState.Active:TileState.Idle});n.blockSets.push([new Header_Block("email",new Header_Text("Email Address",ko.computed(function(){return n.IsPrimary()?"Primary":""}),n.EmailAddress,null,null,"email")),new Command_Block("Remove","Remove this email address",function(){return t.RemoveEmailAddressForm(n.EmailAddress())}),new Command_Block("Set Primary","Set this email address as primary",function(){return t.SetPrimaryEmailAddressForm(n.EmailAddress())},null,ko.computed(function(){return!n.IsPrimary()}))])},"PhoneNumbers[i]":function(n){tiles.makeTile(n);n.state=ko.computed(function(){return n.IsPrimary()?TileState.Active:TileState.Idle});n.blockSets.push([new Header_Block("phone",new Header_Text("Phone Number",ko.computed(function(){return n.IsPrimary()?"Primary":""}),ComputedFormatPhoneNumber(n.PhoneNumber),null,null,"phone")),new Command_Block("Remove","Remove this phone number",function(){return t.RemovePhoneNumberForm(n.PhoneNumber())}),new Command_Block("Set Primary","Set this phone number as primary",function(){return t.SetPrimaryPhoneNumberForm(n.PhoneNumber())},null,ko.computed(function(){return!n.IsPrimary()}))])}}},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_ModuleEventNotifications=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Profile_ModuleEventNotifications_Model,t.stateHandler=function(){return new Profile_ModuleEventNotifications_State(t)},t.titleHandler=function(){return page.SetTitle("Module Notifications","Profile",views.Profile_Index.routeHandler(),function(){return views.Profile_Index.Load()})},t.routeHandler=function(){return route.forControllerAction("Profile","ModuleEventNotifications")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.userModuleEventsTable=new AjaxFilterTableViewModel(route.forControllerAction("Profile","ModuleEventsTable"),"CreatedUtc",!1,function(n){return views.Module_AlertEventDetails.Load(n.ModuleId,n.ModuleEventId)},25);t.userModuleEventsTable.AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return route.forControllerItemAction("Module",n.ModuleId,"Details")},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Alert Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("ContactMode","Mode",!0,!0,function(n){return(n.SendSms?"SMS":"")+(n.SendEmail?(n.SendSms?" - ":"")+"Email":"")})).AddTitle("Module Events Notifications");page.Add(t.userModuleEventsTable);BaseUpdate(t)},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_ModuleEventSubscriptions=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Profile_ModuleEventSubscriptions_Model,t.stateHandler=function(){return new Profile_ModuleEventSubscriptions_State(t)},t.titleHandler=function(){return page.SetTitle("Module Subscriptions","Profile",views.Profile_Index.routeHandler(),function(){return views.Profile_Index.Load()})},t.routeHandler=function(){return route.forControllerAction("Profile","ModuleEventSubscriptions")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.moduleEventsSubsTable=new AjaxFilterTableViewModel(route.forControllerAction("Profile","ModuleEventSubscriptionsTable"),"Name",!0,function(n){return views.Module_Details.Load(n.ModuleId)},25);t.moduleEventsSubsTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("EventName","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return(n.SendSms?" SMS":"")+(n.SendEmail?" Email":"")})).AddColumn(new CommandTableColumnViewModel("Unsubscribe","delete",function(n){return page.OpenFormDialog(t.UnsubscribeFromModuleAlert(n))})).AddTitle("Module Event Subscriptions");page.Add(t.moduleEventsSubsTable);BaseUpdate(t,[t.moduleEventsSubsTable])},t.UnsubscribeFromModuleAlert=function(n){return new DialogViewModelBuilder(route.forControllerAction("Profile","UnsubscribeFromModuleAlert"),"Unsubscribe from Module Alert","Unsubscribe",{}).SubmitData(function(){return{moduleId:n.ModuleId,alertAndStatus:n.AlertAndStatus}}).Done(function(){page.Update()}).MessageField("Click unsubscribe to stop receiving alerts for the "+n.EventName+" alert.").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Profile_NetworkAlertSubscriptions=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Profile_NetworkAlertSubscriptions_Model,t.stateHandler=function(){return new Profile_NetworkAlertSubscriptions_State(t)},t.titleHandler=function(){return page.SetTitle("Network Sync Alert Subscriptions","Profile",views.Profile_Index.routeHandler(),function(){return views.Profile_Index.Load()})},t.routeHandler=function(){return route.forControllerAction("Profile","NetworkAlertSubscriptions")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.networkAlertSubsTable=new AjaxFilterTableViewModel(route.forControllerAction("Profile","NetworkAlertSubscriptionsTable"),"Name",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25);t.networkAlertSubsTable.AddColumn(new FilterTableColumnViewModel("Name","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("SyncInterval","Sync Interval",!1,!0)).AddColumn(new FilterTableColumnViewModel("IsOverdue","Status",!1,!0,function(n){return n.IsOverdue?"Overdue":"OK"})).AddColumn(new CommandTableColumnViewModel("Unsubscribe","delete",function(n){return page.OpenFormDialog(t.UnsubscribeFromNetworkSyncAlert(n))})).AddTitle("Network Sync Alert Subscriptions");page.Add(t.networkAlertSubsTable);BaseUpdate(t,[t.networkAlertSubsTable])},t.UnsubscribeFromNetworkSyncAlert=function(n){return new DialogViewModelBuilder(route.forControllerAction("Profile","UnsubscribeFromNetworkSyncAlert"),"Unsubscribe from Network Sync Alert","Unsubscribe",{}).SubmitData(function(){return{networkId:n.NetworkId}}).Done(function(){page.Update()}).MessageField("Click unsubscribe to stop receiving network sync alerts for "+n.Name+".").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Report_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Report_Details_Model,t.stateHandler=function(){return new Report_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Report.Name,"Groups",views.Group_Index.routeHandler(),function(){return views.Group_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Report",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("report-template",new Header_Text(t.viewModel.Report.Name,null,"Report Template","Created: "+FormatDateTime(moment(t.viewModel.Report.CreatedUtc())),t.viewModel.Report.CreatedUserName)),new Command_Block("Rename","Edit the report name",t.EditNameForm,null,page.HasCapabilityComputed(Capability.Report_Rename)),new Command_Block("Config","Edit the report json config",t.EditJsonForm,null,page.HasCapabilityComputed(Capability.Report_Edit)),new Command_Block("Delete","Permanently delete the report",t.DeleteReportForm,null,page.HasCapabilityComputed(Capability.Report_Delete))]),tiles.createTile().addBlockSet([new Command_Block("Run","Run this report on a group",t.RunReportForm),new Command_Block("View Types","View available module types",null,function(){return views.Report_ModuleTypes.Load(t.viewModel.Report.ReportTemplateId)},ko.computed(function(){return page.HasCapability(Capability.Group_ViewMembers)&&(page.HasCapability(Capability.Report_Create)||page.HasCapability(Capability.Report_Edit))}))])]);t.reportJson=new MessagePageItem(t.viewModel.Report.Json);page.Add(t.pageCommands);page.Add(t.reportJson);BaseUpdate(t)},t.RunReportForm=function(){return new DialogViewModelBuilder(null,"Run Report","Run",{startLocal:ko.observable(moment().add("day",-7).format("YYYY-MM-DD")),endLocal:ko.observable(moment().format("YYYY-MM-DD")),targetGroupId:ko.observable()}).Submit(function(n){views.Report_Run.Load(t.viewModel.Report.ReportTemplateId,n.targetGroupId,moment(n.startLocal()),moment(n.endLocal()))}).AjaxCompactFilterDropDownListField("targetGroupId","Group",function(n){return n.Name},function(n){return n.GroupId},route.forControllerAction("Group","AvailableGroups"),!1,null,"Name",5,1).DateField("startLocal","Start").DateField("endLocal","End").Create()},t.EditNameForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Report",t.viewModel.Report.ReportTemplateId,"Rename"),"Rename Report","Rename",{name:ko.observable(t.viewModel.Report.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.Report.Name(i.Name)}).TextField("name","Name").Create()},t.EditJsonForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Report",t.viewModel.Report.ReportTemplateId,"Update"),"Update Report","Update",{json:ko.observable(t.viewModel.Report.Json())}).SubmitData(function(n){return{json:n.json()}}).Done(function(){page.Update()}).MultilineTextField("json","Report Config").Create()},t.DeleteReportForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Report",t.viewModel.Report.ReportTemplateId,"Delete"),"Delete Report","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){history.go(-1)}).MessageField("Are you sure you want to permanently delete this report template?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of report template").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Report_ModuleTypes=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Report_ModuleTypes_Model,t.stateHandler=function(){return new Report_ModuleTypes_State(t)},t.titleHandler=function(){return page.SetTitle("Module Types",t.viewModel.ReportName,views.Report_Details.routeHandler(t.viewModel.ReportTemplateId),function(){return views.Report_Details.Load(t.viewModel.ReportTemplateId)})},t.routeHandler=function(n){return route.forControllerItemAction("Report",n,"ModuleTypes")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.TypeData=[];t.viewModel.TypeNames().forEach(function(n){t.TypeData.push({Name:n})});t.moduleTypesTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return t.ModuleTypeAlertsForm(n.Name)},25);t.moduleTypesTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Module Types");t.moduleTypesTable.SetData({Items:t.TypeData,Success:!0});page.Add(t.moduleTypesTable);BaseUpdate(t)},t.ModuleTypeAlertsForm=function(n){var i={alerts:[]};page.ViewRequests.push($.ajax(route.forControllerItemAction("Report",t.viewModel.ReportTemplateId,"ModuleTypeAlerts",{type:n}),{data:{},type:"POST"}).done(function(r){if(page.view()===t){if(r.Success===!1){page.SetMessage(r.Message);return}var u;r.Alerts.length===0?(u=new DialogViewModelBuilder(undefined,n,"Close",i),u.SectionField("No alerts available for this module type")):(u=new DialogViewModelBuilder(undefined,n,"Copy To Clipboard",i),r.Alerts.sort(function(n,t){return n.AlertAndStatus<t.AlertAndStatus?-1:1}),u.SectionField("Select alerts and submit form to copy into clipboard"),u.CheckBoxListField("alerts","Module Type Alerts",r.Alerts,function(n){return"("+pad(n.AlertAndStatus,3)+") "+n.Name},function(n){return n.AlertAndStatus}),u.Submit(function(t){if(t.alerts.length===0)page.SetMessage("No alerts selected");else{var i=JSON.stringify({Type:n,AlertAndStatus:t.alerts.sort(function(n,t){return n<t?-1:1})});CopyToClipboard(i,!0)}page.CloseFormDialog()}));page.OpenFormDialog(u.Create())}}))},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Report_Run=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Report_Run_Model,t.stateHandler=function(){return new Report_Run_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Error()!=null?"Run Report - Error":t.viewModel.Name()===""?"Run Report":t.viewModel.Name(),t.viewModel.TargetGroup,views.Group_Details.routeHandler(t.viewModel.TargetGroupId),function(){return views.Group_Details.Load(t.viewModel.TargetGroupId)})},t.routeHandler=function(n,t,i,r){return route.forControllerItemAction("Report",n,"Run",{targetGroupId:t,startLocal:moment(ko.unwrap(i)).format("YYYY-MM-DD"),endLocal:moment(ko.unwrap(r)).format("YYYY-MM-DD")})},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n,i,r,u){(r&&u||t.viewModel.Error.poke("Invalid start or end date provided."),t.sourceUrl=t.routeHandler(n,i,r.toDate(),u.toDate()),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Command_Block("Report","Run a report on this group",t.RunReportForm)])]);t.reportsTable=new AjaxFilterTableViewModel(ko.computed(function(){return t.viewModel.ReportTemplateId()===0?null:route.forControllerItemAction("Report",t.viewModel.ReportTemplateId,"RunReportTable",{targetGroupId:t.viewModel.TargetGroupId,startLocal:t.viewModel.StartLocal,endLocal:t.viewModel.EndLocal})}),"DateLocal",!1,null,25);t.reportsTable.AddColumn(new DateFilterTableColumnViewModel("DateLocal","Date",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return views.Network_Details.routeHandler(n.NetworkId)},function(n){return views.Network_Details.Load(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return views.Network_Node.routeHandler(n.NetworkId,n.NodeAddress)},function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return views.Module_Details.routeHandler(n.ModuleId)},function(n){return views.Module_Details.Load(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("Name","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Module Type",!0,!0)).AddColumn(new FilterTableColumnViewModel("Severity","Severity",!0,!0)).AddColumn(new FilterTableColumnViewModel("Message","Message",!1,!0)).AddTitle("Report Results");t.htmlblock=new HeaderPageItem(ko.computed(function(){return t.viewModel.Name()+" | "+t.reportsTable.data().length+" modules with messages"}));t.viewModel.ReportTemplateId()===0&&page.OpenFormDialog(t.RunReportForm());page.Add(t.pageCommands);t.viewModel.Error()!=null?page.Add(new MessagePageItem(t.viewModel.Error)):(page.Add(t.htmlblock),page.Add(t.reportsTable));BaseUpdate(t)},t.RunReportForm=function(){return new DialogViewModelBuilder(null,"Run Report","Run",{startLocal:ko.observable((t.viewModel.StartLocal()==null?moment().add("day",-7):moment(t.viewModel.StartLocal())).format("YYYY-MM-DD")),endLocal:ko.observable((t.viewModel.EndLocal()==null?moment():moment(t.viewModel.EndLocal())).format("YYYY-MM-DD")),reportTemplateId:ko.observable(t.viewModel.ReportTemplateId())}).Validate(function(n){var t=moment(n.startLocal(),["YYYY-MM-DD","DD-MM-YYYY"]),i=moment(n.endLocal(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?i.isValid()?t>i?"Start date must be before end date.":null:"End date is invalid.":"Start date is invalid."}).Submit(function(n){views.Report_Run.Load(n.reportTemplateId(),t.viewModel.TargetGroupId(),moment(n.startLocal()),moment(n.endLocal()))}).AjaxCompactFilterDropDownListField("reportTemplateId","Report",function(n){return n.Name},function(n){return n.ReportTemplateId},route.forControllerAction("Report","GetAvailableReports"),!1,t.viewModel.Name()===""?null:{ReportTemplateId:t.viewModel.ReportTemplateId(),Name:t.viewModel.Name()},"Name",5,1).DateField("startLocal","Start").DateField("endLocal","End").Create()},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Search_Index=function(n){function t(){var t=n.call(this)||this;return t.stateHandler=function(){return new Search_Index_State(t)},t.titleHandler=function(){return page.SetTitle("Search","Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(){return route.forControllerIndex("Search")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(){(t.sourceUrl=t.routeHandler(),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.searchForm=new SearchFormPageItem(t,t.doSearch,"search-form-default-template");t.devicesTable=new AjaxFilterTableViewModel(null,"DeviceExtAddress",!0,function(n){return views.Device_Details.Load(n.DeviceExtAddress)},25);t.devicesTable.AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Extended Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Model","Model",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("FirmwareVersion","Firmware",!0,!0)).AddTitle("Devices");t.usersTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.User_Details.Load(n.UserId)},25);t.usersTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryEmailAddress","Email Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("PrimaryPhoneNumber","Phone Number",!1,!0,function(n){return FormatPhoneNumber(n.PrimaryPhoneNumber)})).AddColumn(new FilterTableColumnViewModel("IsActive","Status",!0,!0,function(n){return n.IsActive?"Active":"Inactive"})).AddTitle("Users");t.networksTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.Network_Details.Load(n.NetworkId)},25);t.networksTable.AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!0,!0)).AddColumn(new FilterTableColumnViewModel("IsOverdue","Overdue?",!0,!0,function(n){return n.IsOverdue?"Overdue":"OK"})).AddColumn(new FilterTableColumnViewModel("IsLive","Live?",!0,!0,function(n){return n.IsLive?"Live":"Offline"})).AddColumn(new FilterTableColumnViewModel("TimeZoneName","Time Zone",!0,!0)).AddColumn(new FilterTableColumnViewModel("NodeCount","Nodes",!0,!0)).AddTitle("Networks");t.networkNodesTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.Network_Node.Load(n.NetworkId,n.NodeAddress)},25);t.networkNodesTable.AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return FormatNodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("NodeName","Node Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceType","Device",!0,!0,function(n){return n.HasDevice?n.DeviceType:"Not Assigned"})).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Ext Address",!0,!0)).AddColumn(new FilterTableColumnViewModel("NodeStatus","Node Status",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!1,!0)).AddTitle("Network Nodes");t.modulesTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.Module_Details.Load(n.ModuleId)},25);t.modulesTable.AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!0,!0)).AddColumn(new FilterTableColumnViewModel("ConfigDirty","Config",!0,!0,function(n){return n.ConfigDirty?"Updating":"Up to date"})).AddTitle("Modules");t.simsTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.Sim_Details.Load(n.SimId)},25);t.simsTable.AddColumn(new FilterTableColumnViewModel("SimNumber","Sim Number",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhoneNumber","Phone Number",!1,!0)).AddColumn(new FilterTableColumnViewModel("CellularNetworkName","Cellular Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Device",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Cancelled","Status",!1,!0,function(n){return n.Cancelled?"Cancelled":"Active"})).AddTitle("Sims");t.exportTargetsTable=new AjaxFilterTableViewModel(null,"Identifier",!0,function(n){return views.Module_ModuleExportTarget.Load(n.ModuleId,n.ModuleExportTargetId)},25);t.exportTargetsTable.AddColumn(new FilterTableColumnViewModel("Identifier","Identifier",!1,!0)).AddColumn(new FilterTableColumnViewModel("Target","Target",!1,!0)).AddColumn(new FilterTableColumnViewModel("Network","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Node","Node",!0,!0)).AddColumn(new FilterTableColumnViewModel("Module","Module",!1,!0)).AddColumn(new FilterTableColumnViewModel("Trend","Trend",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("LastExportUtc","Last Export",!1,!0)).AddColumn(new FilterTableColumnViewModel("Enabled","Status",!0,!0,function(n){return n.Enabled?"Enabled":"Disabled"})).AddTitle("Export Targets");t.applicationsTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.Application_AppVersion.Load(n.AppId,n.Version,null)},25);t.applicationsTable.AddColumn(new FilterTableColumnViewModel("ApplicationGuid","Application Guid",!1,!0,function(n){return n.ApplicationGuid.toUpperCase()})).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Version","Version",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("Assignments","Nodes",!1,!0)).AddTitle("Applications");t.purchaseOrdersTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.PurchaseOrder_Details.Load(n.PurchaseOrderId,n.SourceGroupId)},25);t.purchaseOrdersTable.AddColumn(new FilterTableColumnViewModel("ReferenceNumber","Reference Number",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Date Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!1,!0)).AddColumn(new FilterTableColumnViewModel("SourceGroup","Source Group",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("ItemsCount","Line Items",!1,!0)).AddTitle("Purchase Orders");t.billingEntitiesTable=new AjaxFilterTableViewModel(null,"Name",!0,function(n){return views.BillingEntity_Details.Load(n.BillingEntityId,null)},25);t.billingEntitiesTable.AddColumn(new FilterTableColumnViewModel("CompanyName","Company Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Address","Address",!1,!0)).AddColumn(new FilterTableColumnViewModel("City","City",!1,!0)).AddColumn(new FilterTableColumnViewModel("StateProvince","State/Province",!1,!0)).AddColumn(new FilterTableColumnViewModel("Code","Code",!1,!0)).AddColumn(new FilterTableColumnViewModel("Country","Country",!1,!0)).AddTitle("Billing Entities");t.devicesTable.enabled(!1);t.usersTable.enabled(!1);t.networksTable.enabled(!1);t.modulesTable.enabled(!1);t.simsTable.enabled(!1);t.exportTargetsTable.enabled(!1);t.applicationsTable.enabled(!1);t.purchaseOrdersTable.enabled(!1);t.billingEntitiesTable.enabled(!1);t.networkNodesTable.enabled(!1);page.Add(t.searchForm);page.Add(t.devicesTable);page.Add(t.usersTable);page.Add(t.networksTable);page.Add(t.modulesTable);page.Add(t.simsTable);page.Add(t.exportTargetsTable);page.Add(t.applicationsTable);page.Add(t.purchaseOrdersTable);page.Add(t.billingEntitiesTable);page.Add(t.networkNodesTable);BaseUpdate(t)},t.setType=function(n){t.searchForm.searchType(n);t.searchForm.searchTemplate("search-form-"+n+"-template");t.clearResults();t.searchForm.ClearFields()},t.clearResults=function(){t.usersTable.enabled(!1);t.devicesTable.enabled(!1);t.networksTable.enabled(!1);t.modulesTable.enabled(!1);t.simsTable.enabled(!1);t.exportTargetsTable.enabled(!1);t.applicationsTable.enabled(!1);t.purchaseOrdersTable.enabled(!1);t.billingEntitiesTable.enabled(!1);t.networkNodesTable.enabled(!1);t.usersTable.SetData(null);t.devicesTable.SetData(null);t.networksTable.SetData(null);t.modulesTable.SetData(null);t.simsTable.SetData(null);t.exportTargetsTable.SetData(null);t.applicationsTable.SetData(null);t.purchaseOrdersTable.SetData(null);t.billingEntitiesTable.SetData(null);t.networkNodesTable.SetData(null);t.searchForm.searchStatus("")},t.doSearch=function(){var r="",i,n={},u=ko.unwrap(t.searchForm.searchTerm),f=ko.unwrap(t.searchForm.searchTerm2),e=ko.unwrap(t.searchForm.searchTerm3);if(u===""&&f===""&&e==="")return t.searchForm.searchStatus("Please enter a search query"),!1;switch(ko.unwrap(t.searchForm.searchType)){case"devices":r=route.forControllerAction("Search","Devices");i=t.devicesTable;n.extAddress=u;n.type=f;break;case"users":r=route.forControllerAction("Search","Users");i=t.usersTable;n.name=u;n.emailAddress=f;n.phoneNumber=e;break;case"networks":r=route.forControllerAction("Search","Networks");i=t.networksTable;n.name=u;break;case"networknodes":r=route.forControllerAction("Search","NetworkNodes");i=t.networkNodesTable;n.name=u;break;case"modules":r=route.forControllerAction("Search","Modules");i=t.modulesTable;n.name=u;n.type=f;break;case"sims":r=route.forControllerAction("Search","Sims");i=t.simsTable;n.phone=u;n.simNumber=f;n.cellNetwork=e;break;case"exporttargets":r=route.forControllerAction("Search","ExportTargets");i=t.exportTargetsTable;n.identifier=u;n.target=f;break;case"applications":r=route.forControllerAction("Search","Applications");i=t.applicationsTable;n.name=u;n.applicationGuid=f;n.version=e;break;case"purchaseorders":r=route.forControllerAction("Search","PurchaseOrders");i=t.purchaseOrdersTable;n.reference=u;break;case"billingentities":r=route.forControllerAction("Search","BillingEntities");i=t.billingEntitiesTable;n.companyname=u;break;default:return t.searchForm.searchStatus("Please select a valid search type"),!1}return t.clearResults(),i.enabled(!0),i.initialLoadComplete(!1),i.loadFailed(!1),page.ViewRequests.push($.ajax(r,{data:n,type:"POST"}).done(function(n){i.initialLoadComplete(!0);i.SetData(n)}).fail(function(){i.initialLoadComplete(!0);i.SetFailed();i.SetData(null)})),!1},t}return __extends(t,n),t}(Base_View),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Section_Details=function(n){function t(){var t=n.call(this)||this;return t.viewModel=new Section_Details_Model,t.stateHandler=function(){return new Section_Details_State(t)},t.titleHandler=function(){return page.SetTitle(t.viewModel.Group.Name,"Dashboard",views.Home_Index.routeHandler(),function(){return views.Home_Index.Load()})},t.routeHandler=function(n){return route.forControllerItemAction("Section",n,"Details")},t.UrlLoad=function(){t.sourceUrl=window.location.href;LoadView_Base(t)},t.Load=function(n){(t.sourceUrl=t.routeHandler(n),t.pushState())&&LoadView_Base(t)},t.Render=function(){t.pageCommands=tiles.createPageItem().addTileSet([tiles.createTile().addBlockSet([new Header_Block("attributes",new Header_Text("Dashboard Section",null,t.viewModel.Group.Name)),new SingleValue_Block("Sort Order",t.viewModel.Group.SortOrder)]),tiles.createTile().addBlockSet([new Command_Block("Rename","Rename this section",t.RenameSectionForm),new Command_Block("Delete","Delete this section",t.DeleteSectionForm),new Command_Block("Sort Order","Specify the sort order",t.SortOrderForm)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Modules"),new Command_Block("Add","Add modules to this section",t.AddModulesForm),new Command_Block("Remove","Remove modules from this section",t.RemoveModulesForm)]),tiles.createTile().addBlockSet([new SmallHeader_Block("Meters"),new Command_Block("Add","Add meters to this section",t.AddCumulativeMetersForm),new Command_Block("Remove","Remove meters From this section",t.RemoveCumulativeMetersForm)])]);page.Add(t.pageCommands);page.Add(t.viewModel.Group);BaseUpdate(t)},t.RenameSectionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"Rename"),"Rename Dashboard Section","Rename",{name:ko.observable(t.viewModel.Group.Name())}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t.viewModel.Group.Name(i.Name)}).MessageField("Specify the new name for the section.").TextField("name","Name").Create()},t.DeleteSectionForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"Delete"),"Delete Dashboard Section","Delete",{}).SubmitData(function(){return{}}).Done(function(){views.Home_Index.Load()}).MessageField("Are you sure you want to delete this section from your Dashboard?").Create()},t.SortOrderForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"SortOrder"),"Set Section Sort Order","Update",{sortOrder:ko.observable(t.viewModel.Group.SortOrder())}).SubmitData(function(n){return{sortOrder:n.sortOrder()}}).Done(function(n,i){t.viewModel.Group.SortOrder(i.SortOrder)}).MessageField("Specify the new sort order for the section. Lower numbers sort before higher numbers. The default sort order for new sections is 100.").IntNumberField("sortOrder","Sort Order",1,1e6).Create()},t.AddModulesForm=function(){var n={network:ko.observable(0),node:ko.observable({}),modules:ko.observable({})},i=ko.observable(!0);return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"AddModules"),"Add Modules","Add & Continue",n).SubmitData(function(n){return i(!1),i(!0),{moduleIds:n.modules().map(function(n){return n.ModuleId})}}).Done(function(){page.Update()}).MessageField("Select 1 or more modules to add to this section.").AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerAction("Network","GetUserNetworks"),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return FormatNodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return n.network()?route.forControllerItemAction("Network",n.network(),"GetUserNetworkNodes"):null}),!0,null,"Name",3,1).AjaxMultiSelectListField("modules","Modules (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n},ko.computed(function(){return i()&&n.network()&&n.node()?route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"NetworkModulesNotInSection",{networkId:n.network,nodeAddress:n.node().NodeAddress}):null}),10,!0).CreateMulti()},t.RemoveModulesForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"RemoveModules"),"Remove Modules","Remove",{moduleIds:ko.observableArray([])}).SubmitData(function(n){return{moduleIds:n.moduleIds()}}).Done(function(){page.Update()}).MessageField("Select 1 or more modules to remove from this section.").AjaxMultiSelectListField("moduleIds","Modules (ctrl-click or drag for multi select)",function(n){return n.NetworkName+"/"+n.Name+" (ID: "+n.ModuleId+")"},function(n){return n.ModuleId},route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"ModulesWhichCanBeRemoved"),15,!0).Create()},t.AddCumulativeMetersForm=function(){var n={network:ko.observable(0),node:ko.observable({}),meters:ko.observable({})},i=ko.observable(!0);return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"AddCumulativeMeters"),"Add Meters","Add & Continue",n).SubmitData(function(n){return i(!1),i(!0),{cumulativeMeterIds:n.meters().map(function(n){return n.CumulativeMeterId})}}).Done(function(){page.Update()}).MessageField("Select 1 or more meters to add to this section.").AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},route.forControllerAction("Network","GetUserNetworks"),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return FormatNodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return n.network()?route.forControllerItemAction("Network",n.network(),"GetUserNetworkNodes"):null}),!0,null,"Name",3,1).AjaxMultiSelectListField("meters","Cumulative meters (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n},ko.computed(function(){return i()&&n.network()&&n.node()?route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"NetworkMetersNotInSection",{networkId:n.network,nodeAddress:n.node().NodeAddress}):null}),10,!0).CreateMulti()},t.RemoveCumulativeMetersForm=function(){return new DialogViewModelBuilder(route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"RemoveCumulativeMeters"),"Remove Meters","Remove",{cumulativeMeterIds:ko.observableArray([])}).SubmitData(function(n){return{cumulativeMeterIds:n.cumulativeMeterIds()}}).Done(function(){page.Update()}).MessageField("Select 1 or more meters to remove from this section.").AjaxMultiSelectListField("cumulativeMeterIds","Meters (ctrl-click or drag for multi select)",function(n){return n.NetworkName+"/"+n.ModuleName+":"+n.Name+" (ID: "+n.CumulativeMeterId+")"},function(n){return n.CumulativeMeterId},route.forControllerItemAction("Section",t.viewModel.Group.DashboardGroupId,"CumulativeMetersWhichCanBeRemoved"),15,!0).Create()},t.mappingOptions={arrayChildId:{CumulativeMeterTiles:"CumulativeMeterId"},extend:{Group:function(n){var i=tiles.createPageItem(),t;i.addTileSet(n.ModuleTiles);t=tiles.createPageItem();t.addTileSet(n.CumulativeMeterTiles);n.type="nested";n.items=ko.observableArray([]);n.items.push(new HeaderPageItem(n.Name));n.items.push(i);n.items.push(t)},"CumulativeMeterTiles[i]":function(n){tiles.makeTile(n);n.addBlockSet([new Header_Block(n.Icon,new Header_Text(n.Name,null,n.FormattedTotal,"Total",ko.computed(function(){return"Since "+FormatDateTime(moment(n.StartUtc()))})),new Header_Actions(function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)}),null,ko.computed(function(){return"state-"+(n.AnyLimitReached()?"faulted":n.AnyWarningReached()?"warning":"active")}))]);n.addBlockSet(n.TotalAlarms);n.addBlockSet(n.TimeAlarms)},"TotalAlarms[i]":function(n){return new PercentBar_Block(n.Name,ko.computed(function(){return n.Limit().toFixed(n.DisplayDigits())+n.Units()}),ko.computed(function(){return n.Total()/n.Limit()*100}),null,function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},"TimeAlarms[i]":function(n){return new PercentBar_Block(n.Name,n.FormattedLimit,n.Percent,null,function(){return views.CumulativeMeter_Details.Load(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))}}},tiles.applyModuleTileMapping(t.mappingOptions,"ModuleTiles"),t}return __extends(t,n),t}(Base_View),Views=function(){function n(){var n=this;this.Unauthorised=new Unauthorised;this.Error_Index=new Error_Index;this.Home_Index=new Home_Index;this.Group_Index=new Group_Index;this.Chart_Index=new Chart_Index;this.Network_Index=new Network_Index;this.Profile_Index=new Profile_Index;this.Search_Index=new Search_Index;this.Escalation_Index=new Escalation_Index;this.Group_Details=new Group_Details;this.Group_ApplicationTemplates=new Group_ApplicationTemplates;this.Group_Brandings=new Group_Brandings;this.Group_DataStreams=new Group_DataStreams;this.Group_Devices=new Group_Devices;this.Group_DeviceSummary=new Group_DeviceSummary;this.Group_EscalationLists=new Group_EscalationLists;this.Group_ExportTargets=new Group_ExportTargets;this.Group_GisDatasets=new Group_GisDatasets;this.Group_Icons=new Group_Icons;this.Group_LegalTerms=new Group_LegalTerms;this.Group_Apps=new Group_Apps;this.Group_AppModuleSources=new Group_AppModuleSources;this.Group_Modules=new Group_Modules;this.Group_Networks=new Group_Networks;this.Group_ReportTemplates=new Group_ReportTemplates;this.Group_RfidTags=new Group_RfidTags;this.Group_Roles=new Group_Roles;this.Group_SharedCollections=new Group_SharedCollections;this.Group_Sims=new Group_Sims;this.Group_Users=new Group_Users;this.Group_BillingEntities=new Group_BillingEntities;this.Group_DeviceTypes=new Group_DeviceTypes;this.Group_ModuleConfigTemplates=new Group_ModuleConfigTemplates;this.Group_MessageAccounts=new Group_MessageAccounts;this.Group_MessagePlans=new Group_MessagePlans;this.Group_NetworkSubscriptions=new Group_NetworkSubscriptions;this.Group_Notes=new Group_Notes;this.Group_SmsProviders=new Group_SmsProviders;this.Group_EmailProviders=new Group_EmailProviders;this.Group_Tags=new Group_Tags;this.Group_Attachments=new Group_Attachments;this.Group_ModuleConfiguration=new Group_ModuleConfiguration;this.Group_ModuleConversions=new Group_ModuleConversions;this.Group_NetworkStatus=new Group_NetworkStatus;this.Group_Tasks=new Group_Tasks;this.Group_UpdateNetworkFirmware=new Group_UpdateNetworkFirmware;this.Group_ConfigHistory=new Group_ConfigHistory;this.Group_GrantedRoles=new Group_GrantedRoles;this.Group_ConfigHistoryDetails=new Group_ConfigHistoryDetails;this.Group_NetworkManagers=new Group_NetworkManagers;this.Group_NetworkSims=new Group_NetworkSims;this.Admin_Index=new Admin_Index;this.Admin_Capabilities=new Admin_Capabilities;this.Admin_Firmware=new Admin_Firmware;this.Admin_CapabilityDetails=new Admin_CapabilityDetails;this.Admin_CostItems=new Admin_CostItems;this.Admin_PurchaseOrders=new Admin_PurchaseOrders;this.Admin_ErrorLogs=new Admin_ErrorLogs;this.Admin_AndroidApk=new Admin_AndroidApk;this.Admin_ServerHealth=new Admin_ServerHealth;this.Admin_EmailProviders=new Admin_EmailProviders;this.Admin_SmsProviders=new Admin_SmsProviders;this.Chart_Details=new Chart_Details;this.Chart_Module=new Chart_Module;this.CumulativeMeter_Details=new CumulativeMeter_Details;this.ApplicationTemplate_Details=new ApplicationTemplate_Details;this.ApplicationTemplate_Module=new ApplicationTemplate_Module;this.ApplicationTemplate_ContainingGroups=new ApplicationTemplate_ContainingGroups;this.Application_AppModule=new Application_AppModule;this.Application_Details=new Application_Details;this.Application_AppVersion=new Application_AppVersion;this.Application_ContainingGroups=new Application_ContainingGroups;this.AppModuleSource_Details=new AppModuleSource_Details;this.AppModuleSource_Version=new AppModuleSource_Version;this.AppModuleSource_SourceXML=new AppModuleSource_SourceXML;this.BillingEntity_Details=new BillingEntity_Details;this.BillingEntity_AddressDetails=new BillingEntity_AddressDetails;this.BillingEntity_MessageAccounts=new BillingEntity_MessageAccounts;this.BillingEntity_ContainingGroups=new BillingEntity_ContainingGroups;this.Branding_Details=new Branding_Details;this.DataStream_Details=new DataStream_Details;this.Device_Calibration=new Device_Calibration;this.Device_Details=new Device_Details;this.Device_TestReport=new Device_TestReport;this.Device_ContainingGroups=new Device_ContainingGroups;this.DeviceType_Details=new DeviceType_Details;this.DeviceType_ContainingGroups=new DeviceType_ContainingGroups;this.EscalationList_Details=new EscalationList_Details;this.EscalationList_ContainingGroups=new EscalationList_ContainingGroups;this.GisDataset_Details=new GisDataset_Details;this.GisDataset_ContainingGroups=new GisDataset_ContainingGroups;this.LegalTerms_Details=new LegalTerms_Details;this.LegalTerms_View=new LegalTerms_View;this.MessageAccount_Details=new MessageAccount_Details;this.MessageAccount_Periods=new MessageAccount_Periods;this.MessageAccount_PeriodMessages=new MessageAccount_PeriodMessages;this.MessagePlan_Details=new MessagePlan_Details;this.Module_AlertDetails=new Module_AlertDetails;this.Module_AlertEventDetails=new Module_AlertEventDetails;this.Module_ConfigHistory=new Module_ConfigHistory;this.Module_ConfigTemplates=new Module_ConfigTemplates;this.Module_Details=new Module_Details;this.Module_Map=new Module_Map;this.Module_ModuleExportTarget=new Module_ModuleExportTarget;this.Module_Subscribers=new Module_Subscribers;this.Module_Tags=new Module_Tags;this.Module_ContainingGroups=new Module_ContainingGroups;this.VirtualModule_Details=new VirtualModule_Details;this.Network_Details=new Network_Details;this.Network_Map=new Network_Map;this.Network_Node=new Network_Node;this.Network_NodePortConfig=new Network_NodePortConfig;this.Network_NodeQueryDetails=new Network_NodeQueryDetails;this.Network_NodeIoModuleDetails=new Network_NodeIoModuleDetails;this.Network_NodeIoModuleTemperatureDetails=new Network_NodeIoModuleTemperatureDetails;this.Network_NodeMap=new Network_NodeMap;this.Network_UpdateQueue=new Network_UpdateQueue;this.Network_Users=new Network_Users;this.Network_ContainingGroups=new Network_ContainingGroups;this.Network_ModuleEvents=new Network_ModuleEvents;this.Network_NodeModuleEvents=new Network_NodeModuleEvents;this.Network_NodeStatusHistory=new Network_NodeStatusHistory;this.Network_Managers=new Network_Managers;this.Network_OverdueSubscribers=new Network_OverdueSubscribers;this.Network_Tags=new Network_Tags;this.NetworkSubscription_Details=new NetworkSubscription_Details;this.Rfid_Details=new Rfid_Details;this.Role_Details=new Role_Details;this.Role_ContainingGroups=new Role_ContainingGroups;this.SharedCollection_Details=new SharedCollection_Details;this.Sim_Details=new Sim_Details;this.Sim_ContainingGroups=new Sim_ContainingGroups;this.User_Details=new User_Details;this.User_GrantedRoles=new User_GrantedRoles;this.User_ContainingGroups=new User_ContainingGroups;this.User_Subscriptions=new User_Subscriptions;this.User_ModuleEventNotifications=new User_ModuleEventNotifications;this.Note_Details=new Note_Details;this.Profile_ModuleEventNotifications=new Profile_ModuleEventNotifications;this.Profile_ModuleEventSubscriptions=new Profile_ModuleEventSubscriptions;this.Profile_NetworkAlertSubscriptions=new Profile_NetworkAlertSubscriptions;this.PurchaseOrder_Details=new PurchaseOrder_Details;this.PurchaseOrder_PackingListDetails=new PurchaseOrder_PackingListDetails;this.Report_Details=new Report_Details;this.Report_ModuleTypes=new Report_ModuleTypes;this.Report_Run=new Report_Run;this.Section_Details=new Section_Details;this.Tag_Details=new Tag_Details;this.LoadView=function(t){n[t.Type]==null?n.Unauthorised.UrlLoad():n[t.Type].UrlLoad()};this.Logout=function(){page.ViewRequests().forEach(function(n){return n.abort()});window.location.href="/Account/Logout"}}return n}(),views=new Views;window.onpopstate=function(n){n!=null&&n.state!=null&&views.LoadView(n.state)}