function isArray(n){return Object.prototype.toString.call(n)==="[object Array]"}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 CheckDiallingPrefix(n){return new RegExp("642|614|615").test(n.substr(0,3))?null:"Invalid phone number format"}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 PasswordStrengthColor(n){var t=ScorePassword(n);return t>80?"green":t>50?"orange":"red"}function ScorePassword(n){var u,r,t,i;if(!n)return 0;for(u=0,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 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 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)}}var KoMapper=function(){var t=function(n,t){return n.concat(t)},r=function(n,t){for(var r,i=t.length-1;i>=0;--i)if(r=n[t.slice(i).join(".")],undefined!==r)return r;return undefined},f=function(n,t){return r(n.arrayChildId||{},t)},e=function(n,t){return r(n.extend||{},t)||function(n){return n}},u=function(n,t,i){return e(t,i)(n)||n},o=function(n,t){var i=n();(i.length!==t.length||i.some(function(n,i){return t[i]!==n}))&&n(t)},i=function(r,e,s,h){var c=f(s,h),a,l,v;if(undefined===c){o(r,e);return}a=r();l=[];e.forEach(function(r){var v=r[c]!=null?r[c]:r,f=a.filter(function(n){return ko.unwrap(n[c])===v}).pop(),e,o;Array.isArray(r)?undefined===f?(e=ko.observableArray(),i(e,r,s,t(h,"[i]")),l.push(e)):i(f,r,s,t(h,"[i]")):undefined===f?(o={},n(o,r,s,h),l.push(u(o,s,h))):n(f,r,s,h)});v=[];a.forEach(function(n){var t=ko.unwrap(n[c]);undefined===e.filter(function(n){return n[c]===t}).pop()&&v.push(n)});(l.length||v.length)&&r(a.filter(function(n){return!v.some(function(t){return t===n})}).concat(l))},n=function(r,f,e,o){Object.keys(f).forEach(function(s){var c=f[s],h=r[s],l;Array.isArray(c)?(h===undefined&&(h=ko.observableArray(),r[s]=h),i(h,c,e,t(o,s+"[i]"))):null===c||undefined===c?(h===undefined&&(h=ko.observable(),r[s]=h),typeof h=="function"?h(null):h=null):typeof c=="object"?(l=t(o,s),h===undefined?(h={},n(h,c,e,l),r[s]=u(h,e,l)):n(h,c,e,l)):(h===undefined&&(h=ko.observable(),r[s]=h),h(c))})};return function(t,i,r,u){return n(t,i,r||{},u||[])}}(),Capability,Task,TileState,Severity,DeviceStatus,InstallationStatus,Device,CopyToClipboard,NoteInfoBuilder,Format,MapPageItem,setPageBodySize,app,Form,containingGroupsBuilder,__assign,__extends,Model;(function(n){n[n.Unknown=-1]="Unknown";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.Sim_ViewUsage=248]="Sim_ViewUsage";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.Documentation_CreatePrefix=294]="Documentation_CreatePrefix";n[n.Documentation_Create=295]="Documentation_Create";n[n.Documentation_Edit=296]="Documentation_Edit";n[n.Documentation_Add=297]="Documentation_Add";n[n.Documentation_Remove=298]="Documentation_Remove";n[n.Documentation_Delete=299]="Documentation_Delete";n[n.Documentation_CreateLink=300]="Documentation_CreateLink";n[n.Documentation_UploadImage=301]="Documentation_UploadImage";n[n.Documentation_UploadFile=302]="Documentation_UploadFile";n[n.User_UnlockUserAccount=303]="User_UnlockUserAccount";n[n.Network_ChangeMessageAccount=313]="Network_ChangeMessageAccount";n[n.User_ChangeMessageAccount=314]="User_ChangeMessageAccount";n[n.Group_HaloProvision=316]="Group_HaloProvision";n[n.NetworkSubscriptionPlans_Create=318]="NetworkSubscriptionPlans_Create";n[n.NetworkSubscriptionPlans_Remove=319]="NetworkSubscriptionPlans_Remove";n[n.NetworkSubscriptionPlans_Add=321]="NetworkSubscriptionPlans_Add";n[n.BillingEntity_ViewNetworkSubscriptionInvoice=323]="BillingEntity_ViewNetworkSubscriptionInvoice";n[n.Documentation_ViewDrafts=325]="Documentation_ViewDrafts";n[n.Module_MilkCalibrationView=326]="Module_MilkCalibrationView";n[n.Module_MilkCalibrationEdit=327]="Module_MilkCalibrationEdit";n[n.Module_ManageVirtualStatus=328]="Module_ManageVirtualStatus";n[n.Network_VerifyHardware=329]="Network_VerifyHardware"})(Capability||(Capability={})),function(n){var r,i,t;(function(n){n[n.Problem=0]="Problem";n[n.Task=1]="Task";n[n.Optional=2]="Optional"})(r=n.Level||(n.Level={}));i=function(n){return{Text:n.Text,Action:n.Action,HasCapability:function(t){return n.Capability==null||t.indexOf(n.Capability)>-1}}};t=function(n,t){return typeof n=="string"?n:n(t)};n.Create=function(n){return{GetDescription:function(i,r){return i&&n.CompleteText?t(n.CompleteText,r):t(n.IncompleteText,r)},Actions:n.Actions.map(i)}};n.Tasks={};n.changeNetworkStatusAction={Text:"Change network status",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkChangeStatus(ko.unwrap(n.NetworkId),ko.unwrap(n.StatusId),ko.unwrap(n.StatusName),!0,i)})()},Capability:Capability.Network_SetNodeStatus};n.changeNetworkNodeStatusAction={Text:"Change node status",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeChangeStatus(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.StatusId),ko.unwrap(n.StatusName),i)})()},Capability:Capability.Network_SetNodeStatus}}(Task||(Task={})),function(n){n.Source=function(n){switch(n){case"User":return"User";case"Network":return"Network";case"Node":return"Node";case"Module":return"Module";case"MessageAccount":return"Message Account";case"Device":return"Device";default:return""}};n.Icon=function(n){switch(n){case"User":return"profile";case"Network":return"network";case"Node":return"node";case"Module":return"firmware";case"MessageAccount":return"email";case"Device":return"device";default:return""}};n.Route=function(n,t){switch(n){case"User":return app.route.User_Details.NavigateTo(t.UserId);case"Network":return app.route.Network_Details.NavigateTo(t.NetworkId);case"Node":return app.route.Network_Node.NavigateTo(t.NetworkId,{nodeAddress:t.NodeAddress});case"Module":return app.route.Module_Details.NavigateTo(t.ModuleId);case"MessageAccount":return app.route.MessageAccount_Details.NavigateTo(t.MessageAccountId,{groupId:t.GroupId});case"Device":return app.route.Device_Details.NavigateTo(t.DeviceExtAddress);default:return null}}}(Task||(Task={})),function(n){n.TaskType={User_NoContactDetails:"User_NoContactDetails",User_DisabledUserModuleAlerts:"User_DisabledUserModuleAlerts",User_DisabledUserSyncAlerts:"User_DisabledUserSyncAlerts",User_EmailAlertsNoEmail:"User_EmailAlertsNoEmail",User_SMSAlertsNoPhone:"User_SMSAlertsNoPhone",User_NoPrimaryEmail:"User_NoPrimaryEmail",User_NoPrimaryPhone:"User_NoPrimaryPhone",User_InvalidEmailAddress:"User_InvalidEmailAddress",User_InvalidPhoneNumber:"User_InvalidPhoneNumber",User_NoUserAccount:"User_NoUserAccount",Network_NoMax:"Network_NoMax",Network_NoLocation:"Network_NoLocation",Network_MaxSetNoSubscribers:"Network_MaxSetNoSubscribers",Network_Overdue:"Network_Overdue",Network_OverdueAck:"Network_OverdueAck",Network_StatusDecommissionedButOnline:"Network_StatusDecommissionedButOnline",Network_StatusOnTheShelfButOnline:"Network_StatusOnTheShelfButOnline",Network_StatusUnknown:"Network_StatusUnknown",Network_UsersSubscribed:"Network_UsersSubscribed",Network_Uninstalled:"Network_Uninstalled",Network_NoGatewayNode:"Network_NoGatewayNode",Network_NoDevice:"Network_NoDevice",Network_SimNotAttached:"Network_SimNotAttached",Network_NoManagerUsers:"Network_NoManagerUsers",Network_DecommissionedWithPendingUpdates:"Network_DecommissionedWithPendingUpdates",Network_NoMessageAccount:"Network_NoMessageAccount",Node_NewerFirmwareAvailable:"Node_NewerFirmwareAvailable",Node_IncompatibleApplication:"Node_IncompatibleApplication",Node_NoApplicationAssigned:"Node_NoApplicationAssigned",Node_StatusUnknown:"Node_StatusUnknown",Node_NoLocation:"Node_NoLocation",Node_NoDevice:"Node_NoDevice",Node_OutdatedApplication:"Node_OutdatedApplication",Module_NoLocation:"Module_NoLocation",MessageAccount_NoManager:"MessageAccount_NoManager"}}(Task||(Task={})),function(n){n.Tasks[n.TaskType.MessageAccount_NoManager]=n.Create({Actions:[{Text:"Assign manager to message account",Action:function(n,t,i){return t.FormAction(function(){return Form.MessageAccountAddManager(ko.unwrap(n.MessageAccountId),i)})()},Capability:Capability.MessageAccount_Create}],IncompleteText:"Message account does not have a manager assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Module_NoLocation]=n.Create({Actions:[{Text:function(n){return"Set location on module "+ko.unwrap(n.Parameters.ModuleName)},Action:function(n,t,i){return t.FormAction(function(){return Form.ModuleSetLocation(t,ko.unwrap(n.ModuleId),ko.unwrap(n.Latitude),ko.unwrap(n.Longitude),!1,i)})()},Capability:Capability.Module_SetLocation}],IncompleteText:"No location set on module",CompleteText:"Module location assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_DecommissionedWithPendingUpdates]=n.Create({Actions:[{Text:"Cancel pending updates",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkUpdateCancelAll(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_CancelUpdate},n.changeNetworkStatusAction],IncompleteText:"Decommissioned network has pending updates"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_MaxSetNoSubscribers]=n.Create({Actions:[{Text:"Clear max sync interval",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkClearMaxSyncInterval(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_ManageDevices},{Text:"Add subscribers",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkAddSubscriberUsers(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_AddStatusSubscribers},,n.changeNetworkStatusAction],IncompleteText:"Max interval set, but no users subscribed to overdue alerts"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_NoDevice]=n.Create({Actions:[{Text:"Attach device",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeAttachDevice(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),i)})()},Capability:Capability.Network_ManageDevices},{Text:"Goto page: network node",Action:function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})}}],IncompleteText:"No device attached to gateway node",CompleteText:"Device attached to gateway node"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_NoGatewayNode]=n.Create({Actions:[{Text:"Create gateway node",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkCreateGatewayNode(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_CreateNode},n.changeNetworkStatusAction,{Text:"Goto Page: network",Action:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)}}],IncompleteText:"No gateway node present on network",CompleteText:"Gateway node created"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_NoLocation]=n.Create({Actions:[{Text:"Set location",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeSetLocationMap(t,ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),null,null,null,i)})()},Capability:Capability.Network_SetLocation},n.changeNetworkStatusAction],IncompleteText:"Gateway location unknown",CompleteText:"Gateway location assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_NoManagerUsers]=n.Create({Actions:[{Text:"Add network managers",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkAddManagerUsers(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_AddManagerUser}],IncompleteText:"No manager users assigned to network",CompleteText:"Manager users assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_NoMax]=n.Create({Actions:[{Text:"Set max interval",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkSetMaxSyncInterval(ko.unwrap(n.NetworkId),"01:00:00",i)})()},Capability:Capability.Network_ManageDevices},n.changeNetworkStatusAction],IncompleteText:"Max sync interval not configured",CompleteText:"Max sync interval configured"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_NoMessageAccount]=n.Create({Actions:[{Text:"Assign message account to network",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkSetMessageAccount(ko.unwrap(n.NetworkId),ko.unwrap(n.MessageAccountId),i)})()},Capability:Capability.Network_ChangeMessageAccount},n.changeNetworkStatusAction],IncompleteText:"Network does not have a message account assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_Overdue]=n.Create({Actions:[{Text:"Acknowledge",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkAcknowledgeOverdue(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_AcknowledgeOverdue},n.changeNetworkStatusAction,{Text:"Clear max sync interval",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkClearMaxSyncInterval(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_ManageDevices}],IncompleteText:"Overdue for Dashboard connection"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_OverdueAck]=n.Create({Actions:[n.changeNetworkStatusAction,{Text:"Clear max sync interval",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkClearMaxSyncInterval(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_ManageDevices}],IncompleteText:"Overdue and acknowledged"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_SimNotAttached]=n.Create({Actions:[{Text:"Attach SIM",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkAssignSim(ko.unwrap(n.NetworkId),i)})()},Capability:Capability.Network_ManageSim},n.changeNetworkStatusAction],IncompleteText:"Network installed but no SIM attached",CompleteText:"SIM attached"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_StatusDecommissionedButOnline]=n.Create({Actions:[n.changeNetworkStatusAction],IncompleteText:"Status decommissioned but is online"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_StatusOnTheShelfButOnline]=n.Create({Actions:[n.changeNetworkStatusAction],IncompleteText:"Status on the shelf but is online"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_StatusUnknown]=n.Create({Actions:[n.changeNetworkStatusAction],IncompleteText:"Network status has not been set"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_Uninstalled]=n.Create({Actions:[{Text:"Goto page: subscribers",Action:function(n){return app.route.Network_OverdueSubscribers.NavigateTo(n.NetworkId)},Capability:Capability.Network_RemoveStatusSubscribers},n.changeNetworkStatusAction],IncompleteText:function(n){return ko.unwrap(n.NetworkStatus)+" network has sync alert subscribers"}})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Network_UsersSubscribed]=n.Create({Actions:[{Text:"Goto page: subscribers",Action:function(n){return app.route.Network_OverdueSubscribers.NavigateTo(n.NetworkId)},Capability:Capability.Network_RemoveStatusSubscribers},{Text:"Set max interval",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkSetMaxSyncInterval(ko.unwrap(n.NetworkId),"01:00:00",i)})()},Capability:Capability.Network_ManageDevices},n.changeNetworkStatusAction],IncompleteText:"Max sync interval not set, but users subscribed"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_IncompatibleApplication]=n.Create({Actions:[{Text:"Apply application template",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeApplyApplicationTemplate(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),i)})()},Capability:Capability.ApplicationTemplate_Manage},{Text:"Assign application",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeChangeApplication(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),null,null,null,null,i)})()},Capability:Capability.Network_ChangeApplication}],IncompleteText:"Application not compatible with device"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_NewerFirmwareAvailable]=n.Create({Actions:[{Text:"Update firmware",Action:function(n,t,i){return t.FormAction(function(){return ko.unwrap(n.IsLiveNetwork)?Form.NetworkNodeUpdateLiveFirmware(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),i):Form.NetworkNodeUpdateFirmware(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),i)})()},Capability:Capability.Device_Firmware}],IncompleteText:"Newer firmware version available",CompleteText:"Firmware up to date"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_NoApplicationAssigned]=n.Create({Actions:[{Text:"Apply application template",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeApplyApplicationTemplate(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),i)})()},Capability:Capability.ApplicationTemplate_Manage},{Text:"Assign application",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeChangeApplication(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),ko.unwrap(n.DeviceTypeId),null,null,null,null,i)})()},Capability:Capability.Network_ChangeApplication}],IncompleteText:"No application assigned",CompleteText:"Application assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_NoDevice]=n.Create({Actions:[{Text:"Attach device",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeAttachDevice(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),i)})()},Capability:Capability.Network_ManageDevices}],IncompleteText:"No device attached to node",CompleteText:"Device attached to node"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_NoLocation]=n.Create({Actions:[{Text:function(n){return"Set location on node "+Format.NodeAddress(ko.unwrap(n.Parameters.NodeAddress))},Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeSetLocationMap(t,ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),null,null,null,i)})()},Capability:Capability.Network_SetLocation},n.changeNetworkNodeStatusAction],IncompleteText:"No location set on node",CompleteText:"Node location assigned"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_OutdatedApplication]=n.Create({Actions:[{Text:"Update Application",Action:function(n,t,i){return t.FormAction(function(){return Form.NetworkNodeUpdateApplication(ko.unwrap(n.NetworkId),ko.unwrap(n.NodeAddress),i)})()},Capability:Capability.Network_UpgradeApplication}],IncompleteText:function(n){return"Application version "+ko.unwrap(n.LatestAppVersionNumber)+" available"},CompleteText:"Has latest application version"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.Node_StatusUnknown]=n.Create({Actions:[n.changeNetworkNodeStatusAction],IncompleteText:"Node status has not been set"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_DisabledUserModuleAlerts]=n.Create({Actions:[{Text:"Enable user",Action:function(n,t,i){return t.FormAction(function(){return Form.UserEnable(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_ChangeActive},{Text:"Remove from module alerts",Action:function(n,t,i){return t.FormAction(function(){return Form.UserRemoveModuleAlerts(ko.unwrap(n.UserId),i)})()},Capability:Capability.Module_ManageAlertSubscription}],IncompleteText:"Disabled user has module alerts set"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_DisabledUserSyncAlerts]=n.Create({Actions:[{Text:"Enable user",Action:function(n,t,i){return t.FormAction(function(){return Form.UserEnable(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_ChangeActive},{Text:"",Action:function(n,t,i){return t.FormAction(function(){return Form.UserRemoveSyncAlerts(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_Impersonate}],IncompleteText:"Disabled user subscribed to sync alerts"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_EmailAlertsNoEmail]=n.Create({Actions:[{Text:"Add email address",Action:function(n,t,i){return t.FormAction(function(){return Form.UserAddEmailAddress(ko.unwrap(n.UserId),i)})},Capability:Capability.User_ManageContact},{Text:"Goto page: manage alerts",Action:function(n){return app.route.User_Subscriptions.NavigateTo(ko.unwrap(n.UserId))},Capability:Capability.Module_ManageAlertSubscription}],IncompleteText:"Email alerts set up with no email provided"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_InvalidEmailAddress]=n.Create({Actions:[{Text:"Update email address",Action:function(n,t,i){return t.FormAction(function(){return Form.UserEditEmailAddress(ko.unwrap(n.UserId),ko.unwrap(n.EmailAddress),i)})()},Capability:Capability.User_ManageContact}],IncompleteText:function(n){return"Email address "+ko.unwrap(n.EmailAddress)+" is not valid"},CompleteText:"Email address valid"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_InvalidPhoneNumber]=n.Create({Actions:[{Text:"Update phone number",Action:function(n,t,i){return t.FormAction(function(){return Form.UserEditPhoneNumber(ko.unwrap(n.UserId),ko.unwrap(n.PhoneNumber),i)})()},Capability:Capability.User_ManageContact}],IncompleteText:function(n){return"Phone number "+ko.unwrap(n.PhoneNumber)+" is not SMS capable"},CompleteText:"Phone number valid"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_NoContactDetails]=n.Create({Actions:[{Text:"Add contact details",Action:function(n,t,i){return t.FormAction(function(){return Form.UserAddContacts(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_ManageContact}],IncompleteText:"User contact details not set",CompleteText:"User contact details set"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_NoPrimaryEmail]=n.Create({Actions:[{Text:"Add primary email address",Action:function(n,t,i){return t.FormAction(function(){return Form.UserAddEmailAddress(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_ManageContact}],IncompleteText:"No primary email address",CompleteText:"Primary email address set"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_NoPrimaryPhone]=n.Create({Actions:[{Text:"Set primary phone number",Action:function(n,t,i){return t.FormAction(function(){return Form.UserSetPrimaryPhoneNumber(ko.unwrap(n.UserId),ko.unwrap(n.PhoneNumber),i)})()},Capability:Capability.User_ManageContact}],IncompleteText:"No primary phone number",CompleteText:"Primary phone number set"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_NoUserAccount]=n.Create({Actions:[{Text:"Create an account for user",Action:function(n,t,i){return t.FormAction(function(){return Form.UserCreateAccount(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_Create}],IncompleteText:"No account for user",CompleteText:"User has account"})}(Task||(Task={})),function(n){n.Tasks[n.TaskType.User_SMSAlertsNoPhone]=n.Create({Actions:[{Text:"Add phone number",Action:function(n,t,i){return t.FormAction(function(){return Form.UserAddPhoneNumber(ko.unwrap(n.UserId),i)})()},Capability:Capability.User_ManageContact},{Text:"Goto page: manage alerts",Action:function(n){return app.route.User_Subscriptions.NavigateTo(n.UserId)},Capability:Capability.Module_ManageAlertSubscription}],IncompleteText:"SMS alerts set up with no phone number provided"})}(Task||(Task={}));Date.now=Date.now||function(){return+new Date},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 ModuleTypes=function(){function n(){}return n.HaloFarmVat="HaloFarmMilkVatV1",n}(),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 app.route.Module_Details.NavigateTo(n.ModuleId)}},n.Network={Type:"Network",Icon:"network",Action:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)}},n.NetworkNode={Type:"NetworkNode",Icon:"node",Action:function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})}},n.Application={Type:"Application",Icon:"logic-application",Action:function(n){return app.route.Application_Details.NavigateTo(n.AppId)}},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),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,i){var r,u;return t===void 0&&(t=!0),r=document.createElement("textarea"),r.value=ko.unwrap(n),document.body.appendChild(r),r.select(),u=document.execCommand("copy"),document.body.removeChild(r),t&&u&&app.page.view().SetMessage(i!==""&&i!==undefined?"Copied "+i+" to clipboard":"Copied to clipboard"),u};ko.observable.fn.poke=function(n){this.notifySubscribers=function(){};this(n);this.notifySubscribers=function(){ko.subscribable.fn.notifySubscribers.apply(this,arguments)}};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};NoteInfoBuilder=function(n,t){return n.NetworkId?{action:function(){return t!=="Network"?app.route.Network_Details.NavigateTo(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"?app.route.Module_Details.NavigateTo(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"?app.route.CumulativeMeter_Details.NavigateTo(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"?app.route.User_Details.NavigateTo(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""}}},function(n){function t(n,t){for(var i=n+"";i.length<t;)i="0"+i;return i}function c(n,t){var i=""+n;return i.length>=t?i:new Array(t-i.length).join(" ")+i}function l(n,t){var i=n;return i!=null?i.toFixed(t):null}function i(n,t){return((n?"SMS":"")+" "+(t?"Email":"")).trim()||"None"}function a(n,t,r,u){return n===r&&t===u?i(r,u):i(n,t)+" -> "+i(r,u)}function e(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":"")+" "+t(n.minutes(),2)+" minute"+(n.minutes()!==1?"s":"")}function v(n){return n.days()>0?n.days()+" days "+t(n.hours(),2)+":"+t(n.minutes(),2)+":"+t(n.seconds(),2):n.hours()+":"+t(n.minutes(),2)+":"+t(n.seconds(),2)}function r(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 y(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 p(n){return u(n?moment.utc(n).local():null)}function u(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 w(n){return null==n?"Unknown":n.local().format("YYYY-MM-DD HH:mm:ss")}function b(n){return null==n?"Unknown":n.local().format("YYYY-MM-DD")}function k(n){return o(n?moment.utc(n):null)}function o(n){return null==n?"Not Set":n.local().format("YYYY-MM-DD")}function d(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 g(n,t){return n.local().format("YYYY-MM-DD")+" -> "+t.local().format("YYYY-MM-DD")}function nt(n,t){var u="<strong>Last Updated:<\/strong> "+r(n),i;return n!=null&&(i=moment.utc().diff(n)/1e3,i>t&&(u="<strong>Overdue:<\/stong> "+e(moment.duration(i,"seconds")))),u}function f(n){return n==null?undefined:("000"+(n||0).toString(16)).slice(-4).toUpperCase()}function tt(n){return n.NodeAddress==null?"":"("+f(n.NodeAddress)+") "+n.NodeName}function it(n,t){return null==n?"":t?"("+n+")":n}function s(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 rt(n){return n!=null?"$"+n.toFixed(2):"-"}function ut(n){var t,i;for(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"}(t||(t={})),i=0;n>1024;)n/=1024,++i;return n.toFixed(2)+" "+t[i]}function ft(n,t){var i=n*100;return(t!=null?i.toFixed(t):i)+"%"}function et(n){return ko.computed(function(){return s(ko.unwrap(n))})}function ot(n){return ko.computed(function(){return r(moment.utc(ko.unwrap(n)))})}function st(n){return ko.computed(function(){return u(moment.utc(ko.unwrap(n)))})}function ht(n){return ko.computed(function(){return f(ko.unwrap(n))})}function ct(n,t,i,r){var s=n.slice(t,i),h=s.split("\n"),f=h.filter(function(n){return n!==""}),e="",o=1,u;switch(r){case"ol":for(u=0;u<f.length;u++)e+=o+") "+f[u]+"\n",o++;break;case"ul":for(u=0;u<f.length;u++)e+="* "+f[u]+"\n",o++}return n.slice(0,t)+e+"\n"+n.slice(i)}function lt(n,t,i,r,u){var f,e,o,s,h;if(i===t)return n.slice(0,t)+r+n.slice(t);if(f=n.slice(t,i),e=f.trim(),e.length!==0){if(f.length===e.length)return n.slice(0,t)+r+e+u+n.slice(i);for(o=0,s=0;s<f.length;s++){f[s]===" "&&o++;break}return h=f.length-e.length-o,n.slice(0,t+o)+r+e+u+n.slice(i-h)}}function at(n){var t=new commonmark.Parser,i=new commonmark.HtmlRenderer;return i.render(t.parse(n))}function vt(n){var t=new commonmark.Parser,i=new commonmark.HtmlRenderer;return i.render(t.parse(h(n)))}function h(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}n.Pad=t;n.PadLeft=c;n.ToFixed=l;n.Subscription=i;n.SubscriptionChange=a;n.OverdueBy=e;n.Duration=v;n.LastUpdate=r;n.LastUpdateWithSeconds=y;n.DateTimeFromCs=p;n.DateTime=u;n.Date=w;n.DateOnly=b;n.DueDateFromCs=k;n.DueDate=o;n.DateRange=d;n.DateOnlyRange=g;n.OverdueUpdate=nt;n.NodeAddress=f;n.NodeAddressAndName=tt;n.Units=it;n.PhoneNumber=s;n.Currency=rt;n.Bytes=ut;n.Percentage=ft;n.PhoneNumberComputed=et;n.LastUpdateComputed=ot;n.DateTimeComputed=st;n.NodeAddressComputed=ht;n.FormatListHelper=ct;n.FormatHelper=lt;n.EncodeMarkdownNoEsc=at;n.EncodeMarkdown=vt;n.EscapeHtml=h}(Format||(Format={}));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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return 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.MakeObservable(f,!0),o.hasFocus=KnockoutExtensions.MakeObservable(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,e,o){var s=n.call(this,"drop-down-list")||this,h;return s.dialogModel=t,s.fieldName=i,s.displayName=r,s.optionText=u,s.optionValue=f,s.options=KnockoutExtensions.MakeObservableArray(e),h=ko.unwrap(o),h&&s.options().some(function(n){return s.optionValue(n)===s.optionValue(h)})&&s.dialogModel.model[s.fieldName](f(h)),s}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,u){var f=n.call(this,"map")||this,e,o;return f.UpdateMarkerLocation=function(){var n=f.mapMarker.getPosition();f.model.latitude(Number(n.lat().toFixed(6)));f.model.longitude(Number(n.lng().toFixed(6)));f.model.distance(f.DistanceBetweenMarkerAndOriginal())},f.SetMarkerToCurrentLocation=function(){if(!navigator.geolocation){f.model.locationMessage("Location services are not supported on this device");return}f.model.locationMessage("Searching for your current location... ");navigator.geolocation.getCurrentPosition(function(n){var t=n.coords.latitude.toFixed(6),i=n.coords.longitude.toFixed(6);f.model.latitude(Number(t));f.model.longitude(Number(i));f.model.locationMessage("Your current location is: "+t+", "+i);f.followMarker()&&f.mapModel.zoomTo(new google.maps.LatLng(n.coords.latitude,n.coords.longitude))},function(n){return f.model.locationMessage(n.code===1?"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.":n.message)},{enableHighAccuracy:!0,timeout:5e3,maximumAge:12e4})},f.DistanceBetweenMarkerAndOriginal=function(){var n=google.maps.geometry.spherical.computeDistanceBetween(f.mapMarker.getPosition(),new google.maps.LatLng(f.originalLat,f.originalLng));return n>999.99?(n/1e3).toFixed(2)+"km":n.toFixed(2)+"m"},f.ZoomToOrigin=function(){return f.mapModel.zoomTo(f.originalLat!=null&&f.originalLng!=null?new google.maps.LatLng(f.originalLat,f.originalLng):GMap.NewDefaultLatLng())},f.ZoomToMarker=function(){return f.mapModel.zoomTo(f.mapMarker.getPosition().lat()!=null&&f.mapMarker.getPosition().lng()!=null?f.mapMarker.getPosition():GMap.NewDefaultLatLng())},f.MoveMarker=function(){f.mapMarker.setPosition(f.mapModel.map.getCenter());f.UpdateMarkerLocation()},f.model=i,f.dragging=ko.observable(!1),f.followMarker=ko.observable(!1),f.originalLat=f.model.latitude()!=null?f.model.latitude():GMap.DefaultLocation.Latitude,f.originalLng=f.model.longitude()!=null?f.model.longitude():GMap.DefaultLocation.Longitude,f.mapModel=new MapPageItem(t,!1,!1,!1),(u==undefined||u)&&f.mapModel.AddItems({items:ko.observableArray([{Latitude:f.model.latitude(),Longitude:f.model.longitude()}]),getLatLng:GMap.GetLatLng,getText:function(n){return n.Latitude!=null&&n.Longitude!=null?(n.Name!=null?n.Name+" - ":"")+"lat:"+n.Latitude.toFixed(6)+", lng:"+n.Longitude.toFixed(6):""},getInfo:function(n){return n.Latitude!=null&&n.Longitude!=null?(n.Name!=null?n.Name+" - ":"")+"lat:"+n.Latitude.toFixed(6)+", lng:"+n.Longitude.toFixed(6):""},getIcon:function(){return r},getZIndex:function(){return 1}}),e=function(){f.dragging(!0);f.UpdateMarkerLocation()},o=function(){f.UpdateMarkerLocation();f.dragging(!1)},setTimeout(function(){f.mapMarker=new google.maps.Marker({icon:GMap.Icons.drag,position:f.model.latitude()==null||f.model.longitude()==null?f.mapModel.map.getCenter():{lat:f.model.latitude(),lng:f.model.longitude()},title:"Drag the marker to move the location",draggable:!0,zIndex:1e3});f.mapMarker.setMap(f.mapModel.map);f.mapMarker.addListener("drag",e);f.mapMarker.addListener("dragend",o);f.UpdateMarkerLocation();var n=document.createElement("div");GMap.CreateControlButton(n,"Get Current Location","Get current gps location","currentLocation",f.SetMarkerToCurrentLocation);GMap.CreateControlButton(n,"Move marker here","Click to move marker here","moveMarker",f.MoveMarker);GMap.CreateControlButton(n,"Zoom to marker","Click to zoom","zoomMarker",f.ZoomToMarker);GMap.CreateControlButton(n,"Zoom to original","Click to zoom","zoomOrigin",f.ZoomToOrigin);f.mapModel.map.controls[google.maps.ControlPosition.LEFT_TOP].push(n)},1),f}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.route=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.MakeObservable(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.route()?$.ajax(l.route().GetUrl(),{data:{},type:"POST"}).done(function(n){var r,t,i;for(l.originalOptions.removeAll(),r=l.originalOptions(),t=0;t<n.length;++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){Page.FailedRequestHandler(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.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.MakeObservable(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.route()?$.ajax(c.route().GetUrl(),{data:{},type:"POST"}).done(function(n){var r,t,i;for(c.originalOptions.removeAll(),r=c.originalOptions(),t=0;t<n.length;++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){Page.FailedRequestHandler(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.displayThreshold=ko.observable(c),y.size=ko.observable(l),y.visible=KnockoutExtensions.MakeObservable(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.optionText(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.allowEmptySelection||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,e){var o=n.call(this,"ajax-module-upgrade-list")||this;return o.fieldName=t,o.displayName=i,o.canDeleteModules=e,o.templateRoute=KnockoutExtensions.MakeObservable(r),o.currentModulesRoute=KnockoutExtensions.MakeObservable(u),o.selectedTemplateId=KnockoutExtensions.MakeObservable(f),o.sourceModules=ko.observableArray(),o.templateModules=ko.observableArray(),o.currentModules=ko.observableArray(),o.mappedModules=ko.observableArray(),o.matchedModules=ko.observableArray(),o.unmappedTemplates=ko.computed(o.Unmapped,o).extend({throttle:50}),o.indexMap=ko.computed(o.GetIndexMap,o).extend({throttle:50}),o.indexDel=ko.computed(o.GetIndexDel,o),o.allModules=ko.computed(o.AllModules,o).extend({throttle:50}),$.ajax(o.currentModulesRoute().GetUrl(),{data:{},type:"POST"}).done(function(n){o.sourceModules(n)}).fail(function(n){Page.FailedRequestHandler(n)}),ko.computed(function(){if(o.sourceModules(),o.templateRoute().GetUrl()&&o.selectedTemplateId())$.ajax(o.templateRoute().GetUrl(),{data:{},type:"POST"}).done(function(n){return o.ParseTemplates(n)}).fail(function(n){return Page.FailedRequestHandler(n)});else{var n=function(){return o.ResetFromSource()};typeof o.ResetFromSource=="function"&&ko.ignoreDependencies(n)}},o).extend({throttle:300}),o}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 t=this,i,r,n;for(this.currentModules.removeAll(),i=0,r=this.sourceModules();i<r.length;i++)n=r[i],this.currentModules.push({ModuleId:ko.observable(n.ModuleId),Name:ko.observable(n.Name),ShortName:ko.observable(n.ShortName),Type:ko.observable(n.Type),ModuleIndex:ko.observable(n.ModuleIndex),LastUpdateUtc:ko.observable(n.LastUpdateUtc),CompatibleTypes:ko.observableArray(n.CompatibleTypes),AutoMethod:ko.observable(null),ActionType:ko.observable(n.LastUpdateUtc==null?"delete":"orphan"),TargetIndex:ko.observable(null)});this.templateModules.removeAll();this.mappedModules.removeAll();this.matchedModules.removeAll();this.currentModules().forEach(function(n){n.ActionType.subscribe(function(i){return t.ActionChanged(i,t,n)});n.TargetIndex.subscribe(t.BeforeTargetChanged,n,"beforeChange");n.TargetIndex.subscribe(function(i){return t.TargetChanged(i,n)})})},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,s){var h=n.call(this,"ajax-multi-select-list")||this,c;return h.DoesOptionMatchFilter=function(n){return!h.filterString()||h.ValueOf(n).toLowerCase().indexOf(h.filterString().toLowerCase())>-1},h.IncludeOption=function(n){return h.DoesOptionMatchFilter(n)},h.filterString=ko.observable(""),h.fieldName=t,h.displayName=i,h.optionText=r,h.optionValue=u,h.route=KnockoutExtensions.MakeObservable(f),h.options=ko.observableArray(s!=null?s:[]),h.originalOptions=ko.observableArray(s!=null?s:[]),h.loaded=ko.observable(!1),h.failed=ko.observable(!1),h.size=e,h.searchable=ko.observable(o||!1),h.intialValues=ko.observableArray(s),c=!0,ko.computed(function(){h.loaded(!1);h.failed(!1);h.route()?$.ajax(h.route().GetUrl(),{data:{},type:"POST"}).done(function(n){var i,r,t;for(c||(h.options.removeAll(),h.originalOptions.removeAll()),c=!1,i=h.options(),r=h.originalOptions(),t=0;t<n.length;++t)i[t]=n[t],r[t]=n[t];h.options.valueHasMutated();h.originalOptions.valueHasMutated();h.loaded(!0);h.failed(!1)}).fail(function(n){Page.FailedRequestHandler(n);h.loaded(!1);h.failed(!0)}):(h.options([]),h.loaded(!0),h.failed(!1))},h).extend({throttle:300}),ko.computed(function(){var n=h.filterString();h.FilterOptions(JSON.parse(JSON.stringify(h.originalOptions())),n)},h).extend({throttle:100}),h}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,c,l,h;for(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(),c=s.options(),l=s.originalOptions(),h=0;h<f.length;++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.MakeObservable(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.MakeObservable(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.MakeObservable(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.route=KnockoutExtensions.MakeObservable(f),e.availableOptions=ko.observableArray(),e.selectedOptions=ko.observableArray(),e.loaded=ko.observable(!1),e.failed=ko.observable(!1),setTimeout(function(){$.ajax(e.route().GetUrl(),{data:{},type:"POST"}).done(function(n){e.availableOptions.removeAll();e.selectedOptions.removeAll();for(var t=0;t<n.length;++t)e.availableOptions.push(n[t]);e.loaded(!0);e.failed(!1)}).fail(function(n){Page.FailedRequestHandler(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,v){this.route=KnockoutExtensions.MakeObservable(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.closable=a;this.submitFunc=c;this.showOptionalCheckbox=ko.observable(!1);this.visible=KnockoutExtensions.MakeObservable(v,!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,!0)}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.PasswordStrengthField=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,f){return this.dialogModel.fields.push(new DialogDropDownListFieldViewModel(this.dialogModel,n,t,i,r,u,f)),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,r){return this.dialogModel.fields.push(new DialogMapFieldViewModel(n,t,i,r)),this},n.prototype.AjaxDropDownListField=function(n,t,i,r,u,f,e){return this.dialogModel.fields.push(new DialogAjaxDropDownListFieldViewModel(this.dialogModel,n,t,i,r,u,f,e)),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,f){return this.dialogModel.fields.push(new DialogAjaxModuleUpgradeFieldViewModel(n,t,i,r,u,f)),this},n.prototype.AjaxMultiSelectListField=function(n,t,i,r,u,f,e,o){return this.dialogModel.fields.push(new DialogAjaxMultiSelectListFieldViewModel(n,t,i,r,u,f,e,o)),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.CreateLogin=function(){return this.dialogModel.closable=!1,this.dialogModel.downloadForm=!1,this.dialogModel.multiSubmit=!1,this.dialogModel},n.prototype.Create=function(){return this.dialogModel.closable=!0,this.dialogModel.downloadForm=!1,this.dialogModel.multiSubmit=!1,this.dialogModel},n.prototype.CreateDownload=function(){return this.dialogModel.closable=!0,this.dialogModel.downloadForm=!0,this.dialogModel.multiSubmit=!1,this.dialogModel},n.prototype.CreateMulti=function(){return this.dialogModel.closable=!0,this.dialogModel.downloadForm=!1,this.dialogModel.multiSubmit=!0,this.dialogModel},n}(),FormDialog=function(){function n(n,t,i){this.close=n;this.showMessage=t;this.model=i;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,f;if(this.model.submitFunc)this.Validate(n)&&this.model.submitFunc(this.model.model);else if(this.model.route()){if(this.Validate(n))if(this.model.downloadForm){this.showMessage("Downloading file");this.Close();$("#hiddenForm").remove();r=$("<form>").attr({id:"hiddenForm",action:this.model.route().GetUrl(),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(f=0;f<i.length;++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.route().GetUrl(),{contentType:"application/json",data:JSON.stringify(this.model.GetSubmitData()),type:"POST"}).done(function(n){return e.SubmitSucceeded(n)}).fail(function(n){Page.FailedRequestHandler(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(){this.close()},n}(),InlineDialog=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,f;if(this.model.submitFunc)this.Validate(n)&&this.model.submitFunc(this.model.model);else if(this.model.route()){if(this.Validate(n))if(this.model.downloadForm){this.showMessage("Downloading file");this.Close();$("#hiddenForm").remove();r=$("<form>").attr({id:"hiddenForm",action:this.model.route().GetUrl(),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(f=0;f<i.length;++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.route().GetUrl(),{contentType:"application/json",data:JSON.stringify(this.model.GetSubmitData()),type:"POST"}).done(function(n){return e.SubmitSucceeded(n)}).fail(function(n){Page.FailedRequestHandler(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(){this.close()},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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return 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(t,i){return n.Create(this,t,i)}return n.Create=function(n,t,i){return n.type=t,n.tileSets=ko.observableArray([]),n.items=KnockoutExtensions.MakeObservableArray(i),n.hasEnabledTiles=ko.computed(function(){for(var t,e,i,r,u=ko.unwrap(n.tileSets),o=u?u.length:0,f=0;f<o;++f)for(t=ko.unwrap(u[f]),e=t?t.length:0,i=0;i<e;++i)if(r=ko.unwrap(t[i]),r&&(!r.hasEnabledBlocks||r.hasEnabledBlocks()))return!0;return!1}),n.update=function(){return n.items().forEach(function(n){return n.update&&n.update()})},n.setViewModelReady=function(){return n.items().forEach(function(n){return n.setViewModelReady()})},n.addTileSet=function(t){return n.tileSets.push(t),n},n},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=ko.observableArray(),f.state=KnockoutExtensions.MakeObservable(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),HtmlImagePageItem=function(n){function t(t,i,r,u){var f=n.call(this,"html-image")||this;return f.imageData=t,f.height=i,f.width=r,f.visible=KnockoutExtensions.MakeObservable(u),f}return __extends(t,n),t}(PageItem),HtmlChartPageItem=function(n){function t(t,i){var r=n.call(this,"html-chart")||this;return r.showOldCalibration=ko.observable(!0),r.showNewCalibration=ko.observable(!0),r.large=ko.observable(!1),r.highlighted=ko.observable(),r.canvas=null,r.collections=t,r.oldSlope=i.oldSlope,r.oldIntercept=i.oldIntercept,r.newSlope=i.newSlope,r.newIntercept=i.newIntercept,r}return __extends(t,n),t.prototype.CalculateSizes=function(){var f=this.large()?1400:800,s=this.large()?800:400,r=1,u=1,t=f-201,n=s-2,h=r+t+10,c=u,l=f-t-12,a=n,i=this.collections().filter(function(n){return n.Matches()}),e=i.length>0?Math.ceil(i.map(function(n){return n.DeviceLevelDelta()}).reduce(function(n,t){return Math.max(n,t)})*1.05/200)*200:1,o=i.length>0?Math.ceil(i.map(function(n){return n.ProcessorVolume()}).reduce(function(n,t){return Math.max(n,t)})*1.05/1e3)*1e3:1,v=function(n){return n/e*t+r},y=function(t){return n-t/o*n+u},p=function(n){return(n-r)/t*e},w=function(t){return(n-t-u)/n*o};return{width:f,height:s,chartX:r,chartY:u,chartWidth:t,chartHeight:n,infoWindowX:h,infoWindowY:c,infoWindowWidth:l,infoWindowHeight:a,matchingCollections:i,maxLevel:e,maxVolume:o,getX:v,getY:y,levelFromX:p,volumeFromY:w}},t.prototype.OnClick=function(n){var i=n.offsetX,r=n.offsetY,t=this.FindCollection(i,r);n.ctrlKey||n.shiftKey||n.metaKey?t.OnSelectToggle():this.highlighted(t)},t.prototype.FindCollection=function(n,t){var i=this,r;return!this.sizes||this.sizes.matchingCollections.length<1?null:(r=function(r){var u=i.sizes.getX(r.DeviceLevelBefore()),f=i.sizes.getY(r.ProcessorVolume());return(n-u)*(n-u)+(t-f)*(t-f)},this.sizes.matchingCollections.map(function(n){return{distance2:r(n),collection:n}}).reduce(function(n,t){return t.distance2<n.distance2?t:n},{distance2:401,collection:null}).collection)},t.prototype.Render=function(){var r=this,n,l,a,v,u,t,y,f,e,o,s,h,c;if(this.canvas){if(this.sizes=this.CalculateSizes(),n=this.canvas.getContext("2d"),this.canvas.style.width=this.sizes.width+"px",this.canvas.style.height=this.sizes.height+"px",this.canvas.width=this.sizes.width,this.canvas.height=this.sizes.height,n.clearRect(0,0,this.sizes.width,this.sizes.height),l=function(t,i,u){n.fillStyle=u;n.beginPath();n.arc(r.sizes.getX(t),r.sizes.getY(i),3,0,Math.PI*2,!1);n.fill()},a=function(n){return n.IncludeInCalibration()?"rgba(40, 175, 73, 0.4)":"rgba(255, 0, 0, 0.4)"},n.lineWidth=2,n.strokeStyle="#909090",n.rect(this.sizes.chartX,this.sizes.chartY,this.sizes.chartWidth,this.sizes.chartHeight),n.stroke(),n.lineWidth=2,n.strokeStyle="#909090",n.rect(this.sizes.infoWindowX,this.sizes.infoWindowY,this.sizes.infoWindowWidth,this.sizes.infoWindowHeight),n.stroke(),v=function(t){n.fillStyle="#000000";n.font="12px monospace";for(var i=0;i<t.length;++i)n.fillText(t[i],r.sizes.infoWindowX+5,r.sizes.infoWindowY+i*12+17,r.sizes.infoWindowWidth-10)},this.sizes.matchingCollections.forEach(function(t){if(l(t.DeviceLevelBefore(),t.ProcessorVolume(),a(t)),t.IsSelected()){var i=r.sizes.getX(t.DeviceLevelBefore()),u=r.sizes.getY(t.ProcessorVolume());n.strokeStyle="rgba(44, 130, 201, 1)";n.beginPath();n.arc(i,u,5,0,Math.PI*2,!1);n.stroke()}}),this.highlighted()){var i=this.highlighted(),p=this.sizes.getX(i.DeviceLevelBefore()),w=this.sizes.getY(i.ProcessorVolume());n.strokeStyle="#ffffff";n.beginPath();n.arc(p,w,5,0,Math.PI*2,!1);n.stroke();u=10;t=[];t.push("Selected Collection");t.push("");t.push(Format.DateTime(moment(i.TimeUtc())));t.push("");t.push("");i.DeviceVolumeBefore()===null?t.push("No Device Data"):(t.push("Device"),t.push(""),t.push("Temperature "+Format.PadLeft(Format.ToFixed(i.DeviceTemperature(),1)+" °C",u)),t.push("Volume      "+Format.PadLeft(i.DeviceVolumeBefore()+" L ",u)),t.push("Level       "+Format.PadLeft(i.DeviceLevelBefore()+" mm",u)));t.push("");t.push("");i.ProcessorVolume()===null?t.push("No Processor Data"):(t.push("Processor"),t.push(""),t.push("Temperature "+Format.PadLeft(Format.ToFixed(i.ProcessorTemperature(),1)+" °C",u)),t.push("Volume      "+Format.PadLeft(i.ProcessorVolume()+" L ",u)));t.push("");t.push("");i.DeviceVolumeBefore()!==null&&i.ProcessorVolume()!==null&&(t.push("Difference"),t.push(""),t.push("Temperature "+Format.PadLeft(Format.ToFixed(Math.abs(i.DeviceTemperature()-i.ProcessorTemperature()),1)+" °C",u)),t.push("Volume      "+Format.PadLeft(Math.abs(i.DeviceVolumeBefore()-i.ProcessorVolume())+" L ",u)),this.newIntercept()&&this.newSlope()&&(y=Math.round((i.DeviceLevelBefore()*this.newSlope()+this.newIntercept())/25)*25,t.push("New Volume  "+Format.PadLeft(Math.abs(y-i.ProcessorVolume())+" L ",u))));t.push("");t.push("");f=function(n){return n?t.push(n):null};f(i.IsOutlier()?"Outlier":i.IsNotOutlier()?"Not Outlier":"");f(i.DeviceMilkingInProgress()?"Milking in Progress":"");f(i.IncludeInCalibration()?"Included":"Excluded");f(i.DeviceLevelAfter()?"Partial":"Emptied");v(t)}e=function(t,i,u){n.lineWidth=2;n.strokeStyle=u;n.beginPath();t>=0?(n.lineTo(r.sizes.getX(0),r.sizes.getY(t)),n.lineTo(r.sizes.getX(r.sizes.maxLevel),r.sizes.getY(i*r.sizes.maxLevel+t))):(n.lineTo(r.sizes.getX(-t/i),r.sizes.getY(0)),n.lineTo(r.sizes.getX(r.sizes.maxLevel),r.sizes.getY(i*r.sizes.maxLevel+t)));n.stroke()};this.showOldCalibration()&&(o=this.oldIntercept(),s=this.oldSlope(),o&&s&&e(o,s,"rgba(0, 64, 192, 0.5)"));this.showNewCalibration()&&(h=this.newIntercept(),c=this.newSlope(),h&&c&&e(h,c,"rgba(40, 175, 73, 0.7)"));this.sizes.matchingCollections.length<1&&(n.fillStyle="#000000",n.font="12px monospace",n.fillText("No matching collections",this.sizes.chartX+5,this.sizes.chartY+17,this.sizes.chartWidth-10))}},t}(PageItem);ko.bindingHandlers.calibrationChart={update:function(n,t,i,r){r.canvas=n;r.Render()}};var ActionButton=function(){function n(n,t,i,r){this.Icon=KnockoutExtensions.MakeObservable(n);this.Title=KnockoutExtensions.MakeObservable(t);this.Action=i;this.Enable=KnockoutExtensions.MakeObservable(r)}return n}(),ActionTextButton=function(){function n(n,t,i,r,u){this.Text=KnockoutExtensions.MakeObservable(n);this.Title=KnockoutExtensions.MakeObservable(t);this.Action=i;this.CssClass=KnockoutExtensions.MakeObservable(r);this.Enable=KnockoutExtensions.MakeObservable(u)}return n}(),InlineEditorPageItem=function(n){function t(t,i,r,u,f,e){var o=n.call(this,"inline-dialog")||this;return o.buttons=ko.observableArray([]),o.editorButtons=ko.observableArray([]),o.submitting=ko.observable(!1),o.update=function(){o.autoSave()&&$.ajax(app.route.Document_AutoSaveDocument.For(null,{prefix:o.documentationPrefix}).GetUrl(),{contentType:"application/json",data:JSON.stringify({documentId:o.documentationId,content:o.content()}),type:"POST"}).done(function(){console.log("document autosaved.")}).fail(function(){console.log("failed to autosave.")})},o.slug=KnockoutExtensions.MakeObservable(t),o.title=KnockoutExtensions.MakeObservable(u),o.content=KnockoutExtensions.MakeObservable(f),o.autoSave=KnockoutExtensions.MakeObservable(e),o.documentationPrefix=i,o.documentationId=r,o}return __extends(t,n),t.prototype.addButton=function(n){this.buttons.push(n)},t.prototype.addEditorButton=function(n){this.editorButtons.push(n)},t.prototype.formSubmit=function(){return null},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.MakeObservable(e,TileState.Idle),h.enabled=KnockoutExtensions.MakeObservable(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.MakeObservable(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.MakeObservable(t,!1),i}return __extends(t,n),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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),GMap;(function(n){var r=function(){function n(){}return n.Latitude=-41.113437,n.Longitude=173.841891,n}(),i,t,u,f,e,o;n.DefaultLocation=r;i="/Images/markers.png";t="/Images/markers-v3.png";n.NewDefaultLatLng=function(){return new google.maps.LatLng(r.Latitude,r.Longitude)};n.CreateMapOptions=function(){return{center:n.NewDefaultLatLng(),zoom:5,mapTypeId:google.maps.MapTypeId.HYBRID,maxZoom:19}};n.CreateControlButton=function(n,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.style.minWidth="60px",e.innerHTML=t,f.appendChild(e),google.maps.event.addDomListener(f,"click",u),f};n.CreateDrawingManager=function(){return 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}})};n.GetLatLng=function(n){return ko.unwrap(n.Latitude)&&ko.unwrap(n.Longitude)?new google.maps.LatLng(ko.unwrap(n.Latitude),ko.unwrap(n.Longitude)):null};n.LineSymbol={path:google.maps.SymbolPath.FORWARD_CLOSED_ARROW,strokeWeight:3,strokeColor:"#ff0000"};n.Icons={redDotMarker:{url:i,size:new google.maps.Size(11,11),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(5.5,5.5)},greenDotMarker:{url:i,size:new google.maps.Size(11,11),origin:new google.maps.Point(11,0),anchor:new google.maps.Point(5.5,5.5)},blueDotMarker:{url:i,size:new google.maps.Size(11,11),origin:new google.maps.Point(22,0),anchor:new google.maps.Point(5.5,5.5)},gatewayGreen:{url:t,size:new google.maps.Size(28,28),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(14,14)},gatewayBlue:{url:t,size:new google.maps.Size(28,28),origin:new google.maps.Point(28,0),anchor:new google.maps.Point(14,14)},gatewayRed:{url:t,size:new google.maps.Size(28,28),origin:new google.maps.Point(56,0),anchor:new google.maps.Point(14,14)},nodeGreen:{url:t,size:new google.maps.Size(28,28),origin:new google.maps.Point(0,28),anchor:new google.maps.Point(14,14)},nodeBlue:{url:t,size:new google.maps.Size(28,28),origin:new google.maps.Point(28,28),anchor:new google.maps.Point(14,14)},nodeRed:{url:t,size:new google.maps.Size(28,28),origin:new google.maps.Point(56,28),anchor:new google.maps.Point(14,14)},moduleGreen:{url:t,size:new google.maps.Size(20,20),origin:new google.maps.Point(4,60),anchor:new google.maps.Point(10,10)},moduleBlue:{url:t,size:new google.maps.Size(20,20),origin:new google.maps.Point(32,60),anchor:new google.maps.Point(10,10)},moduleRed:{url:t,size:new google.maps.Size(20,20),origin:new google.maps.Point(60,60),anchor:new google.maps.Point(10,10)},drag:{url:t,size:new google.maps.Size(28,32),origin:new google.maps.Point(0,84),anchor:new google.maps.Point(14,16)}};u=function(){function n(){}return n}();n.ItemsInfo=u;f=function(){function n(){}return n}();n.PolygonsInfo=f;e=function(){function n(){}return n}();n.PolylinesInfo=e;o=function(){function n(){}return n}();n.TrailsInfo=o})(GMap||(GMap={}));MapPageItem=function(n){function t(t,i,r,u){var f=n.call(this,"map")||this;return f.zoomToBounds=function(){var n,a=function(t,i){t&&(n?(n.extend(t),i&&n.extend(i)):n=new google.maps.LatLngBounds(t,i))},t,o,v,i,s,h,r,c,y,u,l,e;if(f.itemSets!=null)for(t=0,o=f.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(f.trailSets!=null)for(r=0,c=f.trailSets;r<c.length;r++)for(y=c[r],u=0,l=y.trails();u<l.length;u++)e=l[u],e.SouthWest&&a(e.SouthWest,e.NorthEast);n&&f.map.fitBounds(n)},f.zoomTo=function(n){f.map.fitBounds(new google.maps.LatLngBounds(n))},f.zoomToPolygons=function(){for(var u,t,e,h,i,o,c,n,l=function(t){t&&(n?n.extend(new google.maps.LatLng(ko.unwrap(t.Latitude),ko.unwrap(t.Longitude))):n=new google.maps.LatLngBounds({lat:ko.unwrap(t.Latitude),lng:ko.unwrap(t.Longitude)}))},r=0,s=f.polygonSets;r<s.length;r++)if(u=s[r],u.polygons!=null)for(t=0,e=u.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&&f.map.fitBounds(n)},f.hasPolygons=function(){return f.polygonSets!=null&&f.polygonSets.length>0&&f.polygonSets.some(function(n){return n.polygons.length>0})},f.updateSize=function(){var n=f.map.getCenter();google.maps.event.trigger(f.map,"resize");f.map.setCenter(n)},f.mapZoomChanged=function(){for(var u,n,i,e,o=f.map.getZoom()>=17,t=0,r=f.trailSets;t<r.length;t++)for(u=r[t],n=0,i=u.trails();n<i.length;n++)e=i[n],e.map.line.setOptions({icons:o?[{icon:GMap.LineSymbol,offset:"50%"}]:[]})},f.addItem=function(n,t){var i=new google.maps.Marker({position:null,map:f.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(){f.infoWindow.setContent("<div>"+t.getInfo(n)+"<\/div>");f.infoWindow.open(f.map,i)});n.map={marker:i,deleted:function(){i.setMap(null)}}},f.addItemSet=function(n){for(var r,t=0,i=n.items();t<i.length;t++)r=i[t],f.addItem(r,n);n.items.subscribe(function(t){for(var i=0;i<t.length;++i)switch(t[i].status){case"added":f.addItem(t[i].value,n);break;case"deleted":t[i].value.map&&t[i].value.map.deleted()}},null,"arrayChange")},f.addPolyline=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(f.map)},f.addPolylineSet=function(n){var t,i,r;if(ko.unwrap(n.polylines)){for(t=0,i=ko.unwrap(n.polylines);t<i.length;t++)r=i[t],f.addPolyline(r,n);n.polylines.subscribe(function(t){for(var i=0;i<t.length;++i)switch(t[i].status){case"added":f.addPolyline(t[i].value,n);break;case"deleted":t[i].value.map&&t[i].value.map.deleted()}},null,"arrayChange")}},f.addPolygon=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 r=t.getInfo(n);r!=null&&(f.infoWindow.setContent("<div>"+r+"<\/div>"),f.infoWindow.setPosition(i.latLng),f.infoWindow.open(f.map))});ko.computed(function(){i.setPaths(t.getLatLng(n))});n.map={polygon:i,deleted:function(){i.setMap(null)}};i.setMap(f.map)},f.addPolygonSet=function(n){var t,i,r;if(ko.unwrap(n.polygons)){for(t=0,i=n.polygons();t<i.length;t++)r=i[t],f.addPolygon(r,n);n.polygons.subscribe(function(t){for(var i=0;i<t.length;++i)switch(t[i].status){case"added":f.addPolygon(t[i].value,n);break;case"deleted":t[i].value.map&&t[i].value.map.deleted()}},null,"arrayChange")}},f.createLozengeArea=function(n,t){var i;if(null==n||null==t)return[];var r=[],f=12,e=5,u=google.maps.geometry.spherical,o=u.computeHeading(n,t);for(i=0;i<=f;++i)r.push(u.computeOffset(t,e,o+90-i*15));for(i=0;i<=f;++i)r.push(u.computeOffset(n,e,o-90-i*15));return r},f.addTrail=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}),r;google.maps.event.addListener(i,"click",function(t){var i=moment(n.StartUtc),r=moment(n.EndUtc);i.isSame(r,"day")?f.infoWindow.setContent("<div>"+i.local().format("YYYY-MM-DD")+"<br/>"+i.local().format("HH:mm:ss")+" to "+r.local().format("HH:mm:ss")+"<\/div>"):f.infoWindow.setContent("<div>"+i.local().format("YYYY-MM-DD HH:mm:ss")+"<br/>"+r.local().format("YYYY-MM-DD HH:mm:ss")+"<\/div>");f.infoWindow.setPosition(t.latLng);f.infoWindow.open(f.map)});r=t.getPath();ko.computed(function(){var u,e,i;for(r.clear(),u=ko.unwrap(n.Points),e=u.length,i=0;i<e;++i)r.setAt(i,new google.maps.LatLng(u[i].lat,u[i].lng));if(e>5){var s=75,h=3e4/s,o=0,c=setInterval(function(){var n=t.get("icons");n&&n.length>=1&&(o=(o+1)%h,n[0].offset=o/(h/100)+"%",t.set("icons",n))},s);f.view.ExtendDispose(function(){return clearInterval(c)})}});i.setPaths(f.createLozengeArea(r.getAt(0),r.getAt(1)));i.setMap(f.map);n.SetAreaVisible=function(n){return i.setVisible(n)};t.setMap(f.map);n.map={line:t,deleted:function(){t.setMap(null);i.setMap(null)}}},f.addTrailSet=function(n){n.trails.subscribe(function(n){for(var t,i=0,r=n;i<r.length;i++)t=r[i],t.status==="added"?f.addTrail(t.value):t.status==="deleted"&&t.value.map&&t.value.map.deleted()},null,"arrayChange")},f.view=t,f.expand=ko.observable(i),f.showAllNodesButton=KnockoutExtensions.MakeObservable(r,!0),f.showAllPolygonsButton=KnockoutExtensions.MakeObservable(u,!0),f.markers=[],f.itemSets=[],f.polylineSets=[],f.polygonSets=[],f.trailSets=[],f.infoWindow=new google.maps.InfoWindow,f}return __extends(t,n),t.prototype.AddItems=function(n){this.itemSets.push(n)},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){r.mapModel!=null&&(r=r.mapModel);r.map=new google.maps.Map(n,GMap.CreateMapOptions());google.maps.event.addDomListener(window,"resize",r.updateSize);google.maps.event.addListener(r.map,"zoom_changed",r.mapZoomChanged);google.maps.event.addListener(r.map,"click",function(){return r.infoWindow.close()});r.itemSets&&r.itemSets.forEach(function(n){return r.addItemSet(n)});r.polylineSets&&r.polylineSets.forEach(function(n){return r.addPolylineSet(n)});r.polygonSets&&r.polygonSets.forEach(function(n){return r.addPolygonSet(n)});r.trailSets&&r.trailSets.forEach(function(n){return r.addTrailSet(n)});r.hasPolygons()?r.zoomToPolygons():r.zoomToBounds();var u=document.createElement("div");r.showAllNodesButton()&&GMap.CreateControlButton(u,"All Nodes","Show all nodes","zoomNodes",r.zoomToBounds);r.showAllPolygonsButton()&&GMap.CreateControlButton(u,"All Polygons","Show all polygons","zoomPolygons",r.zoomToPolygons);r.map.controls[google.maps.ControlPosition.LEFT_TOP].push(u)}};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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return 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,o){var s=n.call(this,o?"pre-text":"text",t,i,r,u,f,e)||this;return s.filterable=!0,s}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,"number",t,i,r,u,f,e)||this;return 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),TaskActionsTextTableColumnViewModel=function(n){function t(t,i,r,u,f,e,o,s){var h=n.call(this,"task-actions",t,i,s||!1,!1)||this;return h.view=r,h.formCallback=u&&u(),h.rowData=e,h.enabled=o||function(){return!0},h.taskActions=function(n){return Task.Tasks[ko.unwrap(n.Description)].Actions.filter(function(n){return n.HasCapability(f)})},h}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+":"+Format.NodeAddress(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 app.route.Module_AlertDetails.NavigateTo(t.ModuleId,{alertAndStatus:t.AlertAndStatus});case TargetTypes.App:return app.route.Application_Details.NavigateTo(t.AppId);case TargetTypes.ApplicationTemplate:return app.route.ApplicationTemplate_Details.NavigateTo(t.ApplicationTemplateId);case TargetTypes.AppModuleSource:return app.route.AppModuleSource_Details.NavigateTo(t.AppModuleSourceId);case TargetTypes.BillingEntity:return app.route.BillingEntity_Details.NavigateTo(t.BillingEntityId);case TargetTypes.CumulativeMeter:return app.route.CumulativeMeter_Details.NavigateTo(t.CumulativeMeterId);case TargetTypes.CumulativeMeterTimeAlarm:case TargetTypes.CumulativeMeterTotalAlarm:return ko.unwrap(t.CumulativeMeterId)>0?app.route.CumulativeMeter_Details.NavigateTo(t.CumulativeMeterId):null;case TargetTypes.DataStream:return app.route.DataStream_Details.NavigateTo(t.DatastreamId);case TargetTypes.Device:return app.route.Device_Details.NavigateTo(t.DeviceExtAddress);case TargetTypes.DeviceType:return app.route.DeviceType_Details.NavigateTo(t.DeviceTypeId);case TargetTypes.EscalationList:return app.route.EscalationList_Details.NavigateTo(t.EscalationListId);case TargetTypes.GisDataset:return app.route.GisDataset_Details.NavigateTo(t.GisDatasetId);case TargetTypes.Group:return app.route.Group_Details.NavigateTo(t.GroupId);case TargetTypes.LegalTerms:return app.route.LegalTerms_Details.NavigateTo(t.LegalTermsId);case TargetTypes.ModuleConfigTemplate:return app.route.Module_ConfigTemplates.NavigateTo(t.ModuleConfigTemplateId);case TargetTypes.Module:return app.route.Module_Details.NavigateTo(t.ModuleId);case TargetTypes.Network:return app.route.Network_Details.NavigateTo(t.NetworkId);case TargetTypes.NetworkNode:return app.route.Network_Node.NavigateTo(t.NetworkId,{nodeAddress:t.NodeAddress});case TargetTypes.Note:return app.route.Note_Details.NavigateTo(t.NoteId);case TargetTypes.PurchaseOrder:return app.route.PurchaseOrder_Details.NavigateTo(t.PurchaseOrderId);case TargetTypes.ReportTemplate:return app.route.Report_Details.NavigateTo(t.ReportTemplateId);case TargetTypes.Role:return app.route.Role_Details.NavigateTo(t.RoleId);case TargetTypes.SharedCollection:return app.route.SharedCollection_Details.NavigateTo(t.SharedCollectionId);case TargetTypes.Sim:return app.route.Sim_Details.NavigateTo(t.SimId);case TargetTypes.User:return app.route.User_Details.NavigateTo(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.KeyHandler=function(n){var t=[];o.selectedKeys().forEach(function(n){return t.push(JSON.stringify(n))});o.UnselectAll();n.data().forEach(function(n){var i=JSON.stringify(o.getKey(n));t.filter(function(n){return n===i}).length>0&&o.selectRow(n)})},o.BindKeyHandlerComputed=function(n){ko.computed(function(){n.data();var t=function(){return o.KeyHandler(n)};typeof o.KeyHandler=="function"&&ko.ignoreDependencies(t)}).extend({throttle:50})},o.selectedKeys=ko.observableArray(),o.enabled=e||function(){return!0},typeof i=="string"&&(i=[i]),o.getKey=function(n){for(var r,u={},t=0;t<i.length;++t)r=i[t],u[r]=ko.unwrap(n[r]);return u},o.keyEquals=function(n,t){for(var u,r=0;r<i.length;++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),t=0;t<o.selectedKeys().length;++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.observable(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){var t=this;n.length>0&&this.selectedKeys(n.map(function(n){return t.getKey(n)}))},t.prototype.UnselectAll=function(){this.selectedKeys.removeAll()},t.prototype.Invert=function(n){var t=this;n.length>0&&this.selectedKeys(n.filter(function(n){return!t.isRowSelected(n)}).map(function(n){return t.getKey(n)}))},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=ko.observableArray(),f.data=KnockoutExtensions.MakeObservableArray(t),f.rowClick=i,f.initialLoadComplete=ko.observable(!0),f.loadFailed=ko.observable(!1),f.enabled=KnockoutExtensions.MakeObservable(r,!0),f.emptyMessage="No items to display",f.filters=ko.observableArray(),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=KnockoutExtensions.MakeObservable(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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),AjaxPageResponse=function(){function n(){}return n}(),TableModelParameters=function(){function n(){}return n}(),TableModelParametersStatic=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(TableModelParameters),TableModelParametersObservable=function(n){function t(){return n!==null&&n.apply(this,arguments)||this}return __extends(t,n),t}(TableModelParameters),AjaxFilterTableViewModel=function(n){function t(t){var i=n.call(this,t.data,t.click,t.enabled,"filtertable")||this;return i.minify=KnockoutExtensions.MakeObservable(t.minify,!1),i.hideRefresh=KnockoutExtensions.MakeObservable(t.hideRefresh,!1),i.supportsPaging=!0,i.route=KnockoutExtensions.MakeObservable(t.route),i.page=ko.observable(1),i.pageSize=ko.observable(t.size||10),i.sortColumn=ko.observable(t.sort),i.sortAscending=ko.observable(t.ascending),i.filterToggle=ko.observable(!$("html").hasClass("mobile")),i.loading=ko.observable(!1),i.failedMessage=ko.observable(""),i.viewModelReady=ko.observable(!1),i.canUpdate=ko.observable(t.update),i.filteredData=ko.computed(function(){var r=i.data().filter(function(n){var t=!0;return i.filters().forEach(function(r){var a=ko.unwrap(r.column),e="",f=n[r.column()],u,o,s,h,c,l;i.columns().forEach(function(t){t.name===a&&t.GetValue(n)!==null&&(e=t.GetValue(n))});u=!0;switch(r.type()){case"text":case"sync-timespan":r.input()().length!==0&&(u=i.FuzzySearch(r.input()().toString().toLowerCase(),e.toString().toLowerCase()));break;case"multihyperlinktext":r.input()().length!==0&&(u=i.SequenceSearch(r.input()().toString().toLowerCase(),e.toString().toLowerCase()));break;case"number":if(r.input()().length===0)u=!0;else switch(r.option()()){case"text":u=i.FuzzySearch(r.input()().toString().toLowerCase(),e.toString().toLowerCase());break;case"equal":u=Number(f)===Number(r.input()());break;case"gequal":u=Number(f)>=Number(r.input()());break;case"lequal":u=Number(f)<=Number(r.input()());break;case"range":o=r.input()().split("-");u=Number(o[0])<=Number(f)&&Number(f)<=Number(o[1])}break;case"date":case"date-only":case"timeago":r.input()().toString().indexOf(" - ")>-1?(c=r.input()().split(" - "),s=c[0],h=c[1]):s=h=r.input()().toString();f!=null?(l=moment.utc(f.toString()).local().format("YYYY-MM-DD"),u=r.input()().length===0||s<=l&&l<=h):u=r.input()().length===0}t=t&&u}),t}),n,t;if(i.sortColumn()!=null){if(n=i.sortAscending()?1:-1,i.columns().forEach(function(n){if(n.name===i.sortColumn()){t=n;return}}),t==null)return r;r.sort(function(i,r){var u=t.GetValue(i),f=t.GetValue(r),e,o;return u==null||f==null?f!=null?-1*n:u!=null?1*n:0:(e=isNaN(u)||isNaN(f)?u.toString().toLowerCase():u,o=isNaN(u)||isNaN(f)?f.toString().toLowerCase():f,e<o?-1*n:e>o?1*n:0)})}return r}).extend({throttle:250}),i.update=function(){return t.update&&i.enabled()?i.LoadData():null},i.setViewModelReady=function(){return i.viewModelReady(!0)},i.isFiltered=ko.computed(function(){return i.filteredData().length!==i.data().length||i.filters().some(function(n){return n.input()()!==""})}),i.pagedData=ko.computed(function(){return i.filteredData().slice((i.page()-1)*i.pageSize(),(i.page()-1)*i.pageSize()+i.pageSize())}),i.pageBegin=ko.computed(function(){return(i.page()-1)*i.pageSize()+1}),i.pageEnd=ko.computed(function(){return i.pageBegin()+i.pagedData().length-1}),i.pageCount=ko.computed(function(){var n=Math.ceil(i.filteredData().length/i.pageSize());return i.page()-1>n&&i.page(n),i.page()<1&&i.page(1),n}),i.pages=ko.computed(function(){for(var t=[],n=1;n<=i.pageCount();n++)t.push(n);return t}),i.initialLoadComplete(!t.update),i.SortHandler=function(n){return i.SetSort(n)},i.FilterOptionsHandler=function(n){return i.SetFilterOptions(n)},i.FilterResetAllHandler=function(){return i.FilterResetAll()},i}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),this.route()==null){this.loading(!1);this.loadFailed(!1);this.initialLoadComplete(!0);this.sortColumn(this.sortColumn());this.sortAscending(this.sortAscending());return}$.ajax(this.route().GetUrl(),{type:"POST"}).done(function(t){return n.SetData(t)}).fail(function(){return n.SetFailed("Failed to load data")}).always(function(){n.loading(!1);n.initialLoadComplete(!0)})},t.prototype.SetData=function(n){if(!n||!n.Success){this.data.removeAll();this.SetFailed(n?n.Message:"Failed to load data");return}this.loadFailed(!1);this.failedMessage("");this.data(n.Items)},t.prototype.SetFailed=function(n){this.failedMessage(n);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 RouteDefinitions=function(){function n(){this.Account_ChangePassword=new RouteDefinition("Account","ChangePassword");this.Account_ForgotPassword=new RouteDefinition("Account","ForgotPassword");this.Account_Login=new RouteDefinition("Account","Login");this.Account_Logout=new RouteDefinition("Account","Logout");this.Account_ResetPassword=new RouteDefinition("Account","ResetPassword");this.Admin_ActiveSimTable=new RouteDefinition("Admin","ActiveSimTable");this.Admin_AddCapabilities=new RouteDefinition("Admin","AddCapabilities");this.Admin_AndroidApk=new RouteDefinition("Admin","AndroidApk");this.Admin_AvailableDeviceTypesForCostItems=new RouteDefinition("Admin","AvailableDeviceTypesForCostItems");this.Admin_Capabilities=new RouteDefinition("Admin","Capabilities");this.Admin_CapabilitiesTable=new RouteDefinition("Admin","CapabilitiesTable");this.Admin_CapabilityClassNames=new RouteDefinition("Admin","CapabilityClassNames");this.Admin_CapabilityDetails=new RouteDefinition("Admin","CapabilityDetails");this.Admin_CellularProviderDetails=new RouteDefinition("Admin","CellularProviderDetails");this.Admin_CellularProviders=new RouteDefinition("Admin","CellularProviders");this.Admin_CellularProviderTable=new RouteDefinition("Admin","CellularProviderTable");this.Admin_CostItems=new RouteDefinition("Admin","CostItems");this.Admin_CostItemsTable=new RouteDefinition("Admin","CostItemsTable");this.Admin_CreateCapability=new RouteDefinition("Admin","CreateCapability");this.Admin_CreateCostItem=new RouteDefinition("Admin","CreateCostItem");this.Admin_CreateEmailProvider=new RouteDefinition("Admin","CreateEmailProvider");this.Admin_CreateEventType=new RouteDefinition("Admin","CreateEventType");this.Admin_CreateSmsProvider=new RouteDefinition("Admin","CreateSmsProvider");this.Admin_DeleteCapabilityFromDb=new RouteDefinition("Admin","DeleteCapabilityFromDb");this.Admin_DeleteCostItem=new RouteDefinition("Admin","DeleteCostItem");this.Admin_DeleteEmailProvider=new RouteDefinition("Admin","DeleteEmailProvider");this.Admin_DeleteErrorLogs=new RouteDefinition("Admin","DeleteErrorLogs");this.Admin_DeleteSmsProvider=new RouteDefinition("Admin","DeleteSmsProvider");this.Admin_EditCostItem=new RouteDefinition("Admin","EditCostItem");this.Admin_EditEmailProvider=new RouteDefinition("Admin","EditEmailProvider");this.Admin_EditSmsProvider=new RouteDefinition("Admin","EditSmsProvider");this.Admin_EmailProviders=new RouteDefinition("Admin","EmailProviders");this.Admin_EmailProvidersTable=new RouteDefinition("Admin","EmailProvidersTable");this.Admin_ErrorLogs=new RouteDefinition("Admin","ErrorLogs");this.Admin_ErrorLogsTable=new RouteDefinition("Admin","ErrorLogsTable");this.Admin_EventTypes=new RouteDefinition("Admin","EventTypes");this.Admin_EventTypesTable=new RouteDefinition("Admin","EventTypesTable");this.Admin_Firmware=new RouteDefinition("Admin","Firmware");this.Admin_FirmwareTable=new RouteDefinition("Admin","FirmwareTable");this.Admin_GroupPurchaseOrdersTable=new RouteDefinition("Admin","GroupPurchaseOrdersTable");this.Admin_IncorrectSimsTable=new RouteDefinition("Admin","IncorrectSimsTable");this.Admin_Index=new RouteDefinition("Admin","Index");this.Admin_OrderedCostItemsTable=new RouteDefinition("Admin","OrderedCostItemsTable");this.Admin_PurchaseOrderOutstandingItemsTable=new RouteDefinition("Admin","PurchaseOrderOutstandingItemsTable");this.Admin_PurchaseOrders=new RouteDefinition("Admin","PurchaseOrders");this.Admin_PurchaseOrdersTable=new RouteDefinition("Admin","PurchaseOrdersTable");this.Admin_RolesForCapabilityTable=new RouteDefinition("Admin","RolesForCapabilityTable");this.Admin_ServerHealth=new RouteDefinition("Admin","ServerHealth");this.Admin_SetFirmwareDevelopment=new RouteDefinition("Admin","SetFirmwareDevelopment");this.Admin_SimsForCellularProviderTable=new RouteDefinition("Admin","SimsForCellularProviderTable");this.Admin_SimStates=new RouteDefinition("Admin","SimStates");this.Admin_SmsProviders=new RouteDefinition("Admin","SmsProviders");this.Admin_SmsProvidersTable=new RouteDefinition("Admin","SmsProvidersTable");this.Admin_UnreceivedPurchaseOrdersTable=new RouteDefinition("Admin","UnreceivedPurchaseOrdersTable");this.Admin_UpdateCapabilitiesFromCs=new RouteDefinition("Admin","UpdateCapabilitiesFromCs");this.Admin_UploadAndroidApk=new RouteDefinition("Admin","UploadAndroidApk");this.Application_AddAppModuleInput=new RouteDefinition("Application","AddAppModuleInput");this.Application_AddAppModuleToVersion=new RouteDefinition("Application","AddAppModuleToVersion");this.Application_AppModule=new RouteDefinition("Application","AppModule");this.Application_AppModuleInputsTable=new RouteDefinition("Application","AppModuleInputsTable");this.Application_AppModulesTable=new RouteDefinition("Application","AppModulesTable");this.Application_AppNodeAssignmentsTable=new RouteDefinition("Application","AppNodeAssignmentsTable");this.Application_AppTemplateAssignmentsTable=new RouteDefinition("Application","AppTemplateAssignmentsTable");this.Application_AppVersion=new RouteDefinition("Application","AppVersion");this.Application_AppVersionsTable=new RouteDefinition("Application","AppVersionsTable");this.Application_AttachTag=new RouteDefinition("Application","AttachTag");this.Application_AvailableDeviceTypes=new RouteDefinition("Application","AvailableDeviceTypes");this.Application_AvailableModuleSources=new RouteDefinition("Application","AvailableModuleSources");this.Application_BuildBinaryForVersion=new RouteDefinition("Application","BuildBinaryForVersion");this.Application_ChangeModuleSourceForAppModule=new RouteDefinition("Application","ChangeModuleSourceForAppModule");this.Application_ContainingGroups=new RouteDefinition("Application","ContainingGroups");this.Application_ContainingGroupsTable=new RouteDefinition("Application","ContainingGroupsTable");this.Application_CreateApplicationTemplateFromApp=new RouteDefinition("Application","CreateApplicationTemplateFromApp");this.Application_CreateVersion=new RouteDefinition("Application","CreateVersion");this.Application_Delete=new RouteDefinition("Application","Delete");this.Application_DeleteAppModuleFromVersion=new RouteDefinition("Application","DeleteAppModuleFromVersion");this.Application_DeleteAppModuleInput=new RouteDefinition("Application","DeleteAppModuleInput");this.Application_DeleteAppVersion=new RouteDefinition("Application","DeleteAppVersion");this.Application_DeleteBinaryForVersion=new RouteDefinition("Application","DeleteBinaryForVersion");this.Application_Details=new RouteDefinition("Application","Details");this.Application_EditApp=new RouteDefinition("Application","EditApp");this.Application_EditAppModule=new RouteDefinition("Application","EditAppModule");this.Application_EditAppModuleInput=new RouteDefinition("Application","EditAppModuleInput");this.Application_EditAppVersionNotes=new RouteDefinition("Application","EditAppVersionNotes");this.Application_GetAppModulesForTemplate=new RouteDefinition("Application","GetAppModulesForTemplate");this.Application_GetAppVersionsWithBinary=new RouteDefinition("Application","GetAppVersionsWithBinary");this.Application_OverwriteWorkInProgress=new RouteDefinition("Application","OverwriteWorkInProgress");this.Application_RemoveTag=new RouteDefinition("Application","RemoveTag");this.Application_Tags=new RouteDefinition("Application","Tags");this.Application_TagsTable=new RouteDefinition("Application","TagsTable");this.Application_TagValueHistoryTable=new RouteDefinition("Application","TagValueHistoryTable");this.Application_UpdateTag=new RouteDefinition("Application","UpdateTag");this.Application_UploadApplicationBinary=new RouteDefinition("Application","UploadApplicationBinary");this.ApplicationTemplate_AddKeyValue=new RouteDefinition("ApplicationTemplate","AddKeyValue");this.ApplicationTemplate_AddModule=new RouteDefinition("ApplicationTemplate","AddModule");this.ApplicationTemplate_AvailableApplications=new RouteDefinition("ApplicationTemplate","AvailableApplications");this.ApplicationTemplate_AvailableApplicationTemplates=new RouteDefinition("ApplicationTemplate","AvailableApplicationTemplates");this.ApplicationTemplate_CloneApplicationTemplate=new RouteDefinition("ApplicationTemplate","CloneApplicationTemplate");this.ApplicationTemplate_ContainingGroups=new RouteDefinition("ApplicationTemplate","ContainingGroups");this.ApplicationTemplate_ContainingGroupsTable=new RouteDefinition("ApplicationTemplate","ContainingGroupsTable");this.ApplicationTemplate_Delete=new RouteDefinition("ApplicationTemplate","Delete");this.ApplicationTemplate_DeleteKeyValue=new RouteDefinition("ApplicationTemplate","DeleteKeyValue");this.ApplicationTemplate_DeleteModule=new RouteDefinition("ApplicationTemplate","DeleteModule");this.ApplicationTemplate_Details=new RouteDefinition("ApplicationTemplate","Details");this.ApplicationTemplate_Module=new RouteDefinition("ApplicationTemplate","Module");this.ApplicationTemplate_ModuleKeyValuesTable=new RouteDefinition("ApplicationTemplate","ModuleKeyValuesTable");this.ApplicationTemplate_ModulesTable=new RouteDefinition("ApplicationTemplate","ModulesTable");this.ApplicationTemplate_TemplateModules=new RouteDefinition("ApplicationTemplate","TemplateModules");this.ApplicationTemplate_Update=new RouteDefinition("ApplicationTemplate","Update");this.ApplicationTemplate_UpdateKeyValue=new RouteDefinition("ApplicationTemplate","UpdateKeyValue");this.ApplicationTemplate_UpdateModule=new RouteDefinition("ApplicationTemplate","UpdateModule");this.AppModuleSource_AddDashboardType=new RouteDefinition("AppModuleSource","AddDashboardType");this.AppModuleSource_AvailableDashboardTypes=new RouteDefinition("AppModuleSource","AvailableDashboardTypes");this.AppModuleSource_CreateVersion=new RouteDefinition("AppModuleSource","CreateVersion");this.AppModuleSource_DashboardTypesTable=new RouteDefinition("AppModuleSource","DashboardTypesTable");this.AppModuleSource_Delete=new RouteDefinition("AppModuleSource","Delete");this.AppModuleSource_DeleteDashboardType=new RouteDefinition("AppModuleSource","DeleteDashboardType");this.AppModuleSource_DeleteVersion=new RouteDefinition("AppModuleSource","DeleteVersion");this.AppModuleSource_Details=new RouteDefinition("AppModuleSource","Details");this.AppModuleSource_Edit=new RouteDefinition("AppModuleSource","Edit");this.AppModuleSource_EditVersionNotes=new RouteDefinition("AppModuleSource","EditVersionNotes");this.AppModuleSource_InputsTable=new RouteDefinition("AppModuleSource","InputsTable");this.AppModuleSource_OutputsTable=new RouteDefinition("AppModuleSource","OutputsTable");this.AppModuleSource_SourceXML=new RouteDefinition("AppModuleSource","SourceXML");this.AppModuleSource_UsageTable=new RouteDefinition("AppModuleSource","UsageTable");this.AppModuleSource_Version=new RouteDefinition("AppModuleSource","Version");this.AppModuleSource_VersionsTable=new RouteDefinition("AppModuleSource","VersionsTable");this.Attachment_Download=new RouteDefinition("Attachment","Download");this.BillingEntity_AddCostItem=new RouteDefinition("BillingEntity","AddCostItem");this.BillingEntity_AddressDetails=new RouteDefinition("BillingEntity","AddressDetails");this.BillingEntity_AddressHistoryTable=new RouteDefinition("BillingEntity","AddressHistoryTable");this.BillingEntity_AvailableAddresses=new RouteDefinition("BillingEntity","AvailableAddresses");this.BillingEntity_AvailableBillingEntities=new RouteDefinition("BillingEntity","AvailableBillingEntities");this.BillingEntity_AvailableFreightProviders=new RouteDefinition("BillingEntity","AvailableFreightProviders");this.BillingEntity_AvailableInventoryGroups=new RouteDefinition("BillingEntity","AvailableInventoryGroups");this.BillingEntity_ContainingGroups=new RouteDefinition("BillingEntity","ContainingGroups");this.BillingEntity_ContainingGroupsTable=new RouteDefinition("BillingEntity","ContainingGroupsTable");this.BillingEntity_CostItemsTable=new RouteDefinition("BillingEntity","CostItemsTable");this.BillingEntity_CostItemsWhichCanBeAdded=new RouteDefinition("BillingEntity","CostItemsWhichCanBeAdded");this.BillingEntity_CreatePurchaseOrder=new RouteDefinition("BillingEntity","CreatePurchaseOrder");this.BillingEntity_Details=new RouteDefinition("BillingEntity","Details");this.BillingEntity_DownloadNetworkSubscriptionInvoice=new RouteDefinition("BillingEntity","DownloadNetworkSubscriptionInvoice");this.BillingEntity_MessageAccounts=new RouteDefinition("BillingEntity","MessageAccounts");this.BillingEntity_MessageAccountsTable=new RouteDefinition("BillingEntity","MessageAccountsTable");this.BillingEntity_NetworkSubscriptionInvoices=new RouteDefinition("BillingEntity","NetworkSubscriptionInvoices");this.BillingEntity_NetworkSubscriptionInvoicesTable=new RouteDefinition("BillingEntity","NetworkSubscriptionInvoicesTable");this.BillingEntity_PurchaseOrdersTable=new RouteDefinition("BillingEntity","PurchaseOrdersTable");this.BillingEntity_RemoveCostItem=new RouteDefinition("BillingEntity","RemoveCostItem");this.BillingEntity_UnreceivedPurchaseOrdersTable=new RouteDefinition("BillingEntity","UnreceivedPurchaseOrdersTable");this.BillingEntity_Update=new RouteDefinition("BillingEntity","Update");this.BillingEntity_UpdateAddress=new RouteDefinition("BillingEntity","UpdateAddress");this.BillingEntity_UpdateCostItem=new RouteDefinition("BillingEntity","UpdateCostItem");this.Branding_AvailableBrandings=new RouteDefinition("Branding","AvailableBrandings");this.Branding_Details=new RouteDefinition("Branding","Details");this.Branding_Edit=new RouteDefinition("Branding","Edit");this.Chart_AddChartToCollection=new RouteDefinition("Chart","AddChartToCollection");this.Chart_AddItemToChart=new RouteDefinition("Chart","AddItemToChart");this.Chart_ConfigureChartInCollection=new RouteDefinition("Chart","ConfigureChartInCollection");this.Chart_ConfigureCollection=new RouteDefinition("Chart","ConfigureCollection");this.Chart_ConfigureItemInChart=new RouteDefinition("Chart","ConfigureItemInChart");this.Chart_CreateCollection=new RouteDefinition("Chart","CreateCollection");this.Chart_CreateCollectionFromVirtual=new RouteDefinition("Chart","CreateCollectionFromVirtual");this.Chart_D3BoolData=new RouteDefinition("Chart","D3BoolData");this.Chart_D3CumulativeData=new RouteDefinition("Chart","D3CumulativeData");this.Chart_D3HistogramData=new RouteDefinition("Chart","D3HistogramData");this.Chart_D3NumberData=new RouteDefinition("Chart","D3NumberData");this.Chart_DeleteChartFromCollection=new RouteDefinition("Chart","DeleteChartFromCollection");this.Chart_DeleteCollection=new RouteDefinition("Chart","DeleteCollection");this.Chart_DeleteItemFromChart=new RouteDefinition("Chart","DeleteItemFromChart");this.Chart_Details=new RouteDefinition("Chart","Details");this.Chart_DownloadChartData=new RouteDefinition("Chart","DownloadChartData");this.Chart_GetChartCollectionsTable=new RouteDefinition("Chart","GetChartCollectionsTable");this.Chart_GetUserGroupsForSharing=new RouteDefinition("Chart","GetUserGroupsForSharing");this.Chart_GetUserNetworkModules=new RouteDefinition("Chart","GetUserNetworkModules");this.Chart_GetUserNetworkNodes=new RouteDefinition("Chart","GetUserNetworkNodes");this.Chart_GetUserNetworks=new RouteDefinition("Chart","GetUserNetworks");this.Chart_Index=new RouteDefinition("Chart","Index");this.Chart_Module=new RouteDefinition("Chart","Module");this.Chart_MoveItem=new RouteDefinition("Chart","MoveItem");this.Chart_SetChartSortOrder=new RouteDefinition("Chart","SetChartSortOrder");this.Chart_SetCollectionSortOrder=new RouteDefinition("Chart","SetCollectionSortOrder");this.Chart_SharedCollectionsTableForUser=new RouteDefinition("Chart","SharedCollectionsTableForUser");this.Chart_SharePrivateChart=new RouteDefinition("Chart","SharePrivateChart");this.Chart_Template=new RouteDefinition("Chart","Template");this.CumulativeMeter_AddEscalationLists=new RouteDefinition("CumulativeMeter","AddEscalationLists");this.CumulativeMeter_CreateNote=new RouteDefinition("CumulativeMeter","CreateNote");this.CumulativeMeter_CreateTimeAlarm=new RouteDefinition("CumulativeMeter","CreateTimeAlarm");this.CumulativeMeter_CreateTotalAlarm=new RouteDefinition("CumulativeMeter","CreateTotalAlarm");this.CumulativeMeter_Delete=new RouteDefinition("CumulativeMeter","Delete");this.CumulativeMeter_DeleteTimeAlarm=new RouteDefinition("CumulativeMeter","DeleteTimeAlarm");this.CumulativeMeter_DeleteTotalAlarm=new RouteDefinition("CumulativeMeter","DeleteTotalAlarm");this.CumulativeMeter_Details=new RouteDefinition("CumulativeMeter","Details");this.CumulativeMeter_EscalationListsWhichCanBeAdded=new RouteDefinition("CumulativeMeter","EscalationListsWhichCanBeAdded");this.CumulativeMeter_EventDetails=new RouteDefinition("CumulativeMeter","EventDetails");this.CumulativeMeter_EventsTable=new RouteDefinition("CumulativeMeter","EventsTable");this.CumulativeMeter_NotesTable=new RouteDefinition("CumulativeMeter","NotesTable");this.CumulativeMeter_RemoveEscalationList=new RouteDefinition("CumulativeMeter","RemoveEscalationList");this.CumulativeMeter_Rename=new RouteDefinition("CumulativeMeter","Rename");this.CumulativeMeter_RenameTimeAlarm=new RouteDefinition("CumulativeMeter","RenameTimeAlarm");this.CumulativeMeter_RenameTotalAlarm=new RouteDefinition("CumulativeMeter","RenameTotalAlarm");this.CumulativeMeter_Reset=new RouteDefinition("CumulativeMeter","Reset");this.CumulativeMeter_SetTimeAlarmLimits=new RouteDefinition("CumulativeMeter","SetTimeAlarmLimits");this.CumulativeMeter_SetTotalAlarmLimits=new RouteDefinition("CumulativeMeter","SetTotalAlarmLimits");this.CumulativeMeter_TotalsTable=new RouteDefinition("CumulativeMeter","TotalsTable");this.DataStream_Configure=new RouteDefinition("DataStream","Configure");this.DataStream_Delete=new RouteDefinition("DataStream","Delete");this.DataStream_Details=new RouteDefinition("DataStream","Details");this.DataStream_EventsTable=new RouteDefinition("DataStream","EventsTable");this.Device_AttachChildDevice=new RouteDefinition("Device","AttachChildDevice");this.Device_AttachSim=new RouteDefinition("Device","AttachSim");this.Device_AvailableChildDevices=new RouteDefinition("Device","AvailableChildDevices");this.Device_AvailableSims=new RouteDefinition("Device","AvailableSims");this.Device_Calibration=new RouteDefinition("Device","Calibration");this.Device_CalibrationsTable=new RouteDefinition("Device","CalibrationsTable");this.Device_CalibrationValuesTable=new RouteDefinition("Device","CalibrationValuesTable");this.Device_ContainingGroups=new RouteDefinition("Device","ContainingGroups");this.Device_ContainingGroupsTable=new RouteDefinition("Device","ContainingGroupsTable");this.Device_DetachChildDevice=new RouteDefinition("Device","DetachChildDevice");this.Device_Details=new RouteDefinition("Device","Details");this.Device_RemoveSim=new RouteDefinition("Device","RemoveSim");this.Device_TestReport=new RouteDefinition("Device","TestReport");this.Device_TestReportItemsTable=new RouteDefinition("Device","TestReportItemsTable");this.Device_TestReportsTable=new RouteDefinition("Device","TestReportsTable");this.Device_Update=new RouteDefinition("Device","Update");this.Device_UpgradeLegacyDevice=new RouteDefinition("Device","UpgradeLegacyDevice");this.Device_UserActionsForTargetDeviceTable=new RouteDefinition("Device","UserActionsForTargetDeviceTable");this.DeviceType_AvailableApplications=new RouteDefinition("DeviceType","AvailableApplications");this.DeviceType_AvailableDeviceTypes=new RouteDefinition("DeviceType","AvailableDeviceTypes");this.DeviceType_AvailableIOTypes=new RouteDefinition("DeviceType","AvailableIOTypes");this.DeviceType_AvailableParentDeviceTypes=new RouteDefinition("DeviceType","AvailableParentDeviceTypes");this.DeviceType_BillingEntityCostItemsTable=new RouteDefinition("DeviceType","BillingEntityCostItemsTable");this.DeviceType_ChildTypesTable=new RouteDefinition("DeviceType","ChildTypesTable");this.DeviceType_ContainingGroups=new RouteDefinition("DeviceType","ContainingGroups");this.DeviceType_ContainingGroupsTable=new RouteDefinition("DeviceType","ContainingGroupsTable");this.DeviceType_CreateChild=new RouteDefinition("DeviceType","CreateChild");this.DeviceType_CreateModel=new RouteDefinition("DeviceType","CreateModel");this.DeviceType_Delete=new RouteDefinition("DeviceType","Delete");this.DeviceType_DeleteModel=new RouteDefinition("DeviceType","DeleteModel");this.DeviceType_Details=new RouteDefinition("DeviceType","Details");this.DeviceType_GetAvailableIoModules=new RouteDefinition("DeviceType","GetAvailableIoModules");this.DeviceType_GetModels=new RouteDefinition("DeviceType","GetModels");this.DeviceType_ModelsTable=new RouteDefinition("DeviceType","ModelsTable");this.DeviceType_SetModelUpgradeTarget=new RouteDefinition("DeviceType","SetModelUpgradeTarget");this.DeviceType_Update=new RouteDefinition("DeviceType","Update");this.Document_AutoSaveDocument=new RouteDefinition("Document","AutoSaveDocument");this.Document_AvailableDocuments=new RouteDefinition("Document","AvailableDocuments");this.Document_ChildDocumentsTable=new RouteDefinition("Document","ChildDocumentsTable");this.Document_Details=new RouteDefinition("Document","Details");this.Document_Edit=new RouteDefinition("Document","Edit");this.Document_UpdateDocument=new RouteDefinition("Document","UpdateDocument");this.DocumentationPrefix_AvailableDocuments=new RouteDefinition("DocumentationPrefix","AvailableDocuments");this.DocumentationPrefix_AvailableParentDocuments=new RouteDefinition("DocumentationPrefix","AvailableParentDocuments");this.DocumentationPrefix_DeleteDocument=new RouteDefinition("DocumentationPrefix","DeleteDocument");this.DocumentationPrefix_Details=new RouteDefinition("DocumentationPrefix","Details");this.DocumentationPrefix_DocumentsTable=new RouteDefinition("DocumentationPrefix","DocumentsTable");this.Escalation_CreateEscalationList=new RouteDefinition("Escalation","CreateEscalationList");this.Escalation_EscalationListsTable=new RouteDefinition("Escalation","EscalationListsTable");this.Escalation_GroupsForCreatingEscalationLists=new RouteDefinition("Escalation","GroupsForCreatingEscalationLists");this.Escalation_Index=new RouteDefinition("Escalation","Index");this.EscalationList_AddExistingUser=new RouteDefinition("EscalationList","AddExistingUser");this.EscalationList_ContainingGroups=new RouteDefinition("EscalationList","ContainingGroups");this.EscalationList_ContainingGroupsTable=new RouteDefinition("EscalationList","ContainingGroupsTable");this.EscalationList_CreateUser=new RouteDefinition("EscalationList","CreateUser");this.EscalationList_Delete=new RouteDefinition("EscalationList","Delete");this.EscalationList_Details=new RouteDefinition("EscalationList","Details");this.EscalationList_GroupsForCreatingUsers=new RouteDefinition("EscalationList","GroupsForCreatingUsers");this.EscalationList_HistoryTable=new RouteDefinition("EscalationList","HistoryTable");this.EscalationList_ModuleEventsTable=new RouteDefinition("EscalationList","ModuleEventsTable");this.EscalationList_RemoveUser=new RouteDefinition("EscalationList","RemoveUser");this.EscalationList_Rename=new RouteDefinition("EscalationList","Rename");this.EscalationList_SetEscalationDelay=new RouteDefinition("EscalationList","SetEscalationDelay");this.EscalationList_SubscribedAlertsTable=new RouteDefinition("EscalationList","SubscribedAlertsTable");this.EscalationList_UpdateSubscription=new RouteDefinition("EscalationList","UpdateSubscription");this.EscalationList_UsersTable=new RouteDefinition("EscalationList","UsersTable");this.EscalationList_UsersWhichCanBeAdded=new RouteDefinition("EscalationList","UsersWhichCanBeAdded");this.GisDataset_AddItemIndex=new RouteDefinition("GisDataset","AddItemIndex");this.GisDataset_AssignedNetworksTable=new RouteDefinition("GisDataset","AssignedNetworksTable");this.GisDataset_Clear=new RouteDefinition("GisDataset","Clear");this.GisDataset_CloneDataset=new RouteDefinition("GisDataset","CloneDataset");this.GisDataset_ContainingGroups=new RouteDefinition("GisDataset","ContainingGroups");this.GisDataset_ContainingGroupsTable=new RouteDefinition("GisDataset","ContainingGroupsTable");this.GisDataset_CreatePolygon=new RouteDefinition("GisDataset","CreatePolygon");this.GisDataset_DeletePolygon=new RouteDefinition("GisDataset","DeletePolygon");this.GisDataset_Details=new RouteDefinition("GisDataset","Details");this.GisDataset_EditPolygon=new RouteDefinition("GisDataset","EditPolygon");this.GisDataset_GetPolygons=new RouteDefinition("GisDataset","GetPolygons");this.GisDataset_RemoveItemDescriptions=new RouteDefinition("GisDataset","RemoveItemDescriptions");this.GisDataset_Rename=new RouteDefinition("GisDataset","Rename");this.GisDataset_UpdateItemDescription=new RouteDefinition("GisDataset","UpdateItemDescription");this.GisDataset_UpdatePolygonVertices=new RouteDefinition("GisDataset","UpdatePolygonVertices");this.Group_AddExistingApplicationTemplates=new RouteDefinition("Group","AddExistingApplicationTemplates");this.Group_AddExistingAppModuleSources=new RouteDefinition("Group","AddExistingAppModuleSources");this.Group_AddExistingApps=new RouteDefinition("Group","AddExistingApps");this.Group_AddExistingBillingEntities=new RouteDefinition("Group","AddExistingBillingEntities");this.Group_AddExistingDataStreams=new RouteDefinition("Group","AddExistingDataStreams");this.Group_AddExistingDevices=new RouteDefinition("Group","AddExistingDevices");this.Group_AddExistingDeviceTypes=new RouteDefinition("Group","AddExistingDeviceTypes");this.Group_AddExistingEmailProvider=new RouteDefinition("Group","AddExistingEmailProvider");this.Group_AddExistingEscalationLists=new RouteDefinition("Group","AddExistingEscalationLists");this.Group_AddExistingExportTargets=new RouteDefinition("Group","AddExistingExportTargets");this.Group_AddExistingGisDatasets=new RouteDefinition("Group","AddExistingGisDatasets");this.Group_AddExistingIcons=new RouteDefinition("Group","AddExistingIcons");this.Group_AddExistingLegalTerms=new RouteDefinition("Group","AddExistingLegalTerms");this.Group_AddExistingMessageAccounts=new RouteDefinition("Group","AddExistingMessageAccounts");this.Group_AddExistingMessagePlans=new RouteDefinition("Group","AddExistingMessagePlans");this.Group_AddExistingModuleConfigTemplates=new RouteDefinition("Group","AddExistingModuleConfigTemplates");this.Group_AddExistingModules=new RouteDefinition("Group","AddExistingModules");this.Group_AddExistingNetworks=new RouteDefinition("Group","AddExistingNetworks");this.Group_AddExistingReportTemplates=new RouteDefinition("Group","AddExistingReportTemplates");this.Group_AddExistingRfidTags=new RouteDefinition("Group","AddExistingRfidTags");this.Group_AddExistingRoles=new RouteDefinition("Group","AddExistingRoles");this.Group_AddExistingSharedCollections=new RouteDefinition("Group","AddExistingSharedCollections");this.Group_AddExistingSims=new RouteDefinition("Group","AddExistingSims");this.Group_AddExistingSmsProvider=new RouteDefinition("Group","AddExistingSmsProvider");this.Group_AddExistingTags=new RouteDefinition("Group","AddExistingTags");this.Group_AddExistingUsers=new RouteDefinition("Group","AddExistingUsers");this.Group_ApplicationTemplates=new RouteDefinition("Group","ApplicationTemplates");this.Group_ApplicationTemplatesTable=new RouteDefinition("Group","ApplicationTemplatesTable");this.Group_ApplicationTemplatesWhichCanBeAdded=new RouteDefinition("Group","ApplicationTemplatesWhichCanBeAdded");this.Group_AppModuleSources=new RouteDefinition("Group","AppModuleSources");this.Group_AppModuleSourcesTable=new RouteDefinition("Group","AppModuleSourcesTable");this.Group_AppModuleSourcesWhichCanBeAdded=new RouteDefinition("Group","AppModuleSourcesWhichCanBeAdded");this.Group_Apps=new RouteDefinition("Group","Apps");this.Group_AppsTable=new RouteDefinition("Group","AppsTable");this.Group_AppsWhichCanBeAdded=new RouteDefinition("Group","AppsWhichCanBeAdded");this.Group_AssignLegalTerms=new RouteDefinition("Group","AssignLegalTerms");this.Group_AssignNetworkApplications=new RouteDefinition("Group","AssignNetworkApplications");this.Group_AssignNetworkNodeApplicationBulk=new RouteDefinition("Group","AssignNetworkNodeApplicationBulk");this.Group_Attachments=new RouteDefinition("Group","Attachments");this.Group_AttachmentsTable=new RouteDefinition("Group","AttachmentsTable");this.Group_AvailableCellularNetworks=new RouteDefinition("Group","AvailableCellularNetworks");this.Group_AvailableDocumentPrefixes=new RouteDefinition("Group","AvailableDocumentPrefixes");this.Group_AvailableFirmwareForDeviceModel=new RouteDefinition("Group","AvailableFirmwareForDeviceModel");this.Group_AvailableGroups=new RouteDefinition("Group","AvailableGroups");this.Group_AvailableGroupsForAppAssignments=new RouteDefinition("Group","AvailableGroupsForAppAssignments");this.Group_AvailableNetworkProvisioningSupportUsers=new RouteDefinition("Group","AvailableNetworkProvisioningSupportUsers");this.Group_AvailableParentGroups=new RouteDefinition("Group","AvailableParentGroups");this.Group_AvailableTargetGroups=new RouteDefinition("Group","AvailableTargetGroups");this.Group_AvailableTargetGroupsForModules=new RouteDefinition("Group","AvailableTargetGroupsForModules");this.Group_AvailableTargetGroupsForNetworks=new RouteDefinition("Group","AvailableTargetGroupsForNetworks");this.Group_BillingEntities=new RouteDefinition("Group","BillingEntities");this.Group_BillingEntitiesTable=new RouteDefinition("Group","BillingEntitiesTable");this.Group_BillingEntitiesWhichCanBeAdded=new RouteDefinition("Group","BillingEntitiesWhichCanBeAdded");this.Group_Brandings=new RouteDefinition("Group","Brandings");this.Group_BrandingsTable=new RouteDefinition("Group","BrandingsTable");this.Group_BulkSetMaxSyncInterval=new RouteDefinition("Group","BulkSetMaxSyncInterval");this.Group_CancelledNetworkSubscriptionsTable=new RouteDefinition("Group","CancelledNetworkSubscriptionsTable");this.Group_ChangeParent=new RouteDefinition("Group","ChangeParent");this.Group_ConfigHistory=new RouteDefinition("Group","ConfigHistory");this.Group_ConfigHistoryByTypeTable=new RouteDefinition("Group","ConfigHistoryByTypeTable");this.Group_ConfigHistoryDetails=new RouteDefinition("Group","ConfigHistoryDetails");this.Group_ConfigHistoryItemsTable=new RouteDefinition("Group","ConfigHistoryItemsTable");this.Group_ConfigHistoryModulesTable=new RouteDefinition("Group","ConfigHistoryModulesTable");this.Group_CopyModuleBulk=new RouteDefinition("Group","CopyModuleBulk");this.Group_CopyNetworkBulk=new RouteDefinition("Group","CopyNetworkBulk");this.Group_CreateApp=new RouteDefinition("Group","CreateApp");this.Group_CreateApplicationTemplate=new RouteDefinition("Group","CreateApplicationTemplate");this.Group_CreateAppModuleSource=new RouteDefinition("Group","CreateAppModuleSource");this.Group_CreateBillingEntity=new RouteDefinition("Group","CreateBillingEntity");this.Group_CreateDevice=new RouteDefinition("Group","CreateDevice");this.Group_CreateDeviceType=new RouteDefinition("Group","CreateDeviceType");this.Group_CreateEscalationList=new RouteDefinition("Group","CreateEscalationList");this.Group_CreateGisDataset=new RouteDefinition("Group","CreateGisDataset");this.Group_CreateGroup=new RouteDefinition("Group","CreateGroup");this.Group_CreateLegalTerms=new RouteDefinition("Group","CreateLegalTerms");this.Group_CreateMessageAccount=new RouteDefinition("Group","CreateMessageAccount");this.Group_CreateMessagePlan=new RouteDefinition("Group","CreateMessagePlan");this.Group_CreateModuleConfigTemplate=new RouteDefinition("Group","CreateModuleConfigTemplate");this.Group_CreateNetwork=new RouteDefinition("Group","CreateNetwork");this.Group_CreateNetworkSubscription=new RouteDefinition("Group","CreateNetworkSubscription");this.Group_CreateNetworkSubscriptionPlan=new RouteDefinition("Group","CreateNetworkSubscriptionPlan");this.Group_CreatePrefix=new RouteDefinition("Group","CreatePrefix");this.Group_CreateReportTemplate=new RouteDefinition("Group","CreateReportTemplate");this.Group_CreateRfidTag=new RouteDefinition("Group","CreateRfidTag");this.Group_CreateRole=new RouteDefinition("Group","CreateRole");this.Group_CreateSharedCollection=new RouteDefinition("Group","CreateSharedCollection");this.Group_CreateSim=new RouteDefinition("Group","CreateSim");this.Group_CreateTag=new RouteDefinition("Group","CreateTag");this.Group_CreateUser=new RouteDefinition("Group","CreateUser");this.Group_DataStreams=new RouteDefinition("Group","DataStreams");this.Group_DataStreamsTable=new RouteDefinition("Group","DataStreamsTable");this.Group_DataStreamsWhichCanBeAdded=new RouteDefinition("Group","DataStreamsWhichCanBeAdded");this.Group_Delete=new RouteDefinition("Group","Delete");this.Group_Details=new RouteDefinition("Group","Details");this.Group_Devices=new RouteDefinition("Group","Devices");this.Group_DevicesTable=new RouteDefinition("Group","DevicesTable");this.Group_DeviceSummary=new RouteDefinition("Group","DeviceSummary");this.Group_DeviceSummaryTable=new RouteDefinition("Group","DeviceSummaryTable");this.Group_DevicesWhichCanBeAdded=new RouteDefinition("Group","DevicesWhichCanBeAdded");this.Group_DeviceTypes=new RouteDefinition("Group","DeviceTypes");this.Group_DeviceTypesTable=new RouteDefinition("Group","DeviceTypesTable");this.Group_DeviceTypesWhichCanBeAdded=new RouteDefinition("Group","DeviceTypesWhichCanBeAdded");this.Group_DocumentationPrefixes=new RouteDefinition("Group","DocumentationPrefixes");this.Group_DocumentPrefixesTable=new RouteDefinition("Group","DocumentPrefixesTable");this.Group_DownloadModuleAlertsForType=new RouteDefinition("Group","DownloadModuleAlertsForType");this.Group_DownloadRfidTags=new RouteDefinition("Group","DownloadRfidTags");this.Group_EmailProviders=new RouteDefinition("Group","EmailProviders");this.Group_EmailProvidersTable=new RouteDefinition("Group","EmailProvidersTable");this.Group_EscalationLists=new RouteDefinition("Group","EscalationLists");this.Group_EscalationListsTable=new RouteDefinition("Group","EscalationListsTable");this.Group_EscalationListsWhichCanBeAdded=new RouteDefinition("Group","EscalationListsWhichCanBeAdded");this.Group_ExportTargets=new RouteDefinition("Group","ExportTargets");this.Group_ExportTargetsTable=new RouteDefinition("Group","ExportTargetsTable");this.Group_ExportTargetsWhichCanBeAdded=new RouteDefinition("Group","ExportTargetsWhichCanBeAdded");this.Group_GetAlertsByModuleType=new RouteDefinition("Group","GetAlertsByModuleType");this.Group_GetAvailableEscalationLists=new RouteDefinition("Group","GetAvailableEscalationLists");this.Group_GetGroupTasks=new RouteDefinition("Group","GetGroupTasks");this.Group_GetModuleAlertsForType=new RouteDefinition("Group","GetModuleAlertsForType");this.Group_GetNestedModuleConfigsTable=new RouteDefinition("Group","GetNestedModuleConfigsTable");this.Group_GetNetworkLocationSummary=new RouteDefinition("Group","GetNetworkLocationSummary");this.Group_GetNetworkNodesWithDeviceTable=new RouteDefinition("Group","GetNetworkNodesWithDeviceTable");this.Group_GisDatasets=new RouteDefinition("Group","GisDatasets");this.Group_GisDatasetsTable=new RouteDefinition("Group","GisDatasetsTable");this.Group_GisDatasetsWhichCanBeAdded=new RouteDefinition("Group","GisDatasetsWhichCanBeAdded");this.Group_GrantedRoles=new RouteDefinition("Group","GrantedRoles");this.Group_GrantedRolesTable=new RouteDefinition("Group","GrantedRolesTable");this.Group_GrantRoles=new RouteDefinition("Group","GrantRoles");this.Group_GroupsTable=new RouteDefinition("Group","GroupsTable");this.Group_GroupsToContainEmailProvider=new RouteDefinition("Group","GroupsToContainEmailProvider");this.Group_GroupsToContainMessageAccount=new RouteDefinition("Group","GroupsToContainMessageAccount");this.Group_GroupsToContainNote=new RouteDefinition("Group","GroupsToContainNote");this.Group_GroupsToContainSmsProvider=new RouteDefinition("Group","GroupsToContainSmsProvider");this.Group_HaloFonterraProvision=new RouteDefinition("Group","HaloFonterraProvision");this.Group_Icons=new RouteDefinition("Group","Icons");this.Group_IconsTable=new RouteDefinition("Group","IconsTable");this.Group_IconsWhichCanBeAdded=new RouteDefinition("Group","IconsWhichCanBeAdded");this.Group_ImportProvisioningData=new RouteDefinition("Group","ImportProvisioningData");this.Group_Index=new RouteDefinition("Group","Index");this.Group_LegalTerms=new RouteDefinition("Group","LegalTerms");this.Group_LegalTermsTable=new RouteDefinition("Group","LegalTermsTable");this.Group_LegalTermsWhichCanBeAdded=new RouteDefinition("Group","LegalTermsWhichCanBeAdded");this.Group_MemberGroupsTable=new RouteDefinition("Group","MemberGroupsTable");this.Group_MessageAccounts=new RouteDefinition("Group","MessageAccounts");this.Group_MessageAccountsTable=new RouteDefinition("Group","MessageAccountsTable");this.Group_MessageAccountsWhichCanBeAdded=new RouteDefinition("Group","MessageAccountsWhichCanBeAdded");this.Group_MessagePlans=new RouteDefinition("Group","MessagePlans");this.Group_MessagePlansTable=new RouteDefinition("Group","MessagePlansTable");this.Group_MessagePlansWhichCanBeAdded=new RouteDefinition("Group","MessagePlansWhichCanBeAdded");this.Group_ModuleAlerts=new RouteDefinition("Group","ModuleAlerts");this.Group_ModuleConfigTemplates=new RouteDefinition("Group","ModuleConfigTemplates");this.Group_ModuleConfigTemplatesTable=new RouteDefinition("Group","ModuleConfigTemplatesTable");this.Group_ModuleConfigTemplatesWhichCanBeAdded=new RouteDefinition("Group","ModuleConfigTemplatesWhichCanBeAdded");this.Group_ModuleConfiguration=new RouteDefinition("Group","ModuleConfiguration");this.Group_ModuleConversions=new RouteDefinition("Group","ModuleConversions");this.Group_ModuleConversionsTable=new RouteDefinition("Group","ModuleConversionsTable");this.Group_Modules=new RouteDefinition("Group","Modules");this.Group_ModulesTable=new RouteDefinition("Group","ModulesTable");this.Group_ModulesWhichCanBeAdded=new RouteDefinition("Group","ModulesWhichCanBeAdded");this.Group_MoveDevices=new RouteDefinition("Group","MoveDevices");this.Group_MoveModuleBulk=new RouteDefinition("Group","MoveModuleBulk");this.Group_MoveNetworkBulk=new RouteDefinition("Group","MoveNetworkBulk");this.Group_NestedModuleTypes=new RouteDefinition("Group","NestedModuleTypes");this.Group_NestedNetworkDeviceTypes=new RouteDefinition("Group","NestedNetworkDeviceTypes");this.Group_NestedNetworkDeviceTypesForAppUpdates=new RouteDefinition("Group","NestedNetworkDeviceTypesForAppUpdates");this.Group_NetworkManagers=new RouteDefinition("Group","NetworkManagers");this.Group_NetworkManagersTable=new RouteDefinition("Group","NetworkManagersTable");this.Group_Networks=new RouteDefinition("Group","Networks");this.Group_NetworkSims=new RouteDefinition("Group","NetworkSims");this.Group_NetworkSimsTable=new RouteDefinition("Group","NetworkSimsTable");this.Group_NetworksTable=new RouteDefinition("Group","NetworksTable");this.Group_NetworkStatus=new RouteDefinition("Group","NetworkStatus");this.Group_NetworkSubscriptionPlans=new RouteDefinition("Group","NetworkSubscriptionPlans");this.Group_NetworkSubscriptionPlansTable=new RouteDefinition("Group","NetworkSubscriptionPlansTable");this.Group_NetworkSubscriptionRenewalsTable=new RouteDefinition("Group","NetworkSubscriptionRenewalsTable");this.Group_NetworkSubscriptions=new RouteDefinition("Group","NetworkSubscriptions");this.Group_NetworkSubscriptionsTable=new RouteDefinition("Group","NetworkSubscriptionsTable");this.Group_NetworksWhichCanBeAdded=new RouteDefinition("Group","NetworksWhichCanBeAdded");this.Group_NodesWithDeviceTypeTable=new RouteDefinition("Group","NodesWithDeviceTypeTable");this.Group_Notes=new RouteDefinition("Group","Notes");this.Group_NotesTable=new RouteDefinition("Group","NotesTable");this.Group_ProcessProvisioningData=new RouteDefinition("Group","ProcessProvisioningData");this.Group_RemoveApp=new RouteDefinition("Group","RemoveApp");this.Group_RemoveApplicationTemplate=new RouteDefinition("Group","RemoveApplicationTemplate");this.Group_RemoveAppModuleSource=new RouteDefinition("Group","RemoveAppModuleSource");this.Group_RemoveBillingEntity=new RouteDefinition("Group","RemoveBillingEntity");this.Group_RemoveDataStream=new RouteDefinition("Group","RemoveDataStream");this.Group_RemoveDevice=new RouteDefinition("Group","RemoveDevice");this.Group_RemoveDeviceType=new RouteDefinition("Group","RemoveDeviceType");this.Group_RemoveEscalationList=new RouteDefinition("Group","RemoveEscalationList");this.Group_RemoveExportTarget=new RouteDefinition("Group","RemoveExportTarget");this.Group_RemoveGISDataset=new RouteDefinition("Group","RemoveGISDataset");this.Group_RemoveIcon=new RouteDefinition("Group","RemoveIcon");this.Group_RemoveLegalTerms=new RouteDefinition("Group","RemoveLegalTerms");this.Group_RemoveMessageAccount=new RouteDefinition("Group","RemoveMessageAccount");this.Group_RemoveMessagePlan=new RouteDefinition("Group","RemoveMessagePlan");this.Group_RemoveModule=new RouteDefinition("Group","RemoveModule");this.Group_RemoveModuleBulk=new RouteDefinition("Group","RemoveModuleBulk");this.Group_RemoveModuleConfigTemplate=new RouteDefinition("Group","RemoveModuleConfigTemplate");this.Group_RemoveNetwork=new RouteDefinition("Group","RemoveNetwork");this.Group_RemoveNetworkBulk=new RouteDefinition("Group","RemoveNetworkBulk");this.Group_RemovePrefix=new RouteDefinition("Group","RemovePrefix");this.Group_RemoveReportTemplate=new RouteDefinition("Group","RemoveReportTemplate");this.Group_RemoveRfidTag=new RouteDefinition("Group","RemoveRfidTag");this.Group_RemoveRole=new RouteDefinition("Group","RemoveRole");this.Group_RemoveSharedCollection=new RouteDefinition("Group","RemoveSharedCollection");this.Group_RemoveSim=new RouteDefinition("Group","RemoveSim");this.Group_RemoveTag=new RouteDefinition("Group","RemoveTag");this.Group_RemoveUser=new RouteDefinition("Group","RemoveUser");this.Group_Rename=new RouteDefinition("Group","Rename");this.Group_ReportTemplates=new RouteDefinition("Group","ReportTemplates");this.Group_ReportTemplatesTable=new RouteDefinition("Group","ReportTemplatesTable");this.Group_ReportTemplatesWhichCanBeAdded=new RouteDefinition("Group","ReportTemplatesWhichCanBeAdded");this.Group_RevokeRole=new RouteDefinition("Group","RevokeRole");this.Group_RfidTags=new RouteDefinition("Group","RfidTags");this.Group_RfidTagsTable=new RouteDefinition("Group","RfidTagsTable");this.Group_RfidTagsWhichCanBeAdded=new RouteDefinition("Group","RfidTagsWhichCanBeAdded");this.Group_Roles=new RouteDefinition("Group","Roles");this.Group_RolesGrantedOnGroupTable=new RouteDefinition("Group","RolesGrantedOnGroupTable");this.Group_RolesTable=new RouteDefinition("Group","RolesTable");this.Group_RolesWhichCanBeAdded=new RouteDefinition("Group","RolesWhichCanBeAdded");this.Group_SharedCollections=new RouteDefinition("Group","SharedCollections");this.Group_SharedCollectionsTable=new RouteDefinition("Group","SharedCollectionsTable");this.Group_SharedCollectionsWhichCanBeAdded=new RouteDefinition("Group","SharedCollectionsWhichCanBeAdded");this.Group_Sims=new RouteDefinition("Group","Sims");this.Group_SimsTable=new RouteDefinition("Group","SimsTable");this.Group_SimsWhichCanBeAdded=new RouteDefinition("Group","SimsWhichCanBeAdded");this.Group_SmsProviders=new RouteDefinition("Group","SmsProviders");this.Group_SmsProvidersTable=new RouteDefinition("Group","SmsProvidersTable");this.Group_Tags=new RouteDefinition("Group","Tags");this.Group_TagsTable=new RouteDefinition("Group","TagsTable");this.Group_TagsWhichCanBeAdded=new RouteDefinition("Group","TagsWhichCanBeAdded");this.Group_Tasks=new RouteDefinition("Group","Tasks");this.Group_UnsubscribedNetworksTable=new RouteDefinition("Group","UnsubscribedNetworksTable");this.Group_UpdateNetworkFirmware=new RouteDefinition("Group","UpdateNetworkFirmware");this.Group_UpdateNetworkNodeFirmwareBulk=new RouteDefinition("Group","UpdateNetworkNodeFirmwareBulk");this.Group_UploadIcon=new RouteDefinition("Group","UploadIcon");this.Group_UserActionsForTargetGroupTable=new RouteDefinition("Group","UserActionsForTargetGroupTable");this.Group_Users=new RouteDefinition("Group","Users");this.Group_UsersTable=new RouteDefinition("Group","UsersTable");this.Group_UsersWhichCanBeAdded=new RouteDefinition("Group","UsersWhichCanBeAdded");this.Home_Index=new RouteDefinition("Home","Index");this.Home_TimeZoneNames=new RouteDefinition("Home","TimeZoneNames");this.LegalTerms_AvailableLegalTerms=new RouteDefinition("LegalTerms","AvailableLegalTerms");this.LegalTerms_Delete=new RouteDefinition("LegalTerms","Delete");this.LegalTerms_Details=new RouteDefinition("LegalTerms","Details");this.LegalTerms_View=new RouteDefinition("LegalTerms","View");this.MessageAccount_AddGroupNetworks=new RouteDefinition("MessageAccount","AddGroupNetworks");this.MessageAccount_AddGroupUsers=new RouteDefinition("MessageAccount","AddGroupUsers");this.MessageAccount_AddManager=new RouteDefinition("MessageAccount","AddManager");this.MessageAccount_AddNetwork=new RouteDefinition("MessageAccount","AddNetwork");this.MessageAccount_AddUser=new RouteDefinition("MessageAccount","AddUser");this.MessageAccount_AvailableManagerUsers=new RouteDefinition("MessageAccount","AvailableManagerUsers");this.MessageAccount_AvailableMessageAccounts=new RouteDefinition("MessageAccount","AvailableMessageAccounts");this.MessageAccount_AvailableMessagePlansForAccount=new RouteDefinition("MessageAccount","AvailableMessagePlansForAccount");this.MessageAccount_AvailableNetworks=new RouteDefinition("MessageAccount","AvailableNetworks");this.MessageAccount_AvailableUsers=new RouteDefinition("MessageAccount","AvailableUsers");this.MessageAccount_ChangePlan=new RouteDefinition("MessageAccount","ChangePlan");this.MessageAccount_Details=new RouteDefinition("MessageAccount","Details");this.MessageAccount_ManagersTable=new RouteDefinition("MessageAccount","ManagersTable");this.MessageAccount_NetworksTable=new RouteDefinition("MessageAccount","NetworksTable");this.MessageAccount_PeriodMessages=new RouteDefinition("MessageAccount","PeriodMessages");this.MessageAccount_PeriodMessagesTable=new RouteDefinition("MessageAccount","PeriodMessagesTable");this.MessageAccount_Periods=new RouteDefinition("MessageAccount","Periods");this.MessageAccount_PeriodsTable=new RouteDefinition("MessageAccount","PeriodsTable");this.MessageAccount_RemoveManager=new RouteDefinition("MessageAccount","RemoveManager");this.MessageAccount_RemoveNetwork=new RouteDefinition("MessageAccount","RemoveNetwork");this.MessageAccount_RemoveUser=new RouteDefinition("MessageAccount","RemoveUser");this.MessageAccount_Update=new RouteDefinition("MessageAccount","Update");this.MessageAccount_UsersTable=new RouteDefinition("MessageAccount","UsersTable");this.MessagePlan_AccountsForMessagePlanTable=new RouteDefinition("MessagePlan","AccountsForMessagePlanTable");this.MessagePlan_AvailableEmailProviders=new RouteDefinition("MessagePlan","AvailableEmailProviders");this.MessagePlan_AvailableMessagePlans=new RouteDefinition("MessagePlan","AvailableMessagePlans");this.MessagePlan_AvailableSmsProviders=new RouteDefinition("MessagePlan","AvailableSmsProviders");this.MessagePlan_Delete=new RouteDefinition("MessagePlan","Delete");this.MessagePlan_Details=new RouteDefinition("MessagePlan","Details");this.MessagePlan_Edit=new RouteDefinition("MessagePlan","Edit");this.MessagePlan_EditEmailQuota=new RouteDefinition("MessagePlan","EditEmailQuota");this.MessagePlan_EditSmsQuota=new RouteDefinition("MessagePlan","EditSmsQuota");this.Module_AddAttribute=new RouteDefinition("Module","AddAttribute");this.Module_AddRfidTagGroups=new RouteDefinition("Module","AddRfidTagGroups");this.Module_AddToDashboardGroups=new RouteDefinition("Module","AddToDashboardGroups");this.Module_AlertDetails=new RouteDefinition("Module","AlertDetails");this.Module_AlertEscalationListHistoryTable=new RouteDefinition("Module","AlertEscalationListHistoryTable");this.Module_AlertEventDetails=new RouteDefinition("Module","AlertEventDetails");this.Module_AlertEventsTable=new RouteDefinition("Module","AlertEventsTable");this.Module_ApplyCalibration=new RouteDefinition("Module","ApplyCalibration");this.Module_AttachTag=new RouteDefinition("Module","AttachTag");this.Module_AvailableDashboardGroups=new RouteDefinition("Module","AvailableDashboardGroups");this.Module_AvailableIconNames=new RouteDefinition("Module","AvailableIconNames");this.Module_AvailableModulesOfType=new RouteDefinition("Module","AvailableModulesOfType");this.Module_AvailableModuleTypes=new RouteDefinition("Module","AvailableModuleTypes");this.Module_AvailableRfidTagGroups=new RouteDefinition("Module","AvailableRfidTagGroups");this.Module_AvailableUsersForAlertSubscription=new RouteDefinition("Module","AvailableUsersForAlertSubscription");this.Module_CalibrationDetails=new RouteDefinition("Module","CalibrationDetails");this.Module_ClearAutoSmsUser=new RouteDefinition("Module","ClearAutoSmsUser");this.Module_ClearCalibration=new RouteDefinition("Module","ClearCalibration");this.Module_ClearOutlierStatus=new RouteDefinition("Module","ClearOutlierStatus");this.Module_ClearSuppressAlerts=new RouteDefinition("Module","ClearSuppressAlerts");this.Module_Command=new RouteDefinition("Module","Command");this.Module_ConfigHistory=new RouteDefinition("Module","ConfigHistory");this.Module_ConfigHistoryTable=new RouteDefinition("Module","ConfigHistoryTable");this.Module_ConfigHistoryValuesTable=new RouteDefinition("Module","ConfigHistoryValuesTable");this.Module_ConfigTemplates=new RouteDefinition("Module","ConfigTemplates");this.Module_ConfigUpdate=new RouteDefinition("Module","ConfigUpdate");this.Module_Configure=new RouteDefinition("Module","Configure");this.Module_ConfigureBulk=new RouteDefinition("Module","ConfigureBulk");this.Module_ConfigureModuleExportTarget=new RouteDefinition("Module","ConfigureModuleExportTarget");this.Module_ContainingGroups=new RouteDefinition("Module","ContainingGroups");this.Module_ContainingGroupsTable=new RouteDefinition("Module","ContainingGroupsTable");this.Module_CreateCumulativeMeter=new RouteDefinition("Module","CreateCumulativeMeter");this.Module_CreateDataStream=new RouteDefinition("Module","CreateDataStream");this.Module_CreateModuleExportTarget=new RouteDefinition("Module","CreateModuleExportTarget");this.Module_CreateNote=new RouteDefinition("Module","CreateNote");this.Module_CreateSubscriberAlert=new RouteDefinition("Module","CreateSubscriberAlert");this.Module_Delete=new RouteDefinition("Module","Delete");this.Module_DeleteModuleExportTarget=new RouteDefinition("Module","DeleteModuleExportTarget");this.Module_Details=new RouteDefinition("Module","Details");this.Module_DownloadDailyTotals=new RouteDefinition("Module","DownloadDailyTotals");this.Module_DownloadEventsData=new RouteDefinition("Module","DownloadEventsData");this.Module_DownloadRawData=new RouteDefinition("Module","DownloadRawData");this.Module_EventDetails=new RouteDefinition("Module","EventDetails");this.Module_EventsTable=new RouteDefinition("Module","EventsTable");this.Module_GetAlerts=new RouteDefinition("Module","GetAlerts");this.Module_GetCumulativeTrends=new RouteDefinition("Module","GetCumulativeTrends");this.Module_GetExportableTrends=new RouteDefinition("Module","GetExportableTrends");this.Module_GetExportTargets=new RouteDefinition("Module","GetExportTargets");this.Module_GetLocationLogs=new RouteDefinition("Module","GetLocationLogs");this.Module_GetLocationTrails=new RouteDefinition("Module","GetLocationTrails");this.Module_GetModuleConfigHistoryConfigItems=new RouteDefinition("Module","GetModuleConfigHistoryConfigItems");this.Module_GetModuleConfigItems=new RouteDefinition("Module","GetModuleConfigItems");this.Module_GetModuleLocationHistory=new RouteDefinition("Module","GetModuleLocationHistory");this.Module_GetModuleTypeConfigItems=new RouteDefinition("Module","GetModuleTypeConfigItems");this.Module_GetNodeModuleNameIndexes=new RouteDefinition("Module","GetNodeModuleNameIndexes");this.Module_GetSiblingNetworkNodes=new RouteDefinition("Module","GetSiblingNetworkNodes");this.Module_GroupsToContainDataStream=new RouteDefinition("Module","GroupsToContainDataStream");this.Module_GroupsToContainModuleConfigTemplate=new RouteDefinition("Module","GroupsToContainModuleConfigTemplate");this.Module_LockCalibration=new RouteDefinition("Module","LockCalibration");this.Module_Map=new RouteDefinition("Module","Map");this.Module_ModuleConfigTemplatesTable=new RouteDefinition("Module","ModuleConfigTemplatesTable");this.Module_ModuleExportTarget=new RouteDefinition("Module","ModuleExportTarget");this.Module_MoveModule=new RouteDefinition("Module","MoveModule");this.Module_NotesTable=new RouteDefinition("Module","NotesTable");this.Module_PreviewModuleExportTarget=new RouteDefinition("Module","PreviewModuleExportTarget");this.Module_QueryModuleState=new RouteDefinition("Module","QueryModuleState");this.Module_QuickToggle=new RouteDefinition("Module","QuickToggle");this.Module_RemoveAlertEscalationList=new RouteDefinition("Module","RemoveAlertEscalationList");this.Module_RemoveAttributes=new RouteDefinition("Module","RemoveAttributes");this.Module_RemoveFromDashboardGroup=new RouteDefinition("Module","RemoveFromDashboardGroup");this.Module_RemoveRfidTagGroup=new RouteDefinition("Module","RemoveRfidTagGroup");this.Module_RemoveSubscriberFromAlert=new RouteDefinition("Module","RemoveSubscriberFromAlert");this.Module_RemoveTag=new RouteDefinition("Module","RemoveTag");this.Module_Rename=new RouteDefinition("Module","Rename");this.Module_RollbackConfigHistory=new RouteDefinition("Module","RollbackConfigHistory");this.Module_ScaleData=new RouteDefinition("Module","ScaleData");this.Module_SendTestAlerts=new RouteDefinition("Module","SendTestAlerts");this.Module_SetAlertAutoSms=new RouteDefinition("Module","SetAlertAutoSms");this.Module_SetAlertEscalationList=new RouteDefinition("Module","SetAlertEscalationList");this.Module_SetAlertSubscription=new RouteDefinition("Module","SetAlertSubscription");this.Module_SetCollectionOutlier=new RouteDefinition("Module","SetCollectionOutlier");this.Module_SetLocation=new RouteDefinition("Module","SetLocation");this.Module_SetModuleExportTargetEnabledState=new RouteDefinition("Module","SetModuleExportTargetEnabledState");this.Module_SetModuleIcon=new RouteDefinition("Module","SetModuleIcon");this.Module_SetModuleIndex=new RouteDefinition("Module","SetModuleIndex");this.Module_SetModuleType=new RouteDefinition("Module","SetModuleType");this.Module_SetVirtualStatus=new RouteDefinition("Module","SetVirtualStatus");this.Module_SubscribedUsersTable=new RouteDefinition("Module","SubscribedUsersTable");this.Module_Subscribers=new RouteDefinition("Module","Subscribers");this.Module_SubscribersTable=new RouteDefinition("Module","SubscribersTable");this.Module_SuppressAlerts=new RouteDefinition("Module","SuppressAlerts");this.Module_Tags=new RouteDefinition("Module","Tags");this.Module_TagsTable=new RouteDefinition("Module","TagsTable");this.Module_TagValueHistoryTable=new RouteDefinition("Module","TagValueHistoryTable");this.Module_UnlockCalibration=new RouteDefinition("Module","UnlockCalibration");this.Module_UpdateAttribute=new RouteDefinition("Module","UpdateAttribute");this.Module_UpdateSubscriberAlert=new RouteDefinition("Module","UpdateSubscriberAlert");this.Module_UpdateTag=new RouteDefinition("Module","UpdateTag");this.Module_UserActionsForTargetModuleTable=new RouteDefinition("Module","UserActionsForTargetModuleTable");this.Module_UserAlertHistoryTable=new RouteDefinition("Module","UserAlertHistoryTable");this.ModuleConfigTemplate_AvailableModuleConfigTemplatesForType=new RouteDefinition("ModuleConfigTemplate","AvailableModuleConfigTemplatesForType");this.ModuleConfigTemplate_CloneModuleConfigTemplate=new RouteDefinition("ModuleConfigTemplate","CloneModuleConfigTemplate");this.ModuleConfigTemplate_GetModuleConfigTemplateConfigItems=new RouteDefinition("ModuleConfigTemplate","GetModuleConfigTemplateConfigItems");this.ModuleConfigTemplate_UpdateModuleConfigTemplate=new RouteDefinition("ModuleConfigTemplate","UpdateModuleConfigTemplate");this.ModuleConfigTemplate_UpdateModuleTemplateConfigItems=new RouteDefinition("ModuleConfigTemplate","UpdateModuleTemplateConfigItems");this.Network_AcknowledgeOverdue=new RouteDefinition("Network","AcknowledgeOverdue");this.Network_AddIoModuleToNode=new RouteDefinition("Network","AddIoModuleToNode");this.Network_AddManagerUsers=new RouteDefinition("Network","AddManagerUsers");this.Network_AddOverdueAlertUser=new RouteDefinition("Network","AddOverdueAlertUser");this.Network_AddSubscribersToOverdueAlert=new RouteDefinition("Network","AddSubscribersToOverdueAlert");this.Network_AlertUsersWhichCanBeAdded=new RouteDefinition("Network","AlertUsersWhichCanBeAdded");this.Network_AllGisDatasets=new RouteDefinition("Network","AllGisDatasets");this.Network_AllNetworkModules=new RouteDefinition("Network","AllNetworkModules");this.Network_ApplyApplicationTemplateToNode=new RouteDefinition("Network","ApplyApplicationTemplateToNode");this.Network_ApplyApplicationTemplateUpdateToNode=new RouteDefinition("Network","ApplyApplicationTemplateUpdateToNode");this.Network_ApplyChangeset=new RouteDefinition("Network","ApplyChangeset");this.Network_ApplyNodePortConfig=new RouteDefinition("Network","ApplyNodePortConfig");this.Network_ApplySnapshot=new RouteDefinition("Network","ApplySnapshot");this.Network_AssignGisDataset=new RouteDefinition("Network","AssignGisDataset");this.Network_AssignSim=new RouteDefinition("Network","AssignSim");this.Network_AttachDevice=new RouteDefinition("Network","AttachDevice");this.Network_AttachDeviceToIoModule=new RouteDefinition("Network","AttachDeviceToIoModule");this.Network_AttachN8Link=new RouteDefinition("Network","AttachN8Link");this.Network_AttachTag=new RouteDefinition("Network","AttachTag");this.Network_AvailableApplications=new RouteDefinition("Network","AvailableApplications");this.Network_AvailableApplicationTemplates=new RouteDefinition("Network","AvailableApplicationTemplates");this.Network_AvailableFirmwareForIoModule=new RouteDefinition("Network","AvailableFirmwareForIoModule");this.Network_AvailableFirmwareForNode=new RouteDefinition("Network","AvailableFirmwareForNode");this.Network_AvailableGatewayDevices=new RouteDefinition("Network","AvailableGatewayDevices");this.Network_AvailableIoModuleSlots=new RouteDefinition("Network","AvailableIoModuleSlots");this.Network_AvailableIoModulesToAttach=new RouteDefinition("Network","AvailableIoModulesToAttach");this.Network_AvailableN8LinkDevices=new RouteDefinition("Network","AvailableN8LinkDevices");this.Network_AvailableNodeAddresses=new RouteDefinition("Network","AvailableNodeAddresses");this.Network_AvailableNodeStatus=new RouteDefinition("Network","AvailableNodeStatus");this.Network_AvailableNonGatewayDevices=new RouteDefinition("Network","AvailableNonGatewayDevices");this.Network_AvailableSims=new RouteDefinition("Network","AvailableSims");this.Network_AvailableUsersToSubscribe=new RouteDefinition("Network","AvailableUsersToSubscribe");this.Network_CancelNetworkUpdate=new RouteDefinition("Network","CancelNetworkUpdate");this.Network_CancelNetworkUpdates=new RouteDefinition("Network","CancelNetworkUpdates");this.Network_ChangeAssignedApplication=new RouteDefinition("Network","ChangeAssignedApplication");this.Network_ChangeIoModuleDeviceType=new RouteDefinition("Network","ChangeIoModuleDeviceType");this.Network_ChangeTimeZone=new RouteDefinition("Network","ChangeTimeZone");this.Network_ClearSuppressAlerts=new RouteDefinition("Network","ClearSuppressAlerts");this.Network_ClearSuppressAlertsOnNode=new RouteDefinition("Network","ClearSuppressAlertsOnNode");this.Network_ContainingGroups=new RouteDefinition("Network","ContainingGroups");this.Network_ContainingGroupsTable=new RouteDefinition("Network","ContainingGroupsTable");this.Network_CreateNetworkNodeModule=new RouteDefinition("Network","CreateNetworkNodeModule");this.Network_CreateNode=new RouteDefinition("Network","CreateNode");this.Network_CreateNote=new RouteDefinition("Network","CreateNote");this.Network_CurrentNodeModules=new RouteDefinition("Network","CurrentNodeModules");this.Network_Delete=new RouteDefinition("Network","Delete");this.Network_DeleteIoModuleSlot=new RouteDefinition("Network","DeleteIoModuleSlot");this.Network_DeleteNetworkNode=new RouteDefinition("Network","DeleteNetworkNode");this.Network_DeleteNetworkNodeModules=new RouteDefinition("Network","DeleteNetworkNodeModules");this.Network_DetachDevice=new RouteDefinition("Network","DetachDevice");this.Network_DetachDeviceFromIoModule=new RouteDefinition("Network","DetachDeviceFromIoModule");this.Network_DetachN8Link=new RouteDefinition("Network","DetachN8Link");this.Network_Details=new RouteDefinition("Network","Details");this.Network_EnrolTemperatureProbe=new RouteDefinition("Network","EnrolTemperatureProbe");this.Network_EventsTable=new RouteDefinition("Network","EventsTable");this.Network_GetLastRejectedAddress=new RouteDefinition("Network","GetLastRejectedAddress");this.Network_GetNetworksForNewNode=new RouteDefinition("Network","GetNetworksForNewNode");this.Network_GetUserNetworkNodes=new RouteDefinition("Network","GetUserNetworkNodes");this.Network_GetUserNetworks=new RouteDefinition("Network","GetUserNetworks");this.Network_HardwareVerificationIssuesTable=new RouteDefinition("Network","HardwareVerificationIssuesTable");this.Network_Index=new RouteDefinition("Network","Index");this.Network_LivePingIoModule=new RouteDefinition("Network","LivePingIoModule");this.Network_LivePingNode=new RouteDefinition("Network","LivePingNode");this.Network_LiveQueryNode=new RouteDefinition("Network","LiveQueryNode");this.Network_LiveQueryNodeDeviceExtAddress=new RouteDefinition("Network","LiveQueryNodeDeviceExtAddress");this.Network_LiveQueryNodeFirmwareVersion=new RouteDefinition("Network","LiveQueryNodeFirmwareVersion");this.Network_LiveQueryNodeGetAttachedNodes=new RouteDefinition("Network","LiveQueryNodeGetAttachedNodes");this.Network_LiveQueryTemperatures=new RouteDefinition("Network","LiveQueryTemperatures");this.Network_LiveRebootNode=new RouteDefinition("Network","LiveRebootNode");this.Network_Managers=new RouteDefinition("Network","Managers");this.Network_ManagersHistoryTable=new RouteDefinition("Network","ManagersHistoryTable");this.Network_ManagersTable=new RouteDefinition("Network","ManagersTable");this.Network_ManagerUsersWhichCanBeAdded=new RouteDefinition("Network","ManagerUsersWhichCanBeAdded");this.Network_Map=new RouteDefinition("Network","Map");this.Network_Modules=new RouteDefinition("Network","Modules");this.Network_ModulesTable=new RouteDefinition("Network","ModulesTable");this.Network_MtwReport=new RouteDefinition("Network","MTWReport");this.Network_NetworksTable=new RouteDefinition("Network","NetworksTable");this.Network_Node=new RouteDefinition("Network","Node");this.Network_NodeEventsTable=new RouteDefinition("Network","NodeEventsTable");this.Network_NodeIoModuleDetails=new RouteDefinition("Network","NodeIoModuleDetails");this.Network_NodeIoModulesTable=new RouteDefinition("Network","NodeIoModulesTable");this.Network_NodeIoModuleTemperatureDetails=new RouteDefinition("Network","NodeIoModuleTemperatureDetails");this.Network_NodeMap=new RouteDefinition("Network","NodeMap");this.Network_NodePortConfig=new RouteDefinition("Network","NodePortConfig");this.Network_NodePortConfigHistoryTable=new RouteDefinition("Network","NodePortConfigHistoryTable");this.Network_NodePortConfigTable=new RouteDefinition("Network","NodePortConfigTable");this.Network_NodeQueryDetails=new RouteDefinition("Network","NodeQueryDetails");this.Network_NodesTable=new RouteDefinition("Network","NodesTable");this.Network_NodeStatusHistory=new RouteDefinition("Network","NodeStatusHistory");this.Network_NodeStatusHistoryTable=new RouteDefinition("Network","NodeStatusHistoryTable");this.Network_NodeTagDetails=new RouteDefinition("Network","NodeTagDetails");this.Network_Notes=new RouteDefinition("Network","Notes");this.Network_OfflineNetworks=new RouteDefinition("Network","OfflineNetworks");this.Network_OneWireTempProbeChangelogs=new RouteDefinition("Network","OneWireTempProbeChangelogs");this.Network_OneWireTempProbeSnapshots=new RouteDefinition("Network","OneWireTempProbeSnapshots");this.Network_OverdueSubscribers=new RouteDefinition("Network","OverdueSubscribers");this.Network_OverdueSubscribersTable=new RouteDefinition("Network","OverdueSubscribersTable");this.Network_QueryIoState=new RouteDefinition("Network","QueryIoState");this.Network_RebootNetworkNode=new RouteDefinition("Network","RebootNetworkNode");this.Network_RecentEvents=new RouteDefinition("Network","RecentEvents");this.Network_RecentNetworkAlerts=new RouteDefinition("Network","RecentNetworkAlerts");this.Network_RemoveManagerUser=new RouteDefinition("Network","RemoveManagerUser");this.Network_RemoveOverdueAlertUser=new RouteDefinition("Network","RemoveOverdueAlertUser");this.Network_RemoveSim=new RouteDefinition("Network","RemoveSim");this.Network_RemoveTag=new RouteDefinition("Network","RemoveTag");this.Network_RemoveTemperatureProbe=new RouteDefinition("Network","RemoveTemperatureProbe");this.Network_RenameNetwork=new RouteDefinition("Network","RenameNetwork");this.Network_RenameNetworkNode=new RouteDefinition("Network","RenameNetworkNode");this.Network_SetDefaultModule=new RouteDefinition("Network","SetDefaultModule");this.Network_SetGsmIdleTimeout=new RouteDefinition("Network","SetGsmIdleTimeout");this.Network_SetMaxSyncInterval=new RouteDefinition("Network","SetMaxSyncInterval");this.Network_SetNetworkNodeLocation=new RouteDefinition("Network","SetNetworkNodeLocation");this.Network_SetNetworkNodeStatus=new RouteDefinition("Network","SetNetworkNodeStatus");this.Network_SetNetworkStatus=new RouteDefinition("Network","SetNetworkStatus");this.Network_SetupApplication=new RouteDefinition("Network","SetupApplication");this.Network_SubscribeToSyncAlerts=new RouteDefinition("Network","SubscribeToSyncAlerts");this.Network_SuppressAlerts=new RouteDefinition("Network","SuppressAlerts");this.Network_SuppressAlertsOnNode=new RouteDefinition("Network","SuppressAlertsOnNode");this.Network_Tags=new RouteDefinition("Network","Tags");this.Network_TagsTable=new RouteDefinition("Network","TagsTable");this.Network_TagValueHistoryTable=new RouteDefinition("Network","TagValueHistoryTable");this.Network_TakeSnapshotOfFixedProbes=new RouteDefinition("Network","TakeSnapshotOfFixedProbes");this.Network_UnsubscribeFromSyncAlerts=new RouteDefinition("Network","UnsubscribeFromSyncAlerts");this.Network_UpdateDetails=new RouteDefinition("Network","UpdateDetails");this.Network_UpdateNetwork=new RouteDefinition("Network","UpdateNetwork");this.Network_UpdateNetworkNodeApplication=new RouteDefinition("Network","UpdateNetworkNodeApplication");this.Network_UpdateNetworkNodeConfig=new RouteDefinition("Network","UpdateNetworkNodeConfig");this.Network_UpdateNetworkNodeFirmware=new RouteDefinition("Network","UpdateNetworkNodeFirmware");this.Network_UpdateNetworkNodeIoModuleFirmware=new RouteDefinition("Network","UpdateNetworkNodeIoModuleFirmware");this.Network_UpdateNetworkNodeLiveFirmware=new RouteDefinition("Network","UpdateNetworkNodeLiveFirmware");this.Network_UpdateNodeNetworkAndAddress=new RouteDefinition("Network","UpdateNodeNetworkAndAddress");this.Network_UpdateQueue=new RouteDefinition("Network","UpdateQueue");this.Network_UpdatesTable=new RouteDefinition("Network","UpdatesTable");this.Network_UpdateTag=new RouteDefinition("Network","UpdateTag");this.Network_UserActionsForTargetNetworkTable=new RouteDefinition("Network","UserActionsForTargetNetworkTable");this.Network_Users=new RouteDefinition("Network","Users");this.Network_UsersTable=new RouteDefinition("Network","UsersTable");this.Network_VerificationIssues=new RouteDefinition("Network","VerificationIssues");this.Network_VerifyNetworkNodeHardware=new RouteDefinition("Network","VerifyNetworkNodeHardware");this.NetworkSubscription_AssignSubscriptionPlan=new RouteDefinition("NetworkSubscription","AssignSubscriptionPlan");this.NetworkSubscription_CancelSubscription=new RouteDefinition("NetworkSubscription","CancelSubscription");this.NetworkSubscription_Details=new RouteDefinition("NetworkSubscription","Details");this.NetworkSubscription_DownloadPDFInvoiceFromXero=new RouteDefinition("NetworkSubscription","DownloadPDFInvoiceFromXero");this.NetworkSubscription_GetNetworkSubscriptionGroups=new RouteDefinition("NetworkSubscription","GetNetworkSubscriptionGroups");this.NetworkSubscription_InvoiceRenewedSubscriptions=new RouteDefinition("NetworkSubscription","InvoiceRenewedSubscriptions");this.NetworkSubscription_RenewSubscription=new RouteDefinition("NetworkSubscription","RenewSubscription");this.NetworkSubscription_RenewSubscriptions=new RouteDefinition("NetworkSubscription","RenewSubscriptions");this.NetworkSubscription_SubscriptionHistoryTable=new RouteDefinition("NetworkSubscription","SubscriptionHistoryTable");this.NetworkSubscription_UpdateBillingEntity=new RouteDefinition("NetworkSubscription","UpdateBillingEntity");this.NetworkSubscriptionPlan_AvailableNetworkSubscriptionPlans=new RouteDefinition("NetworkSubscriptionPlan","AvailableNetworkSubscriptionPlans");this.NetworkSubscriptionPlan_Details=new RouteDefinition("NetworkSubscriptionPlan","Details");this.NetworkSubscriptionPlan_SubscriptionsTable=new RouteDefinition("NetworkSubscriptionPlan","SubscriptionsTable");this.NetworkSubscriptionPlan_UpdateNetworkSubscriptionPlan=new RouteDefinition("NetworkSubscriptionPlan","UpdateNetworkSubscriptionPlan");this.Note_Delete=new RouteDefinition("Note","Delete");this.Note_Details=new RouteDefinition("Note","Details");this.Note_Edit=new RouteDefinition("Note","Edit");this.Note_EventsTable=new RouteDefinition("Note","EventsTable");this.Profile_AddEmailAddress=new RouteDefinition("Profile","AddEmailAddress");this.Profile_AddPhoneNumber=new RouteDefinition("Profile","AddPhoneNumber");this.Profile_ChangeName=new RouteDefinition("Profile","ChangeName");this.Profile_ChangeTimezone=new RouteDefinition("Profile","ChangeTimezone");this.Profile_ClearSuppressAlerts=new RouteDefinition("Profile","ClearSuppressAlerts");this.Profile_EventsTable=new RouteDefinition("Profile","EventsTable");this.Profile_Index=new RouteDefinition("Profile","Index");this.Profile_ModuleEventNotifications=new RouteDefinition("Profile","ModuleEventNotifications");this.Profile_ModuleEventsTable=new RouteDefinition("Profile","ModuleEventsTable");this.Profile_ModuleEventSubscriptions=new RouteDefinition("Profile","ModuleEventSubscriptions");this.Profile_ModuleEventSubscriptionsTable=new RouteDefinition("Profile","ModuleEventSubscriptionsTable");this.Profile_NetworkAlertSubscriptions=new RouteDefinition("Profile","NetworkAlertSubscriptions");this.Profile_NetworkAlertSubscriptionsTable=new RouteDefinition("Profile","NetworkAlertSubscriptionsTable");this.Profile_RemoveEmailAddress=new RouteDefinition("Profile","RemoveEmailAddress");this.Profile_RemovePhoneNumber=new RouteDefinition("Profile","RemovePhoneNumber");this.Profile_SetPrimaryEmailAddress=new RouteDefinition("Profile","SetPrimaryEmailAddress");this.Profile_SetPrimaryPhoneNumber=new RouteDefinition("Profile","SetPrimaryPhoneNumber");this.Profile_SuppressAlerts=new RouteDefinition("Profile","SuppressAlerts");this.Profile_UnsubscribeFromModuleAlert=new RouteDefinition("Profile","UnsubscribeFromModuleAlert");this.Profile_UnsubscribeFromNetworkSyncAlert=new RouteDefinition("Profile","UnsubscribeFromNetworkSyncAlert");this.PurchaseOrder_Acknowledge=new RouteDefinition("PurchaseOrder","Acknowledge");this.PurchaseOrder_AddItem=new RouteDefinition("PurchaseOrder","AddItem");this.PurchaseOrder_AddNonDeviceSerialItemToOpenPackingList=new RouteDefinition("PurchaseOrder","AddNonDeviceSerialItemToOpenPackingList");this.PurchaseOrder_AddNonSerialDeviceToOpenPackingList=new RouteDefinition("PurchaseOrder","AddNonSerialDeviceToOpenPackingList");this.PurchaseOrder_AddSerialDeviceToOpenPackingList=new RouteDefinition("PurchaseOrder","AddSerialDeviceToOpenPackingList");this.PurchaseOrder_AvailableFreightProviders=new RouteDefinition("PurchaseOrder","AvailableFreightProviders");this.PurchaseOrder_Complete=new RouteDefinition("PurchaseOrder","Complete");this.PurchaseOrder_CompletePackingList=new RouteDefinition("PurchaseOrder","CompletePackingList");this.PurchaseOrder_CostItemsWhichCanBeAdded=new RouteDefinition("PurchaseOrder","CostItemsWhichCanBeAdded");this.PurchaseOrder_CreateInvoiceInXero=new RouteDefinition("PurchaseOrder","CreateInvoiceInXero");this.PurchaseOrder_Delete=new RouteDefinition("PurchaseOrder","Delete");this.PurchaseOrder_DeleteItem=new RouteDefinition("PurchaseOrder","DeleteItem");this.PurchaseOrder_DeleteTrackingFromPackingList=new RouteDefinition("PurchaseOrder","DeleteTrackingFromPackingList");this.PurchaseOrder_Details=new RouteDefinition("PurchaseOrder","Details");this.PurchaseOrder_DownloadPDFInvoiceFromXero=new RouteDefinition("PurchaseOrder","DownloadPDFInvoiceFromXero");this.PurchaseOrder_EditOrderNotes=new RouteDefinition("PurchaseOrder","EditOrderNotes");this.PurchaseOrder_FreightTrackingTable=new RouteDefinition("PurchaseOrder","FreightTrackingTable");this.PurchaseOrder_GetNonDeviceCostItemsRequiringSerial=new RouteDefinition("PurchaseOrder","GetNonDeviceCostItemsRequiringSerial");this.PurchaseOrder_GetTargetBillingEntityAddresses=new RouteDefinition("PurchaseOrder","GetTargetBillingEntityAddresses");this.PurchaseOrder_ItemsTable=new RouteDefinition("PurchaseOrder","ItemsTable");this.PurchaseOrder_OpenPackingListTable=new RouteDefinition("PurchaseOrder","OpenPackingListTable");this.PurchaseOrder_PackingListDetails=new RouteDefinition("PurchaseOrder","PackingListDetails");this.PurchaseOrder_PackingListItemsTable=new RouteDefinition("PurchaseOrder","PackingListItemsTable");this.PurchaseOrder_PackingListsTable=new RouteDefinition("PurchaseOrder","PackingListsTable");this.PurchaseOrder_PrintPackingSlip=new RouteDefinition("PurchaseOrder","PrintPackingSlip");this.PurchaseOrder_PrintShippingLabel=new RouteDefinition("PurchaseOrder","PrintShippingLabel");this.PurchaseOrder_RemoveNonDeviceSerialNumbersFromPackingList=new RouteDefinition("PurchaseOrder","RemoveNonDeviceSerialNumbersFromPackingList");this.PurchaseOrder_RemoveNonSerialItemsFromPackingList=new RouteDefinition("PurchaseOrder","RemoveNonSerialItemsFromPackingList");this.PurchaseOrder_RemoveSerialNumbersFromPackingList=new RouteDefinition("PurchaseOrder","RemoveSerialNumbersFromPackingList");this.PurchaseOrder_RevokeCompletion=new RouteDefinition("PurchaseOrder","RevokeCompletion");this.PurchaseOrder_UpdateAddress=new RouteDefinition("PurchaseOrder","UpdateAddress");this.PurchaseOrder_UpdateItemPrice=new RouteDefinition("PurchaseOrder","UpdateItemPrice");this.PurchaseOrder_UpdateOrderExpectedDate=new RouteDefinition("PurchaseOrder","UpdateOrderExpectedDate");this.PurchaseOrder_UpdateOrderItem=new RouteDefinition("PurchaseOrder","UpdateOrderItem");this.PurchaseOrder_UpdatePackingListAddTracking=new RouteDefinition("PurchaseOrder","UpdatePackingListAddTracking");this.PurchaseOrder_UpdatePackingListDeliveryNotes=new RouteDefinition("PurchaseOrder","UpdatePackingListDeliveryNotes");this.PurchaseOrder_UpdatePackingListReceipted=new RouteDefinition("PurchaseOrder","UpdatePackingListReceipted");this.PurchaseOrder_UpdateTrackingItem=new RouteDefinition("PurchaseOrder","UpdateTrackingItem");this.Report_Delete=new RouteDefinition("Report","Delete");this.Report_Details=new RouteDefinition("Report","Details");this.Report_GetAvailableReports=new RouteDefinition("Report","GetAvailableReports");this.Report_ModuleTypeAlerts=new RouteDefinition("Report","ModuleTypeAlerts");this.Report_ModuleTypes=new RouteDefinition("Report","ModuleTypes");this.Report_Rename=new RouteDefinition("Report","Rename");this.Report_Run=new RouteDefinition("Report","Run");this.Report_RunReportTable=new RouteDefinition("Report","RunReportTable");this.Report_Update=new RouteDefinition("Report","Update");this.Rfid_Delete=new RouteDefinition("Rfid","Delete");this.Rfid_Details=new RouteDefinition("Rfid","Details");this.Rfid_MemberGroupsTable=new RouteDefinition("Rfid","MemberGroupsTable");this.Rfid_MemberModulesTable=new RouteDefinition("Rfid","MemberModulesTable");this.Rfid_RenameTag=new RouteDefinition("Rfid","RenameTag");this.Rfid_SetTagAccessLevel=new RouteDefinition("Rfid","SetTagAccessLevel");this.Role_AddExistingCapability=new RouteDefinition("Role","AddExistingCapability");this.Role_AvailableRoles=new RouteDefinition("Role","AvailableRoles");this.Role_CapabilitiesTable=new RouteDefinition("Role","CapabilitiesTable");this.Role_CapabilitiesWhichCanBeAdded=new RouteDefinition("Role","CapabilitiesWhichCanBeAdded");this.Role_ContainingGroups=new RouteDefinition("Role","ContainingGroups");this.Role_ContainingGroupsTable=new RouteDefinition("Role","ContainingGroupsTable");this.Role_Delete=new RouteDefinition("Role","Delete");this.Role_Details=new RouteDefinition("Role","Details");this.Role_GrantsForRoleTable=new RouteDefinition("Role","GrantsForRoleTable");this.Role_RemoveCapability=new RouteDefinition("Role","RemoveCapability");this.Role_Rename=new RouteDefinition("Role","Rename");this.Search_Applications=new RouteDefinition("Search","Applications");this.Search_BillingEntities=new RouteDefinition("Search","BillingEntities");this.Search_Devices=new RouteDefinition("Search","Devices");this.Search_ExportTargets=new RouteDefinition("Search","ExportTargets");this.Search_Index=new RouteDefinition("Search","Index");this.Search_Modules=new RouteDefinition("Search","Modules");this.Search_NetworkNodes=new RouteDefinition("Search","NetworkNodes");this.Search_Networks=new RouteDefinition("Search","Networks");this.Search_PurchaseOrders=new RouteDefinition("Search","PurchaseOrders");this.Search_Sims=new RouteDefinition("Search","Sims");this.Search_Users=new RouteDefinition("Search","Users");this.Section_AddCumulativeMeters=new RouteDefinition("Section","AddCumulativeMeters");this.Section_AddModules=new RouteDefinition("Section","AddModules");this.Section_Create=new RouteDefinition("Section","Create");this.Section_CumulativeMetersWhichCanBeRemoved=new RouteDefinition("Section","CumulativeMetersWhichCanBeRemoved");this.Section_Delete=new RouteDefinition("Section","Delete");this.Section_Details=new RouteDefinition("Section","Details");this.Section_ModulesWhichCanBeRemoved=new RouteDefinition("Section","ModulesWhichCanBeRemoved");this.Section_NetworkMetersNotInSection=new RouteDefinition("Section","NetworkMetersNotInSection");this.Section_NetworkModulesNotInSection=new RouteDefinition("Section","NetworkModulesNotInSection");this.Section_RemoveCumulativeMeters=new RouteDefinition("Section","RemoveCumulativeMeters");this.Section_RemoveModules=new RouteDefinition("Section","RemoveModules");this.Section_Rename=new RouteDefinition("Section","Rename");this.Section_SetExpanded=new RouteDefinition("Section","SetExpanded");this.Section_SortOrder=new RouteDefinition("Section","SortOrder");this.SharedCollection_AddChartToCollection=new RouteDefinition("SharedCollection","AddChartToCollection");this.SharedCollection_AddItemToChart=new RouteDefinition("SharedCollection","AddItemToChart");this.SharedCollection_ConfigureChartInCollection=new RouteDefinition("SharedCollection","ConfigureChartInCollection");this.SharedCollection_ConfigureCollection=new RouteDefinition("SharedCollection","ConfigureCollection");this.SharedCollection_ConfigureItemInChart=new RouteDefinition("SharedCollection","ConfigureItemInChart");this.SharedCollection_DeleteChartFromCollection=new RouteDefinition("SharedCollection","DeleteChartFromCollection");this.SharedCollection_DeleteItemFromChart=new RouteDefinition("SharedCollection","DeleteItemFromChart");this.SharedCollection_Details=new RouteDefinition("SharedCollection","Details");this.SharedCollection_DownloadChartData=new RouteDefinition("SharedCollection","DownloadChartData");this.SharedCollection_MoveItem=new RouteDefinition("SharedCollection","MoveItem");this.SharedCollection_PrivatiseSharedChart=new RouteDefinition("SharedCollection","PrivatiseSharedChart");this.SharedCollection_SetChartSortOrder=new RouteDefinition("SharedCollection","SetChartSortOrder");this.SharedCollection_SetCollectionSortOrder=new RouteDefinition("SharedCollection","SetCollectionSortOrder");this.Sim_AvailableCellularNetworks=new RouteDefinition("Sim","AvailableCellularNetworks");this.Sim_AvailableNetworksWithGatewayDevice=new RouteDefinition("Sim","AvailableNetworksWithGatewayDevice");this.Sim_ContainingGroups=new RouteDefinition("Sim","ContainingGroups");this.Sim_ContainingGroupsTable=new RouteDefinition("Sim","ContainingGroupsTable");this.Sim_Delete=new RouteDefinition("Sim","Delete");this.Sim_Details=new RouteDefinition("Sim","Details");this.Sim_SetCellularNetwork=new RouteDefinition("Sim","SetCellularNetwork");this.Sim_SetNetwork=new RouteDefinition("Sim","SetNetwork");this.Sim_SimDailyUsageTable=new RouteDefinition("Sim","SimDailyUsageTable");this.Sim_SimUsageTable=new RouteDefinition("Sim","SimUsageTable");this.Sim_Update=new RouteDefinition("Sim","Update");this.Tag_ApplicationTagsWhichCanBeAdded=new RouteDefinition("Tag","ApplicationTagsWhichCanBeAdded");this.Tag_Details=new RouteDefinition("Tag","Details");this.Tag_ModuleTagsWhichCanBeAdded=new RouteDefinition("Tag","ModuleTagsWhichCanBeAdded");this.Tag_NetworkTagsWhichCanBeAdded=new RouteDefinition("Tag","NetworkTagsWhichCanBeAdded");this.Tag_TagAttachmentsTable=new RouteDefinition("Tag","TagAttachmentsTable");this.Toolbox_GpsItImport=new RouteDefinition("Toolbox","GpsItImport");this.User_AddEmailAddress=new RouteDefinition("User","AddEmailAddress");this.User_AddEmailAndPhoneNumber=new RouteDefinition("User","AddEmailAndPhoneNumber");this.User_AddPhoneNumber=new RouteDefinition("User","AddPhoneNumber");this.User_AvailableEmailAddresses=new RouteDefinition("User","AvailableEmailAddresses");this.User_AvailablePhoneNumbers=new RouteDefinition("User","AvailablePhoneNumbers");this.User_ChangeName=new RouteDefinition("User","ChangeName");this.User_ChangeTimezone=new RouteDefinition("User","ChangeTimezone");this.User_ClearSuppressAlerts=new RouteDefinition("User","ClearSuppressAlerts");this.User_ContainingGroups=new RouteDefinition("User","ContainingGroups");this.User_ContainingGroupsTable=new RouteDefinition("User","ContainingGroupsTable");this.User_CopyDashboardSections=new RouteDefinition("User","CopyDashboardSections");this.User_CreateAccount=new RouteDefinition("User","CreateAccount");this.User_CreateNote=new RouteDefinition("User","CreateNote");this.User_DeleteSubscription=new RouteDefinition("User","DeleteSubscription");this.User_Details=new RouteDefinition("User","Details");this.User_Disable=new RouteDefinition("User","Disable");this.User_EditBranding=new RouteDefinition("User","EditBranding");this.User_Enable=new RouteDefinition("User","Enable");this.User_EscalationLists=new RouteDefinition("User","EscalationLists");this.User_EscalationListsTable=new RouteDefinition("User","EscalationListsTable");this.User_EventsTable=new RouteDefinition("User","EventsTable");this.User_GetUserDashboardSections=new RouteDefinition("User","GetUserDashboardSections");this.User_GetUsersWithDashboardGroups=new RouteDefinition("User","GetUsersWithDashboardGroups");this.User_GrantedRoles=new RouteDefinition("User","GrantedRoles");this.User_GroupRolesTable=new RouteDefinition("User","GroupRolesTable");this.User_Impersonate=new RouteDefinition("User","Impersonate");this.User_ModuleEventNotifications=new RouteDefinition("User","ModuleEventNotifications");this.User_ModuleEventsTable=new RouteDefinition("User","ModuleEventsTable");this.User_NotesTable=new RouteDefinition("User","NotesTable");this.User_RemoveAccount=new RouteDefinition("User","RemoveAccount");this.User_RemoveEmailAddress=new RouteDefinition("User","RemoveEmailAddress");this.User_RemoveModuleAlerts=new RouteDefinition("User","RemoveModuleAlerts");this.User_RemovePhoneNumber=new RouteDefinition("User","RemovePhoneNumber");this.User_RemoveUserNetworkSyncAlerts=new RouteDefinition("User","RemoveUserNetworkSyncAlerts");this.User_ResetPassword=new RouteDefinition("User","ResetPassword");this.User_SendTestMessage=new RouteDefinition("User","SendTestMessage");this.User_SetPassword=new RouteDefinition("User","SetPassword");this.User_SetPrimaryEmailAddress=new RouteDefinition("User","SetPrimaryEmailAddress");this.User_SetPrimaryPhoneNumber=new RouteDefinition("User","SetPrimaryPhoneNumber");this.User_StopImpersonating=new RouteDefinition("User","StopImpersonating");this.User_SubscriptionAlertsTable=new RouteDefinition("User","SubscriptionAlertsTable");this.User_SubscriptionOverdueNetworksTable=new RouteDefinition("User","SubscriptionOverdueNetworksTable");this.User_Subscriptions=new RouteDefinition("User","Subscriptions");this.User_SuppressAlerts=new RouteDefinition("User","SuppressAlerts");this.User_UnlockUserAccount=new RouteDefinition("User","UnlockUserAccount");this.User_UpdateEmailAddress=new RouteDefinition("User","UpdateEmailAddress");this.User_UpdatePhoneNumber=new RouteDefinition("User","UpdatePhoneNumber");this.User_UserActionsForTargetUserTable=new RouteDefinition("User","UserActionsForTargetUserTable");this.User_UserActionsTable=new RouteDefinition("User","UserActionsTable");this.VirtualModule_Details=new RouteDefinition("VirtualModule","Details");this.VirtualModule_QueryWaterWatchSensor=new RouteDefinition("VirtualModule","QueryWaterWatchSensor");this.VirtualModule_WaterWatchSensors=new RouteDefinition("VirtualModule","WaterWatchSensors")}return n}(),Page=function(){function n(n,t){var i=this;this.defaultIntervalDelay=3e4;this.account={isAuthenticated:ko.observable(!0),dialogTemplate:ko.observable(),hasTermsAndConditions:ko.observable(!1),termsAndConditions:ko.observable(),errors:{login:ko.observable(),forgottenPwd:ko.observable(),resetPwd:ko.observable()},password:ko.observable(),resetSent:ko.observable(!1)};this.DoLogin=function(n){$(n).valid()&&(i.account.errors.forgottenPwd(null),Form.PostRequest({route:app.route.Account_Login.For(),data:$(n).serialize(),onSuccess:function(n){if(n.Success===!1){n.Response&&n.Response.TermsAndConditions&&(i.account.hasTermsAndConditions(!0),i.account.termsAndConditions(n.Response.TermsAndConditions));i.account.isAuthenticated(!1);n.Message&&i.account.errors.login(n.Message);return}i.account.errors.login(null);i.account.hasTermsAndConditions(!1);i.account.termsAndConditions(null);i.account.isAuthenticated(!0);i.account.dialogTemplate(null);var t=app.router.RouteFromWindow();i.view()==null||i.view().route!==t?t.NavigateTo():i.view().Update()},onError:function(n){i.account.isAuthenticated(!1);i.account.errors.login(n)}}))};this.DoForgotPassword=function(n){$(n).valid()&&(i.account.errors.login(null),Form.PostRequest({route:app.route.Account_ForgotPassword.For(),data:$(n).serialize(),onSuccess:function(n){if(n.Success===!1){i.account.isAuthenticated(!1);i.account.errors.forgottenPwd(n.Message);return}i.account.resetSent(!0);i.account.password(null);i.account.errors.forgottenPwd(null);i.account.dialogTemplate("dialog-reset-password-template")},onError:function(n){i.account.isAuthenticated(!1);i.account.errors.forgottenPwd(n)}}))};this.DoResetPassword=function(n){$(n).valid()&&Form.PostRequest({route:app.route.Account_ResetPassword.For(),data:$(n).serialize(),onSuccess:function(n){if(n.Success===!1){i.account.errors.resetPwd(n.Message);return}i.account.resetSent(!1);i.account.errors.resetPwd(null);i.account.errors.login(n.Message);i.view()==null||i.view().route.definition===app.route.Account_ResetPassword.For().definition?(i.account.dialogTemplate(null),i.NavigateTo(app.route.Home_Index.For())):(i.account.isAuthenticated(!1),i.account.dialogTemplate("dialog-login-template"))},onError:function(n){i.account.errors.resetPwd(n)}})};this.DoStopImpersonating=function(){Form.PostRequest({route:app.route.User_StopImpersonating.For(),onSuccess:function(n){n.Success!==!1&&i.view()!=null&&app.route.Home_Index.NavigateTo()}})};this.DoLogout=function(){i.view()&&i.view().Dispose();Form.PostRequest({route:app.route.Account_Logout.For(),onSuccess:function(n){n.Success!==!1&&(n.Response.Redirect?window.location.href=n.Response.Redirect:app.route.Home_Index.NavigateTo())}})};this.GetKeyboardEvent=function(){return i.win.event};this.NavigateToWindowUrl=function(){var n=i.router.ViewForRoute(i.router.RouteFromWindow());if(null==n){i.ToRouteNotFound();return}i.RenderView(n)};this.ToRouteNotFound=function(){i.isFirstLoad(!1);i.StopUpdate();i.view(new NotFound_View(app.route.Home_Index.For()))};this.spinnerTitle=function(){return i.loadError()!==""?i.loadError():i.parentTitle()!=null?"Back to "+i.parentTitle():""};this.loading=function(){return i.isNewViewLoading()||i.view()&&i.view().loading()};this.loadError=function(){return i.view()&&i.view().loadError()};this.spinnerCss=function(){return{"page-loading":i.loading(),"parent-link":i.parentTitle()!=null&&!i.loading()&&i.view().route.definition!==app.route.Home_Index,"home-index":!i.loading()&&i.view().route.definition===app.route.Home_Index,"page-error":i.loadError()!==""&&!i.loading()}};this.clickAction=function(){var n=i.win.event;n&&n.shiftKey||i.loadError()!==""?i.view()&&i.view().Update():i.parentTitle()!=null&&i.parentAction()};this.pointerEvents=function(){return i.loadError()!==""||i.parentTitle()!=null?"auto":"none"};this.RenderView=function(n){i.view()!=null&&i.view().Dispose();i.StopUpdate();var t=function(){i.router.MatchesWindow(n.route)&&(i.view(n),i.isNewViewLoading(!1),n.SetViewModelReady(),document.getElementById("page-scroll").scrollTop=0,i.StartUpdate())};n.Update(t)};this.StopUpdate=function(){clearInterval(i.updateInterval)};this.StartUpdate=function(n){i.StopUpdate();i.updateIntervalDelay=n||i.defaultIntervalDelay;i.updateInterval=setInterval(function(){return i.view()&&i.view().Update()},i.updateIntervalDelay)};this.win=n;this.router=t;this.menuVisible=ko.observable(!1);this.view=ko.observable(null);this.tabHidden=ko.observable(!1);this.isFirstLoad=ko.observable(!0);this.isNewViewLoading=ko.observable(!1);this.columnCount=ko.observable(1);this.updateIntervalDelay=this.defaultIntervalDelay;this.title=ko.computed(function(){return i.view()?i.view().breadcrumbs.title():""});this.hasParent=ko.computed(function(){return i.view()&&i.view().breadcrumbs.parentRoute()!=null});this.parentTitle=ko.computed(function(){return i.hasParent()?i.view().breadcrumbs.parent()||"...":null});this.parentUrl=ko.computed(function(){return i.hasParent()?i.view().breadcrumbs.parentRoute().GetUrl():null});this.parentAction=function(){return i.hasParent()?i.view().breadcrumbs.parentRoute().NavigateTo():null};this.GetPageItems=ko.computed(function(){return i.view()?i.view().GetPageItems():[]});ko.computed(function(){i.account.isAuthenticated()||i.account.dialogTemplate()||i.account.dialogTemplate("dialog-login-template")});ko.applyBindings(this,this.win.document.getElementsByTagName("html")[0]);$(this.win.document).click(function(){return i.HideMenu()});$(".page-menu-button").click(function(){return!1});$(this.win.document).keydown(function(n){n.keyCode===27&&$(".dialog .close").click()});ko.computed(function(){i.tabHidden()?i.StopUpdate():(!ko.computedContext.isInitial()&&i.minNextUpdateTime<Date.now()&&i.view()&&i.view().Update(),i.StartUpdate(),i.minNextUpdateTime=Date.now()+i.updateIntervalDelay/2)}).extend({throttle:2e3});ko.computed(function(){i.view()&&i.view().viewModel.CurrentUser.IsImpersonating()?($("#stop-impersonating").css("display",""),$("#stop-impersonating-mobile").css("display","")):($("#stop-impersonating").css("display","none"),$("#stop-impersonating-mobile").css("display","none"))});typeof this.win.document.hidden!="undefined"?this.win.document.addEventListener("visibilitychange",function(){return i.tabHidden(i.win.document.hidden)},!1):typeof document.msHidden!="undefined"?this.win.document.addEventListener("msvisibilitychange",function(){return i.tabHidden(i.win.document.msHidden)},!1):typeof document.webkitHidden!="undefined"&&this.win.document.addEventListener("webkitvisibilitychange",function(){return i.tabHidden(i.win.document.webkitHidden)},!1);this.win.onpopstate=function(){i.account.dialogTemplate(null);i.NavigateToWindowUrl()}}return n.prototype.NavigateTo=function(t){var r=this,i;if(n.ShouldOpenNewTab(this.GetKeyboardEvent())){if(null==t){this.ToRouteNotFound();return}setTimeout(function(){return r.win.open(t.GetUrl())});return}if(this.isNewViewLoading(!0),i=this.router.ViewForRoute(t),null==i){this.ToRouteNotFound();return}history.pushState({},"",t.GetUrl());this.RenderView(i)},n.prototype.ItemTemplate=function(n){return n.type+"-page-item-template"},n.prototype.IsMenuVisible=function(){return this.menuVisible()},n.prototype.HideMenu=function(){this.menuVisible(!1)},n.prototype.ToggleMenu=function(){this.menuVisible(!this.menuVisible())},n.ShouldOpenNewTab=function(n){return n&&(n.ctrlKey||n.metaKey)},n.FailedRequestNoLoginHandler=function(){},n.FailedRequestHandler=function(n){if(n!=null&&n.status!=null){if(n.status===0&&n.statusText==="abort")return;if(n.status===0&&n.statusText==="error"){app.page.view()==null?app.page.view(new Error_View(app.router.RouteFromWindow())):app.page.view().loadError("Network failure");return}if(n.status===401){app.page.account.isAuthenticated(!1);return}if(n.status===404){app.page.ToRouteNotFound();return}if(n.status===500){app.page.view(new Error_View(app.router.RouteFromWindow()));return}}},n}(),RouteDefinition=function(){function n(t,i){var r=this;this.GetKey=function(){return n.GetRouteKey(r.controller,r.action)};this.NavigateTo=function(n,t){return app.page.NavigateTo(new RouteParameters(r,n,t))};this.For=function(n,t){return new RouteParameters(r,n,t)};this.controller=t||n.HomeController;this.action=i||n.IndexAction}return n.GetRouteKey=function(t,i){return((t||n.HomeController)+"_"+(i||n.IndexAction)).toLowerCase()},n.HomeController="Home",n.DetailsAction="Details",n.IndexAction="Index",n}(),RouteParameters=function(){function n(t,i,r){var u=this;this.GetUrl=function(){var t=n.BuildQueryString(u.params);return u.id!=null?u.definition.action!==RouteDefinition.DetailsAction?"/"+u.definition.controller+"/"+ko.unwrap(u.id)+"/"+u.definition.action+t:"/"+u.definition.controller+"/"+ko.unwrap(u.id)+t:u.definition.action!==RouteDefinition.IndexAction?"/"+u.definition.controller+"/"+u.definition.action+t:u.definition.controller!==RouteDefinition.HomeController?"/"+u.definition.controller:"/"};this.IsEqualTo=function(t){return t.definition===u.definition&&(ko.unwrap(t.id)==null&&ko.unwrap(u.id)==null||""+ko.unwrap(t.id)==""+ko.unwrap(u.id))&&n.IsParamsObjectEqual(t.params,u.params)};this.NavigateTo=function(){return app.page.NavigateTo(u)};this.definition=t;this.id=i;this.params=r}return n.BuildQueryString=function(n){var t=[];return Object.keys(n||{}).forEach(function(i){ko.unwrap(n[i])!=null&&t.push(i+"="+ko.unwrap(n[i]))}),t.length>0?"?"+t.join("&"):""},n.IsParamsObjectEqual=function(n,t){var i,r,u,f;return n==null&&t==null?!0:(i={},r={},Object.keys(n||{}).forEach(function(t){ko.unwrap(n[t])!=null&&(i[t]=n[t])}),Object.keys(t||{}).forEach(function(n){ko.unwrap(t[n])!=null&&(r[n]=t[n])}),i!=null&&r!=null)?(u=Object.keys(i),f=Object.keys(r),u.length===f.length&&u.every(function(n){return""+ko.unwrap(i[n])==""+ko.unwrap(r[n])})):!1},n}(),Router=function(){function n(t){var i=this;this.routes={};this.View=function(n,t){return i.routes[n.GetKey()]={route:n,view:t}};this.ViewForRoute=function(n){var t=i.GetRouteView(n);return null==t?null:t(n)};this.RouteFromControllerAction=function(n,t,r,u){var f=i.routes[RouteDefinition.GetRouteKey(n,t)];return null==f?null:new RouteParameters(f.route,r!=null?r:undefined,u&&Object.keys(u).length>0?u:undefined)};this.RouteFromUrl=function(t,r){var f=n.DeconstructQueryString(r),u=t.substr(1).split("/"),e=u[0]||RouteDefinition.HomeController,o;return 1===u.length?i.RouteFromControllerAction(e,null,null,f):3===u.length?i.RouteFromControllerAction(e,u[2],u[1],f):(o=i.RouteFromControllerAction(e,u[1],null,f),null!=o)?o:2===u.length?i.RouteFromControllerAction(e,RouteDefinition.DetailsAction,u[1],f):4===u.length?(f.slug=u[3],i.RouteFromControllerAction(e,u[2],u[1],f)):null};this.RouteFromWindow=function(){return i.RouteFromUrl(i.win.location.pathname,i.win.location.search)};this.MatchesWindow=function(n){return n.IsEqualTo(i.RouteFromWindow())};this.win=t}return n.prototype.GetRouteView=function(n){if(null==n)return null;var t=this.routes[n.definition.GetKey()];return null==t?null:function(){return t.view.prototype.constructor(n)}},n.DeconstructQueryString=function(n){for(var r=/([^&=]+)=?([^&]*)/g,t,i={};t=r.exec(n.substr(1));)i[decodeURIComponent(t[1])]=decodeURIComponent(t[2]);return i},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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return 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(t,i){return n.MakeTile(this,t,i)}return n.StateClass=function(n){var t=ko.unwrap(n.state);return t&&!isNaN(t)&&(t=TileState[t]),"state-"+(t||"idle").toLowerCase()},n.CreateWithBlockSet=function(t,i,r){return new n(i,r).addBlockSet(t)},n.MakeTile=function(t,i,r){return t.state=KnockoutExtensions.MakeObservable(i,""),t.enabled=KnockoutExtensions.MakeObservable(r,!0),t.blockSets||(t.blockSets=ko.observableArray([])),t.getBlockTemplate=function(n){return"tile-"+n.type+"-block-template"},t.hasEnabledBlocks=function(){for(var n,e,i,f,r=ko.unwrap(t.blockSets),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.enabled||ko.unwrap(f.enabled))return!0;return!1},t.addBlockSet=function(n){return t.blockSets.push(n),t},t.getStateClass=function(){return ko.computed(function(){return n.StateClass(t)})},t},n.CreatePageItem=function(n){return n?n.type="tiles":n=new PageItem("tiles"),n.tileSets||(n.tileSets=ko.observableArray([])),n},n.ModuleTileMapping=function(t){return function(i){return n.MakeTile(i,i.State,ko.computed(function(){return t(i)})),i.addBlockSet([new Header_Block(i.Icon,new Header_Text(i.Name,i.NetworkName,i.StatusText,i.StatusDescription,ko.computed(function(){return"Last update: "+Format.LastUpdateWithSeconds(moment.utc(i.LastUpdateUtc()))})),new Header_Actions(function(){return app.route.Module_Details.NavigateTo(i.ModuleId)}),null,null,i.SpecialIconType,i.SpecialIconBaseIcon,i.SpecialIconOverlayIcon,i.SpecialIconOverlayY1,i.SpecialIconOverlayY2,i.SpecialIconPosition)]),i.addBlockSet(i.StatusValues),i.addBlockSet(i.Commands),i.addBlockSet(i.Charts),i}},n.ModuleTileStatusValueMapping=function(n){return new SingleValue_Block(n.Name,n.Value,null,null,ko.computed(function(){return"state-"+ko.unwrap(n.State).toLowerCase()}))},n.ModuleTileCommandMapping=function(n,t){return new Command_Block(t.Name,t.Description,n.FormAction(function(){return Form.ModuleCommand(t,function(){return setTimeout(function(){return n.Update?n.Update():null},3e3)})}))},n.ModuleTileChartMapping=function(n,t){return new Command_Block(t.Name,t.Description,function(){return app.route.Chart_Template.NavigateTo(null,{moduleId:t.ModuleId,template:t.Name})})},n.CreateModuleTile=function(){return n.ModuleTileMapping(function(){return!0})({Commands:ko.observableArray(),Charts:ko.observableArray(),Icon:ko.observable(""),IsEnabled:ko.observable(!1),LastUpdateUtc:ko.observable(""),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(""),SpecialIconType:ko.observable(""),SpecialIconBaseIcon:ko.observable(""),SpecialIconOverlayIcon:ko.observable(""),SpecialIconOverlayY1:ko.observable(0),SpecialIconOverlayY2:ko.observable(0),SpecialIconPosition:ko.observable(0),State:ko.observable(""),StatusDescription:ko.observable(""),StatusText:ko.observable(""),StatusValues:ko.observableArray(),SuppressAlertsUtc:ko.observable(""),Type:ko.observable("")})},n.CreateModuleTileMapping=function(t,i,r){var u=new Model.MappingOptions;return u.arrayChildId[i]="ModuleId",u.extend[i]=n.ModuleTileMapping(r||function(){return!0}),u.arrayChildId[i+".StatusValues[i]"]="Name",u.extend[i+".StatusValues[i]"]=n.ModuleTileStatusValueMapping,u.arrayChildId[i+".Commands[i]"]="Name",u.extend[i+".Commands[i]"]=function(i){return n.ModuleTileCommandMapping(t,i)},u.arrayChildId[i+".Charts[i]"]="Name",u.extend[i+".Charts[i]"]=function(i){return n.ModuleTileChartMapping(t,i)},u},n.CreateModuleTileMappingSingle=function(t,i){var r=new Model.MappingOptions;return r.arrayChildId[i+".StatusValues[i]"]="Name",r.extend[i+".StatusValues[i]"]=n.ModuleTileStatusValueMapping,r.arrayChildId[i+".Commands[i]"]="Name",r.extend[i+".Commands[i]"]=function(i){return n.ModuleTileCommandMapping(t,i)},r.arrayChildId[i+".Charts[i]"]="Name",r.extend[i+".Charts[i]"]=function(i){return n.ModuleTileChartMapping(t,i)},r},n.CumulativeMeterTotalAlarmTileMapping=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}),function(){return app.route.CumulativeMeter_Details.NavigateTo(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},n.CumulativeMeterTimeAlarmTileMapping=function(n){return new PercentBar_Block(n.Name,n.FormattedLimit,n.Percent,function(){return app.route.CumulativeMeter_Details.NavigateTo(n.CumulativeMeterId)},ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},n.CumulativeMeterTileMapping=function(t){return function(i){n.MakeTile(i,i.State,ko.computed(function(){return t(i)}));i.addBlockSet([new Header_Block(i.Icon,new Header_Text(i.Name,null,i.FormattedTotal,"Total",ko.computed(function(){return"Since "+Format.DateTime(moment(i.StartUtc()))})),new Header_Actions(function(){return app.route.CumulativeMeter_Details.NavigateTo(i.CumulativeMeterId)}),null,ko.computed(function(){return"state-"+(i.AnyLimitReached()?"faulted":i.AnyWarningReached()?"warning":"active")}))]);i.addBlockSet(i.TotalAlarms);i.addBlockSet(i.TimeAlarms)}},n.CreateCumulativeMeterTileMapping=function(t,i){var r=new Model.MappingOptions;return r.arrayChildId[t]="CumulativeMeterId",r.extend[t]=n.CumulativeMeterTileMapping(i||function(){return!0}),r.arrayChildId[t+".TotalAlarms[i]"]="Name",r.extend[t+".TotalAlarms[i]"]=n.CumulativeMeterTotalAlarmTileMapping,r.arrayChildId[t+".TimeAlarms[i]"]="Name",r.extend[t+".TimeAlarms[i]"]=n.CumulativeMeterTimeAlarmTileMapping,r},n}(),Base_Block=function(){function n(n,t,i){this.type=n;this.enabled=KnockoutExtensions.MakeObservable(t,!0);this.action=i}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,o,s,h,c,l){var a=n.call(this,"header",u,r!=null?r.TileAction:null)||this;return a.icon=KnockoutExtensions.MakeObservable(t),a.mainHeader=i.Header,a.subHeader=i.SubHeader,a.mainValue=i.Value,a.subValue=i.SubValue,a.footer=i.Footer,a.mainFormat=i.Format,r&&(a.mainHeaderAction=r.HeaderAction,a.mainValueAction=r.ValueAction,a.subHeaderAction=r.SubHeaderAction,a.subValueAction=r.SubValueAction,a.actionEnable=KnockoutExtensions.MakeObservable(r.ActionEnable),a.mainHeaderTitle=r.HeaderTitle,a.mainValueTitle=r.ValueTitle),a.stateClass=KnockoutExtensions.MakeObservable(f),a.specialIconType=KnockoutExtensions.MakeObservable(e),a.specialIconBaseIcon=KnockoutExtensions.MakeObservable(o),a.specialIconOverlayIcon=KnockoutExtensions.MakeObservable(s),a.specialIconOverlayY1=KnockoutExtensions.MakeObservable(h),a.specialIconOverlayY2=KnockoutExtensions.MakeObservable(c),a.specialIconPosition=KnockoutExtensions.MakeObservable(l),a}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){var o=n.call(this,"percent-bar",e,u)||this;return o.name=KnockoutExtensions.MakeObservable(t),o.value=KnockoutExtensions.MakeObservable(i),o.percent=KnockoutExtensions.MakeObservable(r),o.stateClass=KnockoutExtensions.MakeObservable(f),o}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){var o=n.call(this,"command",u,r)||this;return o.name=KnockoutExtensions.MakeObservable(t),o.description=KnockoutExtensions.MakeObservable(i),o.title=KnockoutExtensions.MakeObservable(f,o.name()&&o.name().length>12?o.name()+" : "+o.description():""),o.stateClass=KnockoutExtensions.MakeObservable(e),o}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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return 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 e=this,f;if(n.itemType()==="tape"&&d3.timeDay.count(t,i)>35){n.data([]);n.chart.chartSvg().Redraw();return}var o=this.OffsetDate(t,-n.offsetValue(),n.offsetUnit()),s=this.OffsetDate(i,-n.offsetValue(),n.offsetUnit()),h={moduleid:ko.unwrap(n.moduleId),name:ko.unwrap(n.trend),startUtc:o.toISOString(),endUtc:s.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),f=n.itemType()==="line"?app.route.Chart_D3NumberData.For():n.itemType()==="cumulative"?app.route.Chart_D3CumulativeData.For():n.itemType()==="histogram"?app.route.Chart_D3HistogramData.For():n.itemType()==="tape"?app.route.Chart_D3BoolData.For():null,this.requestsNumber.push({itemId:n.chartItemId(),request:d3.request(f.GetUrl()).mimeType("application/json").header("X-Requested-With","XMLHttpRequest").header("content-type","application/json").response(function(n){return JSON.parse(n.responseText)}).post(JSON.stringify(h),function(u){e.ProcessResponse(u,n,r,t,i)}).on("error",function(n){n&&Page.FailedRequestNoLoginHandler(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}(),ChartConfigSettings=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}(),ChartCollection=function(n){function t(t,i,r,u,f,e,o,s){var h=n.call(this,"chart-collection")||this,c,y;h.minZoomRange=36e5;h.hoverlineOpacity=.45;h.Resize=debounce(h.RedrawCharts,100,!1);h.view=t;h.config=new ChartConfigSettings;h.isMobileView=KnockoutExtensions.MakeObservable(d3.select("html").classed("mobile"));h.dataCollection=new DataCollection(h,f);h.isFirstLoad=!0;h.isShared=s;h.DropHandler=function(n,t){return h.Drop(n,t)};h.AllowDropHandler=function(n,t){return h.AllowDrop(n,t)};c={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 c.android()||c.blackberry()||c.ios()||c.opera()||c.windows()}};h.supportsTouch=("ontouchstart"in window||navigator.msMaxTouchPoints)>0&&c.any()?!0:!1;var v=5,p=10,a=h.isMobileView()?35:50,l=h.isMobileView()?35:50;return h.defaultMargins={line:{top:v,right:l,bottom:p,left:a},histogram:{top:v,right:l,bottom:p,left:a},tape:{top:0,right:l,bottom:0,left:a},timescale:{top:v,right:l-40<0?27:l-40,bottom:0,left:a}},y=d3.timeDay.floor(new Date),h.chartCollectionId=KnockoutExtensions.MakeObservable(i),h.name=KnockoutExtensions.MakeObservable(r),h.isVirtual=KnockoutExtensions.MakeObservable(e),h.daysToDisplay=KnockoutExtensions.MakeObservable(u),h.datesUtc=new DatePicker(h,d3.timeDay.offset(y,-(h.daysToDisplay()-1)),y),h.chartsById=[],h.charts=ko.observableArray([]),h.chartsModel=o,h.loadTrigger=KnockoutExtensions.MakeObservable(0),h.loadCounter=ko.computed(function(){h.loadTrigger();var n=0;return h.charts.peek().forEach(function(t){t.loadCount.peek()!==0&&(n+=t.loadCount.peek())}),n}),h.initialSort=KnockoutExtensions.MakeObservable(""),h.highestIndex=KnockoutExtensions.MakeObservable(-1),h.rolloverDate=KnockoutExtensions.MakeObservable(null),h.rolloverDateOnPoint=KnockoutExtensions.MakeObservable(null),h.pageBody=d3.select("#page-body").node(),h.pageContainer=d3.select("#page-container").node(),h.hasHiddenChartItems=KnockoutExtensions.MakeObservable(!1),ko.computed(function(){h.chartsModel();var n=function(){return h.SetCharts()};typeof h.SetCharts=="function"&&ko.ignoreDependencies(n)}).extend({throttle:100}),h.resizeDelay=!1,h.pageWidth=KnockoutExtensions.MakeObservable(0),h.bodyWidthPx=KnockoutExtensions.MakeObservable(""),window.addEventListener("resize",function(){h.WindowResize()},!0),setTimeout(function(){h.UpdateDates()},1),h}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){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"&&n.view.FormAction(function(){return n.isShared?Form.SharedCollectionAddChartItem(n.chartCollectionId(),r,n.config,n.view.Update):Form.ChartAddItem(n.chartCollectionId(),r,n.config,n.view.Update)})()}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(){this.view.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 h=this,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"){this.view.SetMessage("Incompatible trend type for destination");return}Form.PostRequest({route:this.isShared?app.route.SharedCollection_MoveItem.For(this.chartCollectionId):app.route.Chart_MoveItem.For(this.chartCollectionId),data:{sourceChartId:i.chartId(),sourceChartItemId:e.chartItemId(),targetChartId:n.chartId(),targetChartItemId:0,targetItemType:n.chartType()==="line"?e.itemType()==="cumulative"?"cumulative":"line":n.chartType()},onSuccess:function(n){n.Success?(i.chartItems().forEach(function(n){return n.data([])}),h.view.Update()):h.view.SetMessage(n.Message)},onError:function(n){return Page.FailedRequestNoLoginHandler(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)&&Form.PostRequest({route:this.isShared?app.route.SharedCollection_SetCollectionSortOrder.For(this.chartCollectionId):app.route.Chart_SetCollectionSortOrder.For(this.chartCollectionId),data:{newSortIndexList:r},onSuccess:function(n){u.view.SetMessage(n.Message)},onError:function(n){return Page.FailedRequestNoLoginHandler(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,k,b;this.AddItemDialog=function(){return w.collection.view.FormAction(function(){return w.collection.isShared?Form.SharedCollectionAddChartItem(w.collection.chartCollectionId(),w,w.collection.config,w.collection.view.Update):Form.ChartAddItem(w.collection.chartCollectionId(),w,w.collection.config,w.collection.view.Update)})()};this.ConfigureDialog=function(){return w.collection.view.FormAction(function(){return w.collection.isShared?Form.SharedCollectionConfigureChart(w.collection.chartCollectionId(),w,w.collection.config,w.collection.view.Update):Form.ChartConfigure(w.collection.chartCollectionId(),w,w.collection.config,w.collection.view.Update)})()};this.DeleteDialog=function(){return w.collection.view.FormAction(function(){return w.collection.isShared?Form.SharedCollectionDeleteChart(w.collection.chartCollectionId(),w.chartId(),w.chartSvg().GetType(),w.chartName(),w.collection.view.Update):Form.ChartDelete(w.collection.chartCollectionId(),w.chartId(),w.chartSvg().GetType(),w.chartName(),w.collection.view.Update)})()};this.DownloadDataDialog=function(){return w.collection.view.FormAction(function(){return w.collection.isShared?Form.SharedCollectionDownloadData(w.collection.chartCollectionId(),w.chartName(),w.collection.daysToDisplay(),w.chartId(),null):Form.ChartDownloadData(w.collection.chartCollectionId(),null,w.chartId(),w.collection.daysToDisplay(),w.chartName(),null)})()};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.lastMouseMove=Date.now();this.holdDelay=250;this.chartItemsById=[];this.chartItems=ko.observableArray([]);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);k=this.collection.defaultMargins[this.chartType()].top+this.collection.defaultMargins[this.chartType()].bottom;b=this.collection.view.viewModel.IsVirtual&&this.collection.view.viewModel.IsVirtual()?this.collection.config.chartTypeOptions[ko.unwrap(r)].Default:o;this.displayHeight=ko.computed(function(){return(ko.unwrap(b)+k*2)*(w.options().useStackedAreas()&&w.chartType()==="line"?p().length/2:1)});this.configHeight=KnockoutExtensions.MakeObservable(b);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 h=this,o,c,r,u,i,s,f,t,e;if(!this.collection.isVirtual()&&(n.preventDefault(),o=n.originalEvent.dataTransfer.getData("text"),c=o.split("-")[0],c==="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"){this.collection.view.SetMessage("Incompatible trend type for destination");return}Form.PostRequest({route:this.collection.isShared?app.route.SharedCollection_MoveItem.For(this.collection.chartCollectionId):app.route.Chart_MoveItem.For(this.collection.chartCollectionId),data:{sourceChartId:t.chartId(),sourceChartItemId:e.chartItemId(),targetChartId:this.chartId(),targetChartItemId:s.chartItemId(),targetItemType:this.chartType()==="line"?e.itemType()==="cumulative"?"cumulative":"line":this.chartType()},onSuccess:function(n){n.Success?(t.chartItems().forEach(function(n){return n.data([])}),h.collection.view.Update()):h.collection.view.SetMessage(n.Message)},onError:function(n){return Page.FailedRequestNoLoginHandler(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 e=this,t=this.chartSvg(),u,f,i,r;if(t!=null&&(u=t.svg.select("g").node(),u!=null)){if((d3.event==null||d3.event.type!=="zoom"&&d3.event.type!=="start")&&(d3.event=n),f=d3.mouse(u),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)),r=Date.now(),r-this.lastMouseMove<=32&&r-this.lastMouseMove>=0)||(this.lastMouseMove=r,this.collection.charts().forEach(function(n){n.UpdateMove(i,n===e||n.chartType()==="tape")}),d3.selectAll(".chart-hover-marker-line").attr("x1",i).attr("x2",i))}},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)&&Form.PostRequest({route:this.collection.isShared?app.route.SharedCollection_SetChartSortOrder.For(this.chartId):app.route.Chart_SetChartSortOrder.For(this.chartId),data:{newSortIndexList:r},onSuccess:function(n){u.collection.view.SetMessage(n.Message)},onError:function(n){return Page.FailedRequestNoLoginHandler(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.DeleteDialog=function(){return d.collection.view.FormAction(function(){return d.collection.isShared?Form.SharedCollectionDeleteChartItem(d.collection.chartCollectionId(),d.chartId(),d.chartItemId(),d.networkName(),d.nodeName(),d.name(),d.collection.view.Update):Form.ChartItemDelete(d.collection.chartCollectionId(),d.chartId(),d.chartItemId(),d.networkName(),d.nodeName(),d.name(),d.collection.view.Update)})()};this.ConfigureDialog=function(){return d.collection.view.FormAction(function(){return d.collection.isShared?Form.SharedCollectionConfigureItem(d.collection.chartCollectionId(),d,d.collection.config,d.collection.view.Update):Form.ChartItemConfigure(d.collection.chartCollectionId(),d,d.collection.config,d.collection.view.Update)})()};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.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,y=!0,h,n,o,c,u,s,l,a,v,d,g;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");h=(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([h,0]);this.scaleR=d3.scaleLinear().rangeRound([h,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&&y?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&&y?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"),c=n.append("g").classed("axis-left-container",!0),u=n.append("g").classed("axis-right-container",!0),v=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),a=n.append("g").classed("chart-hover-point-container",!0),l=s.append("line").classed("chart-hover-marker-line",!0)):(n=this.svg.select("g"),o=this.svg.select("#clip-"+this.chart.chartId()),c=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)),v=this.svg.select("g.path-container"),s=this.svg.select(".chart-hover-marker-container"),l=s.select("line"),a=n.select("g.chart-hover-point-container"));this.ClipPath(o);this.AxisRight(u,g);this.AxisLeft(c,d);this.PathData(v,this.chart.chartItemsNotHidden());this.RolloverPoints(a,this.chart.chartItemsNotHidden());this.RolloverMarker(l);this.chart.UpdateNow()},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,a=[],v=[],n,s,y,e,p,h,o,w,c,b,k,g,f,l;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()?v.push(i):a.push(i)})});var t=+d3.min(a),i=+d3.min(v),r=+d3.max(a),u=+d3.max(v);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";l=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+")"),s=n.append("clipPath").attr("id","clip-"+this.chart.chartId()),s.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()&&(h=n.append("g").classed("axis-right-container",!0),o=h.call(d3.axisRight(this.scaleR).ticks(l==="s"?8:12,l)).attr("id","axis-right-"+this.chart.chartId()),w=o.append("text").classed("unitlabel",!0)),c=n.append("g").classed("chart-hover-marker-container",!0),b=c.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"),s=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()&&(h=this.svg.select(".axis-right-container"),o=this.svg.select("#axis-right-"+this.chart.chartId()),w=o.select("text.unitlabel")),c=this.svg.select(".chart-hover-marker-container"),b=c.select("line"),k=this.svg.select("g.path-container"));this.ClipPath(s);this.hasRightAxis()&&this.AxisRight(h,o,w,l);this.AxisLeft(y,e,p,f);this.RolloverMarker(b);this.PathData(k,this.chart.chartItemsNotHidden());this.chart.UpdateNow()},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(){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()},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...":""))}};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)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),__assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},Base_View=function(){function n(n,t){var i=this;this.requests=[];this.loading=ko.observable(!1);this.loadError=ko.observable("");this.viewModelReady=ko.observable(!1);this.disposeHandlers=[];this.UpdateViewModel=function(){return null};this.UpdateViewItems=function(){return i.items().forEach(function(n){return n.update()})};this.SetViewModelReady=function(){i.items().forEach(function(n){return n.setViewModelReady()});i.viewModelReady(!0);i.OnViewModelReady()};this.OnViewModelReady=function(){return null};this.FormAction=function(n){return function(){return i.OpenFormDialog(n())}};this.OpenFormDialog=function(n){i.formDialog(new FormDialog(function(){return i.CloseFormDialog()},function(n){return i.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)};this.CloseFormDialog=function(){return i.formDialog(null)};this.SetMessage=function(n){i.messageText(n);i.messageTimer&&clearTimeout(i.messageTimer);i.messageTimer=setTimeout(function(){return i.ClearMessage()},1e4)};this.ClearMessage=function(){i.messageText(null);i.messageTimer&&clearTimeout(i.messageTimer);i.messageTimer=null};this.ExtendMappingOptions=function(n){n.arrayChildId&&(i.mappingOptions.arrayChildId=__assign(__assign({},i.mappingOptions.arrayChildId),n.arrayChildId));n.extend&&(i.mappingOptions.extend=__assign(__assign({},i.mappingOptions.extend),n.extend))};this.GetMappingOptions=function(){return i.mappingOptions};this.AddItem=function(n){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":"")}));i.items.push(n)};this.GetPageItems=function(){for(var n,f,t,e=i.items(),r=[],u=0;u<e.length;++u)if(n=ko.unwrap(e[u]),isArray(n))for(f=Array.prototype.concat.apply([],n),t=0;t<f.length;++t)r.push(ko.unwrap(f[t]));else r.push(n);return r};this.Update=function(n){i.loading(!0);i.requests.push($.ajax(i.route.GetUrl(),{data:{},type:"POST"}).always(function(){i.loading(!1);i.loadError("");app.page.isFirstLoad(!1)}).fail(function(n){return Page.FailedRequestHandler(n)}).done(function(t){if(t===""||t==null){app.page.view(new Error_View(i.route));return}if(t.Success===!1){if(t.Message==="Unauthorised"){app.page.view(new Unauthorised_View(i.route));return}i.SetMessage(t.Message);return}app.page.account.isAuthenticated(!0);app.page.account.dialogTemplate()==="dialog-login-template"&&app.page.account.dialogTemplate(null);i.UpdateViewModel(t);i.UpdateViewItems();n&&n()}))};this.route=n;this.breadcrumbs=t;this.messageTimer=null;this.messageText=ko.observable();this.mappingOptions=new Model.MappingOptions;this.items=ko.observableArray();this.formDialog=ko.observable()}return n.prototype.Dispose=function(){this.requests.forEach(function(n){return n.abort()});this.requests.length=0;this.disposeHandlers.forEach(function(n){return n()})},n.prototype.ExtendDispose=function(n){this.disposeHandlers.push(n)},n}(),Base_ViewWithModel=function(n){function t(t,i){var r=n.call(this,t,i.CreateBreadcrumbs())||this;return r.UpdateViewModel=function(n){return KoMapper(r.viewModel,n,r.GetMappingOptions())},r.HasCapability=function(n){return r.viewModel.Capabilities.indexOf(n)>-1},r.HasCapabilityComputed=function(n){return ko.computed(function(){return r.HasCapability(n)})},r.HasCapabilitySetAnyComputed=function(n){return ko.computed(function(){return n.some(function(n){return r.HasCapability(n)})})},r.HasCapabilitySetAllComputed=function(n){return ko.computed(function(){return n.every(function(n){return r.HasCapability(n)})})},r.viewModel=i,r}return __extends(t,n),t}(Base_View),PageBreadcrumbs=function(){function n(n,t,i){this.title=KnockoutExtensions.MakeObservable(n);this.parent=KnockoutExtensions.MakeObservable(t);this.parentRoute=KnockoutExtensions.MakeObservable(i)}return n}(),Model;(function(n){var i=function(){function n(){this.CreateBreadcrumbs=function(){return null};this.Capabilities=ko.observableArray();this.CurrentUser={EffectiveUserId:ko.observable(),IsImpersonating:ko.observable(),TimeZoneName:ko.observable(),UtcOffsetHours:ko.observable()}}return n}(),t;n.Base_Model=i;t=function(){function n(){this.arrayChildId={};this.extend={}}return n}();n.MappingOptions=t})(Model||(Model={}));setPageBodySize=function(n){for(var t=1,u=function(n){return 300*n+Math.max(0,n-1)*25},r,i;t<16&&u(t+1)<n-60;)++t;app.page.columnCount(t);r=u(t);i=document.getElementById("page-body");i&&i.style.width!==r+"px"&&(i.style.width=r+"px")};app=function(){var n=new Router(window),t=new Page(window,n),i=new RouteDefinitions;return{router:n,page:t,route:i}}(),function(){var t=function(n,t,i){n!=null&&(n.addEventListener?n.addEventListener(t,i,!1):n.attachEvent?n.attachEvent("on"+t,i):n["on"+t]=i)},n=function(){var n=document.documentElement.clientWidth;document.documentElement.className=n<=768?"mobile":"desktop";setPageBodySize(n)};t(window,"resize",n);n()}();moment.lang("en",{calendar:{lastDay:"[Yesterday at] HH:mm:ss",sameDay:"[Today at] HH:mm:ss",nextDay:"[Tomorrow at] HH:mm:ss",lastWeek:"[Last] dddd [at] HH:mm:ss",nextWeek:"dddd [at] HH:mm:ss",sameElse:"YYYY-MM-DD HH:mm:ss"}});setPageBodySize(document.documentElement.clientWidth),function(n){n.PostRequest=function(n){$.ajax({url:n.route.GetUrl(),type:"POST",dataType:"json",data:n.data,success:function(t,i){return n.onSuccess&&n.onSuccess(t,i)},complete:function(t,i){return n.onComplete&&n.onComplete(i)},error:function(t,i){return n.onError&&n.onError(i)}})}}(Form||(Form={})),function(n){n.ViewPostRequest=function(n,t){n.requests.push($.ajax({url:t.route.GetUrl(),type:"POST",dataType:"json",data:t.data,success:function(n,i){return t.onSuccess&&t.onSuccess(n,i)},complete:function(n,i){return t.onComplete&&t.onComplete(i)},error:function(n,i){return t.onError&&t.onError(i)}}))}}(Form||(Form={})),function(n){n.CapabilityAddBulk=function(n,t){return new DialogViewModelBuilder(app.route.Admin_UpdateCapabilitiesFromCs.For(),"Bulk Add Capabilities","Add",{confirm:ko.observable(!1)}).SubmitData(function(t){return{capabilityIds:n.map(function(n){return n.CsCapabilityId}),confirm:t.confirm()}}).Done(function(){t&&t()}).MessageField("Add the following capabilities to the database").ListField("Capabilities",n,function(n){return n.CsCapabilityId+" "+n.CsName}).CheckBoxField("confirm","Confirm").Create()}}(Form||(Form={})),function(n){n.CapabilityCreate=function(n){var t={name:ko.observable(""),description:ko.observable(""),className:ko.observable(""),fullName:ko.observable("")};return new DialogViewModelBuilder(app.route.Admin_CreateCapability.For(),"Create New Capability","Create",t).SubmitData(function(n){var r=n.name().split(" "),t="",i;return r.forEach(function(n){t+=n.charAt(0).toUpperCase()+n.slice(1)}),i=n.className()+"_"+t,{name:i,description:n.description()}}).Done(function(){n&&n()}).MessageField("Specify the name for the new capability.").AjaxDropDownListField("className","Select Class",function(n){return n},function(n){return n},app.route.Admin_CapabilityClassNames.For(),!1,null).TextField("name","Name",null,!1).TextField("description","Description",null,!1).MessageField("Full Capability Name").DisplayField("fullName",ko.computed(function(){var r=t.name().split(" "),i="",n;return r.forEach(function(n){i+=n.charAt(0).toUpperCase()+n.slice(1)}),n=t.className()!=undefined?t.className()+"_"+i:"",n+" ("+(50-n.length)+" characters remaining)"})).CreateMulti()}}(Form||(Form={})),function(n){n.CapabilityDeleteFromDb=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_DeleteCapabilityFromDb.For(),"Delete Capability from Database","Delete",{confirm:ko.observable(!1)}).SubmitData(function(t){return{capabilityId:n,confirm:t.confirm()}}).Done(function(){i&&i()}).MessageField("Please confirm that you want to delete capability "+t+" from the database.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm").Create()}}(Form||(Form={})),function(n){n.CapabilityUpdateBulk=function(n,t){return new DialogViewModelBuilder(app.route.Admin_UpdateCapabilitiesFromCs.For(),"Update Capabilities","Update",{confirm:ko.observable(!1)}).SubmitData(function(t){return{capabilityIds:n,confirm:t.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.CostItemCreate=function(n){var t={itemName:ko.observable(""),itemLongDesc:ko.observable(""),itemDesc:ko.observable(""),deviceTypeId:ko.observable(0),basePrice:ko.observable(0),requiresSerial:ko.observable(!1)},i=new DialogViewModelBuilder(app.route.Admin_CreateCostItem.For(),"Create Cost Item","Create & Continue",t).SubmitData(function(n){return{itemName:n.itemName(),itemLongDesc:n.itemLongDesc(),itemDesc:n.itemDesc(),deviceTypeId:n.deviceTypeId(),basePrice:n.basePrice(),requiresSerial:n.requiresSerial()}}).Done(function(){n&&n()}).AjaxFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},app.route.Admin_AvailableDeviceTypesForCostItems.For(),!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(){if(t.deviceTypeId()==null){t.itemName("");t.itemDesc("");t.itemLongDesc("");t.requiresSerial(!1);return}r>-1&&i.fields()[r].options().forEach(function(n){n.DeviceTypeId===t.deviceTypeId()&&(t.itemLongDesc(n.Description),t.itemName(n.DeviceType),t.itemDesc(n.DeviceType),t.requiresSerial(!0))})}),i}}(Form||(Form={})),function(n){n.CostItemDelete=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_DeleteCostItem.For(n),"Delete Cost Item","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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 "+t+" and all related data").Create()}}(Form||(Form={})),function(n){n.CostItemEdit=function(n,t){return new DialogViewModelBuilder(app.route.Admin_EditCostItem.For(n.CostItemId),"Update Cost Item","Update",{itemName:ko.observable(n.ItemName),itemLongDesc:ko.observable(n.ItemLongDescription),itemDesc:ko.observable(n.ItemDescription),basePrice:ko.observable(n.BasePrice),requiresSerial:ko.observable(n.RequiresSerial)}).SubmitData(function(n){return{itemName:n.itemName(),itemLongDesc:n.itemLongDesc(),itemDesc:n.itemDesc(),basePrice:n.basePrice(),requiresSerial:n.requiresSerial()}}).Done(function(){t&&t()}).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").Create()}}(Form||(Form={})),function(n){n.EmailProviderCreate=function(n){return new DialogViewModelBuilder(app.route.Admin_CreateEmailProvider.For(),"Create Email Provider","Create",{name:ko.observable(""),groupId:ko.observable()}).SubmitData(function(n){return{name:n.name(),groupId:n.groupId()}}).Done(function(){n&&n()}).TextField("name","Name").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},app.route.Group_GroupsToContainEmailProvider.For(),!1,null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.EmailProviderDelete=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_DeleteEmailProvider.For(n),"Delete Email Provider","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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 "+t+" and all related data").Create()}}(Form||(Form={})),function(n){n.EmailProviderEdit=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_EditEmailProvider.For(n),"Update Email Provider","Update",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(){i&&i()}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.EventTypeCreate=function(n,t){return new DialogViewModelBuilder(app.route.Admin_CreateEventType.For(),"Create Event Type","Create",{eventTypeId:ko.observable(n),description:ko.observable("")}).SubmitData(function(n){return{eventTypeId:n.eventTypeId(),description:n.description()}}).Done(function(){t&&t()}).IntNumberField("eventTypeId","Event Type Id",n,null,!1).TextField("description","Description",50,!1).Create()}}(Form||(Form={})),function(n){n.FirmwareSetDevelopment=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_SetFirmwareDevelopment.For(n),t?"Set Development":"Set Production","Set",{}).SubmitData(function(){return{isDevelopment:t}}).Done(function(){i&&i()}).MessageField(t?"Set as Development":"Set as Production").Create()}}(Form||(Form={})),function(n){n.ProcedureDeleteErrorLogs=function(n,t){return new DialogViewModelBuilder(app.route.Admin_DeleteErrorLogs.For(),"Delete Error Logs","Delete",{}).SubmitData(function(){return{errorLogIds:n}}).Done(function(){t&&t()}).MessageField("You are about to delete "+n.length+" error logs from the database, are you sure you want to do that?").Create()}}(Form||(Form={})),function(n){n.ProcedureErrorDetail=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(null,"Error Details","Close",{}).SubmitData(function(){return{}}).Done(function(){}).DisplayFieldWithHeading("TimeUtc","Error Date",Format.DateTime(moment(n))).DisplayFieldWithHeading("ProcedureName","Procedure Name",t).DisplayFieldWithHeading("LineNumber","Line",i).DisplayFieldWithHeading("UserName","User",r).SectionField("Error Message:").MessageField(u).SectionField("Line Text:").MessageField(f).SectionField("Params:").MessageField(e).Create()}}(Form||(Form={})),function(n){n.SmsProviderCreate=function(n){return new DialogViewModelBuilder(app.route.Admin_CreateSmsProvider.For(),"Create Sms Provider","Create",{name:ko.observable(""),groupId:ko.observable()}).SubmitData(function(n){return{name:n.name(),groupId:n.groupId()}}).Done(function(){n&&n()}).TextField("name","Name").AjaxFilterDropDownListField("groupId","Group",function(n){return n.Name+" (ID: "+n.GroupId+")"},function(n){return n.GroupId},app.route.Group_GroupsToContainSmsProvider.For(),!1,null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.SmsProviderDelete=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_DeleteSmsProvider.For(n),"Delete Sms Provider","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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 "+t+" and all related data").Create()}}(Form||(Form={})),function(n){n.SmsProviderEdit=function(n,t,i){return new DialogViewModelBuilder(app.route.Admin_EditSmsProvider.For(n),"Update Sms Provider","Update",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(){i&&i()}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.ApplicationAddModule=function(n,t,i){var r={name:ko.observable(),allVersions:ko.observable(!1),module:ko.observable(),slot:ko.observable(null),index:ko.observable(null)};return new DialogViewModelBuilder(app.route.Application_AddAppModuleToVersion.For(n,{version:t}),"Add Module","Add",r).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(){i&&i()}).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 app.route.Application_AvailableModuleSources.For(n,{allVersions:r.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()}}(Form||(Form={})),function(n){n.ApplicationAddModuleInput=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Application_AddAppModuleInput.For(n,{version:t,appModuleId:i}),"Add App Module Input","Add",{inputName:ko.observable(""),expression:ko.observable("")}).SubmitData(function(n){return{inputName:n.inputName(),expression:n.expression()}}).Done(function(){r&&r()}).TextField("inputName","Input Name",50).MultilineTextField("expression","Expression",null,!0).Create()}}(Form||(Form={})),function(n){n.ApplicationAttachTag=function(n,t){return new DialogViewModelBuilder(app.route.Application_AttachTag.For(n),"Attach Tags to Application","Attach",{tagId:ko.observable(0),tagValue:ko.observable("")}).SubmitData(function(n){return{tagId:n.tagId(),tagValue:n.tagValue()}}).Done(function(){t&&t()}).MessageField("Select a tag to add to this application along with its value.").AjaxCompactFilterDropDownListField("tagId","Tag to add",function(n){return n.Name+" (TagId: "+n.TagId+")"},function(n){return n.TagId},app.route.Tag_ApplicationTagsWhichCanBeAdded.For(null,{appId:n}),!1,null,"Name").TextField("tagValue","Value").Create()}}(Form||(Form={})),function(n){n.ApplicationBuildTemplate=function(n,t){var i={groupId:ko.observable(0),templateName:ko.observable(""),moduleIds:ko.observableArray([])},r=new DialogViewModelBuilder(app.route.Application_CreateApplicationTemplateFromApp.For(n),"Create Template","Create",i).SubmitData(function(n){return{groupId:n.groupId(),templateName:n.templateName(),moduleIds:n.moduleIds()}}).Done(function(n,i){t&&t(i.ApplicationTemplateId)}).AjaxCompactFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableGroups.For(),!1,null,"Name",5,1).TextField("templateName","Template Name");return r.Create()}}(Form||(Form={})),function(n){n.ApplicationChangeModuleSource=function(n,t,i,r){var u={allVersions:ko.observable(!1),module:ko.observable(),confirm:ko.observable(!1)};return new DialogViewModelBuilder(app.route.Application_ChangeModuleSourceForAppModule.For(n,{version:t,appModuleId:i}),"Change Module Source","Change",u).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(){r&&r()}).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 app.route.Application_AvailableModuleSources.For(n,{allVersions:u.allVersions()})}),!0,null,"Type",10,10).CheckBoxField("allVersions","Show all versions of module sources").Create()}}(Form||(Form={})),function(n){n.ApplicationCreateBinary=function(n){return new DialogViewModelBuilder(null,"Build Binary","Close",{}).Submit(function(){n&&n()}).MessageField("Binary build is not yet implemented. Upload a binary from the app details page instead.").Create()}}(Form||(Form={})),function(n){n.ApplicationCreateVersion=function(n,t){return new DialogViewModelBuilder(app.route.Application_CreateVersion.For(n),"Publish Version","Publish",{notes:ko.observable("")}).SubmitData(function(n){return{notes:n.notes()}}).Done(function(){t&&t()}).MessageField("Publish a new version for this application?").MultilineTextField("notes","Notes").Create()}}(Form||(Form={})),function(n){n.ApplicationDelete=function(n,t){return new DialogViewModelBuilder(app.route.Application_Delete.For(n),"Delete Application","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this application?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of application").Create()}}(Form||(Form={})),function(n){n.ApplicationDeleteAppVersion=function(n,t,i){return new DialogViewModelBuilder(app.route.Application_DeleteAppVersion.For(n),"Delete Application Version","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{appVersionNumber:t,confirm:n.confirm()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.ApplicationDeleteModule=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Application_DeleteAppModuleFromVersion.For(n,{version:t}),"Delete Application Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{appModuleId:i,confirm:n.confirm()}}).Done(function(){r&&r()}).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()}}(Form||(Form={})),function(n){n.ApplicationDeleteModuleInput=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Application_DeleteAppModuleInput.For(n,{version:t}),"Delete App Module Input","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{appModuleId:i,inputName:r,confirm:n.confirm()}}).Done(function(){u&&u()}).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()}}(Form||(Form={})),function(n){n.ApplicationEdit=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Application_EditApp.For(n),"Update Application","Update",{name:ko.observable(t),description:ko.observable(i)}).SubmitData(function(n){return{name:n.name(),description:n.description()}}).Done(function(){r&&r()}).TextField("name","App Name",255,!1).MultilineTextField("description","Description").Create()}}(Form||(Form={})),function(n){n.ApplicationEditModule=function(n,t){return new DialogViewModelBuilder(app.route.Application_EditAppModule.For(n.AppId,{version:n.AppVersionNumber,appModuleId:n.AppModuleId}),"Update App Module","Update",{moduleName:ko.observable(n.AppModuleName),slot:ko.observable(n.AppModuleSlot),index:ko.observable(n.AppModuleIndex)}).SubmitData(function(n){return{moduleName:n.moduleName(),slot:n.slot(),index:n.index()}}).Done(function(){t&&t()}).TextField("moduleName","Module Name",50).IntNumberField("slot","Slot",0,255,!0).IntNumberField("index","Index",0,255,!0).Create()}}(Form||(Form={})),function(n){n.ApplicationEditModuleInput=function(n,t){return new DialogViewModelBuilder(app.route.Application_EditAppModuleInput.For(n.AppId,{version:n.AppVersionNumber,appModuleId:n.AppModuleId,inputName:n.InputName}),"Update App Module Input","Update",{expression:ko.observable(n.Expression)}).SubmitData(function(n){return{expression:n.expression()}}).Done(function(){t&&t()}).MessageField("Input: "+n.InputName).MultilineTextField("expression","Expression",null,!0).Create()}}(Form||(Form={})),function(n){n.ApplicationEditTag=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Application_UpdateTag.For(n),"Update Tag Value","Update",{tagValue:ko.observable(i)}).SubmitData(function(n){return{tagId:t,tagValue:n.tagValue()}}).Done(function(){r&&r()}).TextField("tagValue","Value").Create()}}(Form||(Form={})),function(n){n.ApplicationEditVersionNotes=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Application_EditAppVersionNotes.For(n,{version:t}),"Update App Version Notes","Update",{notes:ko.observable(i)}).SubmitData(function(n){return{notes:n.notes()}}).Done(function(n,t){r&&r(t.Notes)}).MultilineTextField("notes","Version Notes").Create()}}(Form||(Form={})),function(n){n.ApplicationGroupAssignment=function(n){return new DialogViewModelBuilder(null,"Select Group","Select",{groupId:ko.observable(0)}).Submit(function(t){n&&n(t.groupId)}).AjaxCompactFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableGroupsForAppAssignments.For(),!1,null,"").Create()}}(Form||(Form={})),function(n){n.ApplicationOverwriteWorkInProgress=function(n,t,i){return new DialogViewModelBuilder(app.route.Application_OverwriteWorkInProgress.For(n,{version:t}),"Overwrite Work In Progress","Overwrite",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.ApplicationRemoveTag=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Application_RemoveTag.For(n),"Remove tag from Application","Remove",{confirm:ko.observable(!1)}).SubmitData(function(n){return{tagId:i,confirm:n.confirm()}}).Done(function(){u&&u()}).MessageField("Are you sure you want to remove the tag "+r+" from application "+t+"? ").CheckBoxField("confirm","Confirm").Create()}}(Form||(Form={})),function(n){n.ApplicationUploadBinary=function(n,t){return new DialogViewModelBuilder(app.route.Application_UploadApplicationBinary.For(n),"Upload Application Binary","Upload",{file:ko.observable(),notes:ko.observable("")}).SubmitData(function(n){return{file:n.file(),notes:n.notes()}}).Done(function(n,i){t&&t(i.Version)}).SingleFileUploadField("file","File").MultilineTextField("notes","Version Notes").Create()}}(Form||(Form={})),function(n){n.ApplicationTemplateAddKeyValues=function(n,t,i){return new DialogViewModelBuilder(app.route.ApplicationTemplate_AddKeyValue.For(n,{moduleIndex:t}),"Add Key-Value","Add & Continue",{key:ko.observable(""),value:ko.observable("")}).SubmitData(function(n){return{key:n.key(),value:n.value()}}).Done(function(){i&&i()}).TextField("key","Key",50).TextField("value","Value").CreateMulti()}}(Form||(Form={})),function(n){n.ApplicationTemplateAddModules=function(n,t,i){var r={moduleIndex:ko.observable(t+1),moduleType:ko.observable(""),icon:ko.observable(""),name:ko.observable(""),shortName:ko.observable(""),isVirtual:ko.observable(!1)};return new DialogViewModelBuilder(app.route.ApplicationTemplate_AddModule.For(n),"Add Modules","Add & Continue",r).SubmitData(function(n){return{moduleIndex:n.moduleIndex(),moduleType:n.moduleType(),icon:n.icon(),name:n.name(),shortName:n.shortName(),isVirtual:n.isVirtual()}}).Done(function(n){var t=n.moduleIndex();n.moduleIndex(t+1);i&&i(t)}).IntNumberField("moduleIndex","Module Index").AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},app.route.Module_AvailableModuleTypes.For(),!1,null,null,5,1).AjaxCompactFilterDropDownListField("icon","Icon",function(n){return n},function(n){return n},app.route.Module_AvailableIconNames.For(),!1,null,null,5,1).TextField("name","Name",100).TextField("shortName","Short Name",50).CheckBoxField("isVirtual","Virtual Module").CreateMulti()}}(Form||(Form={})),function(n){n.ApplicationTemplateDelete=function(n,t){return new DialogViewModelBuilder(app.route.ApplicationTemplate_Delete.For(n),"Delete Application Template","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ApplicationTemplateDeleteKeyValue=function(n,t,i,r){return new DialogViewModelBuilder(app.route.ApplicationTemplate_DeleteKeyValue.For(n,{moduleIndex:t}),"Delete Key-Value","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm(),key:i}}).Done(function(){r&&r()}).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()}}(Form||(Form={})),function(n){n.ApplicationTemplateDeleteModule=function(n,t,i){return new DialogViewModelBuilder(app.route.ApplicationTemplate_DeleteModule.For(n,{moduleIndex:t}),"Delete Template Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to delete this Module?.").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Module").Create()}}(Form||(Form={})),function(n){n.ApplicationTemplateEdit=function(n,t,i,r){return new DialogViewModelBuilder(app.route.ApplicationTemplate_Update.For(n),"Update Application Template","Update",{name:ko.observable(t),applicationGuid:ko.observable(i)}).SubmitData(function(n){return{name:n.name(),applicationGuid:n.applicationGuid()}}).Done(function(){r&&r()}).TextField("name","Name",255).AjaxCompactFilterDropDownListField("applicationGuid","Application",function(n){return n.Name+" (v"+n.AppVersionNumber+")"},function(n){return n.ApplicationGuid},app.route.ApplicationTemplate_AvailableApplications.For(),!1,{ApplicationGuid:i,Version:0,Name:t},"Name",3,1).Create()}}(Form||(Form={})),function(n){n.ApplicationTemplateEditModule=function(n,t){return new DialogViewModelBuilder(app.route.ApplicationTemplate_UpdateModule.For(n.ApplicationTemplateId,{moduleIndex:n.ModuleIndex}),"Edit Module","Update",{newModuleIndex:ko.observable(n.ModuleIndex),moduleType:ko.observable(n.Type),icon:ko.observable(n.Icon),name:ko.observable(n.Name),shortName:ko.observable(n.ShortName),isVirtual:ko.observable(n.IsVirtual)}).SubmitData(function(t){return{moduleIndex:n.ModuleIndex,newModuleIndex:t.newModuleIndex(),moduleType:t.moduleType(),icon:t.icon(),name:t.name(),shortName:t.shortName(),isVirtual:t.isVirtual()}}).Done(function(n){t&&t(n.newModuleIndex())}).IntNumberField("newModuleIndex","Module Index").AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},app.route.Module_AvailableModuleTypes.For(),!1,n.Type,null,5,1).AjaxCompactFilterDropDownListField("icon","Icon",function(n){return n},function(n){return n},app.route.Module_AvailableIconNames.For(),!1,n.Icon,null,5,1).TextField("name","Name",100).TextField("shortName","Short Name",50).CheckBoxField("isVirtual","Virtual Module").Create()}}(Form||(Form={})),function(n){n.AppModuleSourceAddDashboardType=function(n,t){return new DialogViewModelBuilder(app.route.AppModuleSource_AddDashboardType.For(n),"Add Dashboard Type","Add",{types:ko.observableArray()}).SubmitData(function(n){return{types:n.types()}}).Done(function(){t&&t()}).MessageField("Add dashboard types to this Module Source?").AjaxMultiSelectListField("types","Dashboard Types",function(n){return n},function(n){return n},app.route.AppModuleSource_AvailableDashboardTypes.For(n),10,!0).Create()}}(Form||(Form={})),function(n){n.AppModuleSourceCreateModuleVersion=function(n,t){return new DialogViewModelBuilder(app.route.AppModuleSource_CreateVersion.For(n),"Create Version","Create",{file:ko.observable(""),notes:ko.observable("")}).SubmitData(function(n){return{file:n.file(),notes:n.notes()}}).Done(function(n,i){t&&t(i.ModuleVersion)}).MessageField("Create a new version for this Module Source?").SingleFileUploadField("file","Source").MultilineTextField("notes","Version Notes",null,!0).Create()}}(Form||(Form={})),function(n){n.AppModuleSourceDelete=function(n,t){return new DialogViewModelBuilder(app.route.AppModuleSource_Delete.For(n),"Delete Module Source","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.AppModuleSourceDeleteDashboardType=function(n,t,i){return new DialogViewModelBuilder(app.route.AppModuleSource_DeleteDashboardType.For(n,{type:t}),"Delete Dashboard Type","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.AppModuleSourceDeleteModuleVersion=function(n,t,i){return new DialogViewModelBuilder(app.route.AppModuleSource_DeleteVersion.For(n,{version:t}),"Delete Module Source Version","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.AppModuleSourceEdit=function(n,t,i){return new DialogViewModelBuilder(app.route.AppModuleSource_Edit.For(n),"Edit","Update",{type:ko.observable(t)}).SubmitData(function(n){return{type:n.type()}}).Done(function(n,t){i&&i(t.Type)}).MessageField("Update the type for this Module Source?").TextField("type","Type",null,!0).Create()}}(Form||(Form={})),function(n){n.AppModuleSourceEditVersionNotes=function(n,t,i,r){return new DialogViewModelBuilder(app.route.AppModuleSource_EditVersionNotes.For(n,{version:t}),"Edit Module Source Version Notes","Update",{notes:ko.observable(i)}).SubmitData(function(n){return{notes:n.notes()}}).Done(function(n,t){r&&r(t.Notes)}).MultilineTextField("notes","Version Notes").Create()}}(Form||(Form={})),function(n){n.BillingEntityAddCostItem=function(n,t){return new DialogViewModelBuilder(app.route.BillingEntity_AddCostItem.For(n),"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&&t()}).AjaxFilterDropDownListField("costItemId","Cost Items",function(n){return n.ItemName+"  (Base: "+Format.Currency(n.UnitPrice)+")"},function(n){return n.CostItemId},ko.computed(function(){return app.route.BillingEntity_CostItemsWhichCanBeAdded.For(n)}),!1,null,"ItemName",null,1,!0).NumberField("unitPrice","Unit Price (for selected cost items above)",0,999999,!1).DateField("effectiveDate","Effective Date").CreateMulti()}}(Form||(Form={})),function(n){n.BillingEntityCreateMessageAccount=function(n,t){var i={groupId:ko.observable(0),name:ko.observable(""),messagePlanId:ko.observable(0)};return new DialogViewModelBuilder(ko.computed(function(){return app.route.Group_CreateMessageAccount.For(i.groupId())}),"Create Message Account","Create",i).SubmitData(function(t){return{name:t.name(),messagePlanId:t.messagePlanId(),billingEntityId:n}}).Done(function(n,i){t&&t(i.MessageAccountId)}).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},app.route.Group_GroupsToContainMessageAccount.For(),!1).MessageField("Select the message plan for the new account.").AjaxDropDownListField("messagePlanId","Message Plan",function(n){return n.Name},function(n){return n.MessagePlanId},app.route.MessagePlan_AvailableMessagePlans.For(),!1).Create()}}(Form||(Form={})),function(n){n.BillingEntityCreatePurchaseOrder=function(n,t,i){var r={referenceNumber:ko.observable(""),addressId:ko.observable(t),deliveryNotes:ko.observable(""),address:ko.observable(""),city:ko.observable(""),stateProvince:ko.observable(""),code:ko.observable(""),country:ko.observable("New Zealand"),isDDLSelectable:ko.observable(!1),sourceGroupId:ko.observable(0),showAllAddresses:ko.observable(!1)};return new DialogViewModelBuilder(app.route.BillingEntity_CreatePurchaseOrder.For(n),"Create Purchase Order","Create",r).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,t){i&&i(t.PurchaseOrderId)}).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},app.route.BillingEntity_AvailableInventoryGroups.For(n),null).CheckBoxField("showAllAddresses","Show All Addresses").AjaxDropDownAddressListField("addressId","Delivery Address",function(n){return n.FullAddress},function(n){return n.AddressId},ko.computed(function(){return app.route.BillingEntity_AvailableAddresses.For(n,{showAllAddresses:r.showAllAddresses()})}),!1,{AddressId:t}).MultilineTextField("deliveryNotes","Delivery Notes",null,!0).Create()}}(Form||(Form={})),function(n){n.BillingEntityEdit=function(n,t){var i={companyName:ko.observable(n.CompanyName),escalationListId:ko.observable(n.EscalationListId),timeZoneName:ko.observable(n.TimeZoneName)};return new DialogViewModelBuilder(app.route.BillingEntity_Update.For(n.BillingEntityId),"Update Billing Entity","Update",i).SubmitData(function(n){return{companyName:n.companyName(),escalationListId:n.escalationListId(),timeZoneName:n.timeZoneName()}}).Done(function(){t&&t()}).TextField("companyName","Company Name").AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},app.route.Home_TimeZoneNames.For(),!1,{TimeZoneName:i.timeZoneName()},"TimeZoneName",5,1).AjaxDropDownListField("escalationListId","Escalation List",function(n){return n.Name+" (ID: "+n.EscalationListId+")"},function(n){return n.EscalationListId},app.route.Group_GetAvailableEscalationLists.For(),!0,{EscalationListId:i.escalationListId()}).Create()}}(Form||(Form={})),function(n){n.BillingEntityEditAddress=function(n,t){var i={addressId:ko.observable(n.AddressId),address:ko.observable(n.Address),city:ko.observable(n.City),stateProvince:ko.observable(n.StateProvince),code:ko.observable(n.Code),country:ko.observable(n.Country),isDDLSelectable:ko.observable(!1)};return new DialogViewModelBuilder(app.route.BillingEntity_UpdateAddress.For(n.BillingEntityId),"Update Address Details","Update",i).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){t&&t(i.NewAddressId)}).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()}}(Form||(Form={})),function(n){n.BillingEntityEditCostItem=function(n,t){return new DialogViewModelBuilder(app.route.BillingEntity_UpdateCostItem.For(n.BillingEntityId),"Update Cost Item","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&&t()}).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()}}(Form||(Form={})),function(n){n.BillingEntityRemoveCostItem=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.BillingEntity_RemoveCostItem.For(n),"Remove Cost Item from Billing Entity","Remove",{}).SubmitData(function(){return{costItemId:t,effectiveDate:i}}).Done(function(){u&&u()}).MessageField("You are about to remove the following cost item from this billing entity").MessageField(r).Create()}}(Form||(Form={})),function(n){n.BrandingEdit=function(n,t){return new DialogViewModelBuilder(app.route.Branding_Edit.For(n.BrandingId),"Update Branding","Update",{contactUsUrl:ko.observable(n.ContactUsUrl),privacyPolicyUrl:ko.observable(n.PrivacyPolicyUrl),termsAndConditionsUrl:ko.observable(n.TermsAndConditionsUrl),footer:ko.observable(n.Footer),smsFooter:ko.observable(n.SmsFooter),emailFooter:ko.observable(n.EmailFooter)}).SubmitData(function(n){return{contactUsUrl:n.contactUsUrl(),privacyPolicyUrl:n.privacyPolicyUrl(),termsAndConditionsUrl:n.termsAndConditionsUrl(),footer:n.footer(),smsFooter:n.smsFooter(),emailFooter:n.emailFooter()}}).Done(function(){t&&t()}).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)").MultilineTextField("smsFooter","Sms Footer Text",50,!0).MultilineTextField("emailFooter","Email Footer Text (html enabled)",null,!0).Create()}}(Form||(Form={})),function(n){n.ChartAddItem=function(n,t,i,r){var u={chartId:ko.observable(t.chartId()),network:ko.observable(0),node:ko.observable(),module:ko.observable(),trendName:ko.observable(""),displayName:ko.observable(""),offsetValue:ko.observable(0),offsetUnit:ko.observable(""),colour:ko.observable(""),colorOffset:ko.observable(0),trends:{}},o=ko.observableArray(t.chartItems()),f=ko.observable(t.chartType()),s=t.collection.charts,h=ko.computed(function(){return o().map(function(n){return n.colour()})}),c=function(n){for(var t=0;t<i.chartColors.length;t++)if(n.indexOf(i.chartColors[t].substring(1))===-1){u.colorOffset(t);break}},l,e;return ko.computed(function(){c(h())}),l=function(){s().forEach(function(n){n.chartId()===u.chartId()&&(o(n.chartItems()),f(n.chartType()))})},ko.computed(function(){u.chartId();ko.ignoreDependencies(function(){return l()})}),ko.computed(function(){u.colour(i.colorScale(""+u.colorOffset()).substring(1))}),e=[],s().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()+"]":"";e.push({name:i,chartId:n.chartId()})}}),u.trends=ko.computed(function(){var t=u.module(),n;return t&&isArray(t.Trends)?(n=[],t.Trends.forEach(function(t){if(!t.IsCumulative){n.push(t);return}f()==="histogram"?n.push({IsCumulative:!0,Name:t.Name,Type:"histogram",Units:t.Units}):(t.Type="line",n.push(t),n.push({IsCumulative:!0,Name:t.Name,Type:"cumulative",Units:t.Units}))}),d3.select("#trendName").attr("size",Math.min(5,n.length)),n):[]}),ko.computed(function(){var i=u.module(),t=u.trendName(),n;t&&(t=t.replace("[line]",""),t=t.replace("[cumulative]",""),t=t.replace("[histogram]",""));i&&t&&(n=i.Name+" - "+t,n.length>50&&n.indexOf(":")>-1&&(n=n.substr(n.indexOf(":")+1)),n.length>50&&(n="..."+n.substr(-47)),u.displayName(n))}),new DialogViewModelBuilder(app.route.Chart_AddItemToChart.For(n),"Add Item To Chart","Add & Continue",u).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){var t=h();t.push(n.colour());c(t);r&&r()}).DropDownListField("chartId","Add to chart",function(n){return n.name},function(n){return n.chartId},e).AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.Chart_GetUserNetworks.For(),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return Format.NodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return u.network()?app.route.Chart_GetUserNetworkNodes.For(u.network()):null}),!0,null,"Name",3,1).AjaxCompactFilterDropDownListField("module","Module",function(n){return n.Name},function(n){return n},ko.computed(function(){return u.network()&&u.node()?app.route.Chart_GetUserNetworkModules.For(u.network(),{nodeAddress:u.node().NodeAddress,type:f()}):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+"]":"")},u.trends).TextField("displayName","Display Name",50).ColorField("colour","Colour",6,!1,u.colorOffset,i.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},i.offsetUnits).CreateMulti()}}(Form||(Form={})),function(n){n.ChartCollectionAddChart=function(n,t,i){var r={name:ko.observable("New Chart"),type:ko.observable("line"),sortIndex:ko.observable(t.highestIndex()+1),height:ko.observable(250),timescale:ko.observable(!0),tsHeight:t.config.chartTypeOptions.timescale.Heights[0].Value},u,f;return ko.computed(function(){r.type();ko.computedContext.isInitial()||(r.height(t.config.chartTypeOptions[r.type()].Default),r.type()==="timescale"?($('input[name="name"]').prop("disabled",!0),$('input[name="timescale"]').prop("disabled",!0),r.name("")):($('input[name="name"]').prop("disabled",!1),$('input[name="timescale"]').prop("disabled",!1)))}),u=new DialogViewModelBuilder(app.route.Chart_AddChartToCollection.For(n),"Add Chart To Report","Add",r).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(){i&&i()}).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[r.type()].Heights})).CheckBoxField("timescale","Add a timescale with the new chart?"),u.MessageField("Chart Options"),f=new ChartOptions,f.List().forEach(function(n){var t="option."+n.Field;u.CheckBoxField(t,n.Name);r[t]=n.Value}),u.Create()}}(Form||(Form={})),function(n){n.ChartCollectionCloneToShared=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Chart_SharePrivateChart.For(n),"Share Chart Report Copy","Share",{name:ko.observable(t),daysToDisplay:ko.observable(i),groupId:ko.observable()}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay(),groupId:n.groupId()}}).Done(function(n,t){r&&r(t.SharedCollectionId)}).MessageField("Select a group to share chart report with.").AjaxCompactFilterDropDownListField("groupId","Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Chart_GetUserGroupsForSharing.For(),!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()}}(Form||(Form={})),function(n){n.ChartConfigure=function(n,t,i,r){var u={chartId:ko.observable(t.chartId()),name:ko.observable(t.chartName()),type:ko.observable(t.chartType()),height:ko.observable(t.configHeight()),types:{}},e=ko.observable(0),o=0,s=function(){var n=!0;i.chartTypeOptions[u.type()].Heights.forEach(function(t){o===t.Value&&(n=!1)});n&&u.height(i.chartTypeOptions[u.type()].Default)},f;return ko.computed(function(){if(u.type(),e(e()+1),!ko.computedContext.isInitial()){var n=function(){return s()};typeof s=="function"&&ko.ignoreDependencies(n)}}),u.types=ko.computed(function(){var n=[];return u.type()==="line"?(n.push({Name:"Line",Value:"line"}),n.push({Name:"Histogram",Value:"histogram"}),t.chartItems().length===0&&(n.push({Name:"Tape",Value:"tape"}),n.push({Name:"Timescale",Value:"timescale"}))):u.type()==="histogram"?(n.push({Name:"Histogram",Value:"histogram"}),n.push({Name:"Line",Value:"line"}),t.chartItems().length===0&&(n.push({Name:"Tape",Value:"tape"}),n.push({Name:"Timescale",Value:"timescale"}))):u.type()==="tape"?(n.push({Name:"Tape",Value:"tape"}),t.chartItems().length===0&&(n.push({Name:"Line",Value:"line"}),n.push({Name:"Histogram",Value:"histogram"}),n.push({Name:"Timescale",Value:"timescale"}))):u.type()==="timescale"&&(n.push({Name:"Timescale",Value:"timescale"}),n.push({Name:"Line",Value:"line"}),n.push({Name:"Histogram",Value:"histogram"}),n.push({Name:"Tape",Value:"tape"})),n}),f=new DialogViewModelBuilder(app.route.Chart_ConfigureChartInCollection.For(n),"Configure Chart","Update",u).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(){r&&r()}).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},u.types).DropDownListField("height","Display Height",function(n){return n.Name},function(n){return n.Value},ko.computed(function(){return e(),o=u.height.peek(),i.chartTypeOptions[u.type.peek()].Heights})),f.MessageField("Chart Options"),t.options().List().forEach(function(n){var t="option."+n.Field;f.CheckBoxField(t,n.Name);u[t]=n.Value}),f.Create()}}(Form||(Form={})),function(n){n.ChartConfigureCollection=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Chart_ConfigureCollection.For(n),"Configure Chart Report","Update",{name:ko.observable(i),daysToDisplay:ko.observable(t)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(){r&&r()}).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()}}(Form||(Form={})),function(n){n.ChartCreateCollection=function(n){return new DialogViewModelBuilder(app.route.Chart_CreateCollection.For(),"Create Chart Report","Create",{name:ko.observable(""),daysToDisplay:ko.observable(7)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(t,i){n&&n(i.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()}}(Form||(Form={})),function(n){n.ChartCreateFromVirtual=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Chart_CreateCollectionFromVirtual.For(),"Save As Chart Report","Create",{name:ko.observable(t),daysToDisplay:ko.observable(i)}).SubmitData(function(t){return{name:t.name(),moduleId:n,daysToDisplay:t.daysToDisplay(),heights:Object.keys(r.chartTypeOptions).map(function(n){return{key:n,value:r.chartTypeOptions[n].Default}})}}).Done(function(n,t){u&&u(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()}}(Form||(Form={})),function(n){n.ChartDelete=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Chart_DeleteChartFromCollection.For(n),"Remove Chart from Report","Remove",{chartId:ko.observable(t),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),confirm:n.confirm()}}).Done(function(){u&&u()}).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(i+" - "+r).Create()}}(Form||(Form={})),function(n){n.ChartDeleteCollection=function(n,t){return new DialogViewModelBuilder(app.route.Chart_DeleteCollection.For(n),"Delete Chart Report","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ChartDownloadData=function(n,t,i,r,u,f){return new DialogViewModelBuilder(app.route.Chart_DownloadChartData.For(n),"Download Data","Download",{collectionName:ko.observable(u),startLocal:ko.observable(moment().subtract("days",r).format("YYYY-MM-DD")),endLocal:ko.observable(moment().format("YYYY-MM-DD"))}).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."}).SubmitData(function(n){return{chartId:i||0,moduleId:t||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(){f&&f()}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()}}(Form||(Form={})),function(n){n.ChartItemConfigure=function(n,t,i,r){var u={chartId:ko.observable(t.chartId()),chartItemId:ko.observable(t.chartItemId()),displayName:ko.observable(t.name()),offsetValue:ko.observable(t.offsetValue()),offsetUnit:ko.observable(t.offsetUnit()),axisTitle:ko.observable(t.axisTitle()),colour:ko.observable(t.colour()),colorOffset:ko.observable(0),itemType:ko.observable(t.itemType())},f;return ko.computed(function(){u.colorOffset();ko.computedContext.isInitial()||u.colour(i.colorScale(""+u.colorOffset()).substring(1))}),f=new DialogViewModelBuilder(app.route.Chart_ConfigureItemInChart.For(n),"Configure Chart Item","Update",u).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(n){var u,i,f;if(t.offsetValue()!==+n.offsetValue()||t.offsetUnit()!==n.offsetUnit()||t.itemType()!==n.itemType())for(u in t.collection.dataCollection.data)if(t.collection.dataCollection.data.hasOwnProperty(u)){i=t.collection.dataCollection.data[u];for(f in i)i.hasOwnProperty(f)&&+f===t.chartItemId()&&(i[t.chartItemId()]=null)}r&&r()}).TextField("displayName","Display Name",50).ColorField("colour","Colour",6,!1,u.colorOffset,i.chartColors).MessageField("Specify the date offset (0 for none)."),(t.itemType()==="cumulative"||t.itemType()==="line"&&t.isCumulative())&&f.DropDownListField("itemType","Item Type",function(n){return n.Name},function(n){return n.Value},[{Name:"Line",Value:"line"},{Name:"Cumulative",Value:"cumulative"}]),f.IntNumberField("offsetValue","Offset Period Amount",0,365).DropDownListField("offsetUnit","Offset Period Units",function(n){return n.Name},function(n){return n.Value},i.offsetUnits),f.Create()}}(Form||(Form={})),function(n){n.ChartItemDelete=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(app.route.Chart_DeleteItemFromChart.For(n),"Delete Chart Item","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:t,chartItemId:i,confirm:n.confirm()}}).Done(function(){e&&e()}).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(r+" - "+u+" - "+f).Create()}}(Form||(Form={})),function(n){n.CumulativeMeterAddEscalationLists=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_AddEscalationLists.For(n),"Add Escalation Lists","Add",{escalationListIds:ko.observableArray([])}).SubmitData(function(n){return{escalationListIds:n.escalationListIds()}}).Done(function(){t&&t()}).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},app.route.CumulativeMeter_EscalationListsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.CumulativeMeterCreateNote=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_CreateNote.For(n),"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&&t()}).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},app.route.Group_GroupsToContainNote.For(),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterCreateTimeAlarm=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_CreateTimeAlarm.For(n),"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(){t&&t()}).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()}}(Form||(Form={})),function(n){n.CumulativeMeterCreateTotalAlarm=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_CreateTotalAlarm.For(n),"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(){t&&t()}).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()}}(Form||(Form={})),function(n){n.CumulativeMeterDelete=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_Delete.For(n),"Delete Meter","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this meter?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterDeleteTimeAlarm=function(n,t,i,r){return new DialogViewModelBuilder(app.route.CumulativeMeter_DeleteTimeAlarm.For(n),"Delete Alarm","Delete",{}).SubmitData(function(){return{cumulativeMeterTimeAlarmId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to delete the alarm "+i+"?").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterDeleteTotalAlarm=function(n,t,i,r){return new DialogViewModelBuilder(app.route.CumulativeMeter_DeleteTotalAlarm.For(n),"Delete Alarm","Delete",{}).SubmitData(function(){return{cumulativeMeterTotalAlarmId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to delete the alarm "+i+"?").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterEventDetails=function(t,i){var 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":t()})},r=new DialogViewModelBuilder(null,"Event details","Close",{}).MessageField(e("Type",function(){return i.EventType})).MessageField(e("Details",function(){return i.Details})).MessageField(e("Time",function(){return Format.DateTime(moment.utc(i.TimeUtc))})).Create();return n.ViewPostRequest(t,{route:app.route.CumulativeMeter_EventDetails.For(i.CumulativeMeterId,{cumulativeMeterEventId:i.CumulativeMeterEventId}),onSuccess:function(n){var t,i;if((f(!1),u(!1),n!=null)&&(t=n.Escalation,t!=null))for(i=0;i<t.length;++i)r.fields.push(new DialogMessageFieldViewModel(t[i].EscalationList+": Escalation "+(t[i].EscalationComplete?"Complete":"In Progress"))),r.fields.push(new DialogMessageFieldViewModel(t[i].AcknowledgeTimeUtc?"Acknowledged by "+t[i].AcknowledgeUser+" at "+Format.DateTime(moment.utc(t[i].AcknowledgeTimeUtc)):"Unacknowledged")),r.fields.push(new DialogListFieldViewModel("Messages",t[i].Messages,function(n){return Format.DateTime(moment.utc(n.TimeUtc))+(n.Sms?" SMS":"")+(n.Email?" Email":"")+" "+n.User+" "+n.Content}))},onError:function(){f(!0);u(!1)}}),r}}(Form||(Form={})),function(n){n.CumulativeMeterRemoveEscalationList=function(n,t,i,r){return new DialogViewModelBuilder(app.route.CumulativeMeter_RemoveEscalationList.For(n),"Remove Escalation List","Remove",{}).SubmitData(function(){return{escalationListId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the escalation list "+i+"?").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterRename=function(n,t,i){return new DialogViewModelBuilder(app.route.CumulativeMeter_Rename.For(n),"Rename Meter","Rename",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).MessageField("Specify the name for the meter.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterRenameTimeAlarm=function(n,t,i,r){return new DialogViewModelBuilder(app.route.CumulativeMeter_RenameTimeAlarm.For(n),"Rename Alarm","Update",{name:ko.observable(i)}).SubmitData(function(n){return{cumulativeMeterTimeAlarmId:t,name:n.name()}}).Done(function(n,t){r&&r(t.Name)}).MessageField("Specify the name for the alarm.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterRenameTotalAlarm=function(n,t,i,r){return new DialogViewModelBuilder(app.route.CumulativeMeter_RenameTotalAlarm.For(n),"Rename Alarm","Update",{name:ko.observable(i)}).SubmitData(function(n){return{cumulativeMeterTotalAlarmId:t,name:n.name()}}).Done(function(n,t){r&&r(t.Name)}).MessageField("Specify the name for the alarm.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.CumulativeMeterReset=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_Reset.For(n),"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(){t&&t()}).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()}}(Form||(Form={})),function(n){n.CumulativeMeterSetTimeAlarmLimits=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_SetTimeAlarmLimits.For(n.CumulativeMeterId),"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(){t&&t()}).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()}}(Form||(Form={})),function(n){n.CumulativeMeterSetTotalAlarmLimits=function(n,t){return new DialogViewModelBuilder(app.route.CumulativeMeter_SetTotalAlarmLimits.For(n.CumulativeMeterId),"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(n,i){t&&t(i.Warning,i.Limit)}).MessageField("Specify the warning threshold for the alarm.").NumberField("warning","Warning").MessageField("Specify the limit threshold for the alarm.").NumberField("limit","Limit").Create()}}(Form||(Form={})),function(n){n.DataStreamConfigure=function(n,t,i,r){return new DialogViewModelBuilder(app.route.DataStream_Configure.For(n),"Configure Data Stream","Update",{scale:ko.observable(t),units:ko.observable(i)}).SubmitData(function(n){return{scale:n.scale(),units:n.units()}}).Done(function(n,t){r&&r(t.Scale,t.Units)}).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()}}(Form||(Form={})),function(n){n.DataStreamDelete=function(n,t){return new DialogViewModelBuilder(app.route.DataStream_Delete.For(n),"Delete Data Stream","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this data stream?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()}}(Form||(Form={})),function(n){n.DeviceAttachChildDevice=function(n,t,i){return new DialogViewModelBuilder(app.route.Device_AttachChildDevice.For(n),"Attach Child Device","Attach",{childDeviceExtAddress:ko.observable("")}).SubmitData(function(n){return{childDeviceExtAddress:n.childDeviceExtAddress()}}).Done(function(){i&&i()}).AjaxCompactFilterDropDownListField("childDeviceExtAddress","Child Device Ext Address",function(n){return n.DeviceExtAddress},function(n){return n.DeviceExtAddress},app.route.Device_AvailableChildDevices.For(n,{deviceTypeId:t}),!1,null,"DeviceExtAddress",5,1).Create()}}(Form||(Form={})),function(n){n.DeviceAttachSim=function(n,t){return new DialogViewModelBuilder(app.route.Device_AttachSim.For(n),"Attach Sim","Attach",{simId:ko.observable(0)}).SubmitData(function(n){return{simId:n.simId()}}).Done(function(){t&&t()}).AjaxCompactFilterDropDownListField("simId","Sim",function(n){return n.SimNumber},function(n){return n.SimId},app.route.Device_AvailableSims.For(),!1,null,"SimNumber",5,1).Create()}}(Form||(Form={})),function(n){n.DeviceDetachChildDevice=function(n,t,i){return new DialogViewModelBuilder(app.route.Device_DetachChildDevice.For(n),"Detach Child Device","Detach",{}).SubmitData(function(){return{childDeviceExtAddress:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to detach this child device?").Create()}}(Form||(Form={})),function(n){n.DeviceEdit=function(n,t){var i={showObsolete:ko.observable(n.IsObsolete),deviceTypeId:ko.observable(n.DeviceTypeId),deviceModel:ko.observable(n.DeviceModel),firmwareVersion:ko.observable(n.FirmwareVersion),confirm:ko.observable(!1)};return new DialogViewModelBuilder(app.route.Device_Update.For(n.DeviceExtAddress),"Update Device","Update",i).SubmitData(function(n){return{deviceTypeId:n.deviceTypeId(),deviceModel:n.deviceModel(),firmwareVersion:n.firmwareVersion(),confirm:n.confirm()}}).Done(function(){t&&t()}).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 app.route.DeviceType_AvailableDeviceTypes.For(null,{showObsolete:i.showObsolete,showChildren:!0})}),!1,{DeviceTypeId:i.deviceTypeId(),DeviceType:""},"DeviceType").AjaxFilterDropDownListField("deviceModel","Model",function(n){return n.Model},function(n){return n.Model},ko.computed(function(){return i.deviceTypeId()?app.route.DeviceType_GetModels.For(i.deviceTypeId):null}),!1,{Model:i.deviceModel()},"Model").NumberField("firmwareVersion","Firmware Version",0,1e9).CheckBoxField("confirm","Are you sure you want to do this?").Create()}}(Form||(Form={})),function(n){n.DeviceRemoveSim=function(n,t,i){return new DialogViewModelBuilder(app.route.Device_RemoveSim.For(n),"Remove Sim from Device","Remove",{simId:ko.observable(t)}).SubmitData(function(n){return{simId:n.simId()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove this sim?").Create()}}(Form||(Form={})),function(n){n.DeviceUpgradeLegacyDevice=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Device_UpgradeLegacyDevice.For(n),"Upgrade Legacy Device","Upgrade",{confirm:ko.observable(!1)}).SubmitData(function(n){return{deviceModel:i,confirm:n.confirm()}}).Done(function(){r&&r()}).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).DisplayField("targetModel","Upgraded Model: "+i).CheckBoxField("confirm","Confirm irreversible action?").Create()}}(Form||(Form={})),function(n){n.DeviceTypeCreateChild=function(n,t){return new DialogViewModelBuilder(app.route.DeviceType_CreateChild.For(n),"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(){t&&t()}).TextField("deviceType","Device Type").MultilineTextField("description","Description",null,!0).IntNumberField("model","Model",1,65535).TextField("imageUrl","Image Url",null,!0).Create()}}(Form||(Form={})),function(n){n.DeviceTypeCreateModel=function(n,t,i){return new DialogViewModelBuilder(app.route.DeviceType_CreateModel.For(n),"Create Model for Device Type","Create",{model:ko.observable(t)}).SubmitData(function(n){return{model:n.model()}}).Done(function(){i&&i()}).IntNumberField("model","Model Number",1,65535).Create()}}(Form||(Form={})),function(n){n.DeviceTypeDelete=function(n,t){return new DialogViewModelBuilder(app.route.DeviceType_Delete.For(n),"Delete Device Type","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.DeviceTypeDeleteModel=function(n,t,i){return new DialogViewModelBuilder(app.route.DeviceType_DeleteModel.For(n),"Delete Device Type Model","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm(),model:t}}).Done(function(){i&&i()}).MessageField("You are about to delete a model for this device type.").CheckBoxField("confirm","Confirm deletion of model for this device type").Create()}}(Form||(Form={})),function(n){n.DeviceTypeEdit=function(n,t){var i={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(app.route.DeviceType_Update.For(n.DeviceTypeId),"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&&t()}).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},app.route.DeviceType_AvailableDeviceTypes.For(null,{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},app.route.DeviceType_AvailableIOTypes.For(),!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()}}(Form||(Form={})),function(n){n.DeviceTypeSetUpgradeTarget=function(n,t,i,r){return new DialogViewModelBuilder(app.route.DeviceType_SetModelUpgradeTarget.For(n),"Set Device Type Model Upgrade Target","Update",{targetUpgradeModel:ko.observable(i)}).SubmitData(function(n){return{model:t,targetUpgradeModel:n.targetUpgradeModel()}}).Done(function(){r&&r()}).DisplayField("model","Source model number: "+t).IntNumberField("targetUpgradeModel","Target Upgrade Model Number",1,65535,!0).Create()}}(Form||(Form={})),function(n){n.DocumentCancelUpdate=function(n){return new DialogViewModelBuilder(null,"Cancel Update","Cancel",{}).Submit(function(){n&&n()}).MessageField("Are you sure you want to cancel updating this document and leave the page?").Create()}}(Form||(Form={})),function(n){n.DocumentCreateLink=function(n){var t=new DialogViewModelBuilder(null,"Create and add link","Add",{slug:ko.observable(null),url:ko.observable("")}).Submit(function(){}).Done(function(){n&&n()}).MessageField("Select an internal page for the link").MessageField("OR enter the URL of a website to create a link to that site").TextField("url","External Website URL",null,!0);return t.Create()}}(Form||(Form={})),function(n){n.DocumentSave=function(n,t,i,r,u,f,e,o){return new DialogViewModelBuilder(app.route.Document_UpdateDocument.For(null,{prefix:n}),"Save Document","Save",{parentDocumentationId:ko.observable(f),parentDocumentName:ko.observable(e),pageName:i,content:r}).SubmitData(function(n){return{slug:t,documentId:u,parentDocumentationId:n.parentDocumentationId(),pageName:i,content:r}}).Done(function(n,i){console.log("response slug",i.Slug);o&&o(i!=null&&i.Slug!=null?i.Slug:t)}).DisplayFieldWithHeading("pageName","Document Name",i).DisplayFieldWithHeading("parentDocumentName","Parent Document",e!=null?e:"Not Assigned").Create()}}(Form||(Form={})),function(n){n.DocumentSetParent=function(n){var t=new DialogViewModelBuilder(app.route.Document_UpdateDocument.For(),"Set parent document","Set",{}).Submit(function(){}).Done(function(){n&&n()}).MessageField("Select a parent page for this document");return t.Create()}}(Form||(Form={})),function(n){n.DocumentationPrefixDeleteDocument=function(n,t,i){return new DialogViewModelBuilder(app.route.DocumentationPrefix_DeleteDocument.For(n),"Delete document from prefix","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm(),documentationId:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to archive this document?").CheckBoxField("confirm","Confirm irreversible action").Create()}}(Form||(Form={})),function(n){n.EscalationListAddUser=function(n,t){return new DialogViewModelBuilder(app.route.EscalationList_AddExistingUser.For(n),"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&&t()}).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},app.route.EscalationList_UsersWhichCanBeAdded.For(n),!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()}}(Form||(Form={})),function(n){n.EscalationListCreate=function(n){return new DialogViewModelBuilder(app.route.Escalation_CreateEscalationList.For(),"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(t,i){n&&n(i.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},app.route.Escalation_GroupsForCreatingEscalationLists.For(),!1,null,"Name",5).TextField("name","Name").IntNumberField("escalationDelayMinutes","Escalation Delay (minutes)",1,10080).Create()}}(Form||(Form={})),function(n){n.EscalationListCreateUser=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.EscalationList_CreateUser.For(n),"Create User","Create",{name:ko.observable(),groupId:ko.observable(),timeZoneName:ko.observable(t),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(){u&&u()}).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},app.route.EscalationList_GroupsForCreatingUsers.For(n),!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},app.route.Home_TimeZoneNames.For(),!1,{TimeZoneName:t,BaseUtcOffset:i},"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},app.route.Branding_AvailableBrandings.For(),!1,{BrandingId:r},"BrandingId").Create()}}(Form||(Form={})),function(n){n.EscalationListDelete=function(n,t){return new DialogViewModelBuilder(app.route.EscalationList_Delete.For(n),"Delete Escalation List","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.EscalationListRemoveUser=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.EscalationList_RemoveUser.For(n),"Remove User","Remove",{userId:ko.observable(t),priority:ko.observable(r)}).SubmitData(function(n){return{userId:n.userId(),priority:n.priority()}}).Done(function(){u&&u()}).MessageField("Are you sure you want to remove the user "+i+" with priority "+r+" from this escalation list?").Create()}}(Form||(Form={})),function(n){n.EscalationListRename=function(n,t,i){return new DialogViewModelBuilder(app.route.EscalationList_Rename.For(n),"Rename Escalation List","Update",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.EscalationListSetDelay=function(n,t,i){return new DialogViewModelBuilder(app.route.EscalationList_SetEscalationDelay.For(n),"Set Escalation Delay","Update",{escalationDelayMinutes:ko.observable(t)}).SubmitData(function(n){return{escalationDelayMinutes:n.escalationDelayMinutes()}}).Done(function(n,t){i&&i(t.EscalationDelayMinutes)}).IntNumberField("escalationDelayMinutes","Escalation Delay Minutes",1,10080).Create()}}(Form||(Form={})),function(n){n.EscalationListUpdateSubscription=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(app.route.EscalationList_UpdateSubscription.For(n),"Update Subscription","Update",{userId:ko.observable(t),priority:ko.observable(r),sendSms:ko.observable(u),sendEmail:ko.observable(f)}).SubmitData(function(n){return{userId:n.userId(),priority:n.priority(),sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){e&&e()}).MessageField("Update subscription for user "+i+" priority "+r).MessageField("Specify how the user should receive messages.").CheckBoxField("sendSms","Send SMS").CheckBoxField("sendEmail","Send Email").Create()}}(Form||(Form={})),function(n){n.GisDatasetAddItemIndex=function(n,t){return new DialogViewModelBuilder(app.route.GisDataset_AddItemIndex.For(n),"Add Index","Add & Continue",{index:ko.observable(0),description:ko.observable("")}).SubmitData(function(n){return{index:n.index(),description:n.description()}}).Done(function(){t&&t()}).MessageField("Specify the description for the index to be added.").NumberField("index","Index",0).TextField("description","Description").Create()}}(Form||(Form={})),function(n){n.GisDatasetClear=function(n,t){return new DialogViewModelBuilder(app.route.GisDataset_Clear.For(n),"Clear GIS Dataset","Clear",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.GisDatasetClone=function(n,t,i){return new DialogViewModelBuilder(app.route.GisDataset_CloneDataset.For(n),"Clone GIS Dataset","Clone",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.GisDatasetId)}).MessageField("Please provide a name for this clone").TextField("name","GIS Dataset Name",50,!1).Create()}}(Form||(Form={})),function(n){n.GisDatasetCreatePolygon=function(n,t,i,r){var u={polygonName:ko.observable(""),indexValues:ko.observableArray(t.map(function(n){return{ItemIndex:n.ItemIndex(),ItemDescription:n.Description(),ItemValue:0}}))};return new DialogViewModelBuilder(app.route.GisDataset_CreatePolygon.For(n),"Create Polygon","Create",u).SubmitData(function(n){return{polygonName:n.polygonName(),indexValues:n.indexValues().map(function(n){return{Key:n.ItemIndex,Value:n.ItemValue}}),coordinates:i}}).Done(function(){r&&r()}).TextField("polygonName","Polygon Name").IndexValueDescriptionListField("Index Values",u.indexValues,function(n){return n.ItemDescription}).Create()}}(Form||(Form={})),function(n){n.GisDatasetDeletePolygon=function(n,t,i,r){return new DialogViewModelBuilder(app.route.GisDataset_DeletePolygon.For(n),"Delete Polygon","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{gisPolygonId:t,confirm:n.confirm()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to delete the polygon "+i+" from this GIS dataset?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()}}(Form||(Form={})),function(n){n.GisDatasetEditIndexDescription=function(n,t,i,r){return new DialogViewModelBuilder(app.route.GisDataset_UpdateItemDescription.For(n),"Edit Item Description","Update",{index:ko.observable(t),description:ko.observable(i)}).SubmitData(function(n){return{description:n.description(),index:n.index()}}).Done(function(){r&&r()}).MessageField("Specify the new description for this item index.").TextField("description","Description").Create()}}(Form||(Form={})),function(n){n.GisDatasetEditPolygon=function(n,t,i,r,u,f){var e={indexValues:ko.observableArray(),polygonName:ko.observable(i)};return r.forEach(function(n){var t=u.filter(function(t){return ko.unwrap(t.Key)===ko.unwrap(n.ItemIndex)}).pop();e.indexValues.push({ItemIndex:n.ItemIndex(),ItemDescription:n.Description(),ItemValue:t?t.Value():0})}),new DialogViewModelBuilder(app.route.GisDataset_EditPolygon.For(n),"Update Polygon","Update",e).Validate(function(n){return n.indexValues().some(function(n){return Math.round(n.ItemValue)!==Number(n.ItemValue)})?"Values must be whole numbers":null}).SubmitData(function(n){return{polygonId:t,polygonName:n.polygonName(),indexValues:n.indexValues().map(function(n){return{Key:n.ItemIndex,Value:n.ItemValue}})}}).Done(function(){f&&f()}).TextField("polygonName","Polygon Name").IndexValueDescriptionListField("Index Values",e.indexValues,function(n){return n.ItemDescription}).Create()}}(Form||(Form={})),function(n){n.GisDatasetRemoveItemIndexes=function(n,t,i){return new DialogViewModelBuilder(app.route.GisDataset_RemoveItemDescriptions.For(n),"Remove Item Descriptions","Remove",{indexes:ko.observableArray()}).SubmitData(function(n){return{indexes:n.indexes()}}).Done(function(){i&&i()}).MessageField("Select one or more item descriptions to remove.").CheckBoxListField("indexes","Indexes",t,function(n){return ko.unwrap(n.ItemIndex)+": "+ko.unwrap(n.Description)},function(n){return ko.unwrap(n.ItemIndex)}).Create()}}(Form||(Form={})),function(n){n.GisDatasetRename=function(n,t,i){return new DialogViewModelBuilder(app.route.GisDataset_Rename.For(n),"Rename GIS Dataset","Update",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(){i&&i()}).MessageField("Please provide a name for this clone").TextField("name","GIS Dataset Name",50,!1).Create()}}(Form||(Form={})),function(n){n.GroupApplicationsForDeviceTypeSelection=function(n,t){return new DialogViewModelBuilder(null,"Select Application","Select",{appId:ko.observable()}).Submit(function(n){t(n.appId())}).AjaxCompactFilterDropDownListField("appId","Application",function(n){return n.Name},function(n){return n.AppId},ko.computed(function(){return ko.unwrap(n)!=null?app.route.DeviceType_AvailableApplications.For(n):null}),!0,null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.GroupAssignNetworkNodeApplications=function(n,t,i,r,u,f,e){var o={appId:ko.observable(),version:ko.observable(u)};return new DialogViewModelBuilder(app.route.Group_AssignNetworkNodeApplicationBulk.For(n),"Assign Application to Nodes","Assign",o).SubmitData(function(n){return{appId:n.appId(),version:n.version(),networkNodes:f}}).Done(function(){e&&e()}).AjaxCompactFilterDropDownListField("appId","Application",function(n){return n.Name},function(n){return n.AppId},app.route.DeviceType_AvailableApplications.For(t),!1,{AppId:i,Name:r},null,3,1).AjaxCompactFilterDropDownListField("version","Version",function(n){return n},function(n){return n},ko.computed(function(){return o.appId()?app.route.Application_GetAppVersionsWithBinary.For(o.appId):null}),!1,u,null).MessageField(f.length+" network node(s) have been selected for update.").MessageField("Are you sure you want to queue application updates in these network nodes?").Create()}}(Form||(Form={})),function(n){n.GroupCopyModuleConfiguration=function(n,t,i,r){return new DialogViewModelBuilder(null,"Copy Module Configuration","Next",{moduleId:ko.observable(),selectedModules:ko.observableArray(t)}).Submit(function(n){r&&r(n.moduleId())}).MessageField("Select a module from which to copy the config to all selected modules").AjaxCompactFilterDropDownListField("moduleId","Source Module",function(n){return n.NetworkName+" - "+n.NodeName+" - "+n.Name},function(n){return n.ModuleId},ko.computed(function(){return app.route.Module_AvailableModulesOfType.For(null,{type:n})}),!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()}}(Form||(Form={})),function(n){n.GroupCreate=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateGroup.For(n),"Create Group","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t&&t(i.GroupId)}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.GroupDelete=function(n,t){return new DialogViewModelBuilder(app.route.Group_Delete.For(n),"Delete Group","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.GroupDownloadModuleTypeAlerts=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Group_DownloadModuleAlertsForType.For(n),"Download Data","Download",{}).SubmitData(function(){return{moduleType:t,startLocal:i,endLocal:r,alertAndStatus:u}}).MessageField("Download module alerts as a csv for the currently selected module type and dates").CreateDownload()}}(Form||(Form={})),function(n){n.GroupFirmwareVersionRangeSelection=function(n,t,i,r,u){return new DialogViewModelBuilder(null,"Set Version Range","Set",{minVersion:ko.observable(n<=i?"":n),maxVersion:ko.observable(t>=r?"":t)}).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){u&&u(n.minVersion(),n.maxVersion())}).Done(function(){}).IntNumberField("minVersion","Min Version (blank or 0 to ignore limit)",i,r,!0).IntNumberField("maxVersion","Max Version (blank to ignore limit)",i,r,!0).Create()}}(Form||(Form={})),function(n){n.GroupImportNetworkProvisioningData=function(n,t){return new DialogViewModelBuilder(app.route.Group_ImportProvisioningData.For(n),"Import Network Provisioning Data","Import",{fileName:ko.observable()}).SubmitData(function(n){return{file:n.fileName()}}).Done(function(n,i){t&&t(i.Markdown,i.CsvData,i.AllowProcessing)}).SingleFileUploadField("fileName","File to import").Create()}}(Form||(Form={})),function(n){n.GroupModuleConfigurationCopyFromTemplate=function(n,t,i,r){return new DialogViewModelBuilder(null,"Copy Module Configuration","Next",{moduleConfigTemplateId:ko.observable(),selectedModules:ko.observableArray(t)}).Submit(function(n){r&&r(n.moduleConfigTemplateId())}).MessageField("Select a module config template 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 app.route.ModuleConfigTemplate_AvailableModuleConfigTemplatesForType.For(null,{moduleTypeName:n})}),!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()}}(Form||(Form={})),function(n){n.GroupMove=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_ChangeParent.For(n),"Move Group","Move",{newParentGroupId:ko.observable()}).SubmitData(function(n){return{oldParentGroupId:t,newParentGroupId:n.newParentGroupId()}}).Done(function(){i&&i()}).AjaxCompactFilterDropDownListField("newParentGroupId","New Parent Group",function(n){return n.Name+" (ID:"+n.GroupId+")"},function(n){return n.GroupId},app.route.Group_AvailableParentGroups.For(n,{currentParentGroupId:t}),!1,null,"Name",5,1).Create()}}(Form||(Form={})),function(n){n.GroupNestedDeviceTypesForAppsSelection=function(n,t){var i={deviceTypeId:ko.observable(),appId:ko.observable()};return new DialogViewModelBuilder(null,"Select Device Type and Application","Select",i).Submit(function(n){t(n.deviceTypeId(),n.appId())}).AjaxCompactFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},app.route.Group_NestedNetworkDeviceTypesForAppUpdates.For(n),!1,null,null,3,1).AjaxCompactFilterDropDownListField("appId","Application",function(n){return n.Name},function(n){return n.AppId},ko.computed(function(){return i.deviceTypeId()!=null?app.route.DeviceType_AvailableApplications.For(i.deviceTypeId):null}),!0,null,null,3,1).Create()}}(Form||(Form={})),function(n){n.GroupNestedModuleTypeSelection=function(n,t){return new DialogViewModelBuilder(null,"Group Modules Configuration","Next",{moduleType:ko.observable()}).Submit(function(n){t(n.moduleType())}).AjaxFilterDropDownListField("moduleType","Module Type",function(n){return n.Type},function(n){return n.Type},app.route.Group_NestedModuleTypes.For(n),!1,null,"Type",10,10).Create()}}(Form||(Form={})),function(n){n.GroupNestedNetworkDeviceTypeSelection=function(n,t){return new DialogViewModelBuilder(null,"Update Network Firmware","Next",{deviceTypeAndModel:ko.observable()}).Submit(function(n){t(n.deviceTypeAndModel())}).AjaxFilterDropDownListField("deviceTypeAndModel","Device Type",function(n){return n.Type+"v"+n.Model},function(n){return n.Type+"|"+n.Model},app.route.Group_NestedNetworkDeviceTypes.For(n),!1,null,"Type",10,10).Create()}}(Form||(Form={})),function(n){n.GroupProcessNetworkProvisioningData=function(n,t,i,r,u,f,e,o){return new DialogViewModelBuilder(app.route.Group_ProcessProvisioningData.For(n),"Process Network Provisioning Data","Process",{supportAccountUserId:ko.observable(i),onCallUserId:ko.observable(r),brandingId:ko.observable(u),messagePlanId:ko.observable(f),billingEntityId:ko.observable(e)}).SubmitData(function(n){return{supportAccountUserId:n.supportAccountUserId(),onCallUserId:n.onCallUserId(),brandingId:n.brandingId(),messagePlanId:n.messagePlanId(),billingEntityId:n.billingEntityId(),csvData:t}}).Done(function(n,t){o&&o(t.Markdown,t.AllowProcessing,n.supportAccountUserId(),n.onCallUserId(),n.brandingId(),n.messagePlanId(),n.billingEntityId())}).AjaxFilterDropDownListField("supportAccountUserId","Support Subscription User",function(n){return n.Name},function(n){return n.UserId},app.route.Group_AvailableNetworkProvisioningSupportUsers.For(n),!1,{UserId:i},"Name",3,1).AjaxFilterDropDownListField("onCallUserId","On Call Subscription User",function(n){return n.Name},function(n){return n.UserId},app.route.Group_AvailableNetworkProvisioningSupportUsers.For(n),!1,{UserId:r},"Name",3,1).AjaxFilterDropDownListField("brandingId","Branding",function(n){return n.Name},function(n){return n.BrandingId},app.route.Branding_AvailableBrandings.For(),!1,{BrandingId:u},"Name",3,1).AjaxFilterDropDownListField("messagePlanId","Message Plan",function(n){return n.Name},function(n){return n.MessagePlanId},app.route.MessagePlan_AvailableMessagePlans.For(),!1,{MessagePlanId:f},"Name",3,1).AjaxFilterDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},app.route.BillingEntity_AvailableBillingEntities.For(),!1,{BillingEntityId:e},"CompanyName",3,1).Create()}}(Form||(Form={})),function(n){n.GroupRename=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_Rename.For(n),"Rename Group","Rename",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.GroupSelectModuleConfigurationItems=function(n,t,i){var r=[],u=[],f,e;return n.forEach(function(n,i){t()[i]()&&r.push(i);u.push({Key:i,Name:ko.unwrap(n.name)})}),f={selectedItems:ko.observableArray(r),selectAll:ko.observable(r.length===u.length)},e=new DialogViewModelBuilder(null,"Select Visible Config Items","Done",f).Submit(function(n){i&&i(n.selectedItems().sort())}).MessageField("Select which config items to display and edit").CheckBoxField("selectAll","Select All").CheckBoxListField("selectedItems","Config Items",u,function(n){return n.Name},function(n){return n.Key}).Create(),ko.computed(function(){f.selectAll();$(".check-box").each(function(n,t){var i=$(t);i.prop("name")!=="selectAll"&&i.prop("checked")!==$("#selectAll").prop("checked")&&i.click()})}),e}}(Form||(Form={})),function(n){n.GroupUpdateNetworkNodesFirmware=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Group_UpdateNetworkNodeFirmwareBulk.For(n),"Update Node Firmware","Update",{firmwareId:ko.observable(),autoReboot:ko.observable(!0),reloadApplication:ko.observable(!0),networkNodes:ko.observableArray(r)}).SubmitData(function(n){return{firmwareId:n.firmwareId(),autoReboot:n.autoReboot(),reloadApplication:n.reloadApplication(),networkNodes:n.networkNodes()}}).Done(function(){u&&u()}).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 "+Format.Date(moment.utc(n.CreatedUtc))},function(n){return n.FirmwareId},app.route.Group_AvailableFirmwareForDeviceModel.For(n,{deviceType:t,model:i}),!1).CheckBoxField("autoReboot","Automatically reboot when done.").CheckBoxField("reloadApplication","Queue logic application and config reload.").Create()}}(Form||(Form={})),function(n){n.GroupAddApps=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingApps.For(n),"Add Existing Applications","Add",{appIds:ko.observableArray()}).SubmitData(function(n){return{appIds:n.appIds()}}).Done(function(){t&&t()}).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},app.route.Group_AppsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateApp=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateApp.For(n),"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){t&&t(i.AppId)}).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},app.route.Application_AvailableDeviceTypes.For(),!0,null,"DeviceType").MultilineTextField("description","Description").Create()}}(Form||(Form={})),function(n){n.GroupRemoveApp=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveApp.For(n),"Remove Application","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{appId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the application "'+i+'" from this group? The application will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete Application.").Create()}}(Form||(Form={})),function(n){n.GroupAddApplicationTemplates=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingApplicationTemplates.For(n),"Add Existing Application Templates","Add",{applicationTemplateIds:ko.observableArray()}).SubmitData(function(n){return{applicationTemplateIds:n.applicationTemplateIds()}}).Done(function(){t&&t()}).MessageField("Select one or more existing application templates 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},app.route.Group_ApplicationTemplatesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCloneApplicationTemplate=function(n,t){return new DialogViewModelBuilder(app.route.ApplicationTemplate_CloneApplicationTemplate.For(n),"Clone Application Template","Clone",{sourceApplicationTemplateId:ko.observable(),name:ko.observable()}).SubmitData(function(t){return{sourceApplicationTemplateId:t.sourceApplicationTemplateId(),groupId:n,name:t.name()}}).Done(function(n,i){t&&t(i.ApplicationTemplateId)}).TextField("name","New Template Name").AjaxCompactFilterDropDownListField("sourceApplicationTemplateId","Application Template",function(n){return n.Name},function(n){return n.ApplicationTemplateId},app.route.ApplicationTemplate_AvailableApplicationTemplates.For(),!1,null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.GroupCreateApplicationTemplate=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateApplicationTemplate.For(n),"Create Application Template","Create",{name:ko.observable(),applicationGuid:ko.observable()}).SubmitData(function(n){return{name:n.name(),applicationId:n.applicationGuid()}}).Done(function(n,i){t&&t(i.ApplicationTemplateId)}).TextField("name","Application Template Name").AjaxFilterDropDownListField("applicationGuid","Application",function(n){return n.Name+" (v"+n.AppVersionNumber+")"},function(n){return n.ApplicationGuid},app.route.ApplicationTemplate_AvailableApplications.For(),!1,null,"Name",1,10).Create()}}(Form||(Form={})),function(n){n.GroupRemoveApplicationTemplate=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveApplicationTemplate.For(n),"Remove Application Template","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{applicationTemplateId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the application template "+i+" 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()}}(Form||(Form={})),function(n){n.GroupAddAppModuleSources=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingAppModuleSources.For(n),"Add Existing App Module Sources","Add",{appModuleSourceIds:ko.observableArray()}).SubmitData(function(n){return{appModuleSourceIds:n.appModuleSourceIds()}}).Done(function(){t&&t()}).MessageField("Select one or more existing app module sources 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},app.route.Group_AppModuleSourcesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateAppModuleSource=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateAppModuleSource.For(n),"Create App Module Source","Create",{file:ko.observable(""),notes:ko.observable("")}).SubmitData(function(n){return{file:n.file(),notes:n.notes()}}).Done(function(n,i){t&&t(i.AppModuleSourceId)}).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()}}(Form||(Form={})),function(n){n.GroupRemoveAppModuleSource=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveAppModuleSource.For(n),"Remove App Module Source","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{appModuleSourceId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the app module source "'+i+'" 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()}}(Form||(Form={})),function(n){n.GroupAddBillingEntities=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingBillingEntities.For(n),"Add Existing Billing Entities","Add",{billingEntityIds:ko.observableArray()}).SubmitData(function(n){return{billingEntityIds:n.billingEntityIds()}}).Done(function(){t&&t()}).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},app.route.Group_BillingEntitiesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateBillingEntity=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_CreateBillingEntity.For(n),"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(t)}).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(){r&&r()}).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},app.route.Home_TimeZoneNames.For(),!1,{TimeZoneName:t,BaseUtcOffset:i},"TimeZoneName",5,1).MessageField("").AjaxDropDownListField("escalationListId","Escalation List",function(n){return n.Name},function(n){return n.EscalationListId},app.route.Group_GetAvailableEscalationLists.For(n),!0).Create()}}(Form||(Form={})),function(n){n.GroupRemoveBillingEntity=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveBillingEntity.For(n),"Remove Billing Entity","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{billingEntityId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the billing entity "'+i+'" from this group? The billing entity will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete Billing Entity.").Create()}}(Form||(Form={})),function(n){n.GroupAddDataStreams=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingDataStreams.For(n),"Add Existing Data Streams","Add",{dataStreamIds:ko.observableArray()}).SubmitData(function(n){return{dataStreamIds:n.dataStreamIds()}}).Done(function(){t&&t()}).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},app.route.Group_DataStreamsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupRemoveDataStream=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveDataStream.For(n),"Remove Data Stream","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{dataStreamId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the data stream "'+i+'" 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()}}(Form||(Form={})),function(n){n.GroupAddDevices=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingDevices.For(n),"Add Existing Devices","Add",{deviceExtAddresses:ko.observableArray()}).SubmitData(function(n){return{deviceExtAddresses:n.deviceExtAddresses()}}).Done(function(){t&&t()}).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},app.route.Group_DevicesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateDevice=function(n,t){var i={deviceExtAddress:ko.observable(),deviceTypeId:ko.observable(),deviceModel:ko.observable(),firmwareVersion:ko.observable(),showObsolete:ko.observable(!1),childDeviceTypes:ko.observableArray([])},f=0,r=new DialogViewModelBuilder(app.route.Group_CreateDevice.For(n),"Create Device","Create & Continue",i).Validate(function(n){return n.deviceExtAddress().length!==16?"Device Ext Address must be 16 characters long":n.childDeviceTypes().some(function(n){return n.Value.length!==16})?"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:f}}).Done(function(n,i){t&&t(i.Success,i.Message);i.Success&&(n.deviceExtAddress(""),n.deviceTypeId.notifySubscribers())}).CheckBoxField("showObsolete","Include Obsolete Device Types").AjaxFilterDropDownListField("deviceTypeId","Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},ko.computed(function(){return app.route.DeviceType_AvailableDeviceTypes.For(null,{showObsolete:i.showObsolete()})}),!1,null,"DeviceType").AjaxFilterDropDownListField("deviceModel","Model",function(n){return n.Model},function(n){return n.Model},ko.computed(function(){return i.deviceTypeId()?app.route.DeviceType_GetModels.For(i.deviceTypeId):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(),u=-1,e;return r.fields().forEach(function(n,t){n.fieldName==="deviceTypeId"&&(u=t)}),e=function(){var t=[],n;for(r.fields().forEach(function(n,i){n.templateName!=null&&n.templateName.indexOf("dialog-child-device-list-field-template")>-1&&t.push(i)}),n=t.length-1;n>-1;n--)r.fields.splice(t[n],1);u>-1&&r.fields()[u].options().forEach(function(n){n.DeviceTypeId===i.deviceTypeId()&&(i.childDeviceTypes([]),f=n.ChildDevices.length,n.ChildDevices.forEach(function(n){i.childDeviceTypes().push({DeviceTypeId:n.DeviceTypeId,DeviceType:n.DeviceType,Value:""})}),r.fields.push(new DialogChildDeviceListViewModel("Child Device Ext Addresses",i.childDeviceTypes())))})},ko.computed(function(){i.deviceTypeId();var n=function(){return e()};ko.ignoreDependencies(n)}).extend({throttle:300}),r}}(Form||(Form={})),function(n){n.GroupMoveDevices=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_MoveDevices.For(n),"Move Devices to Group","Move",{targetGroupId:ko.observable(0),confirm:ko.observable(!1)}).Validate(function(){var n=t.length;return n>500?"You may only select 500 devices at a time to move to a new group. Please reduce your selection.":n<1?"You must select the devices you wish to move.":null}).SubmitData(function(n){return{targetGroupId:n.targetGroupId(),deviceExtAddresses:t,confirm:n.confirm()}}).Done(function(){i&&i()}).MessageField("You have "+t.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},app.route.Group_AvailableTargetGroups.For(n),!1,null,"Name").OptionalCheckBoxField("confirm","Devices will be added to target group but not removed from this group.").Create()}}(Form||(Form={})),function(n){n.GroupRemoveDevice=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_RemoveDevice.For(n),"Remove Device","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{deviceExtAddress:t,deleteFlag:n.deleteFlag()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove the device "+t+" from this group? The device will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete device.").Create()}}(Form||(Form={})),function(n){n.GroupAddDeviceTypes=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingDeviceTypes.For(n),"Add Existing Device Types","Add",{deviceTypeIds:ko.observableArray()}).SubmitData(function(n){return{deviceTypeIds:n.deviceTypeIds()}}).Done(function(){t&&t()}).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},app.route.Group_DeviceTypesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateDeviceType=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateDeviceType.For(n),"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(n,i){t&&t(i.DeviceTypeId)}).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},app.route.DeviceType_AvailableParentDeviceTypes.For(null,{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},app.route.DeviceType_AvailableIOTypes.For(),!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()}}(Form||(Form={})),function(n){n.GroupRemoveDeviceType=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveDeviceType.For(n),"Remove Device Type","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{deviceTypeId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the device type "+i+" from this group? The device type will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete device type.").Create()}}(Form||(Form={})),function(n){n.GroupCreatePrefix=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreatePrefix.For(n),"Create prefix in group","Create",{prefix:ko.observable("")}).SubmitData(function(n){return{prefix:n.prefix()}}).Done(function(n,i){t&&t(i.DocumentationPrefix)}).MessageField("Enter a new prefix, up to a maximum of 10 characters").TextField("prefix","Prefix",10,!1,!0,!0).Create()}}(Form||(Form={})),function(n){n.GroupRemovePrefix=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_RemovePrefix.For(n),"Remove prefix from group","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{documentationPrefixId:t,deleteFlag:n.deleteFlag()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove this prefix from the group? The documentation prefix will still exist, but will no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Delete documentation prefix").Create()}}(Form||(Form={})),function(n){n.GroupAddEscalationLists=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingEscalationLists.For(n),"Add Existing Escalation Lists","Add",{escalationListIds:ko.observableArray()}).SubmitData(function(n){return{escalationListIds:n.escalationListIds()}}).Done(function(){t&&t()}).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},app.route.Group_EscalationListsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateEscalationList=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateEscalationList.For(n),"Create Escalation List","Create",{name:ko.observable(),escalationDelayMinutes:ko.observable(15)}).SubmitData(function(n){return{name:n.name(),escalationDelayMinutes:n.escalationDelayMinutes()}}).Done(function(n,i){t&&t(i.EscalationListId)}).TextField("name","Name").IntNumberField("escalationDelayMinutes","Escalation Delay (minutes)",1,10080).Create()}}(Form||(Form={})),function(n){n.GroupRemoveEscalationList=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveEscalationList.For(n),"Remove Escalation List","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{escalationListId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the escalation list "'+i+'" 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()}}(Form||(Form={})),function(n){n.GroupAddExportTargets=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingExportTargets.For(n),"Add Existing Export Targets","Add",{exportTargetIds:ko.observableArray()}).SubmitData(function(n){return{exportTargetIds:n.exportTargetIds()}}).Done(function(){t&&t()}).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},app.route.Group_ExportTargetsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupRemoveExportTarget=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveExportTarget.For(n),"Remove Export Target","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{exportTargetId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the export target "+i+" 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()}}(Form||(Form={})),function(n){n.GroupAddGisDatasets=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingGisDatasets.For(n),"Add Existing GIS Datasets","Add",{gisDatasetIds:ko.observableArray()}).SubmitData(function(n){return{gisDatasetIds:n.gisDatasetIds()}}).Done(function(){t&&t()}).MessageField("Select one or more existing GIS datasets to add to this group.").AjaxMultiSelectListField("gisDatasetIds","GIS Datasets (ctrl+ click or drag for multi select)",function(n){return n.Name},function(n){return n.GisDatasetId},app.route.Group_GisDatasetsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateGisDataset=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateGisDataset.For(n),"Create GIS Dataset","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t&&t(i.GisDatasetId)}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.GroupRemoveGisDataset=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveGISDataset.For(n),"Remove GIS Dataset","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{gisDatasetId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the GIS dataset "'+i+'" from this group? The GIS dataset will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete GIS Dataset").Create()}}(Form||(Form={})),function(n){n.GroupAddIcons=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingIcons.For(n),"Add Existing Icons","Add",{iconNames:ko.observableArray()}).SubmitData(function(n){return{iconNames:n.iconNames()}}).Done(function(){t&&t()}).MessageField("Select one or more existing icons to add to this group.").AjaxMultiSelectListField("iconNames","Icons (ctrl+ click or drag for multi select)",function(n){return n.IconName},function(n){return n.IconName},app.route.Group_IconsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateIcon=function(n,t){return new DialogViewModelBuilder(app.route.Group_UploadIcon.For(n),"Create Icon","Create",{file:ko.observable(""),iconName:ko.observable("")}).SubmitData(function(n){return{file:n.file(),iconName:n.iconName()}}).Done(function(){t&&t()}).SingleFileUploadField("file","File").TextField("iconName","Icon Name",50,!1).Create()}}(Form||(Form={})),function(n){n.GroupRemoveIcon=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_RemoveIcon.For(n),"Remove Icon","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{iconName:t,deleteFlag:n.deleteFlag()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove the icon "+t+" from this group? The icon will still exist, it will simply no longer be accessible through this group.").OptionalCheckBoxField("deleteFlag","Permanently delete icon.").Create()}}(Form||(Form={})),function(n){n.GroupAddLegalTerms=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingLegalTerms.For(n),"Add Existing Legal Terms","Add",{legalTermsIds:ko.observableArray()}).SubmitData(function(n){return{legalTermsIds:n.legalTermsIds()}}).Done(function(){t&&t()}).AjaxMultiSelectListField("legalTermsIds","Legal Terms (ctrl+ click or drag for multi select)",function(n){return n.Name},function(n){return n.LegalTermsId},app.route.Group_LegalTermsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateLegalTerms=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateLegalTerms.For(n),"Create Legal Terms","Create",{name:ko.observable(),legalTermsMarkdown:ko.observable()}).SubmitData(function(n){return{name:n.name(),legalTermsMarkdown:n.legalTermsMarkdown()}}).Done(function(n,i){t&&t(i.LegalTermsId)}).TextField("name","Name").MultilineTextField("legalTermsMarkdown","Legal Terms Markdown").Create()}}(Form||(Form={})),function(n){n.GroupRemoveLegalTerms=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveLegalTerms.For(n),"Remove Legal Terms","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{legalTermsId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the legal terms "'+i+'" from this group? The legal terms will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently Delete Legal Terms").Create()}}(Form||(Form={})),function(n){n.GroupAddMessageAccounts=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingMessageAccounts.For(n),"Add Existing Message Accounts","Add",{messageAccountIds:ko.observableArray()}).SubmitData(function(n){return{messageAccountIds:n.messageAccountIds()}}).Done(function(){t&&t()}).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},app.route.Group_MessageAccountsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateMessageAccount=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateMessageAccount.For(n),"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){t&&t(i.MessageAccountId)}).TextField("name","Name",50,!1).AjaxFilterDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},app.route.BillingEntity_AvailableBillingEntities.For(),!1,null,"CompanyName").AjaxFilterDropDownListField("messagePlanId","Message Plan",function(n){return n.Name},function(n){return n.MessagePlanId},app.route.MessagePlan_AvailableMessagePlans.For(),!1,null,"Name").Create()}}(Form||(Form={})),function(n){n.GroupRemoveMessageAccount=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveMessageAccount.For(n),"Remove Message Account","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{messageAccountId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the message account "'+i+'" 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()}}(Form||(Form={})),function(n){n.GroupAddMessagePlans=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingMessagePlans.For(n),"Add Existing Message Plans","Add",{messagePlanIds:ko.observableArray()}).SubmitData(function(n){return{messagePlanIds:n.messagePlanIds()}}).Done(function(){t&&t()}).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},app.route.Group_MessagePlansWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateMessagePlan=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateMessagePlan.For(n),"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){t&&t(i.MessagePlanId)}).TextField("name","Name",50,!1).AjaxCompactFilterDropDownListField("smsProviderId","SMS Provider",function(n){return n.Name},function(n){return n.SmsProviderId},app.route.MessagePlan_AvailableSmsProviders.For(),!1,null,"Name").AjaxCompactFilterDropDownListField("emailProviderId","Email Provider",function(n){return n.Name},function(n){return n.EmailProviderId},app.route.MessagePlan_AvailableEmailProviders.For(),!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()}}(Form||(Form={})),function(n){n.GroupRemoveMessagePlan=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveMessagePlan.For(n),"Remove Message Plan","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{messagePlanId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the message plan "'+i+'" 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()}}(Form||(Form={})),function(n){n.GroupAddModules=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingModules.For(n),"Add Existing Modules","Add",{moduleIds:ko.observableArray()}).SubmitData(function(n){return{moduleIds:n.moduleIds()}}).Done(function(){t&&t()}).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},app.route.Group_ModulesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupAddSelectedModules=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_CopyModuleBulk.For(n),"Add Modules","Add",{targetGroupId:ko.observable(0)}).SubmitData(function(n){return{moduleIds:t,targetGroupId:n.targetGroupId()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to add the following modules to another group? The modules will still exist in this group and will also be accessible in the target group.").AjaxCompactFilterDropDownListField("targetGroupId","Target Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableTargetGroupsForModules.For(n),!1,null,"GroupName").ListField("Modules to add",i,function(n){return n}).Create()}}(Form||(Form={})),function(n){n.GroupMoveSelectedModules=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_MoveModuleBulk.For(n),"Move Modules","Move",{targetGroupId:ko.observable(0)}).SubmitData(function(n){return{moduleIds:t,targetGroupId:n.targetGroupId()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to move the following modules to another group? The modules will no longer be accessible through this group.").AjaxCompactFilterDropDownListField("targetGroupId","Target Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableTargetGroupsForModules.For(n),!1,null,"GroupName").ListField("Modules to move",i,function(n){return n}).Create()}}(Form||(Form={})),function(n){n.GroupRemoveModule=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Group_RemoveModule.For(n),"Remove Module","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{moduleId:t,deleteFlag:n.deleteFlag()}}).Done(function(){u&&u()}).MessageField('Are you sure you want to remove the module "'+r+"/"+i+'" from this group? The module will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently delete module.").Create()}}(Form||(Form={})),function(n){n.GroupRemoveSelectedModules=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveModuleBulk.For(n),"Remove Modules","Remove",{}).SubmitData(function(){return{moduleIds:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the following modules from this group? The modules will still exist, they will simply no longer be accessible through this group.").ListField("Modules to remove",i,function(n){return n}).Create()}}(Form||(Form={})),function(n){n.GroupSelectModuleTypeAlerts=function(n,t,i,r,u){var f={moduleType:ko.observable(t),alertAndStatus:ko.observableArray([]),startLocal:ko.observable(moment(i!=null?moment(i).format("YYYY-MM-DD"):moment().subtract("h",24)).format("YYYY-MM-DD")),endLocal:ko.observable(moment(r!=null?moment(r).format("YYYY-MM-DD"):moment()).format("YYYY-MM-DD"))};return new DialogViewModelBuilder(null,"Select Module Type","Select",f).Submit(function(n){u&&u(n.moduleType(),n.startLocal(),n.endLocal(),n.alertAndStatus())}).Validate(function(n){return n.startLocal()>n.endLocal()?"Start date must be earlier than end date":moment(n.endLocal()).diff(n.startLocal(),"days")>7?(n.startLocal(moment(moment().subtract("d",6)).format("YYYY-MM-DD")),"Start date must be less than 7 days before the end date"):null}).AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n.Type},function(n){return n.Type},app.route.Group_NestedModuleTypes.For(n),!1,{Type:t},"Type").DateField("startLocal","Start").DateField("endLocal","End").AjaxMultiSelectListField("alertAndStatus","Select alerts to show",function(n){return n.Name},function(n){return n.AlertAndStatus},ko.computed(function(){return f.moduleType()!=null?app.route.Group_GetAlertsByModuleType.For(n,{moduleType:f.moduleType}):null}),10,!1).Create()}}(Form||(Form={})),function(n){n.GroupAddNetworks=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingNetworks.For(n),"Add Existing Networks","Add",{networkIds:ko.observableArray()}).SubmitData(function(n){return{networkIds:n.networkIds()}}).Done(function(){t&&t()}).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},app.route.Group_NetworksWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupAddSelectedNetworks=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_CopyNetworkBulk.For(n),"Add Networks","Add",{targetGroupId:ko.observable(0),copyModules:ko.observable(!0)}).SubmitData(function(n){return{networkIds:t,targetGroupId:n.targetGroupId(),copyModules:n.copyModules()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to add the following networks to another group? The networks will still exist in this group and will also be accessible in the target group.").AjaxCompactFilterDropDownListField("targetGroupId","Target Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableTargetGroupsForNetworks.For(n),!1,null,"GroupName").CheckBoxField("copyModules","Add modules with networks").ListField("Networks to add",i,function(n){return n}).Create()}}(Form||(Form={})),function(n){n.GroupCreateNetwork=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_CreateNetwork.For(n),"Create Network","Create",{name:ko.observable(),shortName:ko.observable(),timeZoneName:ko.observable(t)}).SubmitData(function(n){return{name:n.name(),shortName:n.shortName(),timeZoneName:n.timeZoneName()}}).Done(function(n,t){r&&r(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},app.route.Home_TimeZoneNames.For(),!1,{TimeZoneName:t,BaseUtcOffset:i},"TimeZoneName",5,1).Create()}}(Form||(Form={})),function(n){n.GroupMoveSelectedNetworks=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_MoveNetworkBulk.For(n),"Move Networks","Move",{targetGroupId:ko.observable(0),moveModules:ko.observable(!0)}).SubmitData(function(n){return{networkIds:t,targetGroupId:n.targetGroupId(),moveModules:n.moveModules()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to move the following networks to another group? The networks will no longer be accessible through this group.").AjaxCompactFilterDropDownListField("targetGroupId","Target Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableTargetGroupsForNetworks.For(n),!1,null,"GroupName").CheckBoxField("moveModules","Move modules with networks").ListField("Networks to move",i,function(n){return n}).Create()}}(Form||(Form={})),function(n){n.GroupRemoveNetwork=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveNetwork.For(n),"Remove Network","Remove",{removeModules:ko.observable(!0)}).SubmitData(function(n){return{networkId:t,removeModules:n.removeModules()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the network "'+i+'" from this group? The network will still exist, it will simply no longer be accessible through this group.').CheckBoxField("removeModules","Remove network modules").Create()}}(Form||(Form={})),function(n){n.GroupRemoveSelectedNetworks=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveNetworkBulk.For(n),"Remove Networks","Remove",{removeModules:ko.observable(!0)}).SubmitData(function(n){return{networkIds:t,removeModules:n.removeModules()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the following networks from this group? The networks will still exist, they will simply no longer be accessible through this group.").CheckBoxField("removeModules","Remove network modules").ListField("Networks to remove",i,function(n){return n}).Create()}}(Form||(Form={})),function(n){n.GroupCreateNetworkSubscriptionPlan=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateNetworkSubscriptionPlan.For(n),"Create Network Subscription Plan","Create",{name:ko.observable(""),description:ko.observable(""),fee:ko.observable(0),months:ko.observable(0),maxNodes:ko.observable(0)}).SubmitData(function(n){return{name:n.name(),description:n.description(),fee:n.fee(),months:n.months(),maxNodes:n.maxNodes()}}).Done(function(n,i){t&&t(i.NetworkSubscriptionPlanId)}).TextField("name","Plan Name",100,!1,!0,!0).MultilineTextField("description","Description",null,!1).IntNumberField("months","Period (months)",1,null,!1).NumberField("fee","Period Fee",0,null,!1).IntNumberField("maxNodes","Max Nodes").Create()}}(Form||(Form={})),function(n){n.GroupCreateNetworkSubscription=function(n,t){var i={endLocal:ko.observable(""),subscriptionPlanId:ko.observable(0),groupId:ko.observable(0),billingEntityId:ko.observable(0),confirm:ko.observable(!1),periodMonths:ko.observable(0)},r=new DialogViewModelBuilder(ko.computed(function(){return app.route.Group_CreateNetworkSubscription.For(i.groupId)}),"Create Network Subscription","Create",i).SubmitData(function(t){return{networkId:n,endLocal:t.endLocal(),billingEntityId:t.billingEntityId(),subscriptionPlanId:t.subscriptionPlanId()}}).Done(function(n,i){t&&t(i.NetworkSubscriptionId)}).AjaxFilterDropDownListField("groupId","Subscription Group",function(n){return n.Name+" ("+n.GroupId+")"},function(n){return n.GroupId},app.route.Group_AvailableGroups.For(),!1,null,"Name").AjaxFilterDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},app.route.BillingEntity_AvailableBillingEntities.For(),!1,null,"CompanyName").AjaxFilterDropDownListField("subscriptionPlanId","Subscription Plan",function(n){return n.Name+" ("+n.PeriodMonths+" month plan - "+Format.Currency(n.PeriodFee)+" - "+n.MaxNodes+" nodes max)"},function(n){return n.SubscriptionPlanId},app.route.NetworkSubscriptionPlan_AvailableNetworkSubscriptionPlans.For(),!1,null,"Name").DateField("endLocal","Expiry Date").Create(),u=-1;return r.fields().forEach(function(n,t){n.fieldName==="subscriptionPlanId"&&(u=t)}),ko.computed(function(){u>-1&&r.fields()[u].options().forEach(function(n){n.SubscriptionPlanId===i.subscriptionPlanId()&&(i.periodMonths(n.PeriodMonths),i.endLocal(moment().date(1).add("months",n.PeriodMonths+1).subtract("days",1).format("YYYY-MM-DD")))})}),r}}(Form||(Form={})),function(n){n.GroupInvoiceNetworkSubscriptions=function(n,t,i){return new DialogViewModelBuilder(app.route.NetworkSubscription_InvoiceRenewedSubscriptions.For(),"Invoice Renewed Subscriptions","Invoice",{sharedCollectionIds:ko.observableArray()}).SubmitData(function(n){return{sharedCollectionIds:n.sharedCollectionIds()}}).Done(function(){i&&i()}).MessageField("You are about to invoice "+t+" "+(t>1?"renewals":"renewal")).Create()}}(Form||(Form={})),function(n){n.GroupRenewNetworkSubscriptions=function(n,t,i){return new DialogViewModelBuilder(app.route.NetworkSubscription_RenewSubscriptions.For(null,{groupId:n}),"Renew Expired Subscriptions","Renew",{}).SubmitData(function(){return{subscriptionIds:t}}).Done(function(){i&&i()}).MessageField("Renew "+t.length+" subscriptions").Create()}}(Form||(Form={})),function(n){n.GroupAddReportTemplates=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingReportTemplates.For(n),"Add Existing Report Templates","Add",{reportIds:ko.observableArray()}).SubmitData(function(n){return{reportIds:n.reportIds()}}).Done(function(){t&&t()}).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},app.route.Group_ReportTemplatesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateReportTemplate=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateReportTemplate.For(n),"Create Report Template","Create",{name:ko.observable(),json:ko.observable()}).SubmitData(function(n){return{name:n.name(),json:n.json()}}).Done(function(n,i){t&&t(i.ReportTemplateId)}).MessageField("Create a new report template to add to this group.").TextField("name","Report Template Name").MultilineTextField("json","Report Config").Create()}}(Form||(Form={})),function(n){n.GroupRemoveReportTemplate=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveReportTemplate.For(n),"Remove Report Template","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{reportTemplateId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the report template "'+i+'" 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()}}(Form||(Form={})),function(n){n.GroupAddRfidTags=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingRfidTags.For(n),"Add Existing Rfid Tags","Add",{rfidTagIds:ko.observableArray()}).SubmitData(function(n){return{rfidTagIds:n.rfidTagIds()}}).Done(function(){t&&t()}).MessageField("Select one or more existing rfid tags to add to this group.").AjaxMultiSelectListField("rfidTagIds","RfidTags (ctrl-click or drag for multi select)",function(n){return n.Name+": "+n.SectionCode+"/"+n.SerialCode},function(n){return n.RfidTagId},app.route.Group_RfidTagsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateRfidTag=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateRfidTag.For(n),"Create Rfid Tag","Create",{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(n,i){t&&t(i.RfidTagId)}).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()}}(Form||(Form={})),function(n){n.GroupRemoveRfidTag=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveRfidTag.For(n),"Remove RfidTag","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{rfidTagId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the rfid tag "'+i+'" from this group? The rfid tag will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently delete rfid tag.").Create()}}(Form||(Form={})),function(n){n.GroupAddRoles=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingRoles.For(n),"Add Existing Roles","Add",{roleIds:ko.observableArray()}).SubmitData(function(n){return{roleIds:n.roleIds()}}).Done(function(){t&&t()}).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},app.route.Group_RolesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateRole=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateRole.For(n),"Create Role","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t&&t(i.RoleId)}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.GroupRemoveRole=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveRole.For(n),"Remove Role","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{roleId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the role "'+i+'" from this group? The role will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently delete role.").Create()}}(Form||(Form={})),function(n){n.GroupAddSharedCollections=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingSharedCollections.For(n),"Add Existing Shared Collections","Add",{sharedCollectionIds:ko.observableArray()}).SubmitData(function(n){return{sharedCollectionIds:n.sharedCollectionIds()}}).Done(function(){t&&t()}).MessageField("Select one or more existing shared collections to add to this group.").AjaxMultiSelectListField("sharedCollectionIds","Shared collections (ctrl-click or drag for multi select)",function(n){return n.Name},function(n){return n.SharedCollectionId},app.route.Group_SharedCollectionsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateSharedCollection=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateSharedCollection.For(n),"Shared Collection","Create",{name:ko.observable("New Collection"),daysToDisplay:ko.observable(7)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,i){t&&t(i.SharedCollectionId)}).MessageField("Specify a unique name for the new collection.").TextField("name","Name",50).MessageField("Specify the default number of days to display for the new collection").IntNumberField("daysToDisplay","Days to Display",1,365).Create()}}(Form||(Form={})),function(n){n.GroupRemoveSharedCollection=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveSharedCollection.For(n),"Remove Shared Collection","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{sharedCollectionId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the shared collection "'+i+'" from this group? The shared collection will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently delete shared collection.").Create()}}(Form||(Form={})),function(n){n.GroupAddSims=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingSims.For(n),"Add Existing Sims","Add",{simIds:ko.observableArray()}).SubmitData(function(n){return{simIds:n.simIds()}}).Done(function(){t&&t()}).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},app.route.Group_SimsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateSim=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateSim.For(n),"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,i){t&&t(i.SimId)}).TextField("simNumber","Sim Number").TextField("phoneNumber","Phone Number").AjaxFilterDropDownListField("cellularNetworkId","Cellular Network",function(n){return n.Name},function(n){return n.CellularNetworkId},app.route.Group_AvailableCellularNetworks.For(n),!1,null,"Name",5,5).DropDownListField("cancelled","State",function(n){return n.Name},function(n){return n.Value},[{Value:"false",Name:"Active"},{Value:"true",Name:"Cancelled"}]).Create()}}(Form||(Form={})),function(n){n.GroupRemoveSim=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveSim.For(n),"Remove Sim","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{simId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the sim "'+i+'" from this group? The sim will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently delete sim.").Create()}}(Form||(Form={})),function(n){n.GroupAddTags=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingTags.For(n),"Add Existing Tags","Add",{tagIds:ko.observableArray()}).SubmitData(function(n){return{tagIds:n.tagIds()}}).Done(function(){t&&t()}).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},app.route.Group_TagsWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupCreateTag=function(n,t){return new DialogViewModelBuilder(app.route.Group_CreateTag.For(n),"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&&t()}).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()}}(Form||(Form={})),function(n){n.GroupRemoveTag=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveTag.For(n),"Remove Tag","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{tagId:t,deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).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()}}(Form||(Form={})),function(n){n.GroupAddUsers=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingUsers.For(n),"Add Existing Users","Add",{userIds:ko.observableArray()}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){t&&t()}).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},app.route.Group_UsersWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupAssignLegalTerms=function(n,t){return new DialogViewModelBuilder(app.route.Group_AssignLegalTerms.For(n),"Assign Legal Terms","Assign",{legalTermsId:ko.observable()}).SubmitData(function(n){return{legalTermsId:n.legalTermsId()}}).Done(function(){t&&t()}).MessageField("Assign legal terms to all users in this group.").AjaxFilterDropDownListField("legalTermsId","Terms",function(n){return n.Name},function(n){return n.LegalTermsId},app.route.LegalTerms_AvailableLegalTerms.For(),!1,null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.GroupCreateUser=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Group_CreateUser.For(n),"Create User","Create",{name:ko.observable(""),timeZoneName:ko.observable(t),primaryEmailAddress:ko.observable(""),primaryPhoneNumber:ko.observable(""),brandingId:ko.observable(0),legalTermsId:ko.observable(0)}).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){u&&u(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},app.route.Home_TimeZoneNames.For(),!1,{TimeZoneName:t,BaseUtcOffset:i},"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},app.route.Branding_AvailableBrandings.For(),!1,{BrandingId:r},"Name",5,1).AjaxFilterDropDownListField("legalTermsId","Legal Terms",function(n){return n.Name},function(n){return n.LegalTermsId},app.route.LegalTerms_AvailableLegalTerms.For(),!0,null,"Name").Create()}}(Form||(Form={})),function(n){n.GroupGrantRoles=function(n,t){return new DialogViewModelBuilder(app.route.Group_GrantRoles.For(n),"Grant Group Roles","Grant",{roleIds:ko.observableArray(),groupIds:ko.observableArray()}).SubmitData(function(n){return{roleIds:n.roleIds(),groupIds:n.groupIds()}}).Done(function(){t&&t()}).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},app.route.Role_AvailableRoles.For(),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},app.route.Group_AvailableGroups.For(),15,!0).Create()}}(Form||(Form={})),function(n){n.GroupRemoveUser=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveUser.For(n),"Remove User","Remove",{deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{userId:ko.unwrap(t),deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to remove the user "'+ko.unwrap(i)+'" from this group? The user will still exist, it will simply no longer be accessible through this group.').OptionalCheckBoxField("deleteFlag","Permanently delete user.").Create()}}(Form||(Form={})),function(n){n.GroupRevokeRole=function(n,t,i,r,u,f){return new DialogViewModelBuilder(app.route.Group_RevokeRole.For(n),"Revoke Role","Revoke",{}).SubmitData(function(){return{roleId:r,targetGroupId:t}}).Done(function(){f&&f()}).MessageField("Are you sure you want to remove the role "+u+" from this group for the target group "+i+"?").Create()}}(Form||(Form={})),function(n){n.LegalTermsDelete=function(n,t){return new DialogViewModelBuilder(app.route.LegalTerms_Delete.For(n),"Delete Legal Terms","Delete",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.MessageAccountAddManager=function(n,t){return new DialogViewModelBuilder(app.route.MessageAccount_AddManager.For(n),"Assign Manager","Assign & Continue",{userId:ko.observable()}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t&&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},app.route.MessageAccount_AvailableManagerUsers.For(n),!1,null,"Name").CreateMulti()}}(Form||(Form={})),function(n){n.MessageAccountAddNetwork=function(n,t){return new DialogViewModelBuilder(app.route.MessageAccount_AddNetwork.For(n),"Assign Network","Assign & Continue",{networkId:ko.observable()}).SubmitData(function(n){return{networkId:n.networkId()}}).Done(function(){t&&t()}).AjaxFilterDropDownListField("networkId","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.MessageAccount_AvailableNetworks.For(n),!1,null,"Name").CreateMulti()}}(Form||(Form={})),function(n){n.MessageAccountAddNetworksFromGroup=function(n,t){return new DialogViewModelBuilder(app.route.MessageAccount_AddGroupNetworks.For(n),"Assign Networks","Assign",{groupId:ko.observable(),includeNested:ko.observable(!1)}).SubmitData(function(n){return{groupId:n.groupId(),includeNested:n.includeNested()}}).Done(function(){t&&t()}).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},app.route.Group_AvailableGroups.For(),!1,null,"Name").MessageField("Nested networks includes all networks in sub groups of the selected group.").CheckBoxField("includeNested","Include Nested Networks").Create()}}(Form||(Form={})),function(n){n.MessageAccountAddUser=function(n,t){return new DialogViewModelBuilder(app.route.MessageAccount_AddUser.For(n),"Assign User","Assign & Continue",{userId:ko.observable()}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t&&t()}).AjaxFilterDropDownListField("userId","User",function(n){return n.Name},function(n){return n.UserId},app.route.MessageAccount_AvailableUsers.For(n),!1,null,"Name").CreateMulti()}}(Form||(Form={})),function(n){n.MessageAccountAddUserFromGroup=function(n,t){return new DialogViewModelBuilder(app.route.MessageAccount_AddGroupUsers.For(n),"Assign Users","Assign",{groupId:ko.observable(),includeNested:ko.observable(!1)}).SubmitData(function(n){return{groupId:n.groupId(),includeNested:n.includeNested()}}).Done(function(){t&&t()}).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},app.route.Group_AvailableGroups.For(),!1,null,"Name").MessageField("Nested users includes all users in sub groups of the selected group.").CheckBoxField("includeNested","Include Nested Users").Create()}}(Form||(Form={})),function(n){n.MessageAccountChangePlan=function(n,t,i){return new DialogViewModelBuilder(app.route.MessageAccount_ChangePlan.For(n),"Change Message Plan","Update",{messagePlanId:ko.observable(t)}).SubmitData(function(n){return{messagePlanId:n.messagePlanId()}}).Done(function(n,t){i&&i(t.MessageAccountId)}).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},app.route.MessageAccount_AvailableMessagePlansForAccount.For(n),!1,null,"Name").Create()}}(Form||(Form={})),function(n){n.MessageAccountDateRangeFilter=function(n,t,i){return new DialogViewModelBuilder(null,"Set Result Limit","Set",{startDate:ko.observable((n!=null?moment(n):moment().add("days",-7)).format("YYYY-MM-DD")),endDate:ko.observable((t!=null?moment(t):moment()).format("YYYY-MM-DD"))}).Submit(function(n){i&&i(n.startDate(),n.endDate())}).DateField("startDate","Start").DateField("endDate","End").Create()}}(Form||(Form={})),function(n){n.MessageAccountMessageDetails=function(n,t,i,r,u,f,e,o){return new DialogViewModelBuilder(null,"Message Details","Close",{}).Submit(function(){o&&o()}).DisplayFieldWithHeading("Recipient","Recipient",n).DisplayFieldWithHeading("TimeUtc","Time",Format.DateTimeFromCs(t)).DisplayFieldWithHeading("SentUtc","Status",i?"Successfully sent":r?"Failed":"In progress").DisplayFieldWithHeading("SentTo",u?"Phone Number":"Email Address",u?Format.PhoneNumber(f):f).HtmlField(u?'<pre style="white-space: pre-wrap;">'+e+"<\/pre>":e).Create()}}(Form||(Form={})),function(n){n.MessageAccountRemoveManager=function(n,t,i,r){return new DialogViewModelBuilder(app.route.MessageAccount_RemoveManager.For(n),"Remove Manager","Remove",{}).SubmitData(function(){return{userId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the manager "+i+" from this account?").Create()}}(Form||(Form={})),function(n){n.MessageAccountRemoveNetwork=function(n,t,i,r){return new DialogViewModelBuilder(app.route.MessageAccount_RemoveNetwork.For(n),"Remove Network","Remove",{}).SubmitData(function(){return{networkId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the network "+i+" from this account?").Create()}}(Form||(Form={})),function(n){n.MessageAccountRemoveUser=function(n,t,i,r){return new DialogViewModelBuilder(app.route.MessageAccount_RemoveUser.For(n),"Remove User","Remove",{}).SubmitData(function(){return{userId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the user "+i+" from this account?").Create()}}(Form||(Form={})),function(n){n.MessageAccountResultLimitFilter=function(n,t){return new DialogViewModelBuilder(null,"Set Result Limit","Set",{resultLimit:ko.observable(n)}).Submit(function(n){t&&t(n.resultLimit())}).NumberField("resultLimit","Set Limit (between 10 and 10000)",10,1e4).Create()}}(Form||(Form={})),function(n){n.MessageAccountUpdate=function(n,t,i){return new DialogViewModelBuilder(app.route.MessageAccount_Update.For(n),"Rename Message Account","Rename",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).TextField("name","Account Name",50).Create()}}(Form||(Form={})),function(n){n.MessagePlanDelete=function(n,t){return new DialogViewModelBuilder(app.route.MessagePlan_Delete.For(n),"Delete Message Plan","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.MessagePlanEdit=function(n,t){return new DialogViewModelBuilder(app.route.MessagePlan_Edit.For(n.MessagePlanId),"Update Message Plan","Update",{name:ko.observable(n.Name),smsProviderId:ko.observable(n.SmsProviderId),emailProviderId:ko.observable(n.EmailProviderId),periodMonths:ko.observable(n.PeriodMonths)}).SubmitData(function(n){return{name:n.name(),smsProviderId:n.smsProviderId(),emailProviderId:n.emailProviderId(),periodMonths:n.periodMonths()}}).Done(function(){t&&t()}).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},app.route.MessagePlan_AvailableSmsProviders.For(),!1,{SmsProviderId:n.SmsProviderId}).AjaxDropDownListField("emailProviderId","Email Provider",function(n){return n.Name},function(n){return n.EmailProviderId},app.route.MessagePlan_AvailableEmailProviders.For(),!1,{EmailProviderId:n.EmailProviderId}).Create()}}(Form||(Form={})),function(n){n.MessagePlanEditEmailQuota=function(n,t){return new DialogViewModelBuilder(app.route.MessagePlan_EditEmailQuota.For(n.MessagePlanId),"Update Email Quota","Update",{periodEmailQuota:ko.observable(n.PeriodEmailQuota),enforceEmailQuota:ko.observable(n.EnforceEmailQuota?"true":"false"),notifyEmailExceeded:ko.observable(n.NotifyOnEmailExceeded?"true":"false")}).SubmitData(function(n){return{periodQuota:n.periodEmailQuota(),enforceQuota:n.enforceEmailQuota(),notifyExceeded:n.notifyEmailExceeded()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.MessagePlanEditSmsQuota=function(n,t){return new DialogViewModelBuilder(app.route.MessagePlan_EditSmsQuota.For(n.MessagePlanId),"Update SMS Quota","Update",{periodSmsQuota:ko.observable(n.PeriodSmsQuota),enforceSmsQuota:ko.observable(n.EnforceSmsQuota?"true":"false"),notifySmsExceeded:ko.observable(n.NotifyOnSmsExceeded?"true":"false")}).SubmitData(function(n){return{periodQuota:n.periodSmsQuota(),enforceQuota:n.enforceSmsQuota(),notifyExceeded:n.notifySmsExceeded()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ModuleAddAttribute=function(n,t){return new DialogViewModelBuilder(app.route.Module_AddAttribute.For(n),"Add Attribute","Add",{key:ko.observable(""),value:ko.observable("")}).SubmitData(function(n){return{key:n.key(),value:n.value()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ModuleAddRfidTagGroups=function(n,t){return new DialogViewModelBuilder(app.route.Module_AddRfidTagGroups.For(n),"Add Rfid Tag Groups","Add",{groupIds:ko.observableArray()}).SubmitData(function(n){return{groupIds:n.groupIds()}}).Done(function(){t&&t()}).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},app.route.Module_AvailableRfidTagGroups.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.ModuleAddToExistingDashboardGroups=function(n,t){return new DialogViewModelBuilder(app.route.Module_AddToDashboardGroups.For(n),"Add to Existing Dashboard Sections","Add",{dashboardGroupIds:ko.observableArray()}).SubmitData(function(n){return{dashboardGroupIds:n.dashboardGroupIds()}}).Done(function(){t&&t()}).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},app.route.Module_AvailableDashboardGroups.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.ModuleApplyCalibration=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Module_ApplyCalibration.For(n),"Apply Calibration","Apply",{}).SubmitData(function(){return{slope:t,intercept:i,temperatureOffset:r}}).Done(function(){u&&u()}).MessageField("Applying the calibration will update the slope to "+Format.ToFixed(t,3)+" L/mm and the intercept to "+Format.ToFixed(i,0)+" L with a temperature offset of "+Format.ToFixed(r,1)+" °C").Create()}}(Form||(Form={})),function(n){n.ModuleAttachTag=function(n,t){return new DialogViewModelBuilder(app.route.Module_AttachTag.For(n),"Attach Tags to Module","Attach",{tagId:ko.observable(0),tagValue:ko.observable("")}).SubmitData(function(n){return{tagId:n.tagId(),tagValue:n.tagValue()}}).Done(function(){t&&t()}).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},app.route.Tag_ModuleTagsWhichCanBeAdded.For(null,{moduleId:n}),!1,null,"Name").TextField("tagValue","Value").Create()}}(Form||(Form={})),function(n){n.ModuleClearAutoSmsUser=function(n,t){return new DialogViewModelBuilder(app.route.Module_ClearAutoSmsUser.For(n),"Clear Auto SMS User","Clear",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ModuleClearCalibration=function(n,t){return new DialogViewModelBuilder(app.route.Module_ClearCalibration.For(n),"Clear calibration","Clear",{startLocal:ko.observable(moment().format("YYYY-MM-DDTHH:mm"))}).SubmitData(function(n){return{startUtc:moment(n.startLocal()).utc().toISOString()}}).Done(function(){t&&t()}).MessageField("No collections prior to the start time will be included in the calibration.").DateTimeField("startLocal","Start Time").Create()}}(Form||(Form={})),function(n){n.ModuleClearOutlierStatus=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_ClearOutlierStatus.For(n),"Clear outliser status","Clear",{}).SubmitData(function(){return{collectionTimeUtc:t}}).Done(function(){i&&i()}).MessageField("You are about to clear the outlier status for this collection").Create()}}(Form||(Form={})),function(n){n.ModuleClearSuppressedAlerts=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_ClearSuppressAlerts.For(n),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to clear the suppressed alerts for the module "+t+"?").Create()}}(Form||(Form={})),function(n){function t(n,t){for(var i,r,u={},f=new DialogViewModelBuilder(app.route.Module_Command.For(n.ModuleId,{command:n.Command}),n.Description(),"Send Command",u).MessageField("Are you sure you want to send the "+ko.unwrap(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.").SubmitData(function(n){return n}).Done(function(){return t&&t()}),o=ko.unwrap(n.Parameters),e=0;e<o.length;++e){i=o[e];r="Parameter$"+ko.unwrap(i.Name);switch(ko.unwrap(i.Type)){case"Seconds":u[r]=ko.unwrap(i.DefaultValue);f.TimeSpanField(r,ko.unwrap(i.Name),!1);break;case"Boolean":u[r]=ko.unwrap(i.DefaultValue);f.DropDownListField(r,ko.unwrap(i.Name),function(n){return n},function(n){return n},[ko.unwrap(i.Values)[0],ko.unwrap(i.Values)[1]]);break;case"Percent":u[r]=ko.unwrap(i.DefaultValue);f.NumberField(r,ko.unwrap(i.Name),0,100,!1);break;case"Permille":u[r]=ko.unwrap(i.DefaultValue);f.NumberField(r,ko.unwrap(i.Name),0,100,!1);break;case"Number":u[r]=ko.unwrap(i.DefaultValue);f.NumberField(r,ko.unwrap(i.Name),ko.unwrap(i.Values)[0],ko.unwrap(i.Values)[1],!1)}}return f.Create()}n.ModuleCommand=t}(Form||(Form={})),function(n){var i=function(n,t,i,r){for(var e,o=function(i){var u=ko.unwrap(i.Description),f="Config$"+ko.unwrap(u.Name),h,c;if(n[f]=ko.observable(ko.unwrap(i.CurrentValue)),ko.unwrap(u.IsChild))return"continue";if("TimeControl"===ko.unwrap(u.Type)){t.SectionField("Clock");t.MessageField("Select the clock period, clock start delay, and runtime on period");var e="Config$"+ko.unwrap(u.ClockStart.Name),o="Config$"+ko.unwrap(u.ClockPeriod.Name),s="Config$"+ko.unwrap(u.OnPeriod.Name);t.TimeClockField(n[e],n[o],n[s]);t.TimeSpanSecondsField(o,ko.unwrap(u.ClockPeriod.Name),!1,null);t.TimeSpanSecondsField(e,ko.unwrap(u.ClockStart.Name),!1,null);t.TimeSpanSecondsField(s,ko.unwrap(u.OnPeriod.Name),!1,null)}else t.SectionField(ko.unwrap(u.Name)),t.MessageField(ko.unwrap(u.Description)),"Boolean"===ko.unwrap(u.Type)?t.DropDownListField(f,null,function(n){return n},function(n){return n},[ko.unwrap(u.TrueValue),ko.unwrap(u.FalseValue)]):"Number"===ko.unwrap(u.Type)?t.NumberField(f,"Units: "+Format.Units(ko.unwrap(u.Units),!1),ko.unwrap(u.Minimum),ko.unwrap(u.Maximum),!1):"NodeAddress"===ko.unwrap(u.Type)?r==null?t.NumberField(f,"Network Node",ko.unwrap(u.Minimum),ko.unwrap(u.Maximum),!1):t.AjaxCompactFilterDropDownListField(f,"Network Node",function(n){return Format.NodeAddress(n.NodeAddress)+" "+n.Name},function(n){return n.NodeAddress},app.route.Module_GetSiblingNetworkNodes.For(r),!1,{Name:"",NodeAddress:Number(ko.unwrap(n[f]))},"Name",1,1):"ModuleIndex"===ko.unwrap(u.Type)?r==null?t.NumberField(f,"Module",ko.unwrap(u.Minimum),ko.unwrap(u.Maximum),!1):(h=ko.unwrap(u.Node),c=ko.computed(function(){var t=ko.unwrap(n["Config$"+h]);return t===undefined?null:app.route.Module_GetNodeModuleNameIndexes.For(r,{nodeAddress:t})}),t.AjaxCompactFilterDropDownListField(f,"Module",function(n){return"("+Format.NodeAddress(n.NodeAddress)+"."+Format.Pad(n.ModuleIndex,3)+") "+n.Name},function(n){return n.ModuleIndex},c,!1,{Name:"",ModuleIndex:Number(ko.unwrap(n[f]))},"Name",1,1)):"Milliseconds"===ko.unwrap(u.Type)?t.TimeSpanField(f,ko.unwrap(u.Name),!1):"Seconds"===ko.unwrap(u.Type)?"Log Interval"===ko.unwrap(u.Name)?t.TimeSpanSecondsField(f,ko.unwrap(u.Name),!1,["00:05:00","00:15:00","01:00:00"]):t.TimeSpanSecondsField(f,ko.unwrap(u.Name),!1,null):"BitMask"===ko.unwrap(u.Type)&&t.MultilineTextField(f,ko.unwrap(u.Name),null,!1)},u=0,f=i;u<f.length;u++)e=f[u],o(e)},t=function(n,t,r,u,f,e,o,s){var h=new DialogViewModelBuilder(u,f,e,n).SubmitData(function(n){return ko.toJS(n)}).Done(s);return o(h),i(n,h,r,t),h.Create()};n.ModuleConfigure=function(n,i,r,u){return t({},n,i,r,"Configuration","Save",function(n){n.MessageField("Please provide a reason for making this configuration change");n.MultilineTextField("reason","Reason",null,!1,null)},u)};n.ModuleConfigureTemplate=function(n,i,r,u,f,e){return t(n,null,i,r,u,f,function(n){return n.MessageField("Please provide the values for this config template")},e)};n.ModuleConfigureBulk=function(n,i,r,u){return t(n,null,i,r,"Configuration","Save",function(n){n.MessageField("Please provide a reason for making this bulk configuration change");n.MultilineTextField("reason","Reason",null,!1,null)},u)}}(Form||(Form={})),function(n){n.ModuleConfigureAutoSms=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_SetAlertAutoSms.For(n),"Set Alert Auto SMS","Update",{alertAndStatus:ko.observable(t),autoSms:ko.observable(i)}).SubmitData(function(n){return{alertAndStatus:n.alertAndStatus(),autoSms:n.autoSms()}}).Done(function(){r&&r()}).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()}}(Form||(Form={})),function(n){n.ModuleConfigureExport=function(n,t,i,r,u,f,e,o){return new DialogViewModelBuilder(app.route.Module_ConfigureModuleExportTarget.For(n,{moduleExportTargetId:t}),"Configure Module Export Target","Update",{exportTargetId:ko.observable(r),identifier:ko.observable(u),trend:ko.observable(f),scale:ko.observable(e)}).SubmitData(function(n){return{exportTargetId:n.exportTargetId(),identifier:n.identifier(),trend:n.trend(),scale:n.scale()}}).Done(function(){o&&o()}).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},app.route.Module_GetExportTargets.For(n),!1,{Name:i,ExportTargetId:r},"Name",5,5).MessageField("Specify the trend for this export.").AjaxDropDownListField("trend","Trend",function(n){return n.Name},function(n){return n.Name},app.route.Module_GetExportableTrends.For(n),!1,{Name:f}).MessageField("Specify the scale for this export.").NumberField("scale","Scale").Create()}}(Form||(Form={})),function(n){n.ModuleCreateConfigTemplate=function(t,i,r,u){return new DialogViewModelBuilder(null,"Create Config Template","Next",{groupId:ko.observable(0),templateName:ko.observable(""),templateDescription:ko.observable("")}).Submit(function(i){n.ViewPostRequest(t,{route:app.route.Module_GetModuleTypeConfigItems.For(null,{selectedModuleType:r}),onSuccess:function(f){if(f.Success===!1){t.SetMessage(f.Message);return}t.FormAction(function(){return n.ModuleConfigureTemplate(i,f,app.route.Group_CreateModuleConfigTemplate.For(i.groupId(),{selectedModuleType:r}),"Config Template","Save",u)})()}})}).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},app.route.Module_GroupsToContainModuleConfigTemplate.For(i),!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()}}(Form||(Form={})),function(n){n.ModuleCreateCumulativeMeter=function(n,t){return new DialogViewModelBuilder(app.route.Module_CreateCumulativeMeter.For(n),"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,i){t&&t(i.CumulativeMeterId)}).MessageField("Configure the new cumulative meter.").TextField("name","Name").AjaxDropDownListField("valueIndex","Trend",function(n){return n.Name},function(n){return n.ValueIndex},app.route.Module_GetCumulativeTrends.For(n),!1).DateTimeField("startLocal","Start").NumberField("initialTotal","Initial Total").Create()}}(Form||(Form={})),function(n){n.ModuleCreateDataStream=function(n,t){return new DialogViewModelBuilder(app.route.Module_CreateDataStream.For(n),"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(){t&&t()}).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},app.route.Module_GroupsToContainDataStream.For(n),!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},app.route.Module_GetExportableTrends.For(n),!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()}}(Form||(Form={})),function(n){n.ModuleCreateExport=function(n,t){return new DialogViewModelBuilder(app.route.Module_CreateModuleExportTarget.For(n),"Create Export","Create",{exportTargetId:ko.observable(),trend:ko.observable(),identifier:ko.observable(),scale:ko.observable(1),startExportLocal: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:moment(n.startExportLocal()).utc().toISOString()}}).Done(function(){t&&t()}).MessageField("Select the export target.").AjaxFilterDropDownListField("exportTargetId","Export Target",function(n){return n.Name},function(n){return n.ExportTargetId},app.route.Module_GetExportTargets.For(n),!1,null,"Name",5,5).MessageField("Select the trend to export.").AjaxFilterDropDownListField("trend","Trend",function(n){return n.Name},function(n){return n.Name},app.route.Module_GetExportableTrends.For(n),!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("startExportLocal","Export Start Date").Create()}}(Form||(Form={})),function(n){n.ModuleCreateNote=function(n,t){return new DialogViewModelBuilder(app.route.Module_CreateNote.For(n),"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&&t()}).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},app.route.Group_GroupsToContainNote.For(),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.ModuleDelete=function(n,t){return new DialogViewModelBuilder(app.route.Module_Delete.For(n),"Delete Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ModuleDeleteExport=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_DeleteModuleExportTarget.For(n,{moduleExportTargetId:t}),"Delete Module Export Target","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to delete this module export?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()}}(Form||(Form={})),function(n){n.ModuleDownloadDailyTotals=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_DownloadDailyTotals.For(n),"Download Daily Totals","Download",{properties:ko.observableArray(t),startDate:ko.observable(moment().add("months",-1).format("YYYY-MM-DD")),endDate:ko.observable(moment().format("YYYY-MM-DD"))}).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."}).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(){i&&i()}).MessageField("Select one or more properties to include in the download.").CheckBoxListField("properties","Properties",t,function(n){return n},function(n){return n}).DateField("startDate","Start Date").DateField("endDate","End Date").CreateDownload()}}(Form||(Form={})),function(n){n.ModuleDownloadEvents=function(n,t){var i={alertIds:ko.observableArray(),startLocal:ko.observable(moment().subtract("month",1).format("YYYY-MM-DD")),endLocal:ko.observable(moment().format("YYYY-MM-DD")),selectAll:ko.observable(!1)};return ko.computed(function(){i.selectAll();$(".check-box").each(function(n,t){var i=$(t);i.prop("name")!=="selectAll"&&i.prop("checked")!==$("#selectAll").prop("checked")&&i.click()})}),new DialogViewModelBuilder(app.route.Module_DownloadEventsData.For(n),"Download Data","Download",i).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."}).SubmitData(function(n){return{alertIds:n.alertIds(),startLocal:n.startLocal(),endLocal:n.endLocal()}}).Done(function(){t&&t()}).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},app.route.Module_GetAlerts.For(n)).MessageField("Select the date range for the events you want to include in the download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()}}(Form||(Form={})),function(n){n.ModuleDownloadRawData=function(n,t,i){var r={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(){r.selectAll();$(".check-box").each(function(n,t){var i=$(t);i.prop("name")!=="selectAll"&&i.prop("checked")!==$("#selectAll").prop("checked")&&i.click()})}),new DialogViewModelBuilder(app.route.Module_DownloadRawData.For(n),"Download Raw Data","Download",r).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."}).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(){i&&i()}).MessageField("Select one or more properties to include in the download.").CheckBoxField("selectAll","Select All").CheckBoxListField("properties","Properties",t,function(n){return n},function(n){return n}).DateField("startDate","Start Date").DateField("endDate","End Date").CreateDownload()}}(Form||(Form={})),function(n){n.ModuleEditAttribute=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_UpdateAttribute.For(n),"Edit Attribute","Update",{value:ko.observable(i)}).SubmitData(function(n){return{key:t,value:n.value()}}).Done(function(n,t){r&&r(t.Value)}).MessageField("Specify the new value for the attribute "+t+".").TextField("value","Value").Create()}}(Form||(Form={})),function(n){n.ModuleEditTag=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_UpdateTag.For(n),"Update Tag Value","Update",{tagValue:ko.observable(i)}).SubmitData(function(n){return{tagId:t,tagValue:n.tagValue()}}).Done(function(){r&&r()}).TextField("tagValue","Value").Create()}}(Form||(Form={})),function(n){n.ModuleEventDetails=function(t,i,r,u,f,e,o,s,h){var c=ko.observable(!0),l=ko.observable(!1),v,a=function(n,t){return ko.computed(function(){return c()?n+": Loading...":l()?n+": Failed to load":n+": "+t()})};return n.ViewPostRequest(t,{route:app.route.Module_EventDetails.For(i),data:{moduleEventId:r},onSuccess:function(n){r=n.ModuleEventId;u=n.TimeUtc;f=n.Details;e=n.EscalationComplete;o=n.AcknowledgeUtc;s=n.AcknowledgeUser;v=n.Messages;l(!1);c(!1)},onError:function(){l(!0);c(!1)}}),new DialogViewModelBuilder(null,"Event Details","Close",{}).SubmitData(function(){return{}}).Done(function(){h&&h()}).MessageField(a("Details",function(){return f})).MessageField(a("Time",function(){return Format.DateTime(moment.utc(u))})).MessageField(a("Escalation",function(){return e?"Complete":"In Progress"})).MessageField(a("Acknowledgement",function(){return o?Format.DateTime(moment.utc(o))+" "+s:"Not Acknowledged"})).ListField("Messages",ko.computed(function(){return c()?["Loading..."]:l()?["Failed to load"]:v}),function(n){if(typeof n=="string")return n;var t=n;return Format.DateTime(moment.utc(t.TimeUtc))+(t.Sms?" Sms":"")+(t.Email?" Email":"")+" "+t.User+" "+t.Content}).Create()}}(Form||(Form={})),function(n){n.ModuleLockCalibration=function(n,t){return new DialogViewModelBuilder(app.route.Module_LockCalibration.For(n),"Lock Current Calibration","Lock",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Please confirm this action").CheckBoxField("confirm","Lock current calibration").Create()}}(Form||(Form={})),function(n){n.ModuleMove=function(n,t){var i={networkId:ko.observable(),nodeAddress:ko.observable(),moduleIndex:ko.observable()};return new DialogViewModelBuilder(app.route.Module_MoveModule.For(n),"Move Module","Move",i).SubmitData(function(n){return{networkId:n.networkId(),nodeAddress:n.nodeAddress(),moduleIndex:n.moduleIndex()}}).Done(function(){t&&t()}).AjaxCompactFilterDropDownListField("networkId","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.Network_GetUserNetworks.For(),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("nodeAddress","Node",function(n){return Format.NodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n.NodeAddress},ko.computed(function(){return i.networkId()?app.route.Network_GetUserNetworkNodes.For(i.networkId):null}),!1,null,"Name",3,1).IntNumberField("moduleIndex","Module Index",0,255).Create()}}(Form||(Form={})),function(n){n.ModulePreviewExport=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_PreviewModuleExportTarget.For(n,{moduleExportTargetId:t}),"Preview Module Export Target","Download",{startDate:ko.observable(moment().add("months",-1).format("YYYY-MM-DD"))}).Validate(function(n){var t=moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]);return t.isValid()?null:"Start date is invalid."}).SubmitData(function(n){return{startDateUtc:moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("seconds",1).utc().toISOString()}}).Done(function(){i&&i()}).MessageField("Select the start date for the data to include in the preview.").DateField("startDate","Start Date").CreateDownload()}}(Form||(Form={})),function(n){n.ModuleQuickToggle=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Module_QuickToggle.For(n),r,"Confirm",{}).SubmitData(function(){return{name:t,value:i}}).Done(function(){u&&u()}).MessageField("Are you sure?").Create()}}(Form||(Form={})),function(n){n.ModuleRemoveAttributes=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_RemoveAttributes.For(n),"Remove Attributes","Remove",{keys:ko.observableArray()}).SubmitData(function(n){return{keys:n.keys()}}).Done(function(){i&&i()}).MessageField("Select one or more attributes to remove.").CheckBoxListField("keys","Keys",t,function(n){return n.Key()+": "+n.Value()},function(n){return n.Key()}).Create()}}(Form||(Form={})),function(n){n.ModuleRemoveFromDashboardGroup=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_RemoveFromDashboardGroup.For(n),"Remove From Section","Remove",{}).SubmitData(function(){return{dashboardGroupId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove this module from the section "+i+"?").Create()}}(Form||(Form={})),function(n){n.ModuleRemoveRfidTagGroup=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_RemoveRfidTagGroup.For(n),"Remove Rfid Tag Group","Remove",{groupId:t}).SubmitData(function(n){return{groupId:n.groupId}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the RFID tag group "+i+" from this module?").Create()}}(Form||(Form={})),function(n){n.ModuleRemoveTag=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Module_RemoveTag.For(n),"Remove tag from Module","Remove",{confirm:ko.observable(!1)}).SubmitData(function(n){return{tagId:i,confirm:n.confirm()}}).Done(function(){u&&u()}).MessageField("Are you sure you want to remove the tag "+r+" from module "+t+"? ").CheckBoxField("confirm","Confirm").Create()}}(Form||(Form={})),function(n){n.ModuleRename=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_Rename.For(n),"Rename Module","Rename",{name:ko.observable(t),shortName:ko.observable(i)}).SubmitData(function(n){return{name:n.name(),shortName:n.shortName()}}).Done(function(n,t){r&&r(t.Name,t.ShortName)}).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()}}(Form||(Form={})),function(n){n.ModuleRollbackConfigHistory=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_RollbackConfigHistory.For(),"Rollback Changes","Rollback",{confirm:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(i){return{groupId:n,moduleConfigHistoryId:t,confirm:i.confirm(),reason:i.reason()}}).Done(function(n,t){r&&r(t.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").SectionField("There will be "+i+" modules affected by this rollback").CheckBoxField("confirm","I confirm that I want to rollback this config update").Create()}}(Form||(Form={})),function(n){n.ModuleScaleData=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_ScaleData.For(n),"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(){i&&i()}).SectionField("Trend").MessageField("Select a trend to scale").DropDownListField("trend","Trend",function(n){return n},function(n){return n},t).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()}}(Form||(Form={})),function(n){n.ModuleSendTestAlert=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_SendTestAlerts.For(n),t,"Send",{alertAndStatus:ko.observable(i)}).SubmitData(function(n){return{alertAndStatus:n.alertAndStatus()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to send test alerts for this module?").Create()}}(Form||(Form={})),function(n){n.ModuleSetAlertEscalationList=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Module_SetAlertEscalationList.For(n),"Set Alert Escalation","Update",{escalationListId:ko.observable(i)}).SubmitData(function(n){return{alertAndStatus:t,escalationListId:n.escalationListId()}}).Done(function(){u&&u()}).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},app.route.Group_GetAvailableEscalationLists.For(),!0,{EscalationListId:i,Name:r},"Name",10,10).Create()}}(Form||(Form={})),function(n){n.ModuleSetAlertSubscription=function(n,t,i,r,u,f){return new DialogViewModelBuilder(app.route.Module_SetAlertSubscription.For(n),"Set Alert Subscription","Update",{alertAndStatus:ko.observable(t),sendSms:ko.observable(r),sendEmail:ko.observable(u)}).SubmitData(function(n){return{alertAndStatus:n.alertAndStatus(),sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){f&&f()}).MessageField("Edit your personal subscription to the alert "+i+".").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()}}(Form||(Form={})),function(n){n.ModuleSetCollectionOutlier=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_SetCollectionOutlier.For(n),"Set Outlier Status","Set as "+(t?"outliers":"not outliers"),{}).SubmitData(function(){return{collections:i,isOutlier:t}}).Done(function(){r&&r()}).MessageField("About to set "+i.length+(i.length>1?" collections":" collection")+" as "+(t?"outliers":"not outliers")).Create()}}(Form||(Form={})),function(n){n.ModuleSetDateFilter=function(n,t,i){return new DialogViewModelBuilder(null,"Set Date Range","Set",{startLocal:ko.observable(moment.utc(n).local().format("YYYY-MM-DDTHH:mm:ss")),endLocal:ko.observable(moment.utc(t).local().format("YYYY-MM-DDTHH:mm:ss"))}).Validate(function(n){return n.startLocal()>n.endLocal()?"Start date must be earlier than end date":null}).Submit(function(n){i&&i(moment(n.startLocal(),["YYYY-MM-DDTHH:mm:ss","DD-MM-YYYYTHH:mm:ss"]).utc().toISOString(),moment(n.endLocal(),["YYYY-MM-DDTHH:mm:ss","DD-MM-YYYYTHH:mm:ss"]).utc().toISOString())}).DateTimeField("startLocal","Start").DateTimeField("endLocal","End").Create()}}(Form||(Form={})),function(n){n.ModuleSetEventDateFilter=function(n,t,i){return new DialogViewModelBuilder(null,"Set Event Date Range","Set",{startDate:ko.observable((n!=null?moment(n):moment().add("days",-7)).format("YYYY-MM-DD")),endDate:ko.observable((t!=null?moment(t):moment()).format("YYYY-MM-DD"))}).Submit(function(n){i&&i(moment(n.startDate(),["YYYY-MM-DD","DD-MM-YYYY"]).utc().toISOString(),moment(n.endDate(),["YYYY-MM-DD","DD-MM-YYYY"]).add("days",1).subtract("seconds",1).utc().toISOString())}).DateField("startDate","Start").DateField("endDate","End").Create()}}(Form||(Form={})),function(n){n.ModuleSetEventLimit=function(n,t){return new DialogViewModelBuilder(null,"Set Event Limit","Set",{limit:ko.observable(n)}).Submit(function(n){t&&t(n.limit())}).NumberField("limit","Set Limit (between 10 and 1000)",10,1e3).Create()}}(Form||(Form={})),function(n){n.ModuleSetIcon=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_SetModuleIcon.For(n),"Set Module Icon","Update",{iconName:ko.observable(t)}).SubmitData(function(n){return{iconName:n.iconName()}}).Done(function(){i&&i()}).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},app.route.Module_AvailableIconNames.For(),!1,t,null,5,5).Create()}}(Form||(Form={})),function(n){n.ModuleSetIndex=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_SetModuleIndex.For(n),"Set Module Index","Update",{moduleIndex:ko.observable(t)}).SubmitData(function(n){return{moduleIndex:n.moduleIndex()}}).Done(function(){i&&i()}).MessageField("Change the index for this module.").IntNumberField("moduleIndex","Module Index",0,255).Create()}}(Form||(Form={})),function(n){n.ModuleSetLocation=function(n,t,i,r,u,f){var e={latitude:ko.observable(i),longitude:ko.observable(r),distance:ko.observable("0.00m"),locationMessage:ko.observable("")},s=new DialogViewModelBuilder(app.route.Module_SetLocation.For(t),"Set Module Location","Update",e).SubmitData(function(n){return{latitude:n.latitude(),longitude:n.longitude()}}).Done(function(n){f&&f(Number(n.latitude()),Number(n.longitude()))}),o;return s.MapField(n,e,GMap.Icons.moduleGreen,u),o=s.dialogModel.fields()[0],s.DisplayFieldWithHeading("distance","Distance",e.distance).NumberField("latitude","Latitude (decimal degrees)",-90,90).NumberField("longitude","Longitude (decimal degrees)",-180,180).MessageField(e.locationMessage),ko.computed(function(){(e.latitude(),e.longitude(),o.dragging())||o.mapMarker!=null&&(o.mapMarker.setPosition(new google.maps.LatLng(e.latitude(),e.longitude())),e.distance(o.DistanceBetweenMarkerAndOriginal()))}).extend({throttle:250}),s.Create()}}(Form||(Form={})),function(n){n.ModuleSetType=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_SetModuleType.For(n),"Set Module Type","Update",{moduleType:ko.observable(t),confirm:ko.observable(!1)}).SubmitData(function(n){return{moduleType:n.moduleType(),confirm:n.confirm()}}).Done(function(n,t){i&&i(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},app.route.Module_AvailableModuleTypes.For(),!1,t,null,5,1).Create()}}(Form||(Form={})),function(n){n.ModuleSetVirtualStatus=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_SetVirtualStatus.For(n),"Update Virtual Status","Update",{}).SubmitData(function(){return{isVirtual:!t}}).Done(function(){i&&i()}).MessageField("Set as "+(t?"not virtual":"virtual module")).Create()}}(Form||(Form={})),function(n){n.ModuleSuppressAlerts=function(n,t){return new DialogViewModelBuilder(app.route.Module_SuppressAlerts.For(n),"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(){t&&t()}).MessageField("Are you sure you want to suppress alerts for this module?").DateTimeField("suppressUntil","Suppress Until").Create()}}(Form||(Form={})),function(n){n.ModuleUnlockCalibration=function(n,t){return new DialogViewModelBuilder(app.route.Module_UnlockCalibration.For(n),"Unlock Current Calibration","Unlock",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Please confirm this action").CheckBoxField("confirm","Unlock current calibration").Create()}}(Form||(Form={})),function(n){n.ModuleUpdateConfig=function(n,t){return new DialogViewModelBuilder(app.route.Module_ConfigUpdate.For(n),"Force Configuration Update","Update",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to force a configuration update for this module?").Create()}}(Form||(Form={})),function(n){n.ModuleViewConfig=function(n){for(var t=new DialogViewModelBuilder(undefined,"Configuration","Close",null),r=0,e=n;r<e.length;r++){var o=e[r],i=o.Description,u=o.CurrentValue,f=ko.unwrap(i.Type);"TimeControl"!==f&&(t.SectionField(i.Name),t.MessageField(i.Description),"Number"===f?t.MessageField(ko.unwrap(u)+Format.Units(i.Units,!1)):"NodeAddress"===f?t.MessageField(Format.NodeAddress(Number(u))):t.MessageField(u))}return t.Create()}}(Form||(Form={})),function(n){n.ModuleAlertAddUsers=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_CreateSubscriberAlert.For(n,{alertAndStatus:t}),"Add Subscribers to Alert","Add & Continue",{sendSms:ko.observable(!1),sendEmail:ko.observable(!1),usersToAdd:ko.observableArray()}).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}).SubmitData(function(n){return{sendSms:n.sendSms(),sendEmail:n.sendEmail(),usersToAdd:n.usersToAdd()}}).Done(function(){i&&i()}).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},app.route.Module_AvailableUsersForAlertSubscription.For(n,{alertAndStatus:t}),15,!0).CreateMulti()}}(Form||(Form={})),function(n){n.ModuleAlertClearAutoSmsUser=function(n,t){return new DialogViewModelBuilder(app.route.Module_ClearAutoSmsUser.For(n),"Clear Auto SMS User","Clear",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ModuleAlertConfigureAutoSms=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Module_SetAlertAutoSms.For(n,{alertAndStatus:t}),"Set Alert Auto SMS",i?"Enable":"Disable",{}).SubmitData(function(){return{autoSms:i}}).Done(function(){r&&r()}).MessageField(i?"Enabling auto SMS will send a message to the last user who controlled this module using SMS":"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").Create()}}(Form||(Form={})),function(n){n.ModuleAlertEditUser=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(app.route.Module_UpdateSubscriberAlert.For(n,{alertAndStatus:t,userId:i}),"Update Subscriber Alert","Update",{sendSms:ko.observable(u),sendEmail:ko.observable(f)}).Validate(function(n){return!n.sendSms()&&!n.sendEmail()?"Users must be subscribed to either SMS, email, or both":null}).SubmitData(function(n){return{sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){e&&e()}).MessageField("Update alert options for "+r).CheckBoxField("sendSms","Send SMS Alerts").CheckBoxField("sendEmail","Send Email Alerts").Create()}}(Form||(Form={})),function(n){n.ModuleAlertRemoveEscalationList=function(n,t,i){return new DialogViewModelBuilder(app.route.Module_RemoveAlertEscalationList.For(n,{alertAndStatus:t}),"Set Alert Escalation","Remove",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Remove an escalation list from this alert.").Create()}}(Form||(Form={})),function(n){n.ModuleAlertRemoveUser=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Module_RemoveSubscriberFromAlert.For(n,{alertAndStatus:t,userId:i}),"Remove Alert Subscriber","Remove",{}).SubmitData(function(){return{}}).Done(function(){u&&u()}).MessageField("Remove user "+r+"from this alert").Create()}}(Form||(Form={})),function(n){n.ModuleAlertSetEscalationList=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Module_SetAlertEscalationList.For(n,{alertAndStatus:t}),"Set Alert Escalation","Update",{escalationListId:ko.observable(i)}).SubmitData(function(n){return{escalationListId:n.escalationListId()}}).Done(function(){u&&u()}).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},app.route.Group_GetAvailableEscalationLists.For(),!1,i===null?null:{EscalationListId:i,Name:r},"Name",10,10).Create()}}(Form||(Form={})),function(n){n.ModuleConfigTemplateAdd=function(n,t){return new DialogViewModelBuilder(app.route.Group_AddExistingModuleConfigTemplates.For(n),"Add existing template to group","Add",{moduleConfigTemplateIds:ko.observableArray([])}).SubmitData(function(n){return{moduleConfigTemplateIds:n.moduleConfigTemplateIds()}}).Done(function(){t&&t()}).AjaxMultiSelectListField("moduleConfigTemplateIds","Select Templates",function(n){return n.TemplateName},function(n){return n.ModuleConfigTemplateId},app.route.Group_ModuleConfigTemplatesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.ModuleConfigTemplateClone=function(n,t,i,r){return new DialogViewModelBuilder(app.route.ModuleConfigTemplate_CloneModuleConfigTemplate.For(n,{groupId:i}),"Clone existing template","Clone",{templateName:ko.observable(""),templateDescription:ko.observable("")}).SubmitData(function(n){return{currentTemplateName:t,templateName:n.templateName(),templateDescription:n.templateDescription()}}).Done(function(){r&&r()}).Validate(function(n){return t===n.templateName()?"New template name cannot be the same as the existing template name":null}).DisplayField("currentTemplateName","Template to clone: "+t).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()}}(Form||(Form={})),function(n){n.ModuleConfigTemplateCreate=function(t,i,r){return new DialogViewModelBuilder(null,"Create Config Template","Create",{templateName:ko.observable(""),templateDescription:ko.observable(""),selectedModuleType:ko.observable("")}).Submit(function(u){n.ViewPostRequest(t,{route:app.route.Module_GetModuleTypeConfigItems.For(null,{selectedModuleType:u.selectedModuleType()}),onSuccess:function(f){if(f.Success===!1){t.SetMessage(f.Message);return}t.FormAction(function(){return n.ModuleConfigureTemplate(u,f,app.route.Group_CreateModuleConfigTemplate.For(i),"Config Template","Save",r)})()}})}).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},app.route.Module_AvailableModuleTypes.For(),!1,null,null).Create()}}(Form||(Form={})),function(n){n.ModuleConfigTemplateEdit=function(n,t,i,r){return new DialogViewModelBuilder(app.route.ModuleConfigTemplate_UpdateModuleConfigTemplate.For(n),"Edit Template Info","Update",{templateName:ko.observable(t),templateDescription:ko.observable(i)}).SubmitData(function(n){return{templateName:n.templateName(),templateDescription:n.templateDescription()}}).Done(function(){r&&r()}).TextField("templateName","Template Name",null,!1,!0,!0).MultilineTextField("templateDescription","Description",null,!1,!0).Create()}}(Form||(Form={})),function(n){n.ModuleConfigTemplateRemove=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Group_RemoveModuleConfigTemplate.For(i),"Remove Module","Remove",{moduleConfigTemplateId:ko.observable(n),deleteFlag:ko.observable(!1)}).SubmitData(function(n){return{moduleConfigTemplateId:n.moduleConfigTemplateId(),deleteFlag:n.deleteFlag()}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the module config template  "+t+" 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()}}(Form||(Form={})),function(n){n.NetworkAcknowledgeOverdue=function(n,t){return new DialogViewModelBuilder(app.route.Network_AcknowledgeOverdue.For(n),"Acknowledge Overdue Alert","Acknowledge",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Acknowledge Overdue").Create()}}(Form||(Form={})),function(n){n.NetworkAddManagerUsers=function(n,t){return new DialogViewModelBuilder(app.route.Network_AddManagerUsers.For(n),"Add Manager Users","Add",{userIds:ko.observableArray()}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){t&&t()}).MessageField("Select one or more users to add as managers of the network.").AjaxMultiSelectListField("userIds","User",function(n){return n.Name+" (ID: "+n.UserId+")"},function(n){return n.UserId},app.route.Network_ManagerUsersWhichCanBeAdded.For(n),10,!0).Create()}}(Form||(Form={})),function(n){n.NetworkAddSubscriberUser=function(n,t){return new DialogViewModelBuilder(app.route.Network_AddOverdueAlertUser.For(n),"Add Overdue Subscriber","Add",{userId:ko.observable()}).SubmitData(function(n){return{userId:n.userId()}}).Done(function(){t&&t()}).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},app.route.Network_AlertUsersWhichCanBeAdded.For(n),!1,null,"Name",5,5).Create()}}(Form||(Form={})),function(n){n.NetworkAddSubscriberUsers=function(n,t){return new DialogViewModelBuilder(app.route.Network_AddSubscribersToOverdueAlert.For(n),"Add Users to Overdue Alert","Add",{userIds:ko.observable()}).SubmitData(function(n){return{userIds:n.userIds()}}).Done(function(){t&&t()}).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},app.route.Network_AvailableUsersToSubscribe.For(n),10,!0).Create()}}(Form||(Form={})),function(n){n.NetworkAssignGisDataset=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_AssignGisDataset.For(n),"Assign GIS Dataset","Assign",{gisDatasetId:ko.observable(t)}).SubmitData(function(n){return{gisDatasetId:n.gisDatasetId()}}).Done(function(){r&&r()}).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: "+Format.DateTime(moment.utc(n.CreatedUtc))},function(n){return n.GisDatasetId},app.route.Network_AllGisDatasets.For(n),!0,i!=null?{Name:i,GisDatasetId:t}:null,"Name",5,1).Create()}}(Form||(Form={})),function(n){n.NetworkAssignSim=function(n,t){return new DialogViewModelBuilder(app.route.Network_AssignSim.For(n),"Assign Sim","Assign",{simId:ko.observable()}).SubmitData(function(n){return{simId:n.simId()}}).Done(function(){t&&t()}).AjaxCompactFilterDropDownListField("simId","Sim",function(n){return n.SimNumber},function(n){return n.SimId},app.route.Network_AvailableSims.For(n),!1,null,"SimNumber",5,1).Create()}}(Form||(Form={})),function(n){n.NetworkAttachN8Link=function(n,t){return new DialogViewModelBuilder(app.route.Network_AttachN8Link.For(n),"Attach N8Link Device","Attach",{deviceExtAddress:ko.observable("")}).SubmitData(function(n){return{nodeAddress:251,deviceExtAddress:n.deviceExtAddress()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to attach N8Link device and update the network?").MessageField("The N8Link device will be attached to node "+Format.NodeAddress(251)+" (251)").AjaxFilterDropDownListField("deviceExtAddress","Device",function(n){return n.DeviceExtAddress+" ("+n.Type+")"},function(n){return n.DeviceExtAddress},app.route.Network_AvailableN8LinkDevices.For(n),!1,null,"DeviceExtAddress",1).Create()}}(Form||(Form={})),function(n){n.NetworkAttachTag=function(n,t){return new DialogViewModelBuilder(app.route.Network_AttachTag.For(n),"Attach Tag to Network","Attach",{tagId:ko.observable(0),tagValue:ko.observable("")}).SubmitData(function(n){return{tagId:n.tagId(),tagValue:n.tagValue()}}).Done(function(){t&&t()}).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},app.route.Tag_NetworkTagsWhichCanBeAdded.For(null,{networkId:n}),!1,null,"Name").TextField("tagValue","Value").Create()}}(Form||(Form={})),function(n){n.NetworkChangeStatus=function(n,t,i,r,u){var f=ko.observableArray([]);return new DialogViewModelBuilder(app.route.Network_SetNetworkStatus.For(n),"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(),overrideTaskCompletion:!r}}).Error(function(n,t){f(t.MismatchNodes||[])}).Done(function(){u&&u()}).OptionalCheckBoxField("confirmOverride","Confirm Update").MessageField(r?"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 app.route.Network_AvailableNodeStatus.For(n)}),!1,{StatusId:t,Name:i}).ListField("Mismatching Node Status",f,function(n){return n.NodeName+" - "+n.StatusName},ko.computed(function(){return f().length>0})).Create()}}(Form||(Form={})),function(n){n.NetworkChangeTimeZone=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_ChangeTimeZone.For(n),"Change the Network Time Zone","Update",{timeZoneName:ko.observable(t)}).SubmitData(function(n){return{timeZoneName:n.timeZoneName()}}).Done(function(){r&&r()}).AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},app.route.Home_TimeZoneNames.For(),!1,{BaseUtcOffset:i,TimeZoneName:t},"TimeZoneName",5,1).Create()}}(Form||(Form={})),function(n){n.NetworkClearMaxSyncInterval=function(n,t){return new DialogViewModelBuilder(app.route.Network_SetMaxSyncInterval.For(n),"Clear Max Sync Interval","Update",{}).SubmitData(function(){return{maxSyncInterval:null}}).Done(function(){t&&t()}).MessageField("You are about to clear the max sync interval for this network").Create()}}(Form||(Form={})),function(n){n.NetworkClearSuppressAlerts=function(n,t){return new DialogViewModelBuilder(app.route.Network_ClearSuppressAlerts.For(n),"Clear Suppressed Module Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to clear suppressed module alerts for this network?").Create()}}(Form||(Form={})),function(n){n.NetworkCreateGatewayNode=function(n,t){return new DialogViewModelBuilder(app.route.Network_CreateNode.For(n),"Create Gateway Node","Create",{name:ko.observable("Gateway")}).SubmitData(function(n){return{name:n.name(),nodeAddress:0}}).Done(function(){t&&t()}).MessageField("Enter the details for the gateway Node (Node 0000) to add to this network.").TextField("name","Name",50).Create()}}(Form||(Form={})),function(n){n.NetworkCreateNode=function(n,t){return new DialogViewModelBuilder(app.route.Network_CreateNode.For(n),"Create Node","Create",{name:ko.observable(),nodeAddress:ko.observable()}).SubmitData(function(n){return{name:n.name(),nodeAddress:n.nodeAddress()}}).Done(function(){t&&t()}).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 Format.NodeAddress(n)+" ("+n+")"},function(n){return n},app.route.Network_AvailableNodeAddresses.For(n,{max:255}),!1).Create()}}(Form||(Form={})),function(n){n.NetworkCreateNote=function(n,t){return new DialogViewModelBuilder(app.route.Network_CreateNote.For(n),"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&&t()}).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},app.route.Group_GroupsToContainNote.For(),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.NetworkCreatePortConfig=function(n,t,i,r,u,f,e,o,s,h,c,l,a,v){return new DialogViewModelBuilder(app.route.Network_ApplyNodePortConfig.For(n,{nodeAddress:t}),"Configure Node Port","Configure",{portIndex:ko.observable(e),portType:ko.observable(o),baudRate:ko.observable(s),dataBit:ko.observable(h),stopBit:ko.observable(c),parity:ko.observable(l),localAddress:ko.observable(a),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(){v&&v()}).MultilineTextField("reason","Please supply a reason.",null,!1).DropDownListField("portIndex","Port Index",function(n){return n},function(n){return n},i).DropDownListField("portType","Comms Port Type",function(n){return n},function(n){return n},r).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},u).DropDownListField("parity","Parity",function(n){return n},function(n){return n},f).NumberField("localAddress","Address",0,255,!1).Create()}}(Form||(Form={})),function(n){n.NetworkDelete=function(n,t){return new DialogViewModelBuilder(app.route.Network_Delete.For(n),"Delete Network","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this network?").CheckBoxField("confirm","Confirm this irreversible action").Create()}}(Form||(Form={})),function(n){n.NetworkDeleteNode=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_DeleteNetworkNode.For(n),"Delete Network Node","Delete",{nodeAddress:ko.observable(t),confirm:ko.observable(!1)}).SubmitData(function(n){return{nodeAddress:n.nodeAddress(),confirm:n.confirm()}}).Done(function(){r&&r()}).MessageField('Are you sure you want to permanently delete the node "'+i+'" from this network?').MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of Node").Create()}}(Form||(Form={})),function(n){n.NetworkDetachN8Link=function(n,t){return new DialogViewModelBuilder(app.route.Network_DetachN8Link.For(n),"Detach N8Link Device","Detach",{}).SubmitData(function(){return{nodeAddress:251}}).Done(function(){t&&t()}).MessageField("Are you sure you want to detach N8Link device and update the network?").MessageField("The N8Link device will be detached from node "+Format.NodeAddress(251)+" (251)").Create()}}(Form||(Form={})),function(n){n.NetworkDisplayPortConfig=function(n,t,i,r,u,f,e,o,s,h,c){return new DialogViewModelBuilder(null,"Port Configuration","Close",{}).SubmitData(function(){return{}}).Done(function(){c&&c()}).MessageField("Configured at "+Format.DateTime(moment(o))+" by "+s).DisplayField("Reason",h).MessageField("Configuration").DisplayField("PortIndex","Port Index: "+n).DisplayField("PortType","Comms Port Type: "+t).DisplayField("BaudRate","Baud Rate: "+i).DisplayField("DataBits","Data Bits: "+r).DisplayField("StopBits","Stop Bits: "+u).DisplayField("Parity","Parity: "+f).DisplayField("Address","Address: "+e).Create()}}(Form||(Form={})),function(n){n.NetworkEditTag=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_UpdateTag.For(n),"Update Tag Value","Update",{tagValue:ko.observable(i)}).SubmitData(function(n){return{tagId:t,tagValue:n.tagValue()}}).Done(function(){r&&r()}).TextField("tagValue","Value").Create()}}(Form||(Form={})),function(n){n.NetworkGetLastRejectedAddress=function(n,t){return new DialogViewModelBuilder(app.route.Network_GetLastRejectedAddress.For(n),"Get Last Rejected Address","Get Address",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to request the address of the last node which unsuccessfully requested association with the network?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeIoModuleChangeSlot=function(n,t,i,r,u,f,e,o,s,h,c){return new DialogViewModelBuilder(app.route.Network_EnrolTemperatureProbe.For(n),"Move Temperature Probe","Move",{newSlot:ko.observable(0)}).SubmitData(function(n){return{oldSlot:e,newSlot:n.newSlot(),nodeAddress:t,channel:u,ioTypeId:i,ioModuleSlot:r,deviceExtAddress:f}}).Done(function(){c&&c()}).MessageField("Temperature probe details").DisplayField("Slot","Slot: "+e).DisplayField("Type","Type: "+(o?"Fixed":f==="0"?"Unknown":"Transient")).DisplayField("DeviceExtAddress","Ext Address: "+(f!=="0"?f:"")).DisplayField("Temperature","Temp: "+s.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},h).Create()}}(Form||(Form={})),function(n){n.NetworkNodeIoModuleCreateSnapshot=function(n,t,i,r,u,f){return new DialogViewModelBuilder(app.route.Network_TakeSnapshotOfFixedProbes.For(n),"Snapshot Fixed Probes","Create",{comment:ko.observable("")}).SubmitData(function(n){return{nodeAddress:t,ioTypeId:i,ioModuleSlot:r,comment:n.comment(),snapshotData:u}}).Done(function(){f&&f()}).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()}}(Form||(Form={})),function(n){n.NetworkNodeIoModuleReapplySnapshot=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(app.route.Network_ApplySnapshot.For(n),"Apply Snapshot","Apply",{}).SubmitData(function(){return{snapshotId:u,nodeAddress:t,ioTypeId:i,ioModuleSlot:r}}).Done(function(){e&&e()}).MessageField("All probes in this changeset will be re enrolled.").ListField("Probes to fix",f,function(n){return"Ch/Slot: "+n.Channel+"/"+n.Slot+" Serial: "+n.DeviceExtAddress}).Create()}}(Form||(Form={})),function(n){n.NetworkNodeIoModuleReEnrollTemperatureProbe=function(n,t,i,r,u,f,e,o,s){return new DialogViewModelBuilder(app.route.Network_ApplyChangeset.For(n),"Apply Change","Apply",{}).SubmitData(function(){return{newSlot:e,nodeAddress:t,channel:u,ioTypeId:i,ioModuleSlot:r,deviceExtAddress:f}}).Done(function(){s&&s()}).MessageField("Temperature probe details").DisplayField("Comment",o).DisplayField("Target Slot","Target Slot: "+e).Create()}}(Form||(Form={})),function(n){n.NetworkNodeIoModuleRemoveProbe=function(n,t,i,r,u,f,e,o,s,h,c){return new DialogViewModelBuilder(app.route.Network_RemoveTemperatureProbe.For(n),"Remove Temperature Probe","Remove",{confirm:ko.observable(!1)}).SubmitData(function(n){return{nodeAddress:t,slot:e,channel:u,ioTypeId:i,confirm:n.confirm(),ioModuleSlot:r,snapshotData:h}}).Done(function(){c&&c()}).MessageField("Temperature probe details").DisplayField("Slot","Slot: "+e).DisplayField("Type","Type: "+(o?"Fixed":f==="0"?"Unknown":"Transient")).DisplayField("DeviceExtAddress","Ext Address: "+(f!=="0"?f:"")).DisplayField("Temperature","Temp: "+s.toFixed(1)+"°C").MessageField("Remove probe from this slot").CheckBoxField("confirm","Confirm removal of temperature probe").Create()}}(Form||(Form={})),function(n){n.NetworkRemoveManagerUser=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_RemoveManagerUser.For(n),"Remove Manager User","Remove",{}).SubmitData(function(){return{userId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove "+i+" as a manager user?.").Create()}}(Form||(Form={})),function(n){n.NetworkRemoveSim=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_RemoveSim.For(n),"Remove Sim","Remove",{}).SubmitData(function(){return{simId:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove this Sim?.").Create()}}(Form||(Form={})),function(n){n.NetworkRemoveSubscriptionUser=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_RemoveOverdueAlertUser.For(n),"Remove Subscriber User","Remove",{}).SubmitData(function(){return{userId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to remove the user "+i+" from this overdue alert list?").Create()}}(Form||(Form={})),function(n){n.NetworkRemoveTag=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Network_RemoveTag.For(n),"Remove Tag from Network","Remove",{confirm:ko.observable(!1)}).SubmitData(function(n){return{tagId:t,confirm:n.confirm()}}).Done(function(){u&&u()}).MessageField("Are you sure you want to remove the tag "+i+" from network "+r+"? ").CheckBoxField("confirm","Confirm").Create()}}(Form||(Form={})),function(n){n.NetworkRename=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_RenameNetwork.For(n),"Rename Network","Rename",{networkName:ko.observable(t),shortName:ko.observable(i)}).SubmitData(function(n){return{name:n.networkName(),shortName:n.shortName()}}).Done(function(n,t){r&&r(t.Name,t.ShortName)}).MessageField("Assign a unique name to this network.").TextField("networkName","Name",50).MessageField("Assign a short name for use in SMS commands and alerts to this network.").TextField("shortName","Short Name",50).Create()}}(Form||(Form={})),function(n){n.NetworkSetDefaultModule=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Network_SetDefaultModule.For(n),"Set Default Module","Update",{moduleId:ko.observable(t)}).SubmitData(function(n){return{moduleId:n.moduleId()}}).Done(function(){u&&u()}).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},app.route.Network_AllNetworkModules.For(n),!0,i!=null?{NodeName:r,ModuleName:i,ModuleId:t}:null,"ModuleName",3,1).Create()}}(Form||(Form={})),function(n){n.NetworkSetGsmIdleTimeout=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_SetGsmIdleTimeout.For(n),"Set GSM Idle Timeout","Set",{gsmIdleTimeout:ko.observable(t)}).SubmitData(function(n){return{gsmIdleTimeout:n.gsmIdleTimeout()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.NetworkSetMaxSyncInterval=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_SetMaxSyncInterval.For(n),"Set Maximum Sync Interval","Update",{maxSyncInterval:ko.observable(t)}).SubmitData(function(n){return{maxSyncInterval:n.maxSyncInterval()}}).Done(function(){i&&i()}).MessageField("Specify the expected maximum interval between synchronization requests from this network. Leave blank to ignore.").TimeSpanField("maxSyncInterval","Max Sync Interval",!0).Create()}}(Form||(Form={})),function(n){n.NetworkSetMaxSyncIntervals=function(n,t,i){return new DialogViewModelBuilder(app.route.Group_BulkSetMaxSyncInterval.For(n),"Set Max Sync Interval","Set",{maxSyncInterval:ko.observable()}).Validate(function(){return t.length===0?"There are no networks selected. Please select at least 1 network and try again.":null}).SubmitData(function(n){return{networkIds:t,maxSyncInterval:n.maxSyncInterval()}}).Done(function(){i&&i()}).MessageField("You are about to update "+t.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()}}(Form||(Form={})),function(n){n.NetworkSetMessageAccount=function(n,t,i){var r={messageAccountId:ko.observable()};return new DialogViewModelBuilder(ko.computed(function(){return app.route.MessageAccount_AddNetwork.For(r.messageAccountId)}),"Assign Message Account","Assign",r).SubmitData(function(){return{networkId:n}}).Done(function(){i&&i()}).AjaxCompactFilterDropDownListField("messageAccountId","Message Account",function(n){return n.Name},function(n){return n.MessageAccountId},app.route.MessageAccount_AvailableMessageAccounts.For(),!1,{MessageAccountId:t,Name:""},"Name",5,1).Create()}}(Form||(Form={})),function(n){n.NetworkSetNextNetworkStatusWithCompletedTasks=function(n,t,i,r,u){var f=ko.observableArray([]),e="All required tasks completed, changing status from "+t+" to "+r;return new DialogViewModelBuilder(app.route.Network_SetNetworkStatus.For(n),"Set Network Status","Update",{confirmOverride:ko.observable(!1)}).SubmitData(function(n){return{statusId:i,confirmOverride:n.confirmOverride(),reason:e,overrideTaskCompletion:!1}}).Error(function(n,t){f(t.MismatchNodes||[])}).Done(function(){u&&u()}).OptionalCheckBoxField("confirmOverride","Confirm Update").MessageField(e).ListField("Mismatching Node Status",f,function(n){return n.NodeName+" - "+n.StatusName},ko.computed(function(){return f().length>0})).Create()}}(Form||(Form={})),function(n){n.NetworkSetNextNetworkStatusWithIncompleteTasks=function(n,t,i){var r=ko.observableArray([]);return new DialogViewModelBuilder(app.route.Network_SetNetworkStatus.For(n),"Set Network Status","Update",{confirmOverride:ko.observable(!1),reason:ko.observable("")}).SubmitData(function(n){return{statusId:t,confirmOverride:n.confirmOverride(),reason:n.reason(),overrideTaskCompletion:!1}}).Error(function(n,t){r(t.MismatchNodes||[])}).Done(function(){i&&i()}).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",r,function(n){return n.NodeName+" - "+n.StatusName},ko.computed(function(){return r().length>0})).Create()}}(Form||(Form={})),function(n){n.NetworkSubscribeToSyncAlerts=function(n,t){return new DialogViewModelBuilder(app.route.Network_SubscribeToSyncAlerts.For(n),"Subscribe to Sync Alerts","Subscribe",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Click subscribe to receive email alerts when the network sync status changes.").Create()}}(Form||(Form={})),function(n){n.NetworkSuppressAlerts=function(n,t){return new DialogViewModelBuilder(app.route.Network_SuppressAlerts.For(n),"Suppress Network Module 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(){t&&t()}).MessageField("Are you sure you want to suppress alerts for this network?").DateTimeField("suppressUntil","Suppress Until").Create()}}(Form||(Form={})),function(n){n.NetworkUnsubscribeFromSyncAlerts=function(n,t){return new DialogViewModelBuilder(app.route.Network_UnsubscribeFromSyncAlerts.For(n),"Unsubscribe from Sync Alerts","Unsubscribe",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Click unsubscribe to stop receiving email alerts when the network sync status changes.").Create()}}(Form||(Form={})),function(n){n.NetworkUpdateBinary=function(n,t){return new DialogViewModelBuilder(app.route.Network_UpdateNetwork.For(n),"Update Network","Update",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to update the network binary for this network?").Create()}}(Form||(Form={})),function(n){n.NetworkUpdateCancel=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_CancelNetworkUpdate.For(n),"Cancel Update","Cancel",{}).SubmitData(function(){return{networkUpdateId:t}}).Done(function(){r&&r()}).MessageField("Are you sure you want to cancel the following pending update?").MessageField(i).Create()}}(Form||(Form={})),function(n){n.NetworkUpdateCancelAll=function(n,t){return new DialogViewModelBuilder(app.route.Network_CancelNetworkUpdates.For(n),"Cancel All Pending Updates","Cancel",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to cancel all pending updates on this network?").Create()}}(Form||(Form={})),function(n){n.NetworkUpdateDetails=function(t,i,r,u,f,e,o,s,h,c,l){var a=ko.observable(!0),v=ko.observable(!1),y=function(n,t){return ko.computed(function(){return a()?n+": Loading...":v()?n+": Failed to load":n+": "+t()})};return n.ViewPostRequest(t,{route:app.route.Network_UpdateDetails.For(i),data:{networkUpdateId:r},onSuccess:function(n){u=n.Description;f=n.CreatedUtc;e=n.Cancelled;o=n.CancelledUser;s=n.Completed;h=n.Succeeded;c=n.Attempts;v(!1);a(!1)},onError:function(){v(!0);a(!1)}}),new DialogViewModelBuilder(null,"Update Details","Close",{}).SubmitData(function(){return{}}).Done(function(){l&&l()}).MessageField(y("Details",function(){return u})).MessageField(y("Created",function(){return Format.DateTime(moment.utc(f))})).MessageField(y("Status",function(){return e?"Cancelled by "+o:s?h?"Complete":"Failed":"Pending"})).ListField("Attempts",ko.computed(function(){return a()?["Loading..."]:v()?["Failed to load"]:c}),function(n){return typeof n=="string"?n:"Started at "+Format.DateTime(moment.utc(n.StartUtc))+(n.CompletedUtc?" and "+(n.Succeeded?"succeeded":"failed")+" at "+Format.DateTime(moment.utc(n.CompletedUtc)):"")+(n.Message?": "+n.Message:"")}).Create()}}(Form||(Form={})),function(n){n.NetworkNodeAddIoModule=function(n,t,i,r,u,f){var s={deviceExtAddress:ko.observable(""),deviceTypeId:ko.observable(0),slotIndex:ko.observable(0)},e=new DialogViewModelBuilder(app.route.Network_AddIoModuleToNode.For(n,{nodeAddress:t}),"Add I/O Module to Network Node","Add",s).Validate(function(n){return n.deviceExtAddress()==null&&h.filterString().length>0?"The device ext address you entered is not a valid option shown in the list.":null}).SubmitData(function(n){return{deviceTypeId:n.deviceTypeId(),slotIndex:n.slotIndex(),deviceExtAddress:n.deviceExtAddress()}}).Done(function(){f&&f()}).AjaxFilterDropDownListField("deviceTypeId","Device Type",function(n){return n.DeviceType},function(n){return n.DeviceTypeId},app.route.DeviceType_GetAvailableIoModules.For(i,{ioTypeId:r}),!1,null,"DeviceType").AjaxDropDownListField("slotIndex","Slot Index",function(n){return n},function(n){return n},app.route.Network_AvailableIoModuleSlots.For(n,{nodeAddress:t,max:u}),!1).MessageField("Attach device to slot").Create(),h=new DialogCompactFilterAjaxDropDownListFieldViewModel(e,"deviceExtAddress","Device",function(n){return n.DeviceExtAddress},function(n){return n.DeviceExtAddress},ko.computed(function(){return app.route.Network_AvailableIoModulesToAttach.For(n,{ioTypeId:r,deviceTypeId:s.deviceTypeId()||0})}),!0,null,"DeviceExtAddress",1,1,"ajax-compactfilter-drop-down-list"),o;return e.fields.push(h),o=-1,e.fields().forEach(function(n,t){n.fieldName==="deviceTypeId"&&(o=t)}),ko.computed(function(){var n=s.deviceTypeId();o>-1&&e.fields()[o].options().forEach(function(t){t.DeviceTypeId===n})}),e}}(Form||(Form={})),function(n){n.NetworkNodeApplyApplicationTemplate=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_ApplyApplicationTemplateToNode.For(n,{nodeAddress:t}),"Apply Application Template","Apply",{applicationTemplateId:ko.observable()}).SubmitData(function(n){return{applicationTemplateId:n.applicationTemplateId()}}).Done(function(){r&&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},app.route.Network_AvailableApplicationTemplates.For(n,{deviceTypeId:i}),!1,null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.NetworkNodeApplyTemplateUpgrade=function(n,t,i,r,u){var f={applicationTemplateId:ko.observable(),moduleMap:ko.observable(),confirm:ko.observable(!1)},e,o=new DialogViewModelBuilder(app.route.Network_ApplyApplicationTemplateUpdateToNode.For(n,{nodeAddress:t}),"Apply Application Template Upgrade","Apply",f).SubmitData(function(n){return{applicationTemplateId:n.applicationTemplateId(),mappedModules:e.indexMap(),deleteModules:e.indexDel(),confirm:n.confirm()}}).Done(function(){u&&u()}).MessageField("Select an application template to apply to this node.").AjaxCompactFilterDropDownListField("applicationTemplateId","Application Template",function(n){return n.Name},function(n){return n.ApplicationTemplateId},app.route.Network_AvailableApplicationTemplates.For(n,{deviceTypeId:i}),!1,null,"Name",3,1).OptionalCheckBoxField("confirm","Confirm irreversible deletion of node modules").AjaxModuleUpgradeField("moduleMap","Modules",ko.computed(function(){return app.route.ApplicationTemplate_TemplateModules.For(f.applicationTemplateId)}),app.route.Network_CurrentNodeModules.For(n,{nodeAddress:t}),f.applicationTemplateId,r).Create();return o.fields().forEach(function(n){n.fieldName==="moduleMap"&&(e=n)}),o}}(Form||(Form={})),function(n){n.NetworkNodeAttachDevice=function(n,t,i){var r={deviceExtAddress:ko.observable(),includeAssigned:ko.observable()};return new DialogViewModelBuilder(app.route.Network_AttachDevice.For(n,{nodeAddress:t}),"Attach Device to Node","Attach",r).SubmitData(function(n){return{deviceExtAddress:n.deviceExtAddress()}}).Done(function(){i&&i()}).MessageField("Select a device to attach to this node.").CheckBoxField("includeAssigned","Include assigned devices in list",t>0).AjaxCompactFilterDropDownListField("deviceExtAddress","Device",function(n){return n.DeviceExtAddress+" ("+n.Type+")"},function(n){return n.DeviceExtAddress},ko.computed(function(){return t===0?app.route.Network_AvailableGatewayDevices.For(n,{unattached:!r.includeAssigned()}):app.route.Network_AvailableNonGatewayDevices.For(n,{unattached:!r.includeAssigned()})}),!1,null,"DeviceExtAddress",1).Create()}}(Form||(Form={})),function(n){n.NetworkNodeAttachDeviceBeforeUpdatingFirmware=function(n,t,i,r,u,f){var e={slotIndex:r,deviceExtAddress:ko.observable(""),displayName:ko.observable("Query Device"),unattached:ko.observable(!1),message:ko.observable("")},o=new DialogViewModelBuilder(e.slotIndex===0?app.route.Network_AttachDevice.For(n,{nodeAddress:t}):app.route.Network_AttachDeviceToIoModule.For(n,{nodeAddress:t}),"Attach Device to IO Module","Attach",e).SubmitData(function(n){return{slotIndex:n.slotIndex,deviceExtAddress:n.deviceExtAddress()}}).Done(function(n){f&&f(i,n.slotIndex,n.deviceExtAddress())}).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 e.slotIndex>0?app.route.Network_AvailableIoModulesToAttach.For(n,{unattached:!e.unattached(),deviceTypeId:i}):t===0?app.route.Network_AvailableGatewayDevices.For(n,{unattached:!e.unattached(),deviceTypeId:i}):app.route.Network_AvailableNonGatewayDevices.For(n,{unattached:!e.unattached(),deviceTypeId:i})}),!1,null,"DeviceExtAddress",1).MessageField(e.message).CommandButtonField("queryDevice",e.displayName,function(){e.unattached(!0);e.displayName("Querying device, please wait...");u(o.fields()[2],e)}).Create();return o}}(Form||(Form={})),function(n){n.NetworkNodeAttachDeviceToIoModule=function(n,t,i,r,u,f){var s={deviceExtAddress:ko.observable("")},e=new DialogViewModelBuilder(app.route.Network_AttachDeviceToIoModule.For(n,{nodeAddress:t}),"Attach Device to Slot","Attach",s).Validate(function(n){return n.deviceExtAddress()==null&&o.filterString().length>0?"The device ext address you entered is not a valid option shown in the list.":null}).SubmitData(function(n){return{nodeAddress:t,slotIndex:r,deviceExtAddress:n.deviceExtAddress()}}).Done(function(){f&&f()}).MessageField("Attach "+u+" to slot").Create(),o=new DialogCompactFilterAjaxDropDownListFieldViewModel(e,"deviceExtAddress","Device",function(n){return n.DeviceExtAddress},function(n){return n.DeviceExtAddress},ko.computed(function(){return app.route.Network_AvailableIoModulesToAttach.For(n,{deviceTypeId:i})}),!0,null,"DeviceExtAddress",1,1,"ajax-compactfilter-drop-down-list");return e.fields.push(o),e}}(Form||(Form={})),function(n){n.NetworkNodeChangeApplication=function(n,t,i,r,u,f,e,o){var s={appBinaryId:ko.observable(u),includeAll:ko.observable(!1),latestVersions:ko.observable(!0)};return new DialogViewModelBuilder(app.route.Network_ChangeAssignedApplication.For(n,{nodeAddress:t}),"Change Assigned Application","Change",s).SubmitData(function(n){return{appBinaryId:n.appBinaryId()}}).Done(function(){o&&o()}).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 app.route.Network_AvailableApplications.For(n,{nodeAddress:t,applicationGuid:r,includeAll:s.includeAll,latestVersions:s.latestVersions,deviceTypeId:i})}),!1,f!=null?{AppBinaryId:u,Name:f,AppVersionNumber:e}:null,"Name",3,1).Create()}}(Form||(Form={})),function(n){n.NetworkNodeChangeIoModuleDeviceType=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(app.route.Network_ChangeIoModuleDeviceType.For(n,{nodeAddress:t}),"Change IO Module Device Type","Change",{deviceTypeId:ko.observable(i),ioModuleSlot:ko.observable(r)}).SubmitData(function(n){return{deviceTypeId:n.deviceTypeId(),ioModuleSlot:r,newIoModuleSlot:n.ioModuleSlot()}}).Done(function(){e&&e()}).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},app.route.DeviceType_GetAvailableIoModules.For(i,{ioTypeId:u}),!1,{DeviceTypeId:i},"DeviceType").AjaxDropDownListField("ioModuleSlot","Slot Index",function(n){return n},function(n){return n},app.route.Network_AvailableIoModuleSlots.For(n,{nodeAddress:t,slotIndex:r,max:f}),!1,r).Create()}}(Form||(Form={})),function(n){n.NetworkNodeChangeStatus=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Network_SetNetworkNodeStatus.For(n,{nodeAddress:t}),"Set Node Status","Update",{statusId:ko.observable(i),reason:ko.observable("")}).SubmitData(function(n){return{statusId:n.statusId(),reason:n.reason()}}).Done(function(){u&&u()}).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},app.route.Network_AvailableNodeStatus.For(n),!1,{StatusId:i,Name:r}).Create()}}(Form||(Form={})),function(n){n.NetworkNodeClearSuppressedAlerts=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_ClearSuppressAlertsOnNode.For(n,{nodeAddress:t}),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to clear suppressing alerts for this network node?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeConfirmIncompleteStatusChange=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_SetNetworkNodeStatus.For(n,{nodeAddress:t}),"Set Network Node Status","Update",{reason:ko.observable("")}).SubmitData(function(n){return{statusId:i,reason:n.reason(),overrideTaskCompletion:!0}}).Done(function(){r&&r()}).MessageField("You have tasks outstanding, please provide a reason for advancing with incomplete tasks").MultilineTextField("reason","Reason",null,!1).Create()}}(Form||(Form={})),function(n){n.NetworkNodeConfirmStatusChange=function(n,t,i,r,u,f){var e="All required tasks completed, changing status from "+i+" to "+u;return new DialogViewModelBuilder(app.route.Network_SetNetworkNodeStatus.For(n,{nodeAddress:t}),"Set Network Node Status","Update",{}).SubmitData(function(){return{statusId:r,reason:e,overrideTaskCompletion:!0}}).Done(function(){f&&f()}).MessageField(e).Create()}}(Form||(Form={})),function(n){n.NetworkNodeCreateModule=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_CreateNetworkNodeModule.For(n,{nodeAddress:t}),"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(){i&&i()}).IntNumberField("moduleIndex","Module Index",0,255).AjaxCompactFilterDropDownListField("moduleType","Module Type",function(n){return n},function(n){return n},app.route.Module_AvailableModuleTypes.For(),!1,null,null,5,1).AjaxCompactFilterDropDownListField("icon","Icon",function(n){return n},function(n){return n},app.route.Module_AvailableIconNames.For(),!1,null,null,5,1).TextField("name","Name",100).TextField("shortName","Short Name",50).CreateMulti()}}(Form||(Form={})),function(n){n.NetworkNodeDelete=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_DeleteNetworkNode.For(n,{nodeAddress:t}),"Delete Network Node","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.NetworkNodeDeleteIoModule=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_DeleteIoModuleSlot.For(n,{nodeAddress:t}),"Delete Node I/O Module","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{slotIndex:i,confirm:n.confirm()}}).Done(function(){r&&r()}).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()}}(Form||(Form={})),function(n){n.NetworkNodeDeleteModules=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_DeleteNetworkNodeModules.For(n,{nodeAddress:t}),"Delete Modules","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).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()}}(Form||(Form={})),function(n){n.NetworkNodeDetachDevice=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_DetachDevice.For(n,{nodeAddress:t}),"Detach Device","Detach",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to detach this Device?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeDetachDeviceFromIoModule=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Network_DetachDeviceFromIoModule.For(n,{nodeAddress:t}),"Detach I/O Module Device","Detach",{}).SubmitData(function(){return{slotIndex:i,deviceExtAddress:r}}).Done(function(){u&&u()}).MessageField("Are you sure you want to detach this Device?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeLivePing=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_LivePingNode.For(n,{nodeAddress:t}),"Ping Network Node","Ping",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Press Ping to send a ping request to this network node.").Create()}}(Form||(Form={})),function(n){n.NetworkNodeLivePingIoModule=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_LivePingIoModule.For(n,{nodeAddress:t}),"Ping IO Module","Ping",{}).SubmitData(function(){return{slotIndex:i}}).Done(function(){r&&r()}).MessageField("Press Ping to send a ping request to this IO module.").Create()}}(Form||(Form={})),function(n){n.NetworkNodeLiveReboot=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_LiveRebootNode.For(n,{nodeAddress:t}),"Reboot Network Node","Reboot",{queueUpdate:ko.observable(!1)}).SubmitData(function(n){return{queueUpdate:n.queueUpdate()}}).Done(function(){i&&i()}).MessageField("Press Reboot to send a reboot request to this network node.").OptionalCheckBoxField("queueUpdate","Queue reboot for when node is online?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeMove=function(n,t,i,r){var u={newNetworkId:ko.observable(n),newNodeAddress:ko.observable(t),confirm:ko.observable(!1)};return new DialogViewModelBuilder(app.route.Network_UpdateNodeNetworkAndAddress.For(n,{nodeAddress:t}),"Move Network Node","Move",u).SubmitData(function(n){return{newNetworkId:n.newNetworkId(),newNodeAddress:n.newNodeAddress(),confirm:n.confirm()}}).Done(function(n){r&&r(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},app.route.Network_GetNetworksForNewNode.For(),!1,{NetworkId:n,Name:i},"Name",3,1).AjaxDropDownListField("newNodeAddress","Node Address",function(n){return Format.NodeAddress(n)+" ("+n+")"},function(n){return n},ko.computed(function(){return app.route.Network_AvailableNodeAddresses.For(u.newNetworkId,{max:255})}),!1).CheckBoxField("confirm","Please confirm you want to move this node").Create()}}(Form||(Form={})),function(n){n.NetworkNodeQueryFirmwareVersion=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_LiveQueryNodeFirmwareVersion.For(n,{nodeAddress:t}),"Query Node Device Firmware","Query",{queueRequest:ko.observable(!1)}).SubmitData(function(n){return{queueRequest:n.queueRequest()}}).Done(function(){i&&i()}).MessageField("Press Query to request and update the firmware version for this network node.").OptionalCheckBoxField("queueRequest","Queue request for when node is online").Create()}}(Form||(Form={})),function(n){n.NetworkNodeReboot=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_RebootNetworkNode.For(n,{nodeAddress:t}),"Reboot Network Node","Reboot",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to reboot this node?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeRename=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_RenameNetworkNode.For(n,{nodeAddress:t}),"Rename Network Node","Update",{name:ko.observable(i)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){r&&r(t.Name)}).MessageField("Assign a unique name to this network node.").TextField("name","Name",50).Create()}}(Form||(Form={})),function(n){n.NetworkNodeSetLocationMap=function(n,t,i,r,u,f,e){var o={latitude:ko.observable(r),longitude:ko.observable(u),distance:ko.observable("0.00m"),locationMessage:ko.observable("")},h=new DialogViewModelBuilder(app.route.Network_SetNetworkNodeLocation.For(t,{nodeAddress:i}),"Set Location","Update",o).SubmitData(function(n){return{latitude:n.latitude(),longitude:n.longitude()}}).Done(function(n){e&&e(Number(n.latitude()),Number(n.longitude()))}),s;return h.MapField(n,o,GMap.Icons.nodeGreen,f),s=h.dialogModel.fields()[0],h.DisplayFieldWithHeading("distance","Distance",o.distance).NumberField("latitude","Latitude (decimal degrees)",-90,90).NumberField("longitude","Longitude (decimal degrees)",-180,180).MessageField(o.locationMessage),ko.computed(function(){(o.latitude(),o.longitude(),s.dragging())||s.mapMarker!=null&&(s.mapMarker.setPosition(new google.maps.LatLng(o.latitude(),o.longitude())),o.distance(s.DistanceBetweenMarkerAndOriginal()))}).extend({throttle:250}),h.Create()}}(Form||(Form={})),function(n){n.NetworkNodeSetupApplication=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Network_SetupApplication.For(n,{nodeAddress:t}),"Setup Application","Setup",{supplierId:ko.observable(i)}).SubmitData(function(n){return{supplierId:n.supplierId()}}).Done(function(){r&&r()}).MessageField("Enter the supplier ID for this system, or blank to remove the supplier ID").TextField("supplierId","Supplier Id",null,!0).Create()}}(Form||(Form={})),function(n){var t=["GCM782","WCM782","WG388R-782IO","DRC802-IOT1","DRC802-IOT2"];n.DeviceSupportsTemperatureProbes=function(n){return t.indexOf(n)!==-1};n.NetworkNodeShowIoDeviceDetails=function(t,i,r,u){return new DialogViewModelBuilder(null,"Device Details","Close",{}).DisplayField("Slot Index","Slot Index: "+t).DisplayField("Device Type","Device Type: "+i).DisplayField("Device Ext Address",r!=null?"Device Ext Address: "+r:"").DisplayField("TemperatureSupport",n.DeviceSupportsTemperatureProbes(i)?"Supports Temperature Probes":"").DisplayField("ConfigurableSerialPorts",u?"Has Configurable Serial Ports":"").Create()}}(Form||(Form={})),function(n){n.NetworkNodeSuppressAlerts=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_SuppressAlertsOnNode.For(n,{nodeAddress:t}),"Suppress Node Module 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(){i&&i()}).MessageField("Are you sure you want to suppress alerts for this network node?").DateTimeField("suppressUntil","Suppress Until").Create()}}(Form||(Form={})),function(n){n.NetworkNodeUpdateApplication=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_UpdateNetworkNodeApplication.For(n,{nodeAddress:t}),"Update Node Application","Update",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to update the application in this node?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeUpdateConfig=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_UpdateNetworkNodeConfig.For(n,{nodeAddress:t}),"Update Node Config","Update",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to update the configuration of all modules running on this network node?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeUpdateFirmware=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_UpdateNetworkNodeFirmware.For(n,{nodeAddress:t}),"Update Node Firmware","Update",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Are you sure you want to update the firmware in this node?").Create()}}(Form||(Form={})),function(n){n.NetworkNodeUpdateIoModuleFirmware=function(n,t,i,r,u,f){return new DialogViewModelBuilder(app.route.Network_UpdateNetworkNodeIoModuleFirmware.For(n,{nodeAddress:t}),"Update I/O Module Firmware","Update",{firmwareId:ko.observable()}).SubmitData(function(n){return{firmwareId:n.firmwareId(),slotIndex:r}}).Done(function(){f&&f()}).AjaxFilterDropDownListField("firmwareId","Firmware Image",function(n){return"v"+n.FirmwareVersion+" created "+Format.Date(moment.utc(n.CreatedUtc))},function(n){return n.FirmwareId},app.route.Network_AvailableFirmwareForIoModule.For(n,{nodeAddress:t,slotIndex:r}),!1,null,"FirmwareVersion",10,10).Create()}}(Form||(Form={})),function(n){n.NetworkNodeUpdateLiveFirmware=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_UpdateNetworkNodeLiveFirmware.For(n,{nodeAddress:t}),"Update Node Firmware","Update",{firmwareId:ko.observable(),autoReboot:ko.observable(!0)}).SubmitData(function(n){return{firmwareId:n.firmwareId(),autoReboot:n.autoReboot()}}).Done(function(){i&&i()}).AjaxFilterDropDownListField("firmwareId","Firmware Image",function(n){return"v"+n.FirmwareVersion+" created "+Format.Date(moment.utc(n.CreatedUtc))},function(n){return n.FirmwareId},app.route.Network_AvailableFirmwareForNode.For(n,{nodeAddress:t}),!1,null,"FirmwareVersion",10,10).CheckBoxField("autoReboot","Automatically reboot when done.").Create()}}(Form||(Form={})),function(n){n.NetworkNodeVerifyHardware=function(n,t,i){return new DialogViewModelBuilder(app.route.Network_VerifyNetworkNodeHardware.For(n,{nodeAddress:t}),"Verify Node Hardware","Verify",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("Press Verify to begin.").MessageField("This process may take a minute to complete.").Create()}}(Form||(Form={})),function(n){n.NetworkSubscriptionAssignSubscriptionPlan=function(n,t,i){return new DialogViewModelBuilder(app.route.NetworkSubscription_AssignSubscriptionPlan.For(n),"Assign Subscription Plan","Assign",{subscriptionPlanId:ko.observable(t)}).SubmitData(function(n){return{subscriptionPlanId:n.subscriptionPlanId()}}).Done(function(){i&&i()}).MessageField("Select a plan to assign to the subscription. This plan will be assigned the next time this subscription is renewed.").AjaxFilterDropDownListField("subscriptionPlanId","Subscription Plan",function(n){return n.Name+" ("+n.PeriodMonths+" month plan - "+Format.Currency(n.PeriodFee)+" - "+n.MaxNodes+" nodes max)"},function(n){return n.SubscriptionPlanId},app.route.NetworkSubscriptionPlan_AvailableNetworkSubscriptionPlans.For(),!1,{SubscriptionPlanId:t},"Name").Create()}}(Form||(Form={})),function(n){n.NetworkSubscriptionCancel=function(n,t){return new DialogViewModelBuilder(app.route.NetworkSubscription_CancelSubscription.For(n),"Cancel Network Subscription","Cancel",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to cancel this subscription?.").CheckBoxField("confirm","Confirm cancellation of subscription").Create()}}(Form||(Form={})),function(n){n.NetworkSubscriptionChangeBillingEntity=function(n,t,i){return new DialogViewModelBuilder(app.route.NetworkSubscription_UpdateBillingEntity.For(n),"Update Billing Entity","Update",{billingEntityId:ko.observable(t)}).SubmitData(function(n){return{billingEntityId:n.billingEntityId()}}).Done(function(n,t){i&&i(t.NetworkSubscriptionId)}).AjaxDropDownListField("billingEntityId","Billing Entity",function(n){return n.CompanyName},function(n){return n.BillingEntityId},app.route.BillingEntity_AvailableBillingEntities.For(),!1,{BillingEntityId:t}).Create()}}(Form||(Form={})),function(n){n.NetworkSubscriptionDownloadInvoice=function(n,t){return new DialogViewModelBuilder(app.route.NetworkSubscription_DownloadPDFInvoiceFromXero.For(n),"Download Invoice from Xero","Download",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).CreateDownload()}}(Form||(Form={})),function(n){n.NetworkSubscriptionRenew=function(n,t){var i={fee:ko.observable(n.Fee),endLocal:ko.observable(n.EndLocal),subscriptionPlanId:ko.observable(n.NetworkSubscriptionPlanId),subscriptionPeriodMonths:ko.observable(n.SubscriptionPeriodMonths)};return new DialogViewModelBuilder(app.route.NetworkSubscription_RenewSubscription.For(n.NetworkSubscriptionId),"Renew Subscription","Renew",i).SubmitData(function(n){return{fee:n.fee(),endLocal:n.endLocal(),subscriptionPlanId:n.subscriptionPlanId()}}).Done(function(n,i){t&&t(i.NetworkSubscriptionId)}).MessageField("Are you sure you want to renew this subscription?.").AjaxFilterDropDownListField("subscriptionPlanId","Subscription Plan",function(n){return n.Name+" ("+n.PeriodMonths+" month plan - "+Format.Currency(n.PeriodFee)+" - "+n.MaxNodes+" nodes max)"},function(n){return n.SubscriptionPlanId},app.route.NetworkSubscriptionPlan_AvailableNetworkSubscriptionPlans.For(),!1,{SubscriptionPlanId:i.subscriptionPlanId()},"Name").DateField("endLocal","End Date").Create()}}(Form||(Form={})),function(n){n.NetworkSubscriptionPlanUpdate=function(n,t){return new DialogViewModelBuilder(app.route.NetworkSubscriptionPlan_UpdateNetworkSubscriptionPlan.For(n.NetworkSubscriptionPlanId),"Update Plan","Update",{name:ko.observable(n.Name),months:ko.observable(n.PeriodMonths),fee:ko.observable(n.PeriodFee),maxNodes:ko.observable(n.MaxNodes),description:ko.observable(n.Description)}).SubmitData(function(n){return{name:n.name(),months:n.months(),fee:n.fee(),maxNodes:n.maxNodes(),description:n.description()}}).Done(function(){t&&t()}).TextField("name","Plan Name",null,!1).MultilineTextField("description","Description",null,!1).IntNumberField("maxNodes","Max Nodes",0,255,!1).IntNumberField("months","Period (months)",0,null,!1).NumberField("fee","Period Fee",0,null,!1).Create()}}(Form||(Form={})),function(n){n.NoteDelete=function(n,t){return new DialogViewModelBuilder(app.route.Note_Delete.For(n),"Delete Note","Update",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this note?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible action").Create()}}(Form||(Form={})),function(n){n.NoteEdit=function(n,t){return new DialogViewModelBuilder(app.route.Note_Edit.For(n.NoteId),"Update Note","Update",{title:ko.observable(n.Title),details:ko.observable(n.Details)}).SubmitData(function(n){return{title:n.title(),details:n.details()}}).Done(function(n,i){t&&t(i.Title,i.Details)}).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.ProfileAddEmailAddress=function(n){return new DialogViewModelBuilder(app.route.Profile_AddEmailAddress.For(),"Add Email Address","Add",{emailAddress:ko.observable(),primary:ko.observable(!1)}).SubmitData(function(n){return{emailAddress:n.emailAddress(),primary:n.primary()}}).Done(function(){n&&n()}).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()}}(Form||(Form={})),function(n){n.ProfileAddPhoneNumber=function(n){return new DialogViewModelBuilder(app.route.Profile_AddPhoneNumber.For(),"Add Phone Number","Add",{phoneNumber:ko.observable(),primary:ko.observable(!1)}).SubmitData(function(n){return{phoneNumber:n.phoneNumber(),primary:n.primary()}}).Done(function(){n&&n()}).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()}}(Form||(Form={})),function(n){n.ProfileChangeName=function(n,t){return new DialogViewModelBuilder(app.route.Profile_ChangeName.For(),"Change Name","Update",{name:ko.observable(n)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,i){t&&t(i.Name)}).MessageField("Update your name as you want it to be displayed on the Dashboard.").TextField("name","Name",255).Create()}}(Form||(Form={})),function(n){n.ProfileChangePassword=function(n){var t={oldPassword:ko.observable(""),newPassword:ko.observable("")};return new DialogViewModelBuilder(app.route.Account_ChangePassword.For(),"Change Password","Update",t).SubmitData(function(n){return{oldPassword:n.oldPassword(),newPassword:n.newPassword()}}).Done(function(){n&&n()}).MessageField("Verify your identity:").PasswordField("oldPassword","Old Password").MessageField("Enter your new password, then again to confirm:").PasswordStrengthField("strength",ko.computed(function(){return"Strength: "+CheckPassStrength(t.newPassword())}),ko.computed(function(){var n=ScorePassword(t.newPassword());return n>80?"green":n>50?"orange":"red"})).NewPasswordField("newPassword","New Password","confirmPassword","Confirm Password").Create()}}(Form||(Form={})),function(n){n.ProfileChangeTimezone=function(n,t,i){return new DialogViewModelBuilder(app.route.Profile_ChangeTimezone.For(),"Change Timezone","Update",{timeZoneName:ko.observable(n)}).SubmitData(function(n){return{timeZoneName:n.timeZoneName()}}).Done(function(n,t){i&&i(t.TimeZoneName)}).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},app.route.Home_TimeZoneNames.For(),!1,{TimeZoneName:n,BaseUtcOffset:t},"TimeZoneName",5,1).Create()}}(Form||(Form={})),function(n){n.ProfileClearSuppressAlerts=function(n){return new DialogViewModelBuilder(app.route.Profile_ClearSuppressAlerts.For(),"Clear Suppress Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){n&&n()}).MessageField("Are you sure you want to clear suppressing alerts?").Create()}}(Form||(Form={})),function(n){n.ProfileRemoveEmailAddress=function(n,t){return new DialogViewModelBuilder(app.route.Profile_RemoveEmailAddress.For(),"Remove Email Address","Remove",{}).SubmitData(function(){return{emailAddress:n}}).Done(function(){t&&t()}).MessageField("Are you sure you want to remove the email address "+n+"?").Create()}}(Form||(Form={})),function(n){n.ProfileRemovePhoneNumber=function(n,t){return new DialogViewModelBuilder(app.route.Profile_RemovePhoneNumber.For(),"Remove Phone Number","Remove",{}).SubmitData(function(){return{phoneNumber:n}}).Done(function(){t&&t()}).MessageField("Are you sure you want to remove the phone number "+Format.PhoneNumber(n)+"?").Create()}}(Form||(Form={})),function(n){n.ProfileSetPrimaryEmailAddress=function(n,t){return new DialogViewModelBuilder(app.route.Profile_SetPrimaryEmailAddress.For(),"Set Primary Email Address","Set",{}).SubmitData(function(){return{emailAddress:n}}).Done(function(){t&&t()}).MessageField("Are you sure you want to set the email address "+n+" as your primary email address?").Create()}}(Form||(Form={})),function(n){n.ProfileSetPrimaryPhoneNumber=function(n,t){return new DialogViewModelBuilder(app.route.Profile_SetPrimaryPhoneNumber.For(),"Set Primary Phone Number","Set",{}).SubmitData(function(){return{phoneNumber:n}}).Done(function(){t&&t()}).MessageField("Are you sure you want to set the phone number "+Format.PhoneNumber(n)+" as your primary phone number?").Create()}}(Form||(Form={})),function(n){n.ProfileSuppressAlerts=function(n){return new DialogViewModelBuilder(app.route.Profile_SuppressAlerts.For(),"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(){n&&n()}).MessageField("Are you sure you want to suppress alerts?").DateTimeField("suppressUntil","Suppress Until").Create()}}(Form||(Form={})),function(n){n.ProfileUnsubscribeFromModuleAlert=function(n,t,i,r){return new DialogViewModelBuilder(app.route.Profile_UnsubscribeFromModuleAlert.For(),"Unsubscribe from Module Alert","Unsubscribe",{}).SubmitData(function(){return{moduleId:n,alertAndStatus:t}}).Done(function(){r&&r()}).MessageField("Click unsubscribe to stop receiving alerts for the "+i+" alert.").Create()}}(Form||(Form={})),function(n){n.ProfileUnsubscribeFromNetworkSyncAlerts=function(n,t,i){return new DialogViewModelBuilder(app.route.Profile_UnsubscribeFromNetworkSyncAlert.For(),"Unsubscribe from Network Sync Alert","Unsubscribe",{}).SubmitData(function(){return{networkId:n}}).Done(function(){i&&i()}).MessageField("Click unsubscribe to stop receiving network sync alerts for "+t+".").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderAcknowledge=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_Acknowledge.For(n),"Acknowledge Purchase Order","Acknowledge",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Acknowledge order and begin processing.").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderAddItemTypes=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_AddItem.For(n),"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&&t()}).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.").MessageField("Only items that are not already on this purchase order are shown below.").AjaxFilterDropDownListField("costItemId","Order-able Items",function(n){return n.ItemDesc!==null&&n.ItemDesc!==""?n.ItemName+" ("+n.ItemDesc+")":n.ItemName},function(n){return n.CostItemId},app.route.PurchaseOrder_CostItemsWhichCanBeAdded.For(n),!1,null,"ItemName",null,10,!0).MultilineTextField("notes","Notes",null,!0,!0).CreateMulti()}}(Form||(Form={})),function(n){n.PurchaseOrderAddNonDeviceSerial=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_AddNonDeviceSerialItemToOpenPackingList.For(n),"Add item(s) to packing list","Add & Continue",{serialNumber:ko.observable(),costItemId:ko.observable(0)}).SubmitData(function(n){return{serialNumber:n.serialNumber(),costItemId:n.costItemId()}}).Done(function(n){n.serialNumber("");t&&t()}).AjaxFilterDropDownListField("costItemId","Order Item",function(n){return n.ItemName},function(n){return n.CostItemId},app.route.PurchaseOrder_GetNonDeviceCostItemsRequiringSerial.For(n),!1,null,"ItemName").TextField("serialNumber","Scan or enter serial",null,!0,!0,!0).CreateMulti()}}(Form||(Form={})),function(n){n.PurchaseOrderAddNonSerialDevice=function(n,t,i){var r={orderItems:ko.observableArray(t)};return new DialogViewModelBuilder(app.route.PurchaseOrder_AddNonSerialDeviceToOpenPackingList.For(n),"Add item(s) to packing list","Add",r).SubmitData(function(n){return{orderItems:n.orderItems().map(function(n){return{PurchaseOrderItemId:n.PurchaseOrderItemId,Quantity:n.BackOrdered,UnitPrice:n.UnitPrice}})}}).Done(function(){i&&i()}).MessageField("Select items to add from list below").PackingListField("Items to be added to packing list",r.orderItems).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderAddSerialDevice=function(n,t){var r={serialNumber:ko.observable("")},i=ko.observableArray();return new DialogViewModelBuilder(app.route.PurchaseOrder_AddSerialDeviceToOpenPackingList.For(n),"Add item(s) to packing list","Add & Continue",r).SubmitData(function(n){return{serialNumber:n.serialNumber()}}).Error(function(n){i.unshift(r.serialNumber()+" "+n)}).Done(function(n){i.unshift(n.serialNumber()+" Item Added");n.serialNumber("");t&&t()}).TextField("serialNumber","Scan barcode to add",null,!0,!0,!0).ListField("Scan Log",i,function(n){return n}).CreateMulti()}}(Form||(Form={})),function(n){n.PurchaseOrderAddTracking=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdatePackingListAddTracking.For(),"Add Tracking info to Packing Slip","Add",{trackingNumber:ko.observable(""),freightProviderId:ko.observable(),freightCost:ko.observable(0)}).SubmitData(function(t){return{packingListId:n,trackingNumber:t.trackingNumber(),freightProviderId:t.freightProviderId(),freightCost:t.freightCost()}}).Done(function(){t&&t()}).MessageField("Tracking Info").TextField("trackingNumber","Tracking Number").AjaxFilterDropDownListField("freightProviderId","Freight Provider",function(n){return n.FreightProviderName},function(n){return n.FreightProviderId},app.route.PurchaseOrder_AvailableFreightProviders.For(),!1,null,"FreightProviderName").NumberField("freightCost","Cost",0,1e3,!1).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderComplete=function(n,t,i){return new DialogViewModelBuilder(app.route.PurchaseOrder_Complete.For(n,{billingEntityId:t}),"Complete Purchase Order","Complete",{}).SubmitData(function(){return{}}).Done(function(){i&&i()}).MessageField("This order must be marked as complete before it will be acknowledged and processed. Only mark it as complete when it is ready for processing.").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderCompletePackingList=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_CompletePackingList.For(n),"Complete Packing List","Complete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(n,i){t&&t(i.PackingListId)}).MessageField("Completing the packing list is in irreversible action. Please confirm this is what you want to do").CheckBoxField("confirm","Confirm Completion").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderCreateInvoiceInXero=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_CreateInvoiceInXero.For(),"Create Invoice In Xero","Create",{invoiceDate:ko.observable(moment().format("YYYY-MM-DD")),confirm:ko.observable(!1)}).SubmitData(function(t){return{packingListId:n,invoiceDate:t.invoiceDate(),confirm:t.confirm()}}).Done(function(){t&&t()}).MessageField("Only create an invoice once all pricing is set correctly.").DateField("invoiceDate","Invoice Date").CheckBoxField("confirm","Confirm Create").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderDateRangeSelection=function(n,t,i){return new DialogViewModelBuilder(null,"Select Date Range","Set",{startLocal:ko.observable(moment(n).format("YYYY-MM-DD")),endLocal:ko.observable(moment(t).format("YYYY-MM-DD"))}).Submit(function(n){i&&i(n.startLocal(),n.endLocal())}).Validate(function(n){return n.startLocal()>n.endLocal()?"Start date must be earlier than end date":null}).DateField("startLocal","Start").DateField("endLocal","End").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderDelete=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_Delete.For(n),"Delete Purchase Order","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.PurchaseOrderDeleteTracking=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_DeleteTrackingFromPackingList.For(),"Delete Tracking Info","Delete",{}).SubmitData(function(){return{freightTrackingId:n}}).Done(function(){t&&t()}).MessageField("Confirm deletion of this tracking item.").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderDownloadXeroInvoice=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_DownloadPDFInvoiceFromXero.For(),"Download Invoice from Xero","Download",null).SubmitData(function(){return{packingListId:n}}).Done(function(){t&&t()}).CreateDownload()}}(Form||(Form={})),function(n){n.PurchaseOrderEditAddress=function(n,t,i,r,u){var f={addressId:ko.observable(t),deliveryNotes:ko.observable(r),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(app.route.PurchaseOrder_UpdateAddress.For(n),"Update Delivery Address","Update",f).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(){u&&u()}).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 app.route.PurchaseOrder_GetTargetBillingEntityAddresses.For(n,{showAllAddresses:f.showAllAddresses})}),!1,{FullAddress:i,AddressId:t}).MultilineTextField("deliveryNotes","Delivery Notes",null,!0).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderEditNotes=function(n,t,i){return new DialogViewModelBuilder(app.route.PurchaseOrder_EditOrderNotes.For(n),"Update Order Notes","Update",{orderNotes:ko.observable(t)}).SubmitData(function(n){return{orderNotes:n.orderNotes()}}).Done(function(){i&&i()}).MultilineTextField("orderNotes","Notes  (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderEditPackingListItemPricing=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdateItemPrice.For(),"Update Pricing for Item","Update",{unitPrice:ko.observable(i.toFixed(2)),notes:ko.observable(r)}).SubmitData(function(i){return{packingListId:n,purchaseOrderItemId:t,unitPrice:i.unitPrice(),notes:i.notes()}}).Done(function(){u&&u()}).NumberField("unitPrice","Unit Price",null,null,!1).MultilineTextField("notes","Notes",null,!0,!0).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderEditTracking=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdateTrackingItem.For(),"Update Tracking Info","Update",{trackingNumber:ko.observable(t),freightProviderId:ko.observable(i),freightCost:ko.observable(r)}).SubmitData(function(t){return{freightTrackingId:n,trackingNumber:t.trackingNumber(),freightProviderId:t.freightProviderId(),freightCost:t.freightCost()}}).Done(function(){u&&u()}).MessageField("Tracking Info").TextField("trackingNumber","Tracking Number").AjaxFilterDropDownListField("freightProviderId","Freight Provider",function(n){return n.FreightProviderName},function(n){return n.FreightProviderId},app.route.PurchaseOrder_AvailableFreightProviders.For(),!1,{FreightProviderId:i},"FreightProviderName").NumberField("freightCost","Cost",0,1e3,!1).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderReceiveOrder=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdatePackingListReceipted.For(null,{packingListId:n}),"Receive Order","Receive",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Click confirm to mark this order as received.").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderRemoveItem=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.PurchaseOrder_DeleteItem.For(n),"Remove Item from Purchase Order","Remove",{}).SubmitData(function(){return{purchaseOrderItemId:t}}).Done(function(){u&&u()}).MessageField("Are you sure you want to remove "+r+" from the purchase order?").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderRemoveNonDeviceSerialItemsFromPackingList=function(n,t,i,r){return new DialogViewModelBuilder(app.route.PurchaseOrder_RemoveNonDeviceSerialNumbersFromPackingList.For(n),"Remove item(s) from packing list","Remove",{serialNumbers:ko.observableArray()}).SubmitData(function(n){return{serialNumbers:n.serialNumbers()}}).Done(function(){r&&r()}).MessageField("Select "+t+" serial numbers to remove").MultiSelectListField("serialNumbers","Select items to remove (ctrl-click or drag for multi select)",function(n){return n},function(n){return n},i,25,!0).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderRemoveNonSerialItemsFromPackingList=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.PurchaseOrder_RemoveNonSerialItemsFromPackingList.For(n),"Remove item(s) from packing list","Remove",{quantity:ko.observable(0)}).SubmitData(function(n){return{purchaseOrderItemId:t,quantity:n.quantity()}}).Done(function(){u&&u()}).MessageField("Select the quantity of "+i+" to remove").IntNumberField("quantity","Quantity",1,r,!1).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderRemoveSerialItemsFromPackingList=function(n,t,i,r){return new DialogViewModelBuilder(app.route.PurchaseOrder_RemoveSerialNumbersFromPackingList.For(n),"Remove item(s) from packing list","Remove",{serialNumbers:ko.observableArray([])}).SubmitData(function(n){return{serialNumbers:n.serialNumbers()}}).Done(function(){r&&r()}).MessageField("Select "+t+" serial numbers to remove").MultiSelectListField("serialNumbers","Select items to remove (ctrl-click or drag for multi select)",function(n){return n},function(n){return n},i,25,!0).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderRevokeCompletion=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_RevokeCompletion.For(n),"Revoke Completion","Revoke",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Revoking completion on this order will enable the client to edit this purchase order.").CheckBoxField("confirm","Confirm revocation").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderUpdateExpectedDate=function(n,t,i){var r={expectedDateUtc:ko.observable(t!=null?moment(t).format("YYYY-MM-DD"):null),unsetDate:ko.observable(!1)};return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdateOrderExpectedDate.For(),"Set Expected Date","Set",r).SubmitData(function(t){return{purchaseOrderItemId:n,expectedDateUtc:t.unsetDate()?null:moment(t.expectedDateUtc()).utc().toISOString()}}).Done(function(){i&&i()}).DateField("expectedDateUtc","Expected Date",!0).CheckBoxField("unsetDate","Unset Expected Date",r.expectedDateUtc()!=null).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderUpdateOrderItems=function(n,t){return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdateOrderItem.For(),"Update Order Item","Update",{quantity:ko.observable(n.Quantity),notes:ko.observable(n.Notes)}).SubmitData(function(t){return{purchaseOrderItemId:n.PurchaseOrderItemId,quantity:t.quantity(),notes:t.notes(),expectedUtc:n.ExpectedDateUtc}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.PurchaseOrderUpdatePackingListNotes=function(n,t,i){return new DialogViewModelBuilder(app.route.PurchaseOrder_UpdatePackingListDeliveryNotes.For(),"Update Delivery Notes","Update",{deliveryNotes:ko.observable(t)}).SubmitData(function(t){return{packingListId:n,deliveryNotes:t.deliveryNotes()}}).Done(function(){i&&i()}).MultilineTextField("deliveryNotes","Delivery notes  (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.PurchaseOrderViewOrderItemDetail=function(n,t,i,r,u){return new DialogViewModelBuilder(null,"Order Item Details","Close",{}).DisplayField("ItemName",n).DisplayField("ItemDescription",t).DisplayField("PriceEstimate","Unit Price $"+i.toFixed(2)).DisplayField("Quantity","Quantity: "+r).DisplayField("Notes","Notes: "+u).Create()}}(Form||(Form={})),function(n){n.PurchaseOrderViewSerialNumbers=function(n){return new DialogViewModelBuilder(null,"Item Serial Numbers","Close",{}).ListField("Serial Number",n,function(n){return n.toUpperCase()}).Create()}}(Form||(Form={})),function(n){n.ReportDelete=function(n,t){return new DialogViewModelBuilder(app.route.Report_Delete.For(n),"Delete Report","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.ReportEdit=function(n,t,i){return new DialogViewModelBuilder(app.route.Report_Rename.For(n),"Rename Report","Update",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n){i&&i(n.name())}).TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.ReportEditJson=function(n,t,i){return new DialogViewModelBuilder(app.route.Report_Update.For(n),"Update Report","Update",{json:ko.observable(t)}).SubmitData(function(n){return{json:n.json()}}).Done(function(n){i&&i(n.json())}).MultilineTextField("json","Report Config").Create()}}(Form||(Form={})),function(n){n.ReportModuleTypeAlerts=function(n,t,i){return new DialogViewModelBuilder(undefined,n,"Copy To Clipboard",{alerts:[]}).Submit(function(t){i&&i(n,t.alerts)}).SectionField("Select alerts and submit form to copy into clipboard").CheckBoxListField("alerts","Module Type Alerts",t.sort(function(n,t){return n.AlertAndStatus<t.AlertAndStatus?-1:1}),function(n){return"("+Format.Pad(n.AlertAndStatus,3)+") "+n.Name},function(n){return n.AlertAndStatus}).Create()}}(Form||(Form={})),function(n){n.ReportRun=function(n,t,i,r,u){return new DialogViewModelBuilder(null,"Run Report","Run",{startLocal:ko.observable((i==null?moment().add("day",-7):moment(i)).format("YYYY-MM-DD")),endLocal:ko.observable((r==null?moment():moment(r)).format("YYYY-MM-DD")),reportTemplateId:ko.observable(n)}).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){u&&u(n.reportTemplateId(),n.startLocal(),n.endLocal())}).Done(function(){}).AjaxCompactFilterDropDownListField("reportTemplateId","Report",function(n){return n.Name},function(n){return n.ReportTemplateId},app.route.Report_GetAvailableReports.For(),!1,t===""?null:{ReportTemplateId:n,Name:t},"Name",5,1).DateField("startLocal","Start").DateField("endLocal","End").Create()}}(Form||(Form={})),function(n){n.ReportRunOnGroup=function(n){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(t){n&&n(t.targetGroupId(),t.startLocal(),t.endLocal())}).Done(function(){}).AjaxCompactFilterDropDownListField("targetGroupId","Group",function(n){return n.Name},function(n){return n.GroupId},app.route.Group_AvailableGroups.For(),!1,null,"Name",5,1).DateField("startLocal","Start").DateField("endLocal","End").Create()}}(Form||(Form={})),function(n){n.RfidChangeTagAccessLevel=function(n,t,i){return new DialogViewModelBuilder(app.route.Rfid_SetTagAccessLevel.For(n),"Set Tag Access Level","Update",{opensCabinet:ko.observable(t)}).SubmitData(function(n){return{opensCabinet:n.opensCabinet()}}).Done(function(n,t){i&&i(t.OpensCabinet)}).MessageField("Specify the access level for this tag.").CheckBoxField("opensCabinet","Maintenance Access").Create()}}(Form||(Form={})),function(n){n.RfidDeleteTag=function(n,t,i){return new DialogViewModelBuilder(app.route.Rfid_Delete.For(n),"Delete Tag","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to delete rfid tag "+t+"?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of rfid tag").Create()}}(Form||(Form={})),function(n){n.RfidRenameTag=function(n,t,i){return new DialogViewModelBuilder(app.route.Rfid_RenameTag.For(n),"Rename Tag","Rename",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).MessageField("Specify a unique name for this RFID tag.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.RoleAddCapabilities=function(n,t){return new DialogViewModelBuilder(app.route.Role_AddExistingCapability.For(n),"Add Capability to Role","Add",{capabilityIds:ko.observableArray()}).SubmitData(function(n){return{capabilityIds:n.capabilityIds()}}).Done(function(){t&&t()}).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},app.route.Role_CapabilitiesWhichCanBeAdded.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.RoleDelete=function(n,t,i){return new DialogViewModelBuilder(app.route.Role_Delete.For(n),"Delete Role","Rename",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){i&&i()}).MessageField("Are you sure you want to delete role "+t+"?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of role").Create()}}(Form||(Form={})),function(n){n.RoleRemoveCapability=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.Role_RemoveCapability.For(n),"Remove Capability from Role","Remove",{}).SubmitData(function(){return{capabilityId:t}}).Done(function(){u&&u()}).MessageField("Are you sure you want to remove the capability "+r+" from the role "+i+"?").Create()}}(Form||(Form={})),function(n){n.RoleRename=function(n,t,i){return new DialogViewModelBuilder(app.route.Role_Rename.For(n),"Rename Role","Rename",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).MessageField("Specify a name for this role.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.SectionAddCumulativeMeters=function(n,t){var i={network:ko.observable(0),node:ko.observable({}),meters:ko.observable({})},r=ko.observable(!0);return new DialogViewModelBuilder(app.route.Section_AddCumulativeMeters.For(n),"Add Meters","Add & Continue",i).SubmitData(function(n){return r(!1),r(!0),{cumulativeMeterIds:n.meters().map(function(n){return n.CumulativeMeterId})}}).Done(function(){t&&t()}).MessageField("Select 1 or more meters to add to this section.").AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.Network_GetUserNetworks.For(),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return Format.NodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return i.network()?app.route.Network_GetUserNetworkNodes.For(i.network()):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 r()&&i.network()&&i.node()?app.route.Section_NetworkMetersNotInSection.For(n,{networkId:i.network,nodeAddress:i.node().NodeAddress}):null}),10,!0).CreateMulti()}}(Form||(Form={})),function(n){n.SectionAddModules=function(n,t){var i={network:ko.observable(0),node:ko.observable({}),modules:ko.observable({})},r=ko.observable(!0);return new DialogViewModelBuilder(app.route.Section_AddModules.For(n),"Add Modules","Add & Continue",i).SubmitData(function(n){return r(!1),r(!0),{moduleIds:n.modules().map(function(n){return n.ModuleId})}}).Done(function(){t&&t()}).MessageField("Select 1 or more modules to add to this section.").AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.Network_GetUserNetworks.For(),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return Format.NodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return i.network()?app.route.Network_GetUserNetworkNodes.For(i.network()):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 r()&&i.network()&&i.node()?app.route.Section_NetworkModulesNotInSection.For(n,{networkId:i.network,nodeAddress:i.node().NodeAddress}):null}),10,!0).CreateMulti()}}(Form||(Form={})),function(n){n.SectionCreate=function(n){return new DialogViewModelBuilder(app.route.Section_Create.For(),"Create Dashboard Section","Create",{name:ko.observable()}).SubmitData(function(n){return{name:n.name()}}).Done(function(t,i){n&&n(i.DashboardGroupId)}).MessageField("Specify the name for the new section.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.SectionDelete=function(n,t){return new DialogViewModelBuilder(app.route.Section_Delete.For(n),"Delete Dashboard Section","Delete",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this section from your dashboard?").Create()}}(Form||(Form={})),function(n){n.SectionRemoveCumulativeMeters=function(n,t){return new DialogViewModelBuilder(app.route.Section_RemoveCumulativeMeters.For(n),"Remove Meters","Remove",{cumulativeMeterIds:ko.observableArray()}).SubmitData(function(n){return{cumulativeMeterIds:n.cumulativeMeterIds()}}).Done(function(){t&&t()}).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},app.route.Section_CumulativeMetersWhichCanBeRemoved.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.SectionRemoveModules=function(n,t){return new DialogViewModelBuilder(app.route.Section_RemoveModules.For(n),"Remove Modules","Remove",{moduleIds:ko.observableArray()}).SubmitData(function(n){return{moduleIds:n.moduleIds()}}).Done(function(){t&&t()}).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},app.route.Section_ModulesWhichCanBeRemoved.For(n),15,!0).Create()}}(Form||(Form={})),function(n){n.SectionRename=function(n,t,i){return new DialogViewModelBuilder(app.route.Section_Rename.For(n),"Rename Dashboard Section","Rename",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).MessageField("Specify the new name for the section.").TextField("name","Name").Create()}}(Form||(Form={})),function(n){n.SectionSortOrder=function(n,t,i){return new DialogViewModelBuilder(app.route.Section_SortOrder.For(n),"Update Section Sort Order","Update",{sortOrder:ko.observable(t)}).SubmitData(function(n){return{sortOrder:n.sortOrder()}}).Done(function(n,t){i&&i(t.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()}}(Form||(Form={})),function(n){n.SharedCollectionAddChart=function(n,t,i){var r={name:ko.observable("New Chart"),type:ko.observable("line"),sortIndex:ko.observable(t.highestIndex()+1),height:ko.observable(250),timescale:ko.observable(!0),tsHeight:t.config.chartTypeOptions.timescale.Heights[0].Value},u,f;return ko.computed(function(){r.type();r.height(t.config.chartTypeOptions[r.type()].Default);r.type()==="timescale"?($('input[name="name"]').prop("disabled",!0),$('input[name="timescale"]').prop("disabled",!0),r.name("")):($('input[name="name"]').prop("disabled",!1),$('input[name="timescale"]').prop("disabled",!1))}),u=new DialogViewModelBuilder(app.route.SharedCollection_AddChartToCollection.For(n),"Add Chart To Report","Add",r).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(){i&&i()}).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[r.type()].Heights})).CheckBoxField("timescale","Add a timescale with the new chart?"),u.MessageField("Chart Options"),f=new ChartOptions,f.List().forEach(function(n){var t="option."+n.Field;u.CheckBoxField(t,n.Name);r[t]=n.Value}),u.Create()}}(Form||(Form={})),function(n){n.SharedCollectionAddChartItem=function(n,t,i,r){var u={chartId:ko.observable(t.chartId()),network:ko.observable(0),node:ko.observable(),module:ko.observable(),trendName:ko.observable(""),displayName:ko.observable(""),offsetValue:ko.observable(0),offsetUnit:ko.observable(""),colour:ko.observable(""),colorOffset:ko.observable(0),trends:{}},o=ko.observableArray(t.chartItems()),f=ko.observable(t.chartType()),s=t.collection.charts,h=ko.computed(function(){return o().map(function(n){return n.colour()})}),c=function(n){for(var t=0;t<i.chartColors.length;t++)if(n.indexOf(i.chartColors[t].substring(1))===-1){u.colorOffset(t);break}},l,e;return ko.computed(function(){c(h())}),l=function(){s().forEach(function(n){n.chartId()===u.chartId()&&(o(n.chartItems()),f(n.chartType()))})},ko.computed(function(){u.chartId();ko.ignoreDependencies(function(){return l()})}),ko.computed(function(){u.colour(i.colorScale(""+u.colorOffset()).substring(1))}),e=[],s().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()+"]":"";e.push({name:i,chartId:n.chartId()})}}),u.trends=ko.computed(function(){var t=u.module(),n;return t&&isArray(t.Trends)?(n=[],t.Trends.forEach(function(t){if(!t.IsCumulative){n.push(t);return}f()==="histogram"?n.push({IsCumulative:!0,Name:t.Name,Type:"histogram",Units:t.Units}):(t.Type="line",n.push(t),n.push({IsCumulative:!0,Name:t.Name,Type:"cumulative",Units:t.Units}))}),d3.select("#trendName").attr("size",Math.min(5,n.length)),n):[]}),ko.computed(function(){var i=u.module(),t=u.trendName(),n;t&&(t=t.replace("[line]",""),t=t.replace("[cumulative]",""),t=t.replace("[histogram]",""));i&&t&&(n=i.Name+" - "+t,n.length>50&&n.indexOf(":")>-1&&(n=n.substr(n.indexOf(":")+1)),n.length>50&&(n="..."+n.substr(-47)),u.displayName(n))}),new DialogViewModelBuilder(app.route.SharedCollection_AddItemToChart.For(n),"Add Item to Chart","Add & Continue",u).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){var t=h();t.push(n.colour());c(t);r&&r()}).DropDownListField("chartId","Add to chart",function(n){return n.name},function(n){return n.chartId},e).AjaxCompactFilterDropDownListField("network","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.Chart_GetUserNetworks.For(),!1,null,"Name",3,1).AjaxCompactFilterDropDownListField("node","Node",function(n){return Format.NodeAddress(n.NodeAddress)+" - "+n.Name},function(n){return n},ko.computed(function(){return u.network()?app.route.Chart_GetUserNetworkNodes.For(u.network()):null}),!0,null,"Name",3,1).AjaxCompactFilterDropDownListField("module","Module",function(n){return n.Name},function(n){return n},ko.computed(function(){return u.network()&&u.node()?app.route.Chart_GetUserNetworkModules.For(u.network(),{nodeAddress:u.node().NodeAddress,type:f()}):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+"]":"")},u.trends).TextField("displayName","Display Name",50).ColorField("colour","Colour",6,!1,u.colorOffset,i.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},i.offsetUnits).CreateMulti()}}(Form||(Form={})),function(n){n.SharedCollectionCloneToPrivate=function(n,t,i,r){return new DialogViewModelBuilder(app.route.SharedCollection_PrivatiseSharedChart.For(n),"Create Chart Report Copy","Create Copy",{name:ko.observable(t),daysToDisplay:ko.observable(i)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,t){r&&r(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()}}(Form||(Form={})),function(n){n.SharedCollectionConfigure=function(n,t,i,r){return new DialogViewModelBuilder(app.route.SharedCollection_ConfigureCollection.For(n),"Configure Chart Collection","Update",{name:ko.observable(t),daysToDisplay:ko.observable(i)}).SubmitData(function(n){return{name:n.name(),daysToDisplay:n.daysToDisplay()}}).Done(function(n,t){r&&r(t.Name,t.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()}}(Form||(Form={})),function(n){n.SharedCollectionConfigureChart=function(n,t,i,r){var u={chartId:ko.observable(t.chartId()),name:ko.observable(t.chartName()),type:ko.observable(t.chartType()),height:ko.observable(t.configHeight()),types:{}},e=ko.observable(0),o=0,s=function(){var n=!0;i.chartTypeOptions[u.type()].Heights.forEach(function(t){o===t.Value&&(n=!1)});n&&u.height(i.chartTypeOptions[u.type()].Default)},f;return ko.computed(function(){if(u.type(),e(e()+1),!ko.computedContext.isInitial()){var n=function(){return s()};typeof s=="function"&&ko.ignoreDependencies(n)}}),u.types=ko.computed(function(){var n=[];return u.type()==="line"?(n.push({Name:"Line",Value:"line"}),n.push({Name:"Histogram",Value:"histogram"}),t.chartItems().length===0&&(n.push({Name:"Tape",Value:"tape"}),n.push({Name:"Timescale",Value:"timescale"}))):u.type()==="histogram"?(n.push({Name:"Histogram",Value:"histogram"}),n.push({Name:"Line",Value:"line"}),t.chartItems().length===0&&(n.push({Name:"Tape",Value:"tape"}),n.push({Name:"Timescale",Value:"timescale"}))):u.type()==="tape"?(n.push({Name:"Tape",Value:"tape"}),t.chartItems().length===0&&(n.push({Name:"Line",Value:"line"}),n.push({Name:"Histogram",Value:"histogram"}),n.push({Name:"Timescale",Value:"timescale"}))):u.type()==="timescale"&&(n.push({Name:"Timescale",Value:"timescale"}),n.push({Name:"Line",Value:"line"}),n.push({Name:"Histogram",Value:"histogram"}),n.push({Name:"Tape",Value:"tape"})),n}),f=new DialogViewModelBuilder(app.route.SharedCollection_ConfigureChartInCollection.For(n),"Configure Chart","Update",u).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(){r&&r()}).Done(function(){r&&r()}).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},u.types).DropDownListField("height","Display Height",function(n){return n.Name},function(n){return n.Value},ko.computed(function(){return e(),o=u.height.peek(),i.chartTypeOptions[u.type.peek()].Heights})),f.MessageField("Chart Options"),t.options().List().forEach(function(n){var t="option."+n.Field;f.CheckBoxField(t,n.Name);u[t]=n.Value}),f.Create()}}(Form||(Form={})),function(n){n.SharedCollectionConfigureItem=function(n,t,i,r){var u={chartId:ko.observable(t.chartId()),chartItemId:ko.observable(t.chartItemId()),displayName:ko.observable(t.name()),offsetValue:ko.observable(t.offsetValue()),offsetUnit:ko.observable(t.offsetUnit()),axisTitle:ko.observable(t.axisTitle()),colour:ko.observable(t.colour()),colorOffset:ko.observable(0),itemType:ko.observable(t.itemType())},f;return ko.computed(function(){u.colorOffset();ko.computedContext.isInitial()||u.colour(i.colorScale(""+u.colorOffset()).substring(1))}),f=new DialogViewModelBuilder(app.route.SharedCollection_ConfigureItemInChart.For(n),"Configure Chart Item","Update",u).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(n){var u,i,f;if(t.offsetValue()!==+n.offsetValue()||t.offsetUnit()!==n.offsetUnit()||t.itemType()!==n.itemType())for(u in t.collection.dataCollection.data)if(t.collection.dataCollection.data.hasOwnProperty(u)){i=t.collection.dataCollection.data[u];for(f in i)i.hasOwnProperty(f)&&+f===t.chartItemId()&&(i[t.chartItemId()]=null)}r&&r()}).TextField("displayName","Display Name",50).ColorField("colour","Colour",6,!1,u.colorOffset,i.chartColors).MessageField("Specify the date offset (0 for none)."),(t.itemType()==="cumulative"||t.itemType()==="line"&&t.isCumulative())&&f.DropDownListField("itemType","Item Type",function(n){return n.Name},function(n){return n.Value},[{Name:"Line",Value:"line"},{Name:"Cumulative",Value:"cumulative"}]),f.IntNumberField("offsetValue","Offset Period Amount",0,365).DropDownListField("offsetUnit","Offset Period Units",function(n){return n.Name},function(n){return n.Value},i.offsetUnits),f.Create()}}(Form||(Form={})),function(n){n.SharedCollectionDeleteChart=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.SharedCollection_DeleteChartFromCollection.For(n),"Remove Chart from Report","Remove",{chartId:ko.observable(t),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),confirm:n.confirm()}}).Done(function(){u&&u()}).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(i+" - "+r).Create()}}(Form||(Form={})),function(n){n.SharedCollectionDeleteChartItem=function(n,t,i,r,u,f,e){return new DialogViewModelBuilder(app.route.SharedCollection_DeleteItemFromChart.For(n),"Delete Chart Item","Delete",{chartId:ko.observable(t),chartItemId:ko.observable(i),confirm:ko.observable(!1)}).SubmitData(function(n){return{chartId:n.chartId(),chartItemId:n.chartItemId(),confirm:n.confirm()}}).Done(function(){e&&e()}).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(r+" - "+u+" - "+name).Create()}}(Form||(Form={})),function(n){n.SharedCollectionDownloadData=function(n,t,i,r,u){return new DialogViewModelBuilder(app.route.SharedCollection_DownloadChartData.For(n),"Download Data","Download",{startLocal:ko.observable(moment().subtract("days",i).format("YYYY-MM-DD")),endLocal:ko.observable(moment().format("YYYY-MM-DD"))}).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."}).SubmitData(function(n){return{chartId:r||0,collectionName:t,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(){u&&u()}).MessageField("Select the date range to download.").DateField("startLocal","Start Date").DateField("endLocal","End Date").CreateDownload()}}(Form||(Form={})),function(n){n.SimDelete=function(n,t){return new DialogViewModelBuilder(app.route.Sim_Delete.For(n),"Delete Sim","Delete",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).MessageField("Are you sure you want to delete this sim?").MessageField("THIS ACTION CANNOT BE UNDONE!").CheckBoxField("confirm","Confirm irreversible deletion of sim").Create()}}(Form||(Form={})),function(n){n.SimEdit=function(n,t){return new DialogViewModelBuilder(app.route.Sim_Update.For(n.SimId),"Update Sim","Update",{simNumber:ko.observable(n.SimNumber),phoneNumber:ko.observable(n.PhoneNumber),cancelled:ko.observable(n.Cancelled)}).SubmitData(function(n){return{simNumber:n.simNumber(),phoneNumber:n.phoneNumber(),cancelled:n.cancelled()}}).Done(function(){t&&t()}).TextField("simNumber","Sim Number").TextField("phoneNumber","Phone Number").CheckBoxField("cancelled","Cancelled").Create()}}(Form||(Form={})),function(n){n.SimSetCellularNetwork=function(n,t,i){return new DialogViewModelBuilder(app.route.Sim_SetCellularNetwork.For(n),"Update Cellular Network","Update",{cellularNetworkId:ko.observable(t)}).SubmitData(function(n){return{cellularNetworkId:n.cellularNetworkId()}}).Done(function(){i&&i()}).AjaxFilterDropDownListField("cellularNetworkId","Cellular Network",function(n){return n.Name},function(n){return n.CellularNetworkId},app.route.Sim_AvailableCellularNetworks.For(n),!1,{CellularNetworkId:t},"Name",10,10).Create()}}(Form||(Form={})),function(n){n.SimSetNetwork=function(n,t,i){return new DialogViewModelBuilder(app.route.Sim_SetNetwork.For(n),"Assign Sim to Network","Assign",{networkId:ko.observable(t)}).SubmitData(function(n){return{networkId:n.networkId()}}).Done(function(){i&&i()}).AjaxCompactFilterDropDownListField("networkId","Network",function(n){return n.Name},function(n){return n.NetworkId},app.route.Sim_AvailableNetworksWithGatewayDevice.For(n),!1,{NetworkId:t},"Name",5,1).Create()}}(Form||(Form={})),function(n){n.UserAddContacts=function(n,t){return new DialogViewModelBuilder(app.route.User_AddEmailAndPhoneNumber.For(n),"Add User 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(){t&&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()}}(Form||(Form={})),function(n){n.UserAddEmailAddress=function(n,t){return new DialogViewModelBuilder(app.route.User_AddEmailAddress.For(n),"Add User Email Address","Add",{emailAddress:ko.observable(),primary:ko.observable(!1)}).SubmitData(function(n){return{emailAddress:n.emailAddress(),primary:n.primary()}}).Done(function(){t&&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()}}(Form||(Form={})),function(n){n.UserAddPhoneNumber=function(n,t){var i={phoneNumber:ko.observable(),formattedPhoneNumber:ko.observable(null),primary:ko.observable(!1),confirmFormatChange:ko.observable(!1)};return new DialogViewModelBuilder(app.route.User_AddPhoneNumber.For(n),"Add User Phone Number","Add",i).SubmitData(function(n){return{phoneNumber:n.phoneNumber(),primary:n.primary(),confirmFormatChange:n.confirmFormatChange()}}).Done(function(){t&&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()}}(Form||(Form={})),function(n){n.UserChangeName=function(n,t,i){return new DialogViewModelBuilder(app.route.User_ChangeName.For(n),"Change Name","Update",{name:ko.observable(t)}).SubmitData(function(n){return{name:n.name()}}).Done(function(n,t){i&&i(t.Name)}).MessageField("Update the users name as it should be displayed on the Dashboard.").TextField("name","Name",255).Create()}}(Form||(Form={})),function(n){n.UserChangeTimezone=function(n,t,i){return new DialogViewModelBuilder(app.route.User_ChangeTimezone.For(n),"Change Timezone","Update",{timeZoneName:ko.observable(t)}).SubmitData(function(n){return{timezoneName:n.timeZoneName()}}).Done(function(n,t){i&&i(t.TimeZoneName)}).MessageField("Update the users timezone as you want it used on the Dashboard.").AjaxFilterDropDownListField("timeZoneName","Time Zone",function(n){return"UTC"+(n.BaseUtcOffset<0?"":"+")+n.BaseUtcOffset+": "+n.TimeZoneName},function(n){return n.TimeZoneName},app.route.Home_TimeZoneNames.For(),!1,{BaseUtcOffset:0,TimeZoneName:t},"TimeZoneName",5,1).Create()}}(Form||(Form={})),function(n){n.UserClearSuppressedAlerts=function(n,t){return new DialogViewModelBuilder(app.route.User_ClearSuppressAlerts.For(n),"Clear Suppressed Alerts","Clear",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to clear suppressed module alerts?").Create()}}(Form||(Form={})),function(n){n.UserCopyDashboardSections=function(n,t){var i={sourceUserId:ko.observable(),dashboardGroupIds:ko.observableArray(),overrideWarning:ko.observable()};return new DialogViewModelBuilder(app.route.User_CopyDashboardSections.For(n),"Copy Dashboard Sections","Copy & Continue",i).SubmitData(function(n){return{sourceUserId:n.sourceUserId(),dashboardGroupIds:n.dashboardGroupIds(),overrideWarning:n.overrideWarning()}}).Done(function(){t&&t()}).MessageField("Select sections from source user to copy to this user.").AjaxFilterDropDownListField("sourceUserId","Select User",function(n){return n.Name},function(n){return n.UserId},app.route.User_GetUsersWithDashboardGroups.For(n),!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 i.sourceUserId()?app.route.User_GetUserDashboardSections.For(i.sourceUserId()):null}),5,!0).OptionalCheckBoxField("overrideWarning","Override Module Capability Validation?").CreateMulti()}}(Form||(Form={})),function(n){n.UserCreateAccount=function(n,t){return new DialogViewModelBuilder(app.route.User_CreateAccount.For(n),"Create User Account","Create",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("You are about to create an account for this user.").MessageField("The user will be sent a welcome email with details on how to set up their password.").Create()}}(Form||(Form={})),function(n){n.UserCreateNote=function(n,t){return new DialogViewModelBuilder(app.route.User_CreateNote.For(n),"Create Note","Create",{groupId:ko.observable(0),title:ko.observable(""),details:ko.observable("")}).SubmitData(function(n){return{groupId:n.groupId(),title:n.title(),details:n.details()}}).Done(function(n,i){t&&t(i.NoteId)}).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},app.route.Group_GroupsToContainNote.For(),!1,null,"Name",3,1).MessageField("The title will be visible in note tables.").TextField("title","Title",255).MultilineTextField("details","Details (markdown enabled)").Create()}}(Form||(Form={})),function(n){n.UserDeleteSubscription=function(n,t,i,r){return new DialogViewModelBuilder(app.route.User_DeleteSubscription.For(n),"Delete User Alert","Delete",{}).SubmitData(function(){return{moduleId:t,alertAndStatus:i}}).Done(function(){r&&r()}).MessageField("Delete this alert from the user").Create()}}(Form||(Form={})),function(n){n.UserDisable=function(n,t){return new DialogViewModelBuilder(app.route.User_Disable.For(n),"Disable User","Disable",{removeAll:ko.observable(!1)}).SubmitData(function(n){return{removeAll:n.removeAll()}}).Done(function(){t&&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()}}(Form||(Form={})),function(n){n.UserEditBranding=function(n,t,i){return new DialogViewModelBuilder(app.route.User_EditBranding.For(n),"Update User Branding","Update",{brandingId:ko.observable(t)}).SubmitData(function(n){return{brandingId:n.brandingId()}}).Done(function(){i&&i()}).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},app.route.Branding_AvailableBrandings.For(),!1,{BrandingId:t},"BrandingId").Create()}}(Form||(Form={})),function(n){n.UserEditEmailAddress=function(n,t,i){return new DialogViewModelBuilder(app.route.User_UpdateEmailAddress.For(n),"Update Email Address","Update",{newEmailAddress:ko.observable(t)}).SubmitData(function(n){return{emailAddress:t,newEmailAddress:n.newEmailAddress()}}).Done(function(){i&&i()}).MessageField("Enter the email address").TextField("newEmailAddress","Email Address",255).Create()}}(Form||(Form={})),function(n){n.UserEditPhoneNumber=function(n,t,i){var r={newPhoneNumber:ko.observable(t),formattedPhoneNumber:ko.observable(null),confirmFormatChange:ko.observable(!1)};return new DialogViewModelBuilder(app.route.User_UpdatePhoneNumber.For(n),"Update Phone Number","Update",r).SubmitData(function(n){return{phoneNumber:t,newPhoneNumber:n.newPhoneNumber(),confirmFormatChange:n.confirmFormatChange()}}).Done(function(){i&&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()}}(Form||(Form={})),function(n){n.UserEnable=function(n,t){return new DialogViewModelBuilder(app.route.User_Enable.For(n),"Enable user","Enable",{}).SubmitData(function(){return{}}).Done(function(){t&&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()}}(Form||(Form={})),function(n){n.UserImpersonate=function(n,t){return new DialogViewModelBuilder(app.route.User_Impersonate.For(n),"Impersonate User","Impersonate",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to impersonate this user?").Create()}}(Form||(Form={})),function(n){n.UserRemoveAccount=function(n,t){return new DialogViewModelBuilder(app.route.User_RemoveAccount.For(n),"Remove Account","Remove",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to remove the account for this user? The user will still exist, but will no longer be able to log in to the Dashboard.").Create()}}(Form||(Form={})),function(n){n.UserRemoveEmailAddress=function(n,t,i){return new DialogViewModelBuilder(app.route.User_RemoveEmailAddress.For(n),"Remove User Email Address","Remove",{}).SubmitData(function(){return{emailAddress:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove the email address "+t+" from this user?").Create()}}(Form||(Form={})),function(n){n.UserRemoveModuleAlerts=function(n,t){return new DialogViewModelBuilder(app.route.User_RemoveModuleAlerts.For(n),"Remove all module alerts","Remove",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to remove all module alerts for this user?").Create()}}(Form||(Form={})),function(n){n.UserRemovePhoneNumber=function(n,t,i){return new DialogViewModelBuilder(app.route.User_RemovePhoneNumber.For(n),"Remove User Phone Number","Remove",{}).SubmitData(function(){return{phoneNumber:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to remove the phone number "+Format.PhoneNumber(t)+" from this user?").Create()}}(Form||(Form={})),function(n){n.UserRemoveSyncAlerts=function(n,t){return new DialogViewModelBuilder(app.route.User_RemoveUserNetworkSyncAlerts.For(n),"Remove all network sync alerts","Remove",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to remove all network sync alerts for this user?").Create()}}(Form||(Form={})),function(n){n.UserResetPassword=function(n,t){return new DialogViewModelBuilder(app.route.User_ResetPassword.For(n),"Reset user password","Reset",{confirm:ko.observable(!1)}).SubmitData(function(n){return{confirm:n.confirm()}}).Done(function(){t&&t()}).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()}}(Form||(Form={})),function(n){n.UserSendTestMessage=function(n,t){return new DialogViewModelBuilder(app.route.User_SendTestMessage.For(n),"Send Test Message","Send",{sendSms:ko.observable(!1),sendEmail:ko.observable(!0)}).SubmitData(function(n){return{sendSms:n.sendSms(),sendEmail:n.sendEmail()}}).Done(function(){t&&t()}).MessageField("Select the type of messages to send:").CheckBoxField("sendSms","SMS").CheckBoxField("sendEmail","Email").Create()}}(Form||(Form={})),function(n){n.UserSetPassword=function(n,t){var i={password:ko.observable(""),confirmPassword:ko.observable(""),score:ko.observable(0)};return new DialogViewModelBuilder(app.route.User_SetPassword.For(n),"Set User Password","Set",i).SubmitData(function(n){return{newPassword:n.password()}}).Validate(function(n){return ComparePasswords(n.password(),n.confirmPassword())?null:"Passwords do not match"}).Done(function(){t&&t()}).MessageField("Set the password for the user.").PasswordStrengthField("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()}}(Form||(Form={})),function(n){n.UserSetPrimaryEmailAddress=function(n,t,i){return new DialogViewModelBuilder(app.route.User_SetPrimaryEmailAddress.For(n),"Set Primary Email Address","Set Primary",{}).SubmitData(function(){return{emailAddress:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to set the email address "+t+" as the primary email address for this user?").Create()}}(Form||(Form={})),function(n){n.UserSetPrimaryPhoneNumber=function(n,t,i){return new DialogViewModelBuilder(app.route.User_SetPrimaryPhoneNumber.For(n),"Set Primary Phone Number","Set Primary",{}).SubmitData(function(){return{phoneNumber:t}}).Done(function(){i&&i()}).MessageField("Are you sure you want to set the phone number "+t+" as the primary phone number for this user?").Create()}}(Form||(Form={})),function(n){n.UserSuppressAlerts=function(n,t){return new DialogViewModelBuilder(app.route.User_SuppressAlerts.For(n),"Suppress User Module 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(){t&&t()}).MessageField("Are you sure you want to suppress alerts?").DateTimeField("suppressUntil","Suppress Until").Create()}}(Form||(Form={})),function(n){n.UserUnlockAccount=function(n,t){return new DialogViewModelBuilder(app.route.User_UnlockUserAccount.For(n),"Unlock User Account","Unlock",{}).SubmitData(function(){return{}}).Done(function(){t&&t()}).MessageField("Are you sure you want to unlock this users account?").Create()}}(Form||(Form={}));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(t){var i=n.call(this)||this;return i.Id=ko.observable(""),i.Name=ko.observable(""),i.CreateBreadcrumbs=null,i.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Containing Groups",i.Name,t.For(i.Id))},i}return __extends(t,n),t}(n.Base_Model);n.Containing_Groups=t}(Model||(Model={}));containingGroupsBuilder=function(n,t){return function(i){function r(r){var u=i.call(this,r,new Model.Containing_Groups(t))||this;return u.AddItem(new AjaxFilterTableViewModel({route:n.For(u.viewModel.Id),click:function(n){return app.route.Group_Details.NavigateTo(n.GroupId)},update:!0,sort:"Group",ascending:!0,size:50}).AddColumn(new FilterTableColumnViewModel("Name","Group",!1,!0)).AddTitle(ko.computed(function(){return"Groups containing "+u.viewModel.Name()}))),u}return __extends(r,i),r}(Base_ViewWithModel)};app.router.View(app.route.Network_ContainingGroups,containingGroupsBuilder(app.route.Network_ContainingGroupsTable,app.route.Network_Details));app.router.View(app.route.DeviceType_ContainingGroups,containingGroupsBuilder(app.route.DeviceType_ContainingGroupsTable,app.route.DeviceType_Details));app.router.View(app.route.Module_ContainingGroups,containingGroupsBuilder(app.route.Module_ContainingGroupsTable,app.route.Module_Details));app.router.View(app.route.User_ContainingGroups,containingGroupsBuilder(app.route.User_ContainingGroupsTable,app.route.User_Details));app.router.View(app.route.Device_ContainingGroups,containingGroupsBuilder(app.route.Device_ContainingGroupsTable,app.route.Device_Details));app.router.View(app.route.Sim_ContainingGroups,containingGroupsBuilder(app.route.Sim_ContainingGroupsTable,app.route.Sim_Details));app.router.View(app.route.BillingEntity_ContainingGroups,containingGroupsBuilder(app.route.BillingEntity_ContainingGroupsTable,app.route.BillingEntity_Details));app.router.View(app.route.Application_ContainingGroups,containingGroupsBuilder(app.route.Application_ContainingGroupsTable,app.route.Application_Details));app.router.View(app.route.ApplicationTemplate_ContainingGroups,containingGroupsBuilder(app.route.ApplicationTemplate_ContainingGroupsTable,app.route.ApplicationTemplate_Details));app.router.View(app.route.GisDataset_ContainingGroups,containingGroupsBuilder(app.route.GisDataset_ContainingGroupsTable,app.route.GisDataset_Details));app.router.View(app.route.EscalationList_ContainingGroups,containingGroupsBuilder(app.route.EscalationList_ContainingGroupsTable,app.route.EscalationList_Details));app.router.View(app.route.Role_ContainingGroups,containingGroupsBuilder(app.route.Role_ContainingGroupsTable,app.route.Role_Details));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var r=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Error","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model),t,i;n.ErrorModel=r;t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("404 Not Found","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.RouteNotFoundModel=t;i=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Unauthorised","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.UnauthorisedModel=i}(Model||(Model={}));var Error_View=function(n){function t(t){var i=n.call(this,t,new Model.ErrorModel)||this;return i.AddItem(new HeaderPageItem("An Error Has Occurred")),i.AddItem(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 assistance.<\/br><\/br><\/br><a onclick="app.route.Home_Index.NavigateTo()">Return to Dashboard home page<\/a><\/p>')),i.AddItem(new HtmlBlockPageItem('<p style="text-align: center; padding-top: 40px;"><img src="/Images/SadFace.png" title="Sad Face" alt="Sad Face" /><\/p>')),i}return __extends(t,n),t}(Base_ViewWithModel),NotFound_View=function(n){function t(t){var i=n.call(this,t,new Model.RouteNotFoundModel)||this;return i.AddItem(new HeaderPageItem("Page Not Found")),i.AddItem(new MessagePageItem("Unfortunately, the resource you are looking for could not be found at this location.")),i}return __extends(t,n),t}(Base_ViewWithModel),Unauthorised_View=function(n){function t(t){var i=n.call(this,t,new Model.UnauthorisedModel)||this;return i.AddItem(new HeaderPageItem("Unauthorised")),i.AddItem(new MessagePageItem("You do not have authorisation to view this item. If you believe this is an error, please contact your administrator.")),i}return __extends(t,n),t}(Base_ViewWithModel),__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),Model;(function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Token=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Account","Reset Password",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Account_ResetPassword=t})(Model||(Model={}));app.router.View(app.route.Account_ResetPassword,function(n){function t(t){var i=n.call(this,t,new Model.Account_ResetPassword)||this;return i.OnViewModelReady=function(){return app.page.account.dialogTemplate("dialog-reset-password-template")},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Capabilities","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_Capabilities=t}(Model||(Model={}));app.router.View(app.route.Admin_Capabilities,function(n){function t(t){var r=n.call(this,t,new Model.Admin_Capabilities)||this,i,u,f=ko.observable(!1),h=function(n){return n.DbCapabilityId!==n.CsCapabilityId},c=function(n){return n.DbName!=null&&n.CsName!=null&&n.DbName!==n.CsName},l=function(n){return n.DbDescription!=null&&n.CsDescription!=null&&n.DbDescription!==n.CsDescription},e=function(){return u.LoadData()},a=function(){f(!f());e()},v=function(){return i.selectedKeys().length===0?r.SetMessage("Please select capabilities to update"):r.FormAction(function(){return Form.CapabilityUpdateBulk(i.selectedKeys().map(function(n){return n.CsCapabilityId}),function(){e();i.UnselectAll()})})()},s=function(n){return n.CsCapabilityId!=null&&n.CsCapabilityId===n.DbCapabilityId},o;return u=new AjaxFilterTableViewModel({route:app.route.Admin_CapabilitiesTable.For(null,{showMismatches:f}),click:function(n){return n.DbCapabilityId!=null?app.route.Admin_CapabilityDetails.NavigateTo(n.DbCapabilityId):null},update:!0,sort:"DbCapabilityId",ascending:!1,size:25}).AddColumn(i=new ToggleTableColumnViewModel("Select Capability","CsCapabilityId","checked","unchecked",!0,s)).AddColumn(new IconTableColumnViewModel("MismatchId",function(n){return h(n)?"Id Mismatch":""},!1,!1,function(n){return h(n)?"alert":""})).AddColumn(new IconTableColumnViewModel("MismatchName",function(n){return c(n)?"Name Mismatch":""},!1,!1,function(n){return c(n)?"alert":""})).AddColumn(new IconTableColumnViewModel("MismatchDescription",function(n){return l(n)?"Description Mismatch":""},!1,!1,function(n){return l(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 r.FormAction(function(){return Form.CapabilityDeleteFromDb(n.DbCapabilityId,n.DbName,e)})()},!0,function(n){return n.DbCapabilityId!=null&&n.CsCapabilityId==null})).AddTitle("Capabilities"),o=ko.computed(function(){return u.data().filter(function(n){return n.DbCapabilityId==null})}),r.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("add",new Header_Text("Capabilities",null,"Create Capability","Create new capability in root group"),new Header_Actions(r.FormAction(function(){return Form.CapabilityCreate(e)}))),new Command_Block("Visibility","Show mismatched",a,ko.computed(function(){return!f()})),new Command_Block("Visibility","Show all",a,ko.computed(function(){return f()}))]),Tile.CreateWithBlockSet([new Command_Block("Select All","Select all filtered capabilities",function(){return i.SelectAll(u.filteredData().filter(s))}),new Command_Block("Invert","Invert selected capabilities",function(){return i.Invert(u.filteredData().filter(s))}),new Command_Block("Clear","Deselect all capabilities",function(){return i.UnselectAll()})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Capability Update"),new SingleValue_Block("Selected",ko.computed(function(){return i.selectedKeys().length===1?"1 selected capability":i.selectedKeys().length+" selected capabilities"}).extend({throttle:100})),new Command_Block("Update Db","Update Db with C# Values",function(){return v()})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Bulk Add to Database"),new SingleValue_Block("Available",ko.computed(function(){return""+o().length+" missing capabilities"})),new Command_Block("Add To Db","Add C# values to database",r.FormAction(function(){return Form.CapabilityAddBulk(o(),e)}),ko.computed(function(){return o().length>0}))])])),r.AddItem(u),i.BindKeyHandlerComputed(u),r}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var i=function(n){function i(){var i=n!==null&&n.apply(this,arguments)||this;return i.DbCapability=new t,i.CsCapability=new t,i.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Capability Details","Capabilities",app.route.Admin_Capabilities.For())},i}return __extends(i,n),i}(n.Base_Model),t;n.Admin_CapabilityDetails=i;t=function(){function n(){this.CapabilityId=ko.observable(0);this.FullName=ko.observable("");this.Description=ko.observable("");this.ClassName=ko.observable("");this.SubName=ko.observable("")}return n}()}(Model||(Model={}));app.router.View(app.route.Admin_CapabilityDetails,function(n){function t(t){var i=n.call(this,t,new Model.Admin_CapabilityDetails)||this,u,r=ko.computed(function(){return i.viewModel.DbCapability.FullName()!==i.viewModel.CsCapability.FullName()||i.viewModel.DbCapability.Description()!==i.viewModel.CsCapability.Description()?TileState.Faulted:TileState.Idle}),f=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Database Detail"),new Header_Block("config",new Header_Text(ko.computed(function(){return i.viewModel.DbCapability.ClassName()}),null,ko.computed(function(){return i.viewModel.DbCapability.SubName()}),i.viewModel.DbCapability.Description))],r),Tile.CreateWithBlockSet([new SmallHeader_Block("C# Detail"),new Header_Block("config",new Header_Text(ko.computed(function(){return i.viewModel.CsCapability.ClassName()}),null,ko.computed(function(){return i.viewModel.CsCapability.SubName()}),i.viewModel.CsCapability.Description))],r),Tile.CreateWithBlockSet([new SmallHeader_Block("Fix Errors"),new Command_Block("Update","Update DB from C# value",i.FormAction(function(){return Form.CapabilityUpdateBulk([i.viewModel.CsCapability.CapabilityId()],i.Update)}))],null,ko.computed(function(){return r()!==TileState.Idle&&i.viewModel.CsCapability.CapabilityId()!=null}))])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Admin_RolesForCapabilityTable.For(i.viewModel.DbCapability.CapabilityId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("RoleId","Role ID",!1,!0)).AddColumn(new CommandTableColumnViewModel("Role","group",function(n){return app.route.Role_Details.NavigateTo(n.RoleId)})).AddColumn(new FilterTableColumnViewModel("Name","Role Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Capability from Role","delete",function(n){return i.FormAction(function(){return Form.RoleRemoveCapability(n.RoleId,i.viewModel.DbCapability.CapabilityId(),n.Name,i.viewModel.DbCapability.FullName(),f)})()},i.HasCapabilityComputed(Capability.Role_Edit))).AddTitle("Roles with Capability")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CellularProvider={CellularNetworkProviderId:ko.observable(0),Name:ko.observable(""),PlanAllocation:ko.observable(0)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.CellularProvider.Name,"Cellular Providers",app.route.Admin_CellularProviders.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_CellularProviderDetails=t}(Model||(Model={}));app.router.View(app.route.Admin_CellularProviderDetails,function(n){function t(t){var i=n.call(this,t,new Model.Admin_CellularProviderDetails)||this,r=new AjaxFilterTableViewModel({route:app.route.Admin_SimsForCellularProviderTable.For(i.viewModel.CellularProvider.CellularNetworkProviderId),click:function(n){return app.route.Sim_Details.For(n.SimId)},update:!0,sort:"SimNumber",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("SimNumber","Sim Number",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhoneNumber","Phone Number",!0,!0)).AddColumn(new FilterTableColumnViewModel("StatusName","Status",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceName","Device",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddTitle("Active Sims");return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Summary"),new SingleValue_Block("Sim Count",ko.computed(function(){return r.data().length})),new SingleValue_Block("Plan",ko.computed(function(){return i.viewModel.CellularProvider.PlanAllocation()!==0?Format.Bytes(i.viewModel.CellularProvider.PlanAllocation())+" per sim":"Unknown"})),new SingleValue_Block("Allocation",ko.computed(function(){return i.viewModel.CellularProvider.PlanAllocation()!==0?Format.Bytes(i.viewModel.CellularProvider.PlanAllocation()*r.data().length):"Unknown"}))])])),i.AddItem(r),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Cellular Providers","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_CellularProviders=t}(Model||(Model={}));app.router.View(app.route.Admin_CellularProviders,function(n){function t(t){var i=n.call(this,t,new Model.Admin_CellularProviders)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Admin_CellularProviderTable.For(),click:function(n){return app.route.Admin_CellularProviderDetails.NavigateTo(n.CellularNetworkProviderId)},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Provider Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ActiveSimCount","Active Sims",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("SimCount","Total Sims",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Usage","Current Usage (MB)",!1,!0,function(n){return Format.Bytes(n.Usage)})).AddTitle("Cellular Providers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("CostItems","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_CostItems=t}(Model||(Model={}));app.router.View(app.route.Admin_CostItems,function(n){function t(t){var i=n.call(this,t,new Model.Admin_CostItems)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Cost Items"),new Command_Block("Create","Create cost item",i.FormAction(function(){return Form.CostItemCreate(r)}),i.HasCapabilityComputed(Capability.Inventory_CreateCostItem))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Admin_CostItemsTable.For(),click:function(n){return n.DeviceTypeId!=null?app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId):null},update:!0,sort:"ItemName",ascending:!0,size:25}).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 Format.Currency(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 i.FormAction(function(){return Form.CostItemEdit({CostItemId:n.CostItemId,ItemName:n.ItemName,ItemLongDescription:n.ItemLongDesc,ItemDescription:n.ItemDesc,BasePrice:n.UnitPrice,RequiresSerial:n.RequiresSerial,DeviceTypeId:n.DeviceTypeId},r)})()},i.HasCapabilityComputed(Capability.Inventory_EditCostItem))).AddColumn(new CommandTableColumnViewModel("Delete Cost Item","delete",function(n){return i.FormAction(function(){return Form.CostItemDelete(n.CostItemId,n.ItemName,r)})()},i.HasCapabilityComputed(Capability.Inventory_DeleteCostItem))).AddTitle("Cost Items")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Email Providers","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_EmailProviders=t}(Model||(Model={}));app.router.View(app.route.Admin_EmailProviders,function(n){function t(t){var i=n.call(this,t,new Model.Admin_EmailProviders)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("email",new Header_Text("Email Providers")),new Command_Block("Create","Create Email Provider",i.FormAction(function(){return Form.EmailProviderCreate(r)}))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Admin_EmailProvidersTable.For(),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Edit Email Provider","edit",function(n){return i.FormAction(function(){return Form.EmailProviderEdit(n.EmailProviderId,n.Name,r)})()})).AddColumn(new CommandTableColumnViewModel("Delete Email Provider","delete",function(n){return i.FormAction(function(){return Form.EmailProviderDelete(n.EmailProviderId,n.Name,r)})()})).AddTitle("Email Providers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("SQL Procedure Errors","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_ErrorLogs=t}(Model||(Model={}));app.router.View(app.route.Admin_ErrorLogs,function(n){function t(t){var i=n.call(this,t,new Model.Admin_ErrorLogs)||this,r,u,f=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Select All","Select all filtered items",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Invert","Invert selected items",function(){return r.Invert(u.filteredData())}),new Command_Block("Clear","Deselect all items",function(){return r.UnselectAll()}),new Command_Block("Delete","Delete selected items",function(){return r.selectedKeys().length>0?i.FormAction(function(){return Form.ProcedureDeleteErrorLogs(r.selectedKeys().map(function(n){return n.ProcedureErrorLogId}),f)})():i.SetMessage("No items selected for deletion")})])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Admin_ErrorLogsTable.For(),click:function(n){return i.FormAction(function(){return Form.ProcedureErrorDetail(n.TimeUtc,n.ProcedureName,n.LineNumber,n.UserName,n.ErrorMessage,n.LineText,n.ParamString)})()},update:!0,sort:"TimeUtc",ascending:!1,size:25}).AddColumn(r=new ToggleTableColumnViewModel("Select Errors","ProcedureErrorLogId","checked","unchecked")).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 i.FormAction(function(){return Form.ProcedureDeleteErrorLogs(n.ProcedureErrorLogId,f)})()})).AddTitle("SQL Procedure Errors")),r.BindKeyHandlerComputed(u),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Event Types","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_EventTypes=t}(Model||(Model={}));app.router.View(app.route.Admin_EventTypes,function(n){function t(t){var i=n.call(this,t,new Model.Admin_EventTypes)||this,r=new AjaxFilterTableViewModel({route:app.route.Admin_EventTypesTable.For(),click:null,update:!0,sort:"EventTypeId",ascending:!1,size:25}).AddColumn(new NumberFilterTableColumnViewModel("EventTypeId","Event Type Id",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!0,!0)).AddTitle("Event Types"),u=function(){return Math.max.apply(Math,r.data().map(function(n){return n.EventTypeId}))+1};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create Event Type",i.FormAction(function(){return Form.EventTypeCreate(u(),function(){return r.LoadData()})}))])])),i.AddItem(r),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Firmware","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_Firmware=t}(Model||(Model={}));app.router.View(app.route.Admin_Firmware,function(n){function t(t){var i=n.call(this,t,new Model.Admin_Firmware)||this,r,u=function(){return r.LoadData()};return i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Admin_FirmwareTable.For(),click:null,update:!0,sort:"DeviceType",ascending:!0,size:100}).AddColumn(new CommandTableColumnViewModel("Device Type","firmware",function(n){return app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId)})).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 i.FormAction(function(){return Form.FirmwareSetDevelopment(n.FirmwareId,!n.Development,u)})()},i.HasCapabilityComputed(Capability.Device_Developer))).AddTitle("Firmware")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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),CellularProviders:ko.observable(0),Sims:ko.observable(0),EventTypes:ko.observable(0)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("System Admin","N8S",app.route.Group_Details.For(1))},t}return __extends(t,n),t}(n.Base_Model);n.Admin_Index=t}(Model||(Model={}));app.router.View(app.route.Admin_Index,function(n){function t(t){var i=n.call(this,t,new Model.Admin_Index)||this;return i.AddItem(new HeaderPageItem("System Administration")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("role",new Header_Text("Capabilities","",i.viewModel.Counts.Capabilities,"Total Capabilities"),new Header_Actions(app.route.Admin_Capabilities.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("firmware",new Header_Text("Firmware","",i.viewModel.Counts.Firmware,"Total Firmware"),new Header_Actions(app.route.Admin_Firmware.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text("Cost Items","",i.viewModel.Counts.CostItems,"Total Cost Items"),new Header_Actions(app.route.Admin_CostItems.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text("Purchase Orders","",i.viewModel.Counts.PurchaseOrders,"Total Unshipped Purchase Orders"),new Header_Actions(app.route.Admin_PurchaseOrders.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("SQL Error Logs","",i.viewModel.Counts.ErrorLogs,"Total Error Logs"),new Header_Actions(app.route.Admin_ErrorLogs.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("sim",new Header_Text("Cellular Providers","",i.viewModel.Counts.CellularProviders,"Cellular network providers"),new Header_Actions(app.route.Admin_CellularProviders.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("sim",new Header_Text("Sim States","",i.viewModel.Counts.Sims,"Sims"),new Header_Actions(app.route.Admin_SimStates.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Event Types","",i.viewModel.Counts.EventTypes,"Event Types"),new Header_Actions(app.route.Admin_EventTypes.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("sim",new Header_Text("SMS Providers","",i.viewModel.Counts.SmsProviders,"Total SMS Providers"),new Header_Actions(app.route.Admin_SmsProviders.NavigateTo))]),Tile.CreateWithBlockSet([new Header_Block("email",new Header_Text("Email Providers","",i.viewModel.Counts.EmailProviders,"Total Email Providers"),new Header_Actions(app.route.Admin_EmailProviders.NavigateTo))])])),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("PurchaseOrders","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_PurchaseOrders=t}(Model||(Model={}));app.router.View(app.route.Admin_PurchaseOrders,function(n){function t(t){var i=n.call(this,t,new Model.Admin_PurchaseOrders)||this,e,r,s=function(){return e.LoadData()},u=ko.observable(moment().startOf("month").toISOString()),f=ko.observable(moment().toISOString()),o;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Admin_PurchaseOrdersTable.For(),click:function(n){return app.route.PurchaseOrder_Details.NavigateTo(n.PurchaseOrderId,{groupId:n.TargetGroupId})},update:!0,sort:"CreatedDate",ascending:!1,size:25}).AddColumn(new FilterTableColumnViewModel("CreatedDate","Created",!1,!0,function(n){return Format.DateOnly(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")),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.Admin_PurchaseOrderOutstandingItemsTable.For(),click:function(n){return app.route.PurchaseOrder_Details.NavigateTo(n.PurchaseOrderId)},update:!0,sort:"CreatedDate",ascending:!1,size:25}).AddColumn(new FilterTableColumnViewModel("CreatedDate","Created",!1,!0,function(n){return Format.DateOnly(moment(n.CreatedDate))})).AddColumn(new FilterTableColumnViewModel("BillingEntity","Billing Entity",!0,!0)).AddColumn(new FilterTableColumnViewModel("ReferenceNumber","Reference",!0,!0)).AddColumn(new FilterTableColumnViewModel("ItemName","Item",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("QuantityOrdered","Ordered",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("QuantityInStock","In Stock",!0,!0)).AddColumn(new FilterTableColumnViewModel("QuantityOutstanding","Outstanding",!1,!0)).AddColumn(new DueByDateFilterTableColumnViewModel("ExpectedUtc","Expected",!0,!0)).AddTitle("Purchase Order Items Outstanding")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Admin_GroupPurchaseOrdersTable.For(),click:null,update:!0,sort:"SourceGroup",ascending:!0,size:25}).AddColumn(new CommandTableColumnViewModel("Group","group",function(n){return app.route.Group_Details.NavigateTo(n.SourceGroupId)})).AddColumn(new FilterTableColumnViewModel("SourceGroup","Source Group",!0,!0)).AddColumn(new CommandTableColumnViewModel("Group","group",function(n){return app.route.Group_Details.NavigateTo(n.TargetGroupId)})).AddColumn(new FilterTableColumnViewModel("TargetGroup","Target Group",!0,!0)).AddColumn(new CommandTableColumnViewModel("Group","group",function(n){return app.route.BillingEntity_Details.NavigateTo(n.TargetBillingEntityId)})).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 Format.DateOnly(moment(n.LastOrderDate))})).AddTitle("Groups Containing Purchase Orders")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Admin_UnreceivedPurchaseOrdersTable.For(),click:function(n){return app.route.PurchaseOrder_PackingListDetails.NavigateTo(n.PurchaseOrderId,{packingListId:n.PackingListId,groupId:n.TargetGroupId})},update:!0,sort:"DispatchedUtc",ascending:!1,size:25}).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")),r=new AjaxFilterTableViewModel({route:app.route.Admin_OrderedCostItemsTable.For(null,{selectedStartDate:u,selectedEndDate:f}),click:function(n){return app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId)},update:!0,sort:"ItemName",ascending:!0,size:25}).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 Format.Currency(n.UnitPrice)})).AddColumn(new CurrencyFilterTableColumnViewModel("Total","Total",!0,!0,function(n){return Format.Currency(n.UnitPrice*n.Count)})).AddTitle("Items shipped within date range"),o=function(n,t){u(moment(n).toISOString());f(moment(t).toISOString());r.LoadData();i.CloseFormDialog()},i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Date Range")),new SingleValue_Block("From",ko.computed(function(){return Format.DateOnly(moment.utc(u()))})),new SingleValue_Block("To",ko.computed(function(){return Format.DateOnly(moment.utc(f()))})),new Command_Block("Set Range","Set date range",i.FormAction(function(){return Form.PurchaseOrderDateRangeSelection(u(),u(),o)}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Totals"),new SingleValue_Block("Count",ko.computed(function(){return r.data().reduce(function(n,t){return n+t.Count},0)})),new SingleValue_Block("Sales",ko.computed(function(){return Format.Currency(r.data().reduce(function(n,t){return n+t.UnitPrice*t.Count},0))}))])])),i.AddItem(r),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("SimStates","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_SimStates=t}(Model||(Model={}));app.router.View(app.route.Admin_SimStates,function(n){function t(t){var i=n.call(this,t,new Model.Admin_SimStates)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Admin_ActiveSimTable.For(),click:function(n){return app.route.Sim_Details.NavigateTo(n.SimId)},update:!0,sort:"CellularNetwork",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("CellularNetwork","Provider Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0,function(n){return n.NetworkId!=null?n.NetworkName:"-"})).AddColumn(new FilterTableColumnViewModel("NetworkStatus","Network Status",!1,!0,function(n){return n.NetworkStatus!=null?n.NetworkStatus:"-"})).AddColumn(new DateFilterTableColumnViewModel("NetworkSyncUtc","Last Updated",!1,!0)).AddTitle("Active Sims on Inactive Networks")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Admin_IncorrectSimsTable.For(),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"CellularNetwork",ascending:!0,size:25}).AddColumn(new CommandTableColumnViewModel("sim","sim",function(n){return app.route.Sim_Details.NavigateTo(n.SimId)})).AddColumn(new FilterTableColumnViewModel("CellularNetwork","Provider Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("SimStatus","Sim Status",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0,function(n){return n.NetworkId!=null?n.NetworkName:"-"})).AddColumn(new FilterTableColumnViewModel("NetworkStatus","Network Status",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("NetworkUpdatedUtc","Last Updated",!1,!0)).AddTitle("Active Networks without Active Sims")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Sms Providers","System Admin",app.route.Admin_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Admin_SmsProviders=t}(Model||(Model={}));app.router.View(app.route.Admin_SmsProviders,function(n){function t(t){var i=n.call(this,t,new Model.Admin_SmsProviders)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("sim",new Header_Text("Sms Providers")),new Command_Block("Create","Create Sms Provider",i.FormAction(function(){return Form.SmsProviderCreate(r)}))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Admin_SmsProvidersTable.For(),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Edit Sms Provider","edit",function(n){return i.FormAction(function(){return Form.SmsProviderEdit(n.SmsProviderId,n.Name,r)})()})).AddColumn(new CommandTableColumnViewModel("Delete Sms Provider","delete",function(n){return i.FormAction(function(){return Form.SmsProviderDelete(n.SmsProviderId,n.Name,r)})()})).AddTitle("Sms Providers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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)},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.AppModule.ModuleName,t.AppModule.AppName,app.route.Application_AppVersion.For(t.AppModule.AppId,{version:t.AppModule.AppVersionNumber,groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.Application_AppModule=t}(Model||(Model={}));app.router.View(app.route.Application_AppModule,function(n){function t(t){var i=n.call(this,t,new Model.Application_AppModule)||this,f,u=function(){return f.LoadData()},r=ko.computed(function(){return i.HasCapability(Capability.App_Edit)&&i.viewModel.AppModule.AppVersionNumber()!=null&&i.viewModel.AppModule.AppVersionNumber()===0});return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("logic-application",new Header_Text(i.viewModel.AppModule.ModuleName,"Module Name",i.viewModel.AppModule.Type,"Type")),new SingleValue_Block("Version",i.viewModel.AppModule.ModuleVersion),new SingleValue_Block("Slot",i.viewModel.AppModule.Slot),new SingleValue_Block("Index",i.viewModel.AppModule.Index)]),Tile.CreateWithBlockSet([new Command_Block("Edit","Edit module details",i.FormAction(function(){return Form.ApplicationEditModule({AppId:i.viewModel.AppModule.AppId(),AppModuleId:i.viewModel.AppModule.AppModuleId(),AppVersionNumber:i.viewModel.AppModule.AppVersionNumber(),AppModuleName:i.viewModel.AppModule.ModuleName(),AppModuleSlot:i.viewModel.AppModule.Slot(),AppModuleIndex:i.viewModel.AppModule.Index()},i.Update)}),r),new Command_Block("Add","Add a custom module input",i.FormAction(function(){return Form.ApplicationAddModuleInput(i.viewModel.AppModule.AppId(),i.viewModel.AppModule.AppVersionNumber(),i.viewModel.AppModule.AppModuleId(),u)}),r),new Command_Block("Source Type","Change module source",i.FormAction(function(){return Form.ApplicationChangeModuleSource(i.viewModel.AppModule.AppId(),i.viewModel.AppModule.AppVersionNumber(),i.viewModel.AppModule.AppModuleId(),i.Update)}),r)])])),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Application_AppModuleInputsTable.For(i.viewModel.AppModule.AppId,{appModuleId:i.viewModel.AppModule.AppModuleId}),click:function(n){return r()?i.FormAction(function(){return Form.ApplicationEditModuleInput({AppId:i.viewModel.AppModule.AppId(),AppVersionNumber:i.viewModel.AppModule.AppVersionNumber(),AppModuleId:i.viewModel.AppModule.AppModuleId(),InputName:n.InputName,Expression:n.Expression},u)})():null},update:!0,sort:"InputName",ascending:!1,size:25}).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 i.FormAction(function(){return Form.ApplicationDeleteModuleInput(i.viewModel.AppModule.AppId(),i.viewModel.AppModule.AppVersionNumber(),i.viewModel.AppModule.AppModuleId(),n.InputName,u)})()},r)).AddTitle("Module Inputs")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.App={AppId:ko.observable(0),AppModulesCount:ko.observable(0),AppVersionNumber:ko.observable(0),ApplicationGuid:ko.observable(""),BinaryBuiltUserId:ko.observable(0),BinaryBuiltUserName:ko.observable(""),BinaryBuiltUtc:ko.observable(),BinaryIsCurrent:ko.observable(!1),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(),Description:ko.observable(""),DeviceType:ko.observable(""),Name:ko.observable(""),VersionNotes:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return"Version "+t.App.AppVersionNumber()},t.App.Name,app.route.Application_Details.For(t.App.AppId,{groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.Application_AppVersion=t}(Model||(Model={}));app.router.View(app.route.Application_AppVersion,function(n){function t(t){var i=n.call(this,t,new Model.Application_AppVersion)||this,r,f=function(){return r.LoadData()},u=function(){return app.route.Application_Details.NavigateTo(i.viewModel.App.AppId,{groupId:i.viewModel.GroupId})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.App.ApplicationGuid,null,function(){return CopyToClipboard(i.viewModel.App.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("logic-application",new Header_Text(i.viewModel.App.Name,"Application Name",i.viewModel.App.DeviceType,"Device Type")),new SingleValue_Block("Version",ko.computed(function(){return i.viewModel.App.AppVersionNumber()==null?"None selected":i.viewModel.App.AppVersionNumber()})),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.App.CreatedUtc)),new SingleValue_Block("Creator",i.viewModel.App.CreatedUserName)]),Tile.CreateWithBlockSet([new Command_Block("Notes","Edit app version notes",i.FormAction(function(){return Form.ApplicationEditVersionNotes(i.viewModel.App.AppId(),i.viewModel.App.AppVersionNumber(),i.viewModel.App.VersionNotes(),function(n){return i.viewModel.App.VersionNotes(n)})}),ko.computed(function(){return i.HasCapability(Capability.App_Edit)&&i.viewModel.App.AppVersionNumber()!==0})),new Command_Block("Reset WIP","Overwrite the work in progress version with this version",i.FormAction(function(){return Form.ApplicationOverwriteWorkInProgress(i.viewModel.App.AppId(),i.viewModel.App.AppVersionNumber(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.App_Edit)&&i.viewModel.App.AppVersionNumber()!==0})),new Command_Block("Publish","Publish an app version",i.FormAction(function(){return Form.ApplicationCreateVersion(i.viewModel.App.AppId(),u)}),ko.computed(function(){return i.HasCapability(Capability.App_Edit)&&i.viewModel.App.AppVersionNumber()===0&&i.viewModel.App.BinaryBuiltUtc()!=null})),new Command_Block("Delete","Delete this version",i.FormAction(function(){return Form.ApplicationDeleteAppVersion(i.viewModel.App.AppId(),i.viewModel.App.AppVersionNumber(),u)}),ko.computed(function(){return i.HasCapability(Capability.App_Delete)&&i.viewModel.App.AppVersionNumber()!==0}))]),Tile.CreateWithBlockSet([new Header_Block("logic-application",new Header_Text("Binary","Built on",Format.DateTimeComputed(i.viewModel.App.BinaryBuiltUtc),ko.computed(function(){return"By "+i.viewModel.App.BinaryBuiltUserName()})),null,ko.computed(function(){return i.viewModel.App.BinaryBuiltUtc()!=null})),new SingleValue_Block("Build Status",ko.computed(function(){return i.viewModel.App.BinaryIsCurrent()?"Current":"Out of Date"}),ko.computed(function(){return i.viewModel.App.BinaryIsCurrent()!=null})),new Header_Block("logic-application",new Header_Text("Binary",null,"None"),null,ko.computed(function(){return i.viewModel.App.BinaryBuiltUtc()==null})),new Command_Block("Create","Compile the binary",i.FormAction(function(){return Form.ApplicationCreateBinary(i.CloseFormDialog)}),ko.computed(function(){return i.viewModel.App.BinaryBuiltUtc()==null&&i.viewModel.App.AppVersionNumber()===0})),new Command_Block("Rebuild","Rebuild the binary",i.FormAction(function(){return Form.ApplicationCreateBinary()}),ko.computed(function(){return i.viewModel.App.BinaryBuiltUtc()!=null&&i.viewModel.App.AppVersionNumber()===0})),new Command_Block("Template","Create an application template",i.FormAction(function(){return Form.ApplicationBuildTemplate(i.viewModel.App.AppId(),function(n){return app.route.ApplicationTemplate_Details.NavigateTo(n)})}),ko.computed(function(){return i.HasCapability(Capability.ApplicationTemplate_Manage)&&i.viewModel.App.BinaryBuiltUtc()!=null}))])])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Module","Add module to current version",i.FormAction(function(){return Form.ApplicationAddModule(i.viewModel.App.AppId(),i.viewModel.App.AppVersionNumber(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.App_Edit)&&i.viewModel.App.AppVersionNumber()===0}))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Application_AppModulesTable.For(i.viewModel.App.AppId,{version:i.viewModel.App.AppVersionNumber}),click:function(n){return app.route.Application_AppModule.NavigateTo(n.AppId,{appModuleId:n.AppModuleId,groupId:i.viewModel.GroupId()})},update:!0,sort:"ModuleName",ascending:!0,size:25}).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 i.FormAction(function(){return Form.ApplicationDeleteModule(i.viewModel.App.AppId(),i.viewModel.App.AppVersionNumber(),n.AppModuleId,f)})()},ko.computed(function(){return i.HasCapability(Capability.App_Edit)&&i.viewModel.App.AppVersionNumber()===0}))).AddTitle("Module")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.App={AppId:ko.observable(0),Name:ko.observable(""),Description:ko.observable(""),DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),ApplicationGuid:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable()},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.App.Name,function(){return t.GroupId()==null?"Groups":"Applications"},function(){return t.GroupId()==null?app.route.Group_Index.For():app.route.Group_Apps.For(t.GroupId)})},t}return __extends(t,n),t}(n.Base_Model);n.Application_Details=t}(Model||(Model={}));app.router.View(app.route.Application_Details,function(n){function t(t){var i=n.call(this,t,new Model.Application_Details)||this,r,u=function(){return r.LoadData()},f=function(n){return app.route.Group_AssignNetworkApplications.NavigateTo(n,{deviceTypeId:i.viewModel.App.DeviceTypeId,appId:i.viewModel.App.AppId})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.App.ApplicationGuid,null,function(){return CopyToClipboard(i.viewModel.App.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("logic-application",new Header_Text(i.viewModel.App.Name,"Application Name",i.viewModel.App.DeviceType,"Device Type")),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.App.CreatedUtc)),new SingleValue_Block("Creator",i.viewModel.App.CreatedUserName),new Command_Block("Groups","Groups containing application",function(){return app.route.Application_ContainingGroups.NavigateTo(i.viewModel.App.AppId)}),new Command_Block("Delete App","Permanently delete the app",i.FormAction(function(){return Form.ApplicationDelete(i.viewModel.App.AppId(),function(){return app.route.Group_Index.For()})}),i.HasCapabilityComputed(Capability.App_Delete)),new Command_Block("Upload","Upload a binary for this app",i.FormAction(function(){return Form.ApplicationUploadBinary(i.viewModel.App.AppId(),function(n){return app.route.Application_AppVersion.NavigateTo(i.viewModel.App.AppId,{version:n,groupId:i.viewModel.GroupId})})}),i.HasCapabilityComputed(Capability.App_Create)),new Command_Block("Assign","Assign to network nodes",i.FormAction(function(){return Form.ApplicationGroupAssignment(f)})),new Command_Block("Tags","View application tags",function(){return app.route.Application_Tags.NavigateTo(i.viewModel.App.AppId,{groupId:i.viewModel.GroupId})},i.HasCapabilityComputed(Capability.Tag_View))])])),i.AddItem(new HeaderPageItem("Description","edit","Edit Description",i.FormAction(function(){return Form.ApplicationEdit(i.viewModel.App.AppId(),i.viewModel.App.Name(),i.viewModel.App.Description(),i.Update)}),i.HasCapabilityComputed(Capability.App_Edit))),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.App.Description())}))),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Application_AppVersionsTable.For(i.viewModel.App.AppId),click:function(n){return app.route.Application_AppVersion.NavigateTo(n.AppId,{version:n.AppVersionNumber,groupId:i.viewModel.GroupId})},update:!0,sort:"AppVersionNumber",ascending:!1,size:25}).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 i.FormAction(function(){return Form.ApplicationDeleteAppVersion(i.viewModel.App.AppId(),n.AppVersionNumber,u)})},!0,function(n){return ko.computed(function(){return i.HasCapability(Capability.App_Delete)&&n.AppVersionNumber!==0})()})).AddTitle("All Versions")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Application_AppNodeAssignmentsTable.For(i.viewModel.App.AppId),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})},update:!0,sort:"NetworkName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!1,!0,function(n){return Format.NodeAddressAndName(n)})).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Device",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("AppVersionNumber","App Version",!0,!0)).AddTitle("Network Node Assignments")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Application_AppTemplateAssignmentsTable.For(i.viewModel.App.AppId),click:function(n){return app.route.ApplicationTemplate_Details.NavigateTo(n.ApplicationTemplateId)},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Template Name",!1,!0)).AddTitle("Application Template Assignments")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.App={AppId:ko.observable(0),Name:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Tags",t.App.Name,app.route.Application_Details.For(t.App.AppId))},t}return __extends(t,n),t}(n.Base_Model);n.Application_Tags=t}(Model||(Model={}));app.router.View(app.route.Application_Tags,function(n){function t(t){var i=n.call(this,t,new Model.Application_Tags)||this,u,f,r=function(){u.LoadData();f.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Attach Tags","Add tags to Application",i.FormAction(function(){return Form.ApplicationAttachTag(i.viewModel.App.AppId(),r)}),i.HasCapabilityComputed(Capability.Tag_Attach))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Application_TagsTable.For(i.viewModel.App.AppId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("TagValue","Value",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Value","edit",function(n){return i.FormAction(function(){return Form.ApplicationEditTag(i.viewModel.App.AppId(),n.TagId,n.TagValue,r)})()},i.HasCapabilityComputed(Capability.Tag_Update))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.ApplicationRemoveTag(i.viewModel.App.AppId(),i.viewModel.App.Name(),n.TagId,n.Name,r)})()},i.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Application Tags")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Application_TagValueHistoryTable.For(i.viewModel.App.AppId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25,enabled:i.HasCapabilityComputed(Capability.Tag_View)}).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("Application Tag Value History")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ApplicationTemplate={ApplicationTemplateId:ko.observable(0),Name:ko.observable(""),ApplicationGuid:ko.observable(""),CreatedUtc:ko.observable(),CreatedUser:ko.observable(""),ApplicationName:ko.observable(""),AppId:ko.observable(0),ModuleMaxIndex:ko.observable(0)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.ApplicationTemplate.Name,"Groups",app.route.Group_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.ApplicationTemplate_Details=t}(Model||(Model={}));app.router.View(app.route.ApplicationTemplate_Details,function(n){function t(t){var i=n.call(this,t,new Model.ApplicationTemplate_Details)||this,r;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("application-template",new Header_Text(i.viewModel.ApplicationTemplate.Name,"Template Name",i.viewModel.ApplicationTemplate.ApplicationName,"Application Name")),new Command_Block("Groups","Groups containing template",function(){return app.route.ApplicationTemplate_ContainingGroups.NavigateTo(i.viewModel.ApplicationTemplate.ApplicationTemplateId)}),new Command_Block("View","View assigned application",function(){return app.route.Application_Details.NavigateTo(i.viewModel.ApplicationTemplate.AppId)},i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Edit","Edit application template",i.FormAction(function(){return Form.ApplicationTemplateEdit(i.viewModel.ApplicationTemplate.ApplicationTemplateId(),i.viewModel.ApplicationTemplate.Name(),i.viewModel.ApplicationTemplate.ApplicationGuid(),i.Update)}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Modules","Add new modules",i.FormAction(function(){return Form.ApplicationTemplateAddModules(i.viewModel.ApplicationTemplate.ApplicationTemplateId(),i.viewModel.ApplicationTemplate.ModuleMaxIndex(),function(n){i.viewModel.ApplicationTemplate.ModuleMaxIndex(n);r.LoadData()})}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Delete","Delete application template",i.FormAction(function(){return Form.ApplicationTemplateDelete(i.viewModel.ApplicationTemplate.ApplicationTemplateId(),function(){return app.route.Group_Index.NavigateTo()})}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.ApplicationTemplate_ModulesTable.For(i.viewModel.ApplicationTemplate.ApplicationTemplateId),click:function(n){return app.route.ApplicationTemplate_Module.NavigateTo(i.viewModel.ApplicationTemplate.ApplicationTemplateId,{moduleIndex:n.ModuleIndex})},update:!0,sort:"ModuleIndex",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("ModuleIndex","ModuleIndex",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0,function(n){return n.Type+(n.IsVirtual?" (Virtual)":"")})).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 i.FormAction(function(){return Form.ApplicationTemplateDeleteModule(i.viewModel.ApplicationTemplate.ApplicationTemplateId(),n.ModuleIndex,i.Update)})()},i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))).AddTitle("Modules")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Module={ApplicationTemplateId:ko.observable(0),ApplicationTemplateName:ko.observable(""),ModuleIndex:ko.observable(0),Name:ko.observable(""),ShortName:ko.observable(""),Icon:ko.observable(""),Type:ko.observable(""),IsVirtual:ko.observable(!1)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Module.Name,t.Module.ApplicationTemplateName,app.route.ApplicationTemplate_Details.For(t.Module.ApplicationTemplateId))},t}return __extends(t,n),t}(n.Base_Model);n.ApplicationTemplate_Module=t}(Model||(Model={}));app.router.View(app.route.ApplicationTemplate_Module,function(n){function t(t){var i=n.call(this,t,new Model.ApplicationTemplate_Module)||this,r,u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block(i.viewModel.Module.Icon,new Header_Text(i.viewModel.Module.Name,i.viewModel.Module.ShortName,i.viewModel.Module.Type,"Module Type",ko.computed(function(){return i.viewModel.Module.IsVirtual()?"Virtual Module":""}))),new SingleValue_Block("Module Index",i.viewModel.Module.ModuleIndex),new Command_Block("Edit","Edit module",i.FormAction(function(){return Form.ApplicationTemplateEditModule({ApplicationTemplateId:i.viewModel.Module.ApplicationTemplateId(),ModuleIndex:i.viewModel.Module.ModuleIndex(),Name:i.viewModel.Module.Name(),ShortName:i.viewModel.Module.ShortName(),Type:i.viewModel.Module.Type(),Icon:i.viewModel.Module.Icon(),IsVirtual:i.viewModel.Module.IsVirtual()},function(n){return n!==i.viewModel.Module.ModuleIndex()?app.route.ApplicationTemplate_Module.NavigateTo(i.viewModel.Module.ApplicationTemplateId,{moduleIndex:n}):i.Update})}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Key-Values","Add new key-values",i.FormAction(function(){return Form.ApplicationTemplateAddKeyValues(i.viewModel.Module.ApplicationTemplateId(),i.viewModel.Module.ModuleIndex(),u)}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage)),new Command_Block("Delete","Delete module from template",i.FormAction(function(){return Form.ApplicationTemplateDeleteModule(i.viewModel.Module.ApplicationTemplateId(),i.viewModel.Module.ModuleIndex(),function(){return app.route.ApplicationTemplate_Details.NavigateTo(i.viewModel.Module.ApplicationTemplateId)})}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.ApplicationTemplate_ModuleKeyValuesTable.For(i.viewModel.Module.ApplicationTemplateId,{moduleIndex:i.viewModel.Module.ModuleIndex}),click:null,update:!0,sort:"Key",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Key","Key",!1,!0)).AddColumn(new FilterTableColumnViewModel("Value","Value",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Key-Value","delete",function(n){return i.FormAction(function(){return Form.ApplicationTemplateDeleteKeyValue(i.viewModel.Module.ApplicationTemplateId(),i.viewModel.Module.ModuleIndex(),n.Key,u)})()},i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))).AddTitle("Module Key-Values")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.AppModuleSource={AppModuleSourceId:ko.observable(0),Type:ko.observable(""),DeviceType:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(),ApplicationGuid:ko.observable(""),InputsCount:ko.observable(0),OutputsCount:ko.observable(0)},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.AppModuleSource.Type,function(){return t.GroupId()==null?"Groups":"App Module Sources"},function(){return t.GroupId()==null?app.route.Group_Index.For():app.route.Group_AppModuleSources.For(t.GroupId)})},t}return __extends(t,n),t}(n.Base_Model);n.AppModuleSource_Details=t}(Model||(Model={}));app.router.View(app.route.AppModuleSource_Details,function(n){function t(t){var i=n.call(this,t,new Model.AppModuleSource_Details)||this,r,u,e=function(){return r.LoadData()},f=function(){return u.LoadData()},o=function(n){return app.route.AppModuleSource_Version.NavigateTo(i.viewModel.AppModuleSource.AppModuleSourceId,{version:n,groupId:i.viewModel.GroupId})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.AppModuleSource.ApplicationGuid,"source",function(){return CopyToClipboard(i.viewModel.AppModuleSource.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("module-source",new Header_Text(i.viewModel.AppModuleSource.Type,"Module Source Type",i.viewModel.AppModuleSource.DeviceType,"Device Type")),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.AppModuleSource.CreatedUtc)),new SingleValue_Block("Creator",i.viewModel.AppModuleSource.CreatedUserName)]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new version",i.FormAction(function(){return Form.AppModuleSourceCreateModuleVersion(i.viewModel.AppModuleSource.AppModuleSourceId(),o)}),i.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Edit","Edit the type",i.FormAction(function(){return Form.AppModuleSourceEdit(i.viewModel.AppModuleSource.AppModuleSourceId(),i.viewModel.AppModuleSource.Type(),function(n){return i.viewModel.AppModuleSource.Type(n)})}),i.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Types","Add a dashboard type",i.FormAction(function(){return Form.AppModuleSourceAddDashboardType(i.viewModel.AppModuleSource.AppModuleSourceId(),f)}),i.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Delete","Permanently delete module source",i.FormAction(function(){return Form.AppModuleSourceDelete(i.viewModel.AppModuleSource.AppModuleSourceId(),function(){return i.viewModel.GroupId()==null?app.route.Group_Index.NavigateTo():app.route.Group_AppModuleSources.NavigateTo(i.viewModel.GroupId)})}),i.HasCapabilityComputed(Capability.AppModuleSource_Delete))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.AppModuleSource_VersionsTable.For(i.viewModel.AppModuleSource.AppModuleSourceId),click:function(n){return app.route.AppModuleSource_Version.NavigateTo(n.AppModuleSourceId,{version:n.ModuleVersion,groupId:i.viewModel.GroupId})},update:!0,sort:"ModuleVersion",ascending:!0,size:25}).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 i.FormAction(function(){return Form.AppModuleSourceDeleteModuleVersion(i.viewModel.AppModuleSource.AppModuleSourceId(),n.ModuleVersion,e)})()},i.HasCapabilityComputed(Capability.AppModuleSource_Delete))).AddTitle("All Versions")),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.AppModuleSource_DashboardTypesTable.For(i.viewModel.AppModuleSource.AppModuleSourceId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Delete Type","delete",function(n){return i.FormAction(function(){return Form.AppModuleSourceDeleteDashboardType(i.viewModel.AppModuleSource.AppModuleSourceId(),n.Name,f)})()},i.HasCapabilityComputed(Capability.AppModuleSource_Edit))).AddTitle("Dashboard Types")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.AppModuleSource={AppModuleSourceId:ko.observable(0),Type:ko.observable(""),ModuleVersion:ko.observable(0),Source:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Source XML",function(){return t.AppModuleSource.Type()+" v"+t.AppModuleSource.ModuleVersion()},app.route.AppModuleSource_Version.For(t.AppModuleSource.AppModuleSourceId,{version:t.AppModuleSource.ModuleVersion,groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.AppModuleSource_SourceXML=t}(Model||(Model={}));app.router.View(app.route.AppModuleSource_SourceXML,function(n){function t(t){var i=n.call(this,t,new Model.AppModuleSource_SourceXML)||this;return i.AddItem(new MessagePageItem(i.viewModel.AppModuleSource.Source)),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(),ApplicationGuid:ko.observable(""),InputsCount:ko.observable(0),OutputsCount:ko.observable(0),Source:ko.observable(""),Notes:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return"Version "+t.AppModuleSourceVersion.ModuleVersion()},t.AppModuleSourceVersion.Type,app.route.AppModuleSource_Details.For(t.AppModuleSourceVersion.AppModuleSourceId,{groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.AppModuleSource_Version=t}(Model||(Model={}));app.router.View(app.route.AppModuleSource_Version,function(n){function t(t){var i=n.call(this,t,new Model.AppModuleSource_Version)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.AppModuleSourceVersion.ApplicationGuid,null,function(){return CopyToClipboard(i.viewModel.AppModuleSourceVersion.ApplicationGuid)},"Click to copy to clipboard"),new Header_Block("module-source",new Header_Text(i.viewModel.AppModuleSourceVersion.Type,"Module Source Type",i.viewModel.AppModuleSourceVersion.DeviceType,"Device Type")),new SingleValue_Block("Module Version",i.viewModel.AppModuleSourceVersion.ModuleVersion),new SingleValue_Block("Inputs",i.viewModel.AppModuleSourceVersion.InputsCount),new SingleValue_Block("Outputs",i.viewModel.AppModuleSourceVersion.OutputsCount),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.AppModuleSourceVersion.CreatedUtc)),new SingleValue_Block("Creator",i.viewModel.AppModuleSourceVersion.CreatedUserName)]),Tile.CreateWithBlockSet([new Command_Block("Notes","Edit the notes for this version",i.FormAction(function(){return Form.AppModuleSourceEditVersionNotes(i.viewModel.AppModuleSourceVersion.AppModuleSourceId(),i.viewModel.AppModuleSourceVersion.ModuleVersion(),i.viewModel.AppModuleSourceVersion.Notes(),function(n){return i.viewModel.AppModuleSourceVersion.Notes(n)})}),i.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Source","View source for this version",function(){return app.route.AppModuleSource_SourceXML.NavigateTo(i.viewModel.AppModuleSourceVersion.AppModuleSourceId,{version:i.viewModel.AppModuleSourceVersion.ModuleVersion,groupId:i.viewModel.GroupId})},i.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Copy Source","Copy source to clipboard",function(){return CopyToClipboard(i.viewModel.AppModuleSourceVersion.Source,!0)},i.HasCapabilityComputed(Capability.AppModuleSource_Edit)),new Command_Block("Delete","Delete this version",i.FormAction(function(){return Form.AppModuleSourceDeleteModuleVersion(i.viewModel.AppModuleSourceVersion.AppModuleSourceId(),i.viewModel.AppModuleSourceVersion.ModuleVersion(),function(){return app.route.AppModuleSource_Details.NavigateTo(i.viewModel.AppModuleSourceVersion.AppModuleSourceId,{groupId:i.viewModel.GroupId})})}),i.HasCapabilityComputed(Capability.AppModuleSource_Delete))])])),i.AddItem(new HeaderPageItem("Version Notes","edit","Edit Notes",i.FormAction(function(){return Form.AppModuleSourceEditVersionNotes(i.viewModel.AppModuleSourceVersion.AppModuleSourceId(),i.viewModel.AppModuleSourceVersion.ModuleVersion(),i.viewModel.AppModuleSourceVersion.Notes(),function(n){return i.viewModel.AppModuleSourceVersion.Notes(n)})}),i.HasCapabilityComputed(Capability.AppModuleSource_Edit))),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.AppModuleSourceVersion.Notes())}))),i.AddItem(new AjaxFilterTableViewModel({route:app.route.AppModuleSource_InputsTable.For(i.viewModel.AppModuleSourceVersion.AppModuleSourceId,{version:i.viewModel.AppModuleSourceVersion.ModuleVersion}),click:null,update:!0,sort:"Name",ascending:!0,size:25}).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")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.AppModuleSource_OutputsTable.For(i.viewModel.AppModuleSourceVersion.AppModuleSourceId,{version:i.viewModel.AppModuleSourceVersion.ModuleVersion}),click:null,update:!0,sort:"Name",ascending:!0,size:25}).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")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.AppModuleSource_UsageTable.For(i.viewModel.AppModuleSourceVersion.AppModuleSourceId,{version:i.viewModel.AppModuleSourceVersion.ModuleVersion}),click:null,update:!0,sort:"Name",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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)},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Address",t.Address.BillingEntityName,app.route.BillingEntity_Details.For(t.Address.BillingEntityId,{groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.BillingEntity_AddressDetails=t}(Model||(Model={}));app.router.View(app.route.BillingEntity_AddressDetails,function(n){function t(t){var i=n.call(this,t,new Model.BillingEntity_AddressDetails)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Address Details"),new SingleValue_Block("Address",i.viewModel.Address.Address),new SingleValue_Block("City",i.viewModel.Address.City),new SingleValue_Block("State/Province",i.viewModel.Address.StateProvince),new SingleValue_Block("PostCode",i.viewModel.Address.Code),new SingleValue_Block("Country",i.viewModel.Address.Country),new Command_Block("Edit","Edit address details",i.FormAction(function(){return Form.BillingEntityEditAddress({BillingEntityId:i.viewModel.Address.BillingEntityId(),AddressId:i.viewModel.Address.AddressId(),Address:i.viewModel.Address.Address(),City:i.viewModel.Address.City(),StateProvince:i.viewModel.Address.StateProvince(),Code:i.viewModel.Address.Code(),Country:i.viewModel.Address.Country()},function(n){return app.route.BillingEntity_AddressDetails.NavigateTo(i.viewModel.Address.BillingEntityId,{addressId:n,groupId:i.viewModel.GroupId})})}),i.HasCapabilityComputed(Capability.BillingEntity_Edit))]),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text(i.viewModel.Address.BillingEntityName,"Billing Entity"),new Header_Actions(function(){return app.route.BillingEntity_Details.NavigateTo(i.viewModel.Address.BillingEntityId,{groupId:i.viewModel.GroupId})})),new Command_Block("View Current","View the current address",function(){return app.route.BillingEntity_AddressDetails.NavigateTo(i.viewModel.Address.BillingEntityId,{addressId:i.viewModel.Address.CurrentBillingAddressId,groupId:i.viewModel.GroupId})},ko.computed(function(){return i.viewModel.Address.CurrentBillingAddressId()!=null}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.BillingEntity_AddressHistoryTable.For(i.viewModel.Address.BillingEntityId,{addressId:i.viewModel.Address.AddressId}),click:function(n){return app.route.BillingEntity_AddressDetails.NavigateTo(i.viewModel.Address.BillingEntityId,{addressId:n.AddressId,groupId:i.viewModel.GroupId})},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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 DateFilterTableColumnViewModel("CreatedUtc","Date Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("IsDDLSelectable","Usage",!1,!1,function(n){return n.IsDDLSelectable?"Reusable":"One Off"})).AddTitle("Previous Address Details")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.BillingEntity.CompanyName,function(){return t.GroupId()!=null?"Billing Entities":"Dashboard"},function(){return t.GroupId()!=null?app.route.Group_BillingEntities.For(t.GroupId):app.route.Home_Index.For()})},t}return __extends(t,n),t}(n.Base_Model);n.BillingEntity_Details=t}(Model||(Model={}));app.router.View(app.route.BillingEntity_Details,function(n){function t(t){var i=n.call(this,t,new Model.BillingEntity_Details)||this,e,o,u=function(){return e.LoadData()},f=function(){return o.LoadData()},r=ko.observable(!1);return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text(i.viewModel.BillingEntity.CompanyName,"Billing Entity",i.viewModel.BillingEntity.InventoryGroupName,ko.computed(function(){return i.viewModel.BillingEntity.InventoryGroupId()!=null?"Inventory Group":""}))),new Command_Block("Inventory","View devices in stock",function(){return app.route.Group_DeviceSummary.NavigateTo(i.viewModel.BillingEntity.InventoryGroupId)},ko.computed(function(){return i.viewModel.BillingEntity.InventoryGroupId()!=null})),new Command_Block("Groups","Groups containing billing entity",function(){return app.route.BillingEntity_ContainingGroups.NavigateTo(i.viewModel.BillingEntity.BillingEntityId)}),new Command_Block("Escalation","None",null,ko.computed(function(){return i.viewModel.BillingEntity.EscalationListId()==null})),new Command_Block("Escalation",i.viewModel.BillingEntity.EscalationListName,function(){return app.route.EscalationList_Details.NavigateTo(i.viewModel.BillingEntity.EscalationListId)},ko.computed(function(){return i.viewModel.BillingEntity.EscalationListId()!=null})),new Command_Block("Edit","Edit billing entity",i.FormAction(function(){return Form.BillingEntityEdit({BillingEntityId:i.viewModel.BillingEntity.BillingEntityId(),CompanyName:i.viewModel.BillingEntity.CompanyName(),EscalationListId:i.viewModel.BillingEntity.EscalationListId(),TimeZoneName:i.viewModel.BillingEntity.TimeZoneName()},i.Update)}),i.HasCapabilityComputed(Capability.BillingEntity_Edit)),new Command_Block("Add","Add existing cost item",i.FormAction(function(){return Form.BillingEntityAddCostItem(i.viewModel.BillingEntity.BillingEntityId(),f)}),i.HasCapabilityComputed(Capability.BillingEntity_ManageCostItems)),new Command_Block("Accounts","View message accounts",function(){return app.route.BillingEntity_MessageAccounts.NavigateTo(i.viewModel.BillingEntity.BillingEntityId,{groupId:i.viewModel.GroupId})}),new Command_Block("Net Subs","View network subscription invoices",function(){return app.route.BillingEntity_NetworkSubscriptionInvoices.NavigateTo(i.viewModel.BillingEntity.BillingEntityId)},i.HasCapabilityComputed(Capability.BillingEntity_ViewNetworkSubscriptionInvoice))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Current Address"),new SingleValue_Block("Address",i.viewModel.BillingEntity.Address),new SingleValue_Block("City",i.viewModel.BillingEntity.City),new SingleValue_Block("State/Province",i.viewModel.BillingEntity.StateProvince),new SingleValue_Block("Post Code",i.viewModel.BillingEntity.Code),new SingleValue_Block("Country",i.viewModel.BillingEntity.Country),new Command_Block("View","View address details",function(){return app.route.BillingEntity_AddressDetails.NavigateTo(i.viewModel.BillingEntity.BillingEntityId,{addressId:i.viewModel.BillingEntity.AddressId,groupId:i.viewModel.GroupId})})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Purchase Orders"),new Command_Block("Create","Create a new purchase order",i.FormAction(function(){return Form.BillingEntityCreatePurchaseOrder(i.viewModel.BillingEntity.BillingEntityId(),i.viewModel.BillingEntity.AddressId(),function(n){return app.route.PurchaseOrder_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})})}))],null,ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Create)&&i.viewModel.BillingEntity.InventoryGroupId()!=null}))])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Purchase Order View"),new Command_Block("As Source","This billing entity as the source",function(){r(!1);u()},ko.computed(function(){return r()}),"View orders sourced from this billing entity"),new Command_Block("As Target","This billing entity as the target",function(){r(!0);u()},ko.computed(function(){return!r()}),"View orders made by this billing entity")])])),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.BillingEntity_PurchaseOrdersTable.For(i.viewModel.BillingEntity.BillingEntityId,{showWhereBillingEntityIsSource:r}),click:function(n){return app.route.PurchaseOrder_Details.NavigateTo(n.PurchaseOrderId,{groupId:i.viewModel.GroupId})},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new FilterTableColumnViewModel("TargetBillingEntity","Target Billing Entity",!1,!0,null,r)).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 i.FormAction(function(){return Form.PurchaseOrderEditAddress(n.PurchaseOrderId,n.AddressId,n.AddressString,n.DeliveryNotes,u)})()},null,function(n){return!n.IsCompleted})).AddColumn(new CommandTableColumnViewModel("Delete Purchase Order","delete",function(n){return i.FormAction(function(){return Form.PurchaseOrderDelete(n.PurchaseOrderId,u)})()},!0,function(n){return ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Delete)&&!n.IsCompleted})()})).AddTitle("Purchase Orders")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.BillingEntity_UnreceivedPurchaseOrdersTable.For(i.viewModel.BillingEntity.BillingEntityId),click:function(n){return app.route.PurchaseOrder_PackingListDetails.NavigateTo(n.PurchaseOrderId,{packingListId:n.PackingListId,targetGroupId:n.TargetGroupId})},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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")),i.AddItem(o=new AjaxFilterTableViewModel({route:app.route.BillingEntity_CostItemsTable.For(i.viewModel.BillingEntity.BillingEntityId),click:function(n){return n.DeviceTypeId!==null?app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId,{groupId:i.viewModel.GroupId}):null},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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 Format.Currency(n.UnitPrice)},i.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 i.FormAction(function(){return Form.BillingEntityEditCostItem({BillingEntityId:i.viewModel.BillingEntity.BillingEntityId(),CostItemId:n.CostItemId,UnitPrice:n.UnitPrice,EffectiveDate:n.EffectiveDate,EndDate:n.EndDate,ItemName:n.ItemName,ItemDesc:n.ItemDesc},f)})()},i.HasCapabilityComputed(Capability.BillingEntity_ManageCostItems))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.BillingEntityRemoveCostItem(i.viewModel.BillingEntity.BillingEntityId(),n.CostItemId,n.EffectiveDate,n.ItemName,f)})()},i.HasCapabilityComputed(Capability.BillingEntity_ManageCostItems))).AddTitle("Cost Items For Billing Entity")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.EscalationList_UsersTable.For(i.viewModel.BillingEntity.EscalationListId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"CreatedUtc",ascending:!1,size:25,enabled:ko.computed(function(){return i.viewModel.BillingEntity.EscalationListId()!=null})}).AddColumn(new FilterTableColumnViewModel("Priority","Priority",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return Format.Subscription(n.SendSms,n.SendEmail)})).AddTitle("Escalation List User Details")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Message Accounts",t.BillingEntity.CompanyName,app.route.BillingEntity_Details.For(t.BillingEntity.BillingEntityId,{groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.BillingEntity_MessageAccounts=t}(Model||(Model={}));app.router.View(app.route.BillingEntity_MessageAccounts,function(n){function t(t){var i=n.call(this,t,new Model.BillingEntity_MessageAccounts)||this,r;return i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.BillingEntity_MessageAccountsTable.For(i.viewModel.BillingEntity.BillingEntityId),click:function(n){return app.route.MessageAccount_Details.NavigateTo(n.MessageAccountId,{groupId:i.viewModel.GroupId})},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text(i.viewModel.BillingEntity.CompanyName,"Billing Entity",ko.computed(function(){return r.data().length}),"Total accounts"),new Header_Actions(function(){return app.route.BillingEntity_Details.NavigateTo(i.viewModel.BillingEntity.BillingEntityId,{groupId:i.viewModel.GroupId})}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Accounts"),new Command_Block("Create","Create a new account",i.FormAction(function(){return Form.BillingEntityCreateMessageAccount(i.viewModel.BillingEntity.BillingEntityId(),function(n){return app.route.MessageAccount_Details.NavigateTo(n)})}),i.HasCapabilityComputed(Capability.MessageAccount_Create))])])),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Subscription Invoices",t.BillingEntity.CompanyName,app.route.BillingEntity_Details.For(t.BillingEntity.BillingEntityId))},t}return __extends(t,n),t}(n.Base_Model);n.BillingEntity_NetworkSubscriptionInvoices=t}(Model||(Model={}));app.router.View(app.route.BillingEntity_NetworkSubscriptionInvoices,function(n){function t(t){var i=n.call(this,t,new Model.BillingEntity_NetworkSubscriptionInvoices)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text(i.viewModel.BillingEntity.CompanyName,"Billing Entity",i.viewModel.BillingEntity.InventoryGroupName,ko.computed(function(){return i.viewModel.BillingEntity.InventoryGroupId()!=null?"Inventory Group":""})))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.BillingEntity_NetworkSubscriptionInvoicesTable.For(i.viewModel.BillingEntity.BillingEntityId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new DateOnlyFilterTableColumnViewModel("CreatedUtc","Date Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("XeroInvoiceNumber","Xero",!1,!1)).AddColumn(new NumberFilterTableColumnViewModel("Quantity","Quantity",!0,!0)).AddColumn(new FilterTableColumnViewModel("Total","Total",!0,!0,function(n){return Format.Currency(n.Total)})).AddColumn(new CommandTableColumnViewModel("Download","download",function(n){return window.location.href=app.route.BillingEntity_DownloadNetworkSubscriptionInvoice.For(i.viewModel.BillingEntity.BillingEntityId,{invoiceNumber:n.XeroInvoiceNumber}).GetUrl()})).AddTitle("Invoices")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(""),SmsFooter:ko.observable(""),EmailFooter:ko.observable(""),Hostnames:ko.observableArray(),GroupCount:ko.observable(0)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Branding.DisplayName,"Groups",app.route.Group_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Branding_Details=t}(Model||(Model={}));app.router.View(app.route.Branding_Details,function(n){function t(t){var i=n.call(this,t,new Model.Branding_Details)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("brand",new Header_Text(i.viewModel.Branding.DisplayName,"DisplayName",i.viewModel.Branding.Name,"Name")),new SingleValue_Block("Groups",i.viewModel.Branding.GroupCount),new SingleValue_Block("Hostnames",ko.computed(function(){return i.viewModel.Branding.Hostnames().length})),new Command_Block("Edit","Edit the details of branding",i.FormAction(function(){return Form.BrandingEdit({BrandingId:i.viewModel.Branding.BrandingId(),ContactUsUrl:i.viewModel.Branding.ContactUsUrl(),PrivacyPolicyUrl:i.viewModel.Branding.PrivacyPolicyUrl(),TermsAndConditionsUrl:i.viewModel.Branding.TermsAndConditionsUrl(),Footer:i.viewModel.Branding.Footer(),SmsFooter:i.viewModel.Branding.SmsFooter(),EmailFooter:i.viewModel.Branding.EmailFooter()},i.Update)}),i.HasCapabilityComputed(Capability.Branding_Edit))])])),i.AddItem(new HeaderPageItem(i.viewModel.Branding.DisplayName)),i.AddItem(new HeaderPageItem("Editable Settings")),i.AddItem(new TableViewModel([{Name:"Contact Us",Value:i.viewModel.Branding.ContactUsUrl},{Name:"Privacy Policy",Value:i.viewModel.Branding.PrivacyPolicyUrl},{Name:"Terms and Conditions",Value:i.viewModel.Branding.TermsAndConditionsUrl}],null,!0).AddColumn(new TextTableColumnViewModel("Name","Item",!1,!1)).AddColumn(new TextTableColumnViewModel("Value","Setting",!1,!1))),i.AddItem(new MessagePageItem(i.viewModel.Branding.Footer)),i.AddItem(new HeaderPageItem("Other Settings")),i.AddItem(new TableViewModel([{Name:"Website",Value:i.viewModel.Branding.Website},{Name:"Dashboard",Value:i.viewModel.Branding.Dashboard},{Name:"FavIcon",Value:i.viewModel.Branding.FavIcon},{Name:"ToolbarLogo",Value:i.viewModel.Branding.ToolbarLogo},{Name:"Stylesheet",Value:i.viewModel.Branding.Stylesheet}],null,!0).AddColumn(new TextTableColumnViewModel("Name","Item",!1,!1)).AddColumn(new TextTableColumnViewModel("Value","Setting",!1,!1))),i.AddItem(new HeaderPageItem("Hostnames")),i.AddItem(new TableViewModel(ko.computed(function(){return i.viewModel.Branding.Hostnames().map(function(n){return{Name:n}})}),null,!0).AddColumn(new TextTableColumnViewModel("Name","Name",!1,!1))),i.AddItem(new HeaderPageItem("Sms Footer")),i.AddItem(new MessagePageItem(i.viewModel.Branding.SmsFooter)),i.AddItem(new HeaderPageItem("Email Footer")),i.AddItem(new MessagePageItem(i.viewModel.Branding.EmailFooter)),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ChartCollectionId=ko.observable(0),t.Name=ko.observable(""),t.DaysToDisplay=ko.observable(0),t.IsVirtual=ko.observable(!1),t.ShowTapes=ko.observable(!1),t.ModuleId=ko.observable(0),t.CanCreateShared=ko.observable(!1),t.Intervals=ko.observableArray(),t.Charts=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Name,"Charts",app.route.Chart_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Chart_Details=t}(Model||(Model={}));app.router.View(app.route.Chart_Details,function(n){function t(t){var i=n.call(this,t,new Model.Chart_Details)||this,r,u,f;return i.ExtendMappingOptions({arrayChildId:{"Charts[i]":"ChartId","ChartItems[i]":"ChartItemId"},extend:{}}),u=function(n){return n!=null?app.route.SharedCollection_Details.NavigateTo(n):null},i.AddItem(f=Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Configure","Configure chart report",i.FormAction(function(){return Form.ChartConfigureCollection(i.viewModel.ChartCollectionId(),i.viewModel.DaysToDisplay(),i.viewModel.Name(),i.Update)}))]),Tile.CreateWithBlockSet([new Command_Block("Add","Add chart to report",i.FormAction(function(){return Form.ChartCollectionAddChart(i.viewModel.ChartCollectionId(),r,i.Update)}))]),Tile.CreateWithBlockSet([new Command_Block("Download","Download Trend Data",i.FormAction(function(){return Form.ChartDownloadData(i.viewModel.ChartCollectionId(),null,null,i.viewModel.DaysToDisplay(),i.viewModel.Name(),null)}))]),Tile.CreateWithBlockSet([new Command_Block("Share","Share a copy of this chart report",i.FormAction(function(){return Form.ChartCollectionCloneToShared(i.viewModel.ChartCollectionId(),i.viewModel.Name(),i.viewModel.DaysToDisplay(),u)}),ko.computed(function(){return i.viewModel.CanCreateShared()}))])])),f.lowMargin="true",i.OnViewModelReady=function(){r=new ChartCollection(i,i.viewModel.ChartCollectionId,i.viewModel.Name,i.viewModel.DaysToDisplay,i.viewModel.Intervals,i.viewModel.IsVirtual,i.viewModel.Charts,!1);r.dataCollection.UpdateCollection();i.AddItem(r);r.charts().length===0&&i.FormAction(function(){return Form.ChartCollectionAddChart(r.chartCollectionId(),r,i.Update)})()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Charts","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Chart_Index=t}(Model||(Model={}));app.router.View(app.route.Chart_Index,function(n){function t(t){var i=n.call(this,t,new Model.Chart_Index)||this,r,u=function(){return r.LoadData()},f=function(n){n!=null?app.route.Chart_Details.NavigateTo(n):r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create new chart report",i.FormAction(function(){return Form.ChartCreateCollection(f)}))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Chart_GetChartCollectionsTable.For(),click:function(n){return app.route.Chart_Details.NavigateTo(n.ChartCollectionId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.ChartDownloadData(n.ChartCollectionId,null,null,n.DaysToDisplay,n.Name)})()})).AddColumn(new CommandTableColumnViewModel("Configure Chart","config",function(n){return i.FormAction(function(){return Form.ChartConfigureCollection(n.ChartCollectionId,n.DaysToDisplay,n.Name,u)})()})).AddColumn(new CommandTableColumnViewModel("Delete Chart","delete",function(n){return i.FormAction(function(){return Form.ChartDeleteCollection(n.ChartCollectionId,u)})()})).AddTitle("Chart Reports")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Chart_SharedCollectionsTableForUser.For(),click:function(n){return app.route.SharedCollection_Details.NavigateTo(n.SharedCollectionId)},update:!0,sort:"Name",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ChartCollectionId=ko.observable(0),t.Name=ko.observable(""),t.DaysToDisplay=ko.observable(0),t.IsVirtual=ko.observable(!1),t.ShowTapes=ko.observable(!1),t.ModuleId=ko.observable(0),t.CanCreateShared=ko.observable(!1),t.Intervals=ko.observableArray(),t.Charts=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Dynamic Chart",t.Name,app.route.Module_Details.For(t.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Chart_Module=t}(Model||(Model={}));app.router.View(app.route.Chart_Module,function(n){function t(t){var i=n.call(this,t,new Model.Chart_Module)||this,r,u,f;return i.ExtendMappingOptions({arrayChildId:{"Charts[i]":"ChartId","ChartItems[i]":"ChartItemId"},extend:{}}),u=function(n){return n!=null?app.route.Chart_Details.NavigateTo(n):null},i.OnViewModelReady=function(){r=new ChartCollection(i,i.viewModel.ChartCollectionId,i.viewModel.Name,i.viewModel.DaysToDisplay,i.viewModel.Intervals,i.viewModel.IsVirtual,i.viewModel.Charts,!1);r.dataCollection.UpdateCollection();i.AddItem(f=Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Download","Download Trend Data",i.FormAction(function(){return Form.ChartDownloadData(i.viewModel.ChartCollectionId(),i.viewModel.ModuleId(),null,i.viewModel.DaysToDisplay(),i.viewModel.Name(),null)}))]),Tile.CreateWithBlockSet([new Command_Block("Save As...","Create an editable report",i.FormAction(function(){return Form.ChartCreateFromVirtual(i.viewModel.ModuleId(),i.viewModel.Name(),r.datesUtc.GetDays(),r.config,u)}))]),Tile.CreateWithBlockSet([new Command_Block("Load Tapes","Load boolean tape charts",function(){return app.route.Chart_Module.NavigateTo(null,{moduleId:i.viewModel.ModuleId,showTapes:!0})},ko.computed(function(){return!i.viewModel.ShowTapes()}))]),Tile.CreateWithBlockSet([new Command_Block("Unload Tapes","Unload boolean tape charts",function(){return app.route.Chart_Module.NavigateTo(null,{moduleId:i.viewModel.ModuleId,showTapes:!1})},ko.computed(function(){return i.viewModel.ShowTapes()}))]),Tile.CreateWithBlockSet([new Command_Block("Show All","Show all items on the charts",function(){return r.ToggleAllChartsItemsDisplay(!0)},ko.computed(function(){return r.hasHiddenChartItems()}))]),Tile.CreateWithBlockSet([new Command_Block("Hide All","Hide the items of all charts",function(){return r.ToggleAllChartsItemsDisplay(!1)},ko.computed(function(){return!r.hasHiddenChartItems()}))])]));f.lowMargin="true";i.AddItem(r);r.charts().length===0&&i.FormAction(function(){return Form.ChartCollectionAddChart(r.chartCollectionId(),r,i.Update)})()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ChartCollectionId=ko.observable(0),t.Name=ko.observable(""),t.Template=ko.observable(""),t.DaysToDisplay=ko.observable(0),t.IsVirtual=ko.observable(!1),t.ModuleId=ko.observable(0),t.CanCreateShared=ko.observable(!1),t.Intervals=ko.observableArray(),t.Charts=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Template,t.Name,app.route.Module_Details.For(t.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Chart_Template=t}(Model||(Model={}));app.router.View(app.route.Chart_Template,function(n){function t(t){var i=n.call(this,t,new Model.Chart_Template)||this,r;return i.ExtendMappingOptions({arrayChildId:{"Charts[i]":"ChartId","ChartItems[i]":"ChartItemId"},extend:{}}),i.OnViewModelReady=function(){r=new ChartCollection(i,i.viewModel.ChartCollectionId,i.viewModel.Name,i.viewModel.DaysToDisplay,i.viewModel.Intervals,i.viewModel.IsVirtual,i.viewModel.Charts,!1);r.dataCollection.UpdateCollection();i.AddItem(r);r.charts().length===0&&i.FormAction(function(){return Form.ChartCollectionAddChart(r.chartCollectionId(),r,i.Update)})()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}();__assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CumulativeMeter={AnyLimitReached:ko.observable(!1),AnyWarningReached:ko.observable(!1),CumulativeMeterId:ko.observable(0),DisplayDigits:ko.observable(0),FormattedTotal:ko.observable(0),Icon:ko.observable(""),ModuleId:ko.observable(0),ModuleName:ko.observable(""),Name:ko.observable(""),Scale:ko.observable(0),StartUtc:ko.observable(),Total:ko.observable(0),Units:ko.observable(""),TimeAlarms:ko.observableArray(),TotalAlarms:ko.observableArray()},t.EscalationLists=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.CumulativeMeter.Name,t.CumulativeMeter.ModuleName,app.route.Module_Details.For(t.CumulativeMeter.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.CumulativeMeter_Details=t}(Model||(Model={}));app.router.View(app.route.CumulativeMeter_Details,function(n){function t(t){var i=n.call(this,t,new Model.CumulativeMeter_Details)||this,f,r=function(){return f.LoadData()},e,u;i.ExtendMappingOptions({arrayChildId:{"TotalAlarms[i]":"CumulativeMeterTotalAlarmId","TimeAlarms[i]":"CumulativeMeterTimeAlarmId","EscalationLists[i]":"EscalationListId"},extend:{"TotalAlarms[i]":function(n){Tile.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",i.FormAction(function(){return Form.CumulativeMeterRenameTotalAlarm(i.viewModel.CumulativeMeter.CumulativeMeterId(),n.CumulativeMeterTotalAlarmId(),n.Name(),function(t){n.Name(t);r()})}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Limits","Change limits for this alarm",i.FormAction(function(){return Form.CumulativeMeterSetTotalAlarmLimits({CumulativeMeterId:i.viewModel.CumulativeMeter.CumulativeMeterId(),CumulativeMeterTotalAlarmId:n.CumulativeMeterTotalAlarmId(),DisplayDigits:n.DisplayDigits(),Warning:n.Warning(),Limit:n.Limit()},function(){return i.Update()})}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Delete","Delete this alarm",i.FormAction(function(){return Form.CumulativeMeterDeleteTotalAlarm(i.viewModel.CumulativeMeter.CumulativeMeterId(),n.CumulativeMeterTotalAlarmId(),n.Name(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm))])},"TimeAlarms[i]":function(n){Tile.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",i.FormAction(function(){return Form.CumulativeMeterRenameTimeAlarm(i.viewModel.CumulativeMeter.CumulativeMeterId(),n.CumulativeMeterTimeAlarmId(),n.Name(),function(t){n.Name(t);r()})}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Limits","Change limits for this alarm",i.FormAction(function(){return Form.CumulativeMeterSetTimeAlarmLimits({CumulativeMeterId:i.viewModel.CumulativeMeter.CumulativeMeterId(),CumulativeMeterTimeAlarmId:n.CumulativeMeterTimeAlarmId(),Days:n.Days(),Months:n.Months(),WarningThreshold:n.WarningThreshold()},i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Delete","Delete this alarm",i.FormAction(function(){return Form.CumulativeMeterDeleteTimeAlarm(i.viewModel.CumulativeMeter.CumulativeMeterId(),n.CumulativeMeterTimeAlarmId(),n.Name(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm))])},"EscalationLists[i]":function(n){return __assign(__assign({},n),new Command_Block("Remove",n.Name,i.FormAction(function(){return Form.CumulativeMeterRemoveEscalationList(i.viewModel.CumulativeMeter.CumulativeMeterId(),n.EscalationListId(),n.Name(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ManageEscalation)))}}});e=function(n){i.viewModel.CumulativeMeter.Name(n);r()};i.AddItem(new HeaderPageItem("Cumulative Meter"));var s=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,ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},h=function(n){return new PercentBar_Block(n.Name,n.FormattedLimit,n.Percent,null,ko.computed(function(){return"state-"+(n.LimitReached()?"faulted":n.WarningReached()?"warning":"active")}))},o=ko.observableArray();return ko.computed(function(){o(i.viewModel.CumulativeMeter.TotalAlarms().map(s))}),u=ko.observableArray(),ko.computed(function(){u(i.viewModel.CumulativeMeter.TimeAlarms().map(h))}),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block(i.viewModel.CumulativeMeter.Icon,new Header_Text(i.viewModel.CumulativeMeter.Name,null,i.viewModel.CumulativeMeter.FormattedTotal,"Total",ko.computed(function(){return"Since "+Format.DateTime(moment(i.viewModel.CumulativeMeter.StartUtc()))})),null,null,ko.computed(function(){return"state-"+(i.viewModel.CumulativeMeter.AnyLimitReached()?"faulted":i.viewModel.CumulativeMeter.AnyWarningReached()?"warning":"active")}))]).addBlockSet(o).addBlockSet(u),Tile.CreateWithBlockSet([new Command_Block("Rename","Change the name of this meter",i.FormAction(function(){return Form.CumulativeMeterRename(i.viewModel.CumulativeMeter.CumulativeMeterId(),i.viewModel.CumulativeMeter.Name(),e)}),i.HasCapabilityComputed(Capability.CumulativeMeter_Manage)),new Command_Block("Reset","Reset this meter",i.FormAction(function(){return Form.CumulativeMeterReset(i.viewModel.CumulativeMeter.CumulativeMeterId(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_Reset)),new Command_Block("Delete","Delete this meter",i.FormAction(function(){return Form.CumulativeMeterDelete(i.viewModel.CumulativeMeter.CumulativeMeterId(),function(){return app.route.Module_Details.NavigateTo(i.viewModel.CumulativeMeter.ModuleId)})}),i.HasCapabilityComputed(Capability.CumulativeMeter_Manage))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Create Alarms",i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Total","Create new total alarm",i.FormAction(function(){return Form.CumulativeMeterCreateTotalAlarm(i.viewModel.CumulativeMeter.CumulativeMeterId(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm)),new Command_Block("Time","Create new time alarm",i.FormAction(function(){return Form.CumulativeMeterCreateTimeAlarm(i.viewModel.CumulativeMeter.CumulativeMeterId(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ConfigureAlarm))]),Tile.CreateWithBlockSet([new Header_Block("warning",new Header_Text("Escalation Lists",null,ko.computed(function(){return i.viewModel.EscalationLists().length}),"Escalation list count"))]).addBlockSet(i.viewModel.EscalationLists).addBlockSet([new Command_Block("Add","Add escalation list",i.FormAction(function(){return Form.CumulativeMeterAddEscalationLists(i.viewModel.CumulativeMeter.CumulativeMeterId(),i.Update)}),i.HasCapabilityComputed(Capability.CumulativeMeter_ManageEscalation))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.CumulativeMeter_TotalsTable.For(i.viewModel.CumulativeMeter.CumulativeMeterId),click:null,update:!0,sort:"StartUtc",ascending:!1,size:25}).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*i.viewModel.CumulativeMeter.Scale()).toFixed(i.viewModel.CumulativeMeter.DisplayDigits())+i.viewModel.CumulativeMeter.Units()})).AddTitle("Totals")),i.AddItem(new HeaderPageItem("Alarms")),i.AddItem(Tile.CreatePageItem().addTileSet(i.viewModel.CumulativeMeter.TotalAlarms).addTileSet(i.viewModel.CumulativeMeter.TimeAlarms)),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Note","Add a new Note",i.FormAction(function(){return Form.CumulativeMeterCreateNote(i.viewModel.CumulativeMeter.CumulativeMeterId(),i.Update)}),i.HasCapabilityComputed(Capability.Note_Create))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.CumulativeMeter_NotesTable.For(i.viewModel.CumulativeMeter.CumulativeMeterId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:10}).AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return app.route.Note_Details.NavigateTo(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 app.route.User_Details.NavigateTo(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.CumulativeMeter_EventsTable.For(i.viewModel.CumulativeMeter.CumulativeMeterId),click:function(n){return i.FormAction(function(){return Form.CumulativeMeterEventDetails(i,{CumulativeMeterId:i.viewModel.CumulativeMeter.CumulativeMeterId(),CumulativeMeterEventId:n.CumulativeMeterEventId,TimeUtc:n.TimeUtc,EventType:n.EventType,Details:n.Details,Alarm:n.Alarm,User:n.User})})()},update:!0,sort:"TimeUtc",ascending:!1,size:10}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.DataStreamId=ko.observable(""),t.NetworkId=ko.observable(0),t.ModuleId=ko.observable(0),t.NetworkName=ko.observable(""),t.ModuleName=ko.observable(""),t.TrendUnits=ko.observable(""),t.Trend=ko.observable(""),t.Scale=ko.observable(0),t.Units=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Data Stream",t.ModuleName,app.route.Module_Details.For(t.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.DataStream_Details=t}(Model||(Model={}));app.router.View(app.route.DataStream_Details,function(n){function t(t){var i=n.call(this,t,new Model.DataStream_Details)||this,r;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.DataStreamId,null,function(){return CopyToClipboard(i.viewModel.DataStreamId)},"Click to copy to clipboard"),new Header_Block("data-stream",new Header_Text("Data Stream",null,i.viewModel.Trend,"Trend")),new SingleValue_Block("Network",i.viewModel.NetworkName,ko.computed(function(){return i.viewModel.NetworkName()!=null})),new SingleValue_Block("Module",i.viewModel.ModuleName,ko.computed(function(){return i.viewModel.ModuleName()!=null})),new SingleValue_Block("Trend Units",i.viewModel.TrendUnits),new SingleValue_Block("Scale",i.viewModel.Scale),new SingleValue_Block("Stream Units",i.viewModel.Units)]),Tile.CreateWithBlockSet([new Command_Block("Configure","Configure this data stream",i.FormAction(function(){return Form.DataStreamConfigure(i.viewModel.DataStreamId(),i.viewModel.Scale(),i.viewModel.Units(),function(n,t){i.viewModel.Scale(n);i.viewModel.Units(t);r.LoadData()})}),i.HasCapabilityComputed(Capability.DataStream_Configure)),new Command_Block("Delete","Delete this data stream",i.FormAction(function(){return Form.DataStreamDelete(i.viewModel.DataStreamId(),function(){return app.route.Module_Details.NavigateTo(i.viewModel.ModuleId)})}),i.HasCapabilityComputed(Capability.DataStream_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.DataStream_EventsTable.For(i.viewModel.DataStreamId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Events")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Device={DeviceCalibrationId:ko.observable(0),DeviceExtAddress:ko.observable(""),CreatedUtc:ko.observable()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Calibration",t.Device.DeviceExtAddress,app.route.Device_Details.For(t.Device.DeviceExtAddress))},t}return __extends(t,n),t}(n.Base_Model);n.Device_Calibration=t}(Model||(Model={}));app.router.View(app.route.Device_Calibration,function(n){function t(t){var i=n.call(this,t,new Model.Device_Calibration)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Device_CalibrationValuesTable.For(i.viewModel.Device.DeviceExtAddress,{deviceCalibrationId:i.viewModel.Device.DeviceCalibrationId}),click:null,update:!0,sort:"ValueIndex",ascending:!0,size:100}).AddColumn(new FilterTableColumnViewModel("ValueIndex","ValueIndex",!1,!0)).AddColumn(new FilterTableColumnViewModel("CalibrationValue","CalibrationValue",!1,!0)).AddTitle("Calibration Values")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Device={DeviceExtAddress:ko.observable(""),DeviceTypeId:ko.observable(0),Type:ko.observable(""),Model:ko.observable(0),DeviceTargetUpgradeModel:ko.observable(0),FirmwareVersion:ko.observable(0),SimId:ko.observable(0),SimNumber:ko.observable(""),SimStatus:ko.observable(""),SimSupported:ko.observable(!1),IsObsolete:ko.observable(!1),ParentDeviceExtAddress:ko.observable(""),ParentDeviceType:ko.observable(""),ChildDeviceExtAddress:ko.observable(""),ChildDeviceType:ko.observable(""),SupportsChildDevice:ko.observable(!1),DeviceAttachments:ko.observableArray()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Device.Type,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Device_Details=t}(Model||(Model={}));app.router.View(app.route.Device_Details,function(n){function t(t){var i=n.call(this,t,new Model.Device_Details)||this;return i.ExtendMappingOptions({arrayChildId:{"DeviceAttachments[i]":"NetworkId"},extend:{"DeviceAttachments[i]":function(n){Tile.MakeTile(n);n.addBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return n.NetworkName()||"Not Assigned"}),"Assigned Network",ko.computed(function(){return n.NodeName()||"Not Assigned"}),ko.computed(function(){return"Address "+Format.NodeAddress(n.NodeAddress())})),new Header_Actions(function(){return n.NetworkId()!=null?app.route.Network_Details.NavigateTo(n.NetworkId):null})),new Command_Block("View Network",ko.computed(function(){return n.NetworkName()||"Not Assigned"}),function(){return n.NetworkId()!=null?app.route.Network_Details.NavigateTo(n.NetworkId):null}),new Command_Block("View Node",ko.computed(function(){return n.NodeName()||"Not Assigned"}),function(){return n.NodeAddress()!=null?app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress}):null}),new SingleValue_Block("I/O Module","Attached to I/O Module",n.AttachedToIo)])}}}),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("device",new Header_Text(ko.computed(function(){return i.viewModel.Device.Type()+" v"+i.viewModel.Device.Model()}),ko.computed(function(){return"Firmware version "+i.viewModel.Device.FirmwareVersion()}),i.viewModel.Device.DeviceExtAddress,"Extended Address"),new Header_Actions(null,function(){return CopyToClipboard(i.viewModel.Device.Type()+" v"+i.viewModel.Device.Model())},function(){return CopyToClipboard(i.viewModel.Device.DeviceExtAddress)},null,"Click to copy to clipboard","Click to copy to clipboard")),new Command_Block("Edit","Edit device properties",i.FormAction(function(){return Form.DeviceEdit({DeviceExtAddress:i.viewModel.Device.DeviceExtAddress(),DeviceTypeId:i.viewModel.Device.DeviceTypeId(),IsObsolete:i.viewModel.Device.IsObsolete(),DeviceModel:i.viewModel.Device.Model(),FirmwareVersion:i.viewModel.Device.FirmwareVersion()},i.Update)}),i.HasCapabilityComputed(Capability.Device_Edit)),new Command_Block("Device Type","View device type",function(){return app.route.DeviceType_Details.NavigateTo(i.viewModel.Device.DeviceTypeId)}),new Command_Block("Groups","Groups containing device",function(){return app.route.Device_ContainingGroups.NavigateTo(i.viewModel.Device.DeviceExtAddress)}),new Command_Block("Attach Sim","Attach a sim",i.FormAction(function(){return Form.DeviceAttachSim(i.viewModel.Device.DeviceExtAddress(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_ManageSim)&&i.viewModel.Device.SimSupported()&&i.viewModel.Device.SimId()==null})),new Command_Block("Upgrade","Upgrade legacy device",i.FormAction(function(){return Form.DeviceUpgradeLegacyDevice(i.viewModel.Device.DeviceExtAddress(),i.viewModel.Device.Model(),i.viewModel.Device.DeviceTargetUpgradeModel(),i.Update)}),ko.computed(function(){return i.viewModel.Device.DeviceTargetUpgradeModel()!=null&&i.viewModel.Device.DeviceTargetUpgradeModel()!==i.viewModel.Device.Model()&&i.HasCapability(Capability.Device_LegacyUpgrade)})),new SingleValue_Block("Sim Status",i.viewModel.Device.SimStatus,ko.computed(function(){return i.HasCapability(Capability.Network_ManageSim)&&i.viewModel.Device.SimId()!=null})),new Command_Block("View Sim",ko.computed(function(){return i.viewModel.Device.SimNumber()||"Not Assigned"}),function(){return app.route.Sim_Details.NavigateTo(i.viewModel.Device.SimId)},ko.computed(function(){return i.viewModel.Device.SimId()&&i.HasCapability(Capability.Network_ManageSim)}))])]).addTileSet(i.viewModel.Device.DeviceAttachments).addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Child Device"),new Command_Block(i.viewModel.Device.ChildDeviceType,i.viewModel.Device.ChildDeviceExtAddress,function(){return app.route.Device_Details.NavigateTo(i.viewModel.Device.ChildDeviceExtAddress)},ko.computed(function(){return i.viewModel.Device.ChildDeviceExtAddress()!=null})),new Command_Block("Detach","Detach child device",i.FormAction(function(){return Form.DeviceDetachChildDevice(i.viewModel.Device.DeviceExtAddress(),i.viewModel.Device.ChildDeviceExtAddress(),i.Update)}),ko.computed(function(){return i.viewModel.Device.ChildDeviceExtAddress()!=null&&i.HasCapability(Capability.Device_Create)})),new Command_Block("Attach","Attach child device",i.FormAction(function(){return Form.DeviceAttachChildDevice(i.viewModel.Device.DeviceExtAddress(),i.viewModel.Device.DeviceTypeId(),i.Update)}),ko.computed(function(){return i.viewModel.Device.ChildDeviceExtAddress()==null&&i.HasCapability(Capability.Device_Create)}))],null,ko.computed(function(){return i.viewModel.Device.SupportsChildDevice()})),Tile.CreateWithBlockSet([new SmallHeader_Block("Parent Device"),new Command_Block(i.viewModel.Device.ParentDeviceType,i.viewModel.Device.ParentDeviceExtAddress,function(){return app.route.Device_Details.NavigateTo(i.viewModel.Device.ParentDeviceExtAddress)})],null,ko.computed(function(){return i.viewModel.Device.ParentDeviceExtAddress()!=null}))])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Device_TestReportsTable.For(i.viewModel.Device.DeviceExtAddress),click:function(n){return app.route.Device_TestReport.NavigateTo(i.viewModel.Device.DeviceExtAddress,{deviceTestReportId:n.DeviceTestReportId})},update:!0,sort:"CreatedUtc",ascending:!1,size:10}).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")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Device_CalibrationsTable.For(i.viewModel.Device.DeviceExtAddress),click:function(n){return app.route.Device_Calibration.NavigateTo(i.viewModel.Device.DeviceExtAddress,{deviceCalibrationId:n.DeviceCalibrationId})},update:!0,sort:"CreatedUtc",ascending:!1,size:10}).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddTitle("Calibrations")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Device_UserActionsForTargetDeviceTable.For(i.viewModel.Device.DeviceExtAddress),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Device={DeviceTestReportId:ko.observable(0),DeviceExtAddress:ko.observable(""),CreatedUtc:ko.observable(),AllPassed:ko.observable(!1)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Test Report",t.Device.DeviceExtAddress,app.route.Device_Details.For(t.Device.DeviceExtAddress))},t}return __extends(t,n),t}(n.Base_Model);n.Device_TestReport=t}(Model||(Model={}));app.router.View(app.route.Device_TestReport,function(n){function t(t){var i=n.call(this,t,new Model.Device_TestReport)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Device_TestReportItemsTable.For(i.viewModel.Device.DeviceExtAddress,{deviceTestReportId:i.viewModel.Device.DeviceTestReportId}),click:null,update:!0,sort:"Name",ascending:!0,size:100}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.DeviceType={DeviceTypeId:ko.observable(0),DeviceType:ko.observable(""),Description:ko.observable(""),ImageUrl:ko.observable(""),IsObsolete:ko.observable(!1),IsIoModule:ko.observable(!1),IoType:ko.observable(""),IoTypeId:ko.observable(0),MaxIoModules:ko.observable(0),HardwareId:ko.observable(0),ConfigurableSerialPorts:ko.observable(0),SupportsApplication:ko.observable(!1),SimRequirements:ko.observable(""),SupportsSim:ko.observable(!1),SimRequired:ko.observable(!1),IsGateway:ko.observable(!1),ParentTypeId:ko.observable(0),ParentTypeName:ko.observable(""),NextAvailableModel:ko.observable(0)},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.DeviceType.DeviceType,function(){return t.GroupId()==null?"Dashboard":"Device Types"},function(){return t.GroupId()==null?app.route.Home_Index.For():app.route.Group_DeviceTypes.For(t.GroupId)})},t}return __extends(t,n),t}(n.Base_Model);n.DeviceType_Details=t}(Model||(Model={}));app.router.View(app.route.DeviceType_Details,function(n){function t(t){var i=n.call(this,t,new Model.DeviceType_Details)||this,u,f,e,s=function(){return u.LoadData()},r=function(){return f.LoadData()},o=function(){return e.LoadData()},h=function(){return i.viewModel.DeviceType.ParentTypeId()!=null?app.route.DeviceType_Details.NavigateTo(i.viewModel.DeviceType.ParentTypeId,{groupId:i.viewModel.GroupId}):app.route.Group_DeviceTypes.NavigateTo(i.viewModel.GroupId)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("device",new Header_Text(i.viewModel.DeviceType.DeviceType,"Device Type",null,ko.computed(function(){return i.viewModel.DeviceType.IsObsolete()?"Obsolete":""}))),new SingleValue_Block("I/O Type",i.viewModel.DeviceType.IoType),new SingleValue_Block("Max I/O Modules",i.viewModel.DeviceType.MaxIoModules,ko.computed(function(){return i.viewModel.DeviceType.MaxIoModules()>0})),new SingleValue_Block("HardWare Id",ko.computed(function(){return i.viewModel.DeviceType.HardwareId()!=null?i.viewModel.DeviceType.HardwareId():"Unknown"})),new SingleValue_Block("Application",ko.computed(function(){return i.viewModel.DeviceType.SupportsApplication()?"Supported":"Not Supported"})),new SingleValue_Block("SIM",i.viewModel.DeviceType.SimRequirements)]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Tools")),new Command_Block("Groups","Groups containing device type",function(){return app.route.DeviceType_ContainingGroups.NavigateTo(i.viewModel.DeviceType.DeviceTypeId)}),new Command_Block("Edit","Edit device type",i.FormAction(function(){return Form.DeviceTypeEdit({DeviceTypeId:i.viewModel.DeviceType.DeviceTypeId(),DeviceType:i.viewModel.DeviceType.DeviceType(),ImageUrl:i.viewModel.DeviceType.ImageUrl(),Description:i.viewModel.DeviceType.Description(),ParentTypeId:i.viewModel.DeviceType.ParentTypeId(),IsObsolete:i.viewModel.DeviceType.IsObsolete(),IsIoModule:i.viewModel.DeviceType.IsIoModule(),IoTypeId:i.viewModel.DeviceType.IoTypeId(),MaxIoModules:i.viewModel.DeviceType.MaxIoModules(),HardwareId:i.viewModel.DeviceType.HardwareId(),ConfigurableSerialPorts:i.viewModel.DeviceType.ConfigurableSerialPorts(),SupportsApplication:i.viewModel.DeviceType.SupportsApplication(),SupportsSim:i.viewModel.DeviceType.SupportsSim(),SimRequired:i.viewModel.DeviceType.SimRequired()},i.Update)}),i.HasCapabilityComputed(Capability.DeviceType_Edit)),new Command_Block("Create Child","Create child device type",i.FormAction(function(){return Form.DeviceTypeCreateChild(i.viewModel.DeviceType.DeviceTypeId(),i.Update)}),ko.computed(function(){return i.viewModel.DeviceType.ParentTypeId()==null&&i.HasCapability(Capability.DeviceType_Create)})),new Command_Block("Delete","Delete device type",i.FormAction(function(){return Form.DeviceTypeDelete(i.viewModel.DeviceType.DeviceTypeId(),h)}),i.HasCapabilityComputed(Capability.DeviceType_Delete)),new Command_Block("Add Model","Add a new model for device type",i.FormAction(function(){return Form.DeviceTypeCreateModel(i.viewModel.DeviceType.DeviceTypeId(),i.viewModel.DeviceType.NextAvailableModel(),r)}),i.HasCapabilityComputed(Capability.DeviceType_Edit))]),Tile.CreateWithBlockSet([new Header_Block("device",new Header_Text(i.viewModel.DeviceType.ParentTypeName,"Parent Device Type"),null,ko.computed(function(){return i.viewModel.DeviceType.ParentTypeId()!=null})),new Command_Block("Parent","Parent Device Type",function(){return app.route.DeviceType_Details.NavigateTo(i.viewModel.DeviceType.ParentTypeId,{groupId:i.viewModel.GroupId})},ko.computed(function(){return i.viewModel.DeviceType.ParentTypeId()!=null}))])])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Description",ko.computed(function(){return i.viewModel.DeviceType.Description()!==""}))])])),i.AddItem(new MessagePageItem(i.viewModel.DeviceType.Description,ko.computed(function(){return i.viewModel.DeviceType.Description()!==""}))),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.DeviceType_ChildTypesTable.For(i.viewModel.DeviceType.DeviceTypeId),click:function(n){return app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId,{groupId:i.viewModel.GroupId})},update:!0,sort:"DeviceType",ascending:!0,size:25}).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 i.FormAction(function(){return Form.DeviceTypeDelete(n.DeviceTypeId,s)})()},i.HasCapabilityComputed(Capability.DeviceType_Delete))).AddTitle("Child Device Types")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.DeviceType_ModelsTable.For(i.viewModel.DeviceType.DeviceTypeId),click:null,update:!0,sort:"Model",ascending:!0,size:25}).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 i.FormAction(function(){return Form.DeviceTypeSetUpgradeTarget(i.viewModel.DeviceType.DeviceTypeId(),n.Model,n.TargetUpgradeModel,r)})()},i.HasCapabilityComputed(Capability.DeviceType_Edit))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return i.FormAction(function(){return Form.DeviceTypeDeleteModel(i.viewModel.DeviceType.DeviceTypeId(),n.Model,r)})()},i.HasCapabilityComputed(Capability.DeviceType_Delete))).AddTitle("Device Type Models")),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.DeviceType_BillingEntityCostItemsTable.For(i.viewModel.DeviceType.DeviceTypeId),click:function(n){return app.route.BillingEntity_Details.NavigateTo(n.BillingEntityId,{groupId:i.viewModel.GroupId})},update:!0,sort:"ItemName",ascending:!0,size:25}).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 Format.Currency(n.UnitPrice)})).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return i.FormAction(function(){return Form.BillingEntityEditCostItem({BillingEntityId:n.BillingEntityId,CostItemId:n.CostItemId,UnitPrice:n.UnitPrice,EffectiveDate:n.EffectiveDate,EndDate:n.EndDate,ItemName:n.ItemName,ItemDesc:n.ItemDesc},o)})()},i.HasCapabilityComputed(Capability.DeviceType_SetPrice))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return i.FormAction(function(){return Form.BillingEntityRemoveCostItem(n.BillingEntityId,n.CostItemId,n.EffectiveDate,n.ItemName,o)})()},i.HasCapabilityComputed(Capability.DeviceType_SetPrice))).AddTitle("Device Type Pricing for Billing Entities")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Documentation={DocumentationId:ko.observable(0),ParentDocumentationId:ko.observable(0),PageName:ko.observable(""),DocumentationPrefix:ko.observable(""),ParentDocumentationPageName:ko.observable(""),ParentDocumentationSlug:ko.observable(""),Content:ko.observable(""),Slug:ko.observable("")},t.Exists=ko.observable(!1),t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Documentation.PageName)},t}return __extends(t,n),t}(n.Base_Model);n.Document_Details=t}(Model||(Model={}));app.router.View(app.route.Document_Details,function(n){function t(t){var i=n.call(this,t,new Model.Document_Details)||this,u,r=ko.observable(!1),f;return i.AddItem(u=new DashboardHeaderPageItem(0,i.viewModel.Documentation.PageName,TileState.Idle)),u.addButton(new DashboardActionButton(0,"edit","edit",function(){return app.route.Document_Edit.NavigateTo(null,{prefix:i.viewModel.Documentation.DocumentationPrefix(),slug:i.viewModel.Documentation.Slug()})},!0)),u.addButton(new DashboardActionButton(0,ko.computed(function(){return r()?"collapse":"expand"}),ko.computed(function(){return r()?"Hide children":"Show children"}),function(){r()||f.LoadData();r(!r())},!0)),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Document_ChildDocumentsTable.For(i.viewModel.Documentation.DocumentationPrefix,{id:i.viewModel.Documentation.DocumentationId}),click:function(n){r(!r());app.route.Document_Details.NavigateTo(null,{prefix:n.Prefix,slug:n.Slug})},update:!0,sort:"PageName",ascending:!0,size:50,enabled:r}).AddColumn(new FilterTableColumnViewModel("PageName","Page Name",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Creator",!0,!0)).AddTitle("Child Documents")),i.OnViewModelReady=function(){return f.LoadData()},i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.Documentation.Content())}))),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Documentation={DocumentationId:ko.observable(),ParentDocumentationId:ko.observable(),Slug:ko.observable(""),DocumentationPrefix:ko.observable(""),Content:ko.observable(""),PageName:ko.observable(""),ParentDocumentationPageName:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return t.Documentation.PageName()||"Create"},t.Documentation.DocumentationPrefix,app.route.DocumentationPrefix_Details.For(t.Documentation.DocumentationPrefix))},t}return __extends(t,n),t}(n.Base_Model);n.Document_Edit=t}(Model||(Model={}));app.router.View(app.route.Document_Edit,function(n){function t(t){var i=n.call(this,t,new Model.Document_Edit)||this;i.ExtendDispose(function(){return clearTimeout(i.timerHandler)});var u,f=ko.observable(!1),o=ko.observable(i.viewModel.Documentation.ParentDocumentationId()),s,r=ko.observable(""),h=function(n){app.route.Document_Details.NavigateTo(null,{prefix:i.viewModel.Documentation.DocumentationPrefix(),slug:n})},c=function(){history.go(-1);i.CloseFormDialog()},e=function(n){f(n)};return i.OnViewModelReady=function(){var t,n;r(i.viewModel.Documentation.Content()||"");t=ko.observable(i.viewModel.Documentation.PageName()||"");i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Parent Document"),new SingleValue_Block("Parent",ko.computed(function(){return i.viewModel.Documentation.ParentDocumentationPageName()||"Not Assigned"})),new Command_Block("Assign","Assign Parent Document",i.FormAction(function(){return Form.DocumentSetParent()}))]),Tile.CreateWithBlockSet([new Command_Block("Cancel","Discard changes",i.FormAction(function(){return Form.DocumentCancelUpdate(c)}))]),Tile.CreateWithBlockSet([new Command_Block("Auto on","Turn off auto save",function(){return e(!1)},ko.computed(function(){return f()})),new Command_Block("Auto off","Click to turn on autosave",function(){return e(!0)},ko.computed(function(){return!f()})),new Command_Block("Save","Save changes and close document",function(){t().trim().length>0&&r().trim().length>0?i.FormAction(function(){return Form.DocumentSave(i.viewModel.Documentation.DocumentationPrefix(),i.viewModel.Documentation.Slug(),t(),r(),i.viewModel.Documentation.DocumentationId(),o(),s,h)})():i.SetMessage("You cannot save this document without a name or content")})])]));i.AddItem(u=new InlineEditorPageItem(i.viewModel.Documentation.Slug,i.viewModel.Documentation.DocumentationPrefix(),i.viewModel.Documentation.DocumentationId(),t,r,f));u.addEditorButton(new ActionButton("h1","Heading",function(){return n("h1")},!0));u.addEditorButton(new ActionButton("h2","Sub Heading",function(){return n("h2")},!0));u.addEditorButton(new ActionButton("bold","Bold",function(){return n("bold")},!0));u.addEditorButton(new ActionButton("italic","Italics",function(){return n("italics")},!0));u.addEditorButton(new ActionButton("bullets","Unordered List",function(){return n("ul")},!0));u.addEditorButton(new ActionButton("list","Ordered List",function(){return n("ol")},!0));u.addEditorButton(new ActionButton("quote","Block Quote",function(){return n("quote")},!0));u.addEditorButton(new ActionButton("link","Create Link",function(){return i.FormAction(function(){return Form.DocumentCreateLink()})},i.HasCapabilityComputed(Capability.Documentation_CreateLink)));u.addEditorButton(new ActionButton("help right","Markdown Help",function(){return window.open("https://commonmark.org/help/","_blank")},!0));n=function(n){var t=$("#content-text-area").prop("selectionStart"),i=$("#content-text-area").prop("selectionEnd");switch(n){case"h1":r(Format.FormatHelper(r(),t,i,"# ",""));break;case"h2":r(Format.FormatHelper(r(),t,i,"## ",""));break;case"bold":r(Format.FormatHelper(r(),t,i,"**","**"));break;case"italics":r(Format.FormatHelper(r(),t,i,"*","*"));break;case"hr":r(Format.FormatHelper(r(),t,i,"\n---\n",""));break;case"quote":r(Format.FormatHelper(r(),t,i,">",""));break;case"ol":r(Format.FormatListHelper(r(),t,i,"ol"));break;case"ul":r(Format.FormatListHelper(r(),t,i,"ul"))}}},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.DocumentationPrefix={DocumentationPrefixId:ko.observable(0),DocumentationPrefix:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.DocumentationPrefix.DocumentationPrefix,"Document Prefixes",app.route.Group_DocumentationPrefixes.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.DocumentationPrefix_Details=t}(Model||(Model={}));app.router.View(app.route.DocumentationPrefix_Details,function(n){function t(t){var i=n.call(this,t,new Model.DocumentationPrefix_Details)||this,r;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create new document",function(){return app.route.Document_Edit.NavigateTo(null,{prefix:i.viewModel.DocumentationPrefix.DocumentationPrefix(),slug:null})},i.HasCapabilityComputed(Capability.Documentation_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.DocumentationPrefix_DocumentsTable.For(i.viewModel.DocumentationPrefix.DocumentationPrefix),click:function(n){return app.route.Document_Details.NavigateTo(null,{prefix:i.viewModel.DocumentationPrefix.DocumentationPrefix(),slug:n.Slug})},update:!0,sort:"PageName",ascending:!0,size:50}).AddColumn(new FilterTableColumnViewModel("PageName","Page Name",!1,!0,function(n){return n.PublishedUtc!=null?n.PageName:n.PageName+" (DRAFT)"})).AddColumn(new FilterTableColumnViewModel("Slug","Url Slug",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedUser","Creator",!0,!0)).AddTitle("Documents")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Escalation","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Escalation_Index=t}(Model||(Model={}));app.router.View(app.route.Escalation_Index,function(n){function t(t){var i=n.call(this,t,new Model.Escalation_Index)||this,r=function(n){return app.route.EscalationList_Details.NavigateTo(n)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create a new escalation list",i.FormAction(function(){return Form.EscalationListCreate(r)}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Escalation_EscalationListsTable.For(),click:function(n){return app.route.EscalationList_Details.NavigateTo(n.EscalationListId)},update:!0,sort:"Name",ascending:!0,size:10}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.EscalationList={EscalationListId:ko.observable(0),Name:ko.observable(""),EscalationDelayMinutes:ko.observable(0)},t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.EscalationList.Name,"Escalation",app.route.Escalation_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.EscalationList_Details=t}(Model||(Model={}));app.router.View(app.route.EscalationList_Details,function(n){function t(t){var i=n.call(this,t,new Model.EscalationList_Details)||this,u,f,r=function(){u.LoadData();f.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("attributes",new Header_Text(i.viewModel.EscalationList.Name,"Escalation List",ko.computed(function(){return i.viewModel.EscalationList.EscalationDelayMinutes()+"min"}),"Escalation delay")),new Command_Block("Groups","Groups containing escalation list",function(){return app.route.EscalationList_ContainingGroups.NavigateTo(i.viewModel.EscalationList.EscalationListId)})]),Tile.CreateWithBlockSet([new Command_Block("Delay","Set escalation delay",i.FormAction(function(){return Form.EscalationListSetDelay(i.viewModel.EscalationList.EscalationListId(),i.viewModel.EscalationList.EscalationDelayMinutes(),function(n){return i.viewModel.EscalationList.EscalationDelayMinutes(n)})}),i.HasCapabilityComputed(Capability.EscalationList_Configure)),new Command_Block("Rename","Rename this escalation list",i.FormAction(function(){return Form.EscalationListRename(i.viewModel.EscalationList.EscalationListId(),i.viewModel.EscalationList.Name(),function(n){return i.viewModel.EscalationList.Name(n)})}),i.HasCapabilityComputed(Capability.EscalationList_Rename)),new Command_Block("Delete","Delete this escalation list",i.FormAction(function(){return Form.EscalationListDelete(i.viewModel.EscalationList.EscalationListId(),function(){return app.route.Escalation_Index.NavigateTo()})}),i.HasCapabilityComputed(Capability.EscalationList_Delete))]),Tile.CreateWithBlockSet([new Command_Block("Add","Add an existing user",i.FormAction(function(){return Form.EscalationListAddUser(i.viewModel.EscalationList.EscalationListId(),r)}),i.HasCapabilityComputed(Capability.EscalationList_ManageUser)),new Command_Block("Create","Create a new user",i.FormAction(function(){return Form.EscalationListCreateUser(i.viewModel.EscalationList.EscalationListId(),i.viewModel.CurrentUser.TimeZoneName(),i.viewModel.CurrentUser.UtcOffsetHours(),i.viewModel.BrandingId(),r)}),i.HasCapabilityComputed(Capability.EscalationList_CreateUser))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.EscalationList_UsersTable.For(i.viewModel.EscalationList.EscalationListId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"Priority",ascending:!0,size:10}).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 Format.Subscription(n.SendSms,n.SendEmail)})).AddColumn(new CommandTableColumnViewModel("Edit Subscription","edit",function(n){return i.FormAction(function(){return Form.EscalationListUpdateSubscription(i.viewModel.EscalationList.EscalationListId(),n.UserId,n.Name,n.Priority,n.SendSms,n.SendEmail,r)})()},i.HasCapabilityComputed(Capability.EscalationList_ManageUser))).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return i.FormAction(function(){return Form.EscalationListRemoveUser(i.viewModel.EscalationList.EscalationListId(),n.UserId,n.Name,n.Priority,r)})()},i.HasCapabilityComputed(Capability.EscalationList_ManageUser))).AddTitle("Users")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.EscalationList_HistoryTable.For(i.viewModel.EscalationList.EscalationListId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"CreatedUtc",ascending:!1,size:10}).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 Format.SubscriptionChange(n.PrevSendSms,n.PrevSendEmail,n.NewSendSms,n.NewSendEmail)})).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Actioned By",!0,!0)).AddTitle("Member History")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.EscalationList_SubscribedAlertsTable.For(i.viewModel.EscalationList.EscalationListId),click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!0,sort:"NetworkName",ascending:!0,size:10}).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"("+Format.Pad(n.AlertAndStatus,3)+") "+n.AlertName})).AddColumn(new CommandTableColumnViewModel("Manage Subscription","edit",function(n){return app.route.Module_AlertDetails.NavigateTo(n.ModuleId,{alertAndStatus:n.AlertAndStatus})},i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))).AddTitle("Subscribed Alerts")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.EscalationList_ModuleEventsTable.For(i.viewModel.EscalationList.EscalationListId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10}).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?Format.Duration(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 Format.Subscription(n.SendSms,n.SendEmail)})).AddColumn(new CommandTableColumnViewModel("View Network Node","node",function(n){return n.NetworkId?app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress}):null},!0,function(n){return n.NetworkId!=null})).AddColumn(new FilterTableColumnViewModel("NodeName","Network Node",!0,!0,function(n){return n.NetworkId?n.NetworkName+" / "+Format.NodeAddressAndName(n):null})).AddColumn(new CommandTableColumnViewModel("View Module","firmware",function(n){return n.ModuleId?app.route.Module_Details.NavigateTo(n.ModuleId):null},!0,function(n){return n.ModuleId!=null})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!0,!0)).AddTitle("Events Received")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}();__assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GisDataset={GisDatasetId:ko.observable(0),Name:ko.observable(""),CreatedUtc:ko.observable(),CreatedUserId:ko.observable(0),CreatedUser:ko.observable(""),PolygonCount:ko.observable(0),ItemDescriptions:ko.observableArray(),IsEditable:ko.observable(!1)},t.Polygons=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.GisDataset.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.GisDataset_Details=t}(Model||(Model={}));app.router.View(app.route.GisDataset_Details,function(n){function t(t){var i=n.call(this,t,new Model.GisDataset_Details)||this,u,r,e;i.SetEditablePolygon=function(n){var u,f,o,e,r,t;if(i.coordinateHistory=[],i.editedPolygonId(n),i.drawingInProgress(!0),i.mapPageItem.polygonSets.forEach(function(t){var i=t.polygons().filter(function(t){return ko.unwrap(t.GisPolygonId)===n});if(i.length>0){u=i[0];return}}),u!=null){for(f=u.map.polygon.getPath().getArray(),i.coordinateHistory.push(f),o=new google.maps.LatLngBounds,e=ko.unwrap(u.Coordinates),r=0;r<e.length;r++)o.extend(new google.maps.LatLng(ko.unwrap(e[r].Latitude),ko.unwrap(e[r].Longitude)));i.mapPageItem.map.fitBounds(o);i.editableShape!=null&&i.editableShape.setMap(null);i.editableShape=new google.maps.Polygon({paths:f,strokeColor:"#1E90FF",strokeWeight:2,fillColor:"#1E90FF",fillOpacity:.2,zIndex:5,editable:!0,draggable:!0});i.drawingManager.setDrawingMode(null);i.editableShape.setMap(i.mapPageItem.map);i.drawnCoordinates=f;i.isDragging=!1;i.isUndoing=!1;t=function(){i.isUndoing||(i.drawnCoordinates=i.editableShape.getPath().getArray().slice(0),i.coordinateHistory.push(i.drawnCoordinates))};google.maps.event.addListener(i.editableShape,"polygoncomplete",t);google.maps.event.addListener(i.editableShape.getPath(),"set_at",function(){i.isDragging||t()});google.maps.event.addListener(i.editableShape.getPath(),"insert_at",t);google.maps.event.addListener(i.editableShape.getPath(),"remove_at",t);google.maps.event.addListener(i.editableShape,"dragend",function(){i.isDragging=!1;t()});google.maps.event.addListener(i.editableShape,"dragstart",function(){i.isDragging=!0})}};i.ExtendMappingOptions({arrayChildId:{"ItemDescriptions[i]":"ItemIndex","Polygons[i]":"GisPolygonId","IndexValues[i]":"Key"},extend:{"ItemDescriptions[i]":function(n){return __assign(__assign({},n),new Command_Block(n.ItemIndex,n.Description,function(){return i.HasCapability(Capability.GisDataset_Update)?i.FormAction(function(){return Form.GisDatasetEditIndexDescription(n.GisDatasetId(),n.ItemIndex(),n.Description(),i.Update)})():null}))}}});i.mapPageItem=new MapPageItem(i,!0,!1);i.drawingManager=GMap.CreateDrawingManager();i.drawingInProgress=ko.observable(!1);i.isUndoing=!1;i.editedPolygonId=ko.observable(0);i.coordinateHistory=[];i.drawnCoordinates=[];i.isDragging=!1;u=!1;i.AddItem(new HeaderPageItem("GIS Dataset"));i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("gis-layers",new Header_Text(i.viewModel.GisDataset.Name,null,i.viewModel.GisDataset.PolygonCount,"Polygon Count")),new SingleValue_Block("ID",i.viewModel.GisDataset.GisDatasetId),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.GisDataset.CreatedUtc)),new SingleValue_Block("Creator",i.viewModel.GisDataset.CreatedUser),new Command_Block("Groups","Groups containing dataset",function(){return app.route.GisDataset_ContainingGroups.NavigateTo(i.viewModel.GisDataset.GisDatasetId)}),new Command_Block("Clone","Clone and edit dataset",i.FormAction(function(){return Form.GisDatasetClone(i.viewModel.GisDataset.GisDatasetId(),i.viewModel.GisDataset.Name(),function(n){return app.route.GisDataset_Details.NavigateTo(n)})}),i.HasCapabilityComputed(Capability.GisDataset_Clone))]),Tile.CreateWithBlockSet([new Command_Block("Rename","Change the name of the dataset",i.FormAction(function(){return Form.GisDatasetRename(i.viewModel.GisDataset.GisDatasetId(),i.viewModel.GisDataset.Name(),i.Update)}),i.HasCapabilityComputed(Capability.GisDataset_Update)),new Command_Block("Clear","Clear all data from the set",i.FormAction(function(){return Form.GisDatasetClear(i.viewModel.GisDataset.GisDatasetId(),i.Update)}),ko.computed(function(){return i.viewModel.GisDataset.IsEditable()&&i.HasCapability(Capability.GisDataset_Update)}))]),Tile.CreateWithBlockSet([new Header_Block("attributes",new Header_Text("Item Descriptions",null,ko.computed(function(){return i.viewModel.GisDataset.ItemDescriptions().length}),"Index value descriptions"))]).addBlockSet(i.viewModel.GisDataset.ItemDescriptions).addBlockSet([new Command_Block("Add","Add an index",i.FormAction(function(){return Form.GisDatasetAddItemIndex(i.viewModel.GisDataset.GisDatasetId(),i.Update)}),ko.computed(function(){return i.viewModel.GisDataset.IsEditable()&&i.HasCapability(Capability.GisDataset_Update)})),new Command_Block("Remove","Remove one or more indexes",i.FormAction(function(){return Form.GisDatasetRemoveItemIndexes(i.viewModel.GisDataset.GisDatasetId(),i.viewModel.GisDataset.ItemDescriptions(),i.Update)}),ko.computed(function(){return i.viewModel.GisDataset.IsEditable()&&i.viewModel.GisDataset.ItemDescriptions().length>0&&i.HasCapability(Capability.GisDataset_Update)}))])]));i.AddItem(new MessagePageItem("GIS Dataset cannot be edited while it is attached to a network. Make a clone of the current dataset to enable editing.",ko.computed(function(){return!i.viewModel.GisDataset.IsEditable()})));i.AddItem(new AjaxFilterTableViewModel({route:app.route.GisDataset_AssignedNetworksTable.For(i.viewModel.GisDataset.GisDatasetId),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"ShortName",ascending:!0,size:25}).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"));i.AddItem(new HeaderPageItem("Map"));i.AddItem(i.mapPageItem);i.mapPageItem.AddPolygons({polygons:i.viewModel.Polygons,getLatLng:function(n){for(var r=[],i=ko.unwrap(n.Coordinates),t=0;t<i.length;++t)r.push(new google.maps.LatLng(ko.unwrap(i[t].Latitude),ko.unwrap(i[t].Longitude)));return r},getName:function(n){return ko.unwrap(n.Name)},getInfo:function(n){var r="",t;return ko.unwrap(n.IndexValues).forEach(function(n){i.viewModel.GisDataset.ItemDescriptions().forEach(function(t){ko.unwrap(n.Key)===ko.unwrap(t.ItemIndex)&&(r+='<div class="nodetext"><strong>'+ko.unwrap(t.Description)+":<\/strong> "+ko.unwrap(n.Value)+"<\/div>")})}),t="",i.viewModel.GisDataset.IsEditable()&&(t='<br/><a onclick="{ app.page.view().mapPageItem.infoWindow.close(); app.page.view().SetEditablePolygon('+ko.unwrap(n.GisPolygonId)+"); return false;}\"' > Edit Polygon <\/a>"),"<div>"+ko.unwrap(n.Name)+r+t+"<\/div>"}});var s=function(){u=!1;i.drawingInProgress(!0);i.drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON)},f=function(){i.editableShape!=null&&(i.editableShape.setEditable(!1),i.editableShape.setDraggable(!1),i.editableShape.setMap(null),i.editableShape=null);u=!0;i.drawingManager.setDrawingMode(null);i.editedPolygonId(0);i.drawingInProgress(!1);i.coordinateHistory=[]},o=function(){var t,u,n,r,f;if(i.coordinateHistory.length>1){for(i.coordinateHistory.pop(),t=i.editableShape.getPath(),u=i.coordinateHistory[i.coordinateHistory.length-1],i.isUndoing=!0,t.clear(),n=0,r=u;n<r.length;n++)f=r[n],t.push(f);i.isUndoing=!1}},h=function(){var n=[];i.editableShape!=null?i.editableShape.getPath().forEach(function(t){n.push({Latitude:t.lat,Longitude:t.lng})}):n=i.drawnCoordinates.map(function(n){return{Latitude:n.lat(),Longitude:n.lng()}});Form.ViewPostRequest(i,{route:app.route.GisDataset_UpdatePolygonVertices.For(i.viewModel.GisDataset.GisDatasetId),data:{gisPolygonId:i.editedPolygonId(),coordinates:n},onSuccess:function(){f();i.Update();i.SetMessage("Polygon Saved!")}})};return google.maps.event.addListener(i.drawingManager,"polygoncomplete",function(n){var t=n.getPath().getArray().map(function(n){return{Latitude:n.lat(),Longitude:n.lng()}});n.setMap(null);i.drawingInProgress(!1);u||i.FormAction(function(){return Form.GisDatasetCreatePolygon(i.viewModel.GisDataset.GisDatasetId(),i.viewModel.GisDataset.ItemDescriptions(),t,i.Update)})();f();u=!1}),$(document).keydown(function(n){n.which===90&&n.ctrlKey&&o()}),i.OnViewModelReady=function(){i.drawingManager.setMap(i.mapPageItem.map);var n=document.createElement("div"),t=GMap.CreateControlButton(n,"New","New","newPolygon",s),r=GMap.CreateControlButton(n,"Cancel","Cancel","cancelEditing",f),u=GMap.CreateControlButton(n,"Undo","Undo last action","undoAction",o),e=GMap.CreateControlButton(n,"Save","Save","savePolygon",h);ko.computed(function(){t.style.display=i.drawingInProgress()||!i.viewModel.GisDataset.IsEditable()?"none":"block";r.style.display=i.drawingInProgress()?"block":"none";u.style.display=i.drawingInProgress()&&i.editedPolygonId()?"block":"none";e.style.display=i.drawingInProgress()&&i.editedPolygonId()?"block":"none"});i.mapPageItem.map.controls[google.maps.ControlPosition.LEFT_TOP].push(n);i.mapPageItem.zoomToPolygons()},e=ko.observableArray(),i.AddItem(r=new AjaxFilterTableViewModel({route:null,click:function(n){return i.viewModel.GisDataset.IsEditable()?i.SetEditablePolygon(n.GisPolygonId()):i.SetMessage("You cannot edit a GIS dataset that is currently attached to a network.")},update:!1,sort:"Name",ascending:!0,size:25,data:e,hideRefresh:!0}).AddColumn(new FilterTableColumnViewModel("Name","Name",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("VertexCount","Vertices",!1,!0)).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return i.FormAction(function(){return Form.GisDatasetEditPolygon(i.viewModel.GisDataset.GisDatasetId(),n.GisPolygonId(),n.Name(),i.viewModel.GisDataset.ItemDescriptions(),n.IndexValues(),i.Update)})()},ko.computed(function(){return i.viewModel.GisDataset.IsEditable()&&i.HasCapability(Capability.GisDataset_EditPolygon)}))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return i.FormAction(function(){return Form.GisDatasetDeletePolygon(i.viewModel.GisDataset.GisDatasetId(),n.GisPolygonId(),n.Name(),i.Update)})()},ko.computed(function(){return i.viewModel.GisDataset.IsEditable()&&i.HasCapability(Capability.GisDataset_EditPolygon)}))).AddTitle("Polygons")),ko.computed(function(){e(i.viewModel.Polygons().map(function(n){return{GisPolygonId:n.GisPolygonId,Name:n.Name,VertexCount:ko.unwrap(n.Coordinates).length,IndexValues:n.IndexValues}}))}),ko.computed(function(){var n=r.columns.peek().filter(function(n){return n.name==="Name"||n.name==="VertexCount"||n.name==="Edit"||n.name==="Delete"});r.columns.poke([]);r.AddColumn(n[0]);r.AddColumn(n[1]);i.viewModel.GisDataset.ItemDescriptions().forEach(function(n){r.AddColumn(new FilterTableColumnViewModel(ko.unwrap(n.Description),ko.unwrap(n.Description),!0,!1,function(t){var i=t.IndexValues().filter(function(t){return ko.unwrap(t.Key)===ko.unwrap(n.ItemIndex)});return i.length===1?ko.unwrap(i[0].Value):null}))});r.AddColumn(n[2]);r.AddColumn(n[3])}).extend({throttle:300}),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Application Templates",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ApplicationTemplates=t}(Model||(Model={}));app.router.View(app.route.Group_ApplicationTemplates,function(n){function t(t){var i=n.call(this,t,new Model.Group_ApplicationTemplates)||this,r,u=function(n){return app.route.ApplicationTemplate_Details.NavigateTo(n)},f=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing application templates",i.FormAction(function(){return Form.GroupAddApplicationTemplates(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new application template",i.FormAction(function(){return Form.GroupCreateApplicationTemplate(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))]),Tile.CreateWithBlockSet([new Command_Block("Clone","Copy an application template",i.FormAction(function(){return Form.GroupCloneApplicationTemplate(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_ApplicationTemplatesTable.For(i.viewModel.GroupId),click:function(n){return app.route.ApplicationTemplate_Details.NavigateTo(n.ApplicationTemplateId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveApplicationTemplate(i.viewModel.GroupId(),n.ApplicationTemplateId,n.Name,f)})()},i.HasCapabilityComputed(Capability.ApplicationTemplate_Manage))).AddTitle("Application Templates")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Sources",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_AppModuleSources=t}(Model||(Model={}));app.router.View(app.route.Group_AppModuleSources,function(n){function t(t){var i=n.call(this,t,new Model.Group_AppModuleSources)||this,r,f=function(n){return app.route.AppModuleSource_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing module sources",i.FormAction(function(){return Form.GroupAddAppModuleSources(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.AppModuleSource_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new module source",i.FormAction(function(){return Form.GroupCreateAppModuleSource(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.AppModuleSource_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_AppModuleSourcesTable.For(i.viewModel.GroupId),click:function(n){return app.route.AppModuleSource_Details.NavigateTo(n.AppModuleSourceId,{groupId:i.viewModel.GroupId})},update:!0,sort:"Type",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveAppModuleSource(i.viewModel.GroupId(),n.AppModuleSourceId,n.Type,u)})()},i.HasCapabilityComputed(Capability.AppModuleSource_Remove))).AddTitle("App Module Sources")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Applications",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Apps=t}(Model||(Model={}));app.router.View(app.route.Group_Apps,function(n){function t(t){var i=n.call(this,t,new Model.Group_Apps)||this,r,f=function(n){return app.route.Application_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing applications",i.FormAction(function(){return Form.GroupAddApps(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.App_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new application",i.FormAction(function(){return Form.GroupCreateApp(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.App_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_AppsTable.For(i.viewModel.GroupId),click:function(n){return app.route.Application_Details.NavigateTo(n.AppId,{groupId:i.viewModel.GroupId})},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveApp(i.viewModel.GroupId(),n.AppId,n.Name,u)})()},i.HasCapabilityComputed(Capability.App_Remove))).AddTitle("Applications")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.GroupName=ko.observable(""),t.DeviceTypeId=ko.observable(0),t.DeviceType=ko.observable(""),t.AppId=ko.observable(0),t.AppName=ko.observable(""),t.ApplicationGuid=ko.observable(""),t.CreatedUserId=ko.observable(0),t.CreatedUserName=ko.observable(""),t.CreatedUtc=ko.observable(""),t.Description=ko.observable(""),t.LatestVersion=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Application Assignments",t.GroupName,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_AssignNetworkApplications=t}(Model||(Model={}));app.router.View(app.route.Group_AssignNetworkApplications,function(n){function t(t){var i=n.call(this,t,new Model.Group_AssignNetworkApplications)||this,r=new ToggleTableColumnViewModel("Select Node",["NetworkId","NodeAddress"],"checked","unchecked"),u,f=function(n,t){i.CloseFormDialog();app.route.Group_AssignNetworkApplications.NavigateTo(i.viewModel.GroupId,{deviceTypeId:n,appId:t})},e=function(n){i.CloseFormDialog();app.route.Group_AssignNetworkApplications.NavigateTo(i.viewModel.GroupId,{deviceTypeId:i.viewModel.DeviceTypeId,appId:n})},o=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("logic-application",new Header_Text(i.viewModel.AppName()!=null?i.viewModel.AppName():"None","Application Name",i.viewModel.DeviceType,"Device Type")),new Command_Block("Device","Change device type",i.FormAction(function(){return Form.GroupNestedDeviceTypesForAppsSelection(i.viewModel.GroupId(),f)})),new Command_Block("Application","Change application filter",i.FormAction(function(){return Form.GroupApplicationsForDeviceTypeSelection(i.viewModel.DeviceTypeId(),e)})),new Command_Block("Assign","Assign application to selected",function(){r.selectedKeys().length===0?i.SetMessage("No network nodes selected for update."):i.FormAction(function(){return Form.GroupAssignNetworkNodeApplications(i.viewModel.GroupId(),i.viewModel.DeviceTypeId(),i.viewModel.AppId(),i.viewModel.AppName(),i.viewModel.LatestVersion(),r.selectedKeys(),o)})()})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Latest Version With Binary"),new SmallHeader_Block(i.viewModel.ApplicationGuid,!0,function(){return CopyToClipboard(i.viewModel.ApplicationGuid)},"Click to copy to clipboard"),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.CreatedUtc)),new SingleValue_Block("Creator",i.viewModel.CreatedUserName),new SingleValue_Block("Version",i.viewModel.LatestVersion),new Command_Block("View","View application details",function(){return app.route.Application_Details.NavigateTo(i.viewModel.AppId(),{groupId:i.viewModel.GroupId})})],null,ko.computed(function(){return i.viewModel.AppId()!=null})),Tile.CreateWithBlockSet([new SmallHeader_Block("Selection"),new SingleValue_Block("Selected",ko.computed(function(){return r.selectedKeys().length===1?"1 selected node":r.selectedKeys().length+" selected nodes"}).extend({throttle:100})),new Command_Block("Select All","Select all filtered nodes",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Invert","Invert selected nodes",function(){return r.Invert(u.filteredData())}),new Command_Block("Clear","Deselect all nodes",function(){return r.UnselectAll()})])])),i.AddItem(u=new AjaxFilterTableViewModel({route:ko.computed(function(){return app.route.Group_NodesWithDeviceTypeTable.For(i.viewModel.GroupId,i.viewModel.AppId()!=null?{deviceTypeId:i.viewModel.DeviceTypeId,appId:i.viewModel.AppId}:{deviceTypeId:i.viewModel.DeviceTypeId})}),update:!0,click:function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})},sort:"NetworkName",ascending:!0,size:25}).AddColumn(r).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Node","Node",!1,!0,function(n){return Format.NodeAddressAndName(n)})).AddColumn(new FilterTableColumnViewModel("NodeStatus","Status",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("NodeLastUpdateUtc","Last Update",!1,!0)).AddColumn(new FilterTableColumnViewModel("DeviceExtAddress","Device",!0,!0)).AddColumn(new FilterTableColumnViewModel("AppName","Application",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("AppVersionNumber","Version",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("AppValid","Assignment",!0,!0,function(n){return n.AppValid==null?"None":n.AppValid?"":"Invalid Assignment"})).AddTitle("Network Nodes With Device Type "+i.viewModel.DeviceType())),r.BindKeyHandlerComputed(u),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Attachments",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Attachments=t}(Model||(Model={}));app.router.View(app.route.Group_Attachments,function(n){function t(t){var i=n.call(this,t,new Model.Group_Attachments)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_AttachmentsTable.For(i.viewModel.GroupId),click:function(n){return window.location.href=app.route.Attachment_Download.For(n.AttachmentId).GetUrl()},update:!0,sort:"Name",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Billing Entities",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_BillingEntities=t}(Model||(Model={}));app.router.View(app.route.Group_BillingEntities,function(n){function t(t){var i=n.call(this,t,new Model.Group_BillingEntities)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing billing entities",i.FormAction(function(){return Form.GroupAddBillingEntities(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.BillingEntity_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new billing entity",i.FormAction(function(){return Form.GroupCreateBillingEntity(i.viewModel.GroupId(),i.viewModel.CurrentUser.TimeZoneName(),i.viewModel.CurrentUser.UtcOffsetHours(),r)}),i.HasCapabilityComputed(Capability.BillingEntity_Create))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_BillingEntitiesTable.For(i.viewModel.GroupId),click:function(n){return app.route.BillingEntity_Details.NavigateTo(n.BillingEntityId,{groupId:i.viewModel.GroupId})},update:!0,sort:"CompanyName",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveBillingEntity(i.viewModel.GroupId(),n.BillingEntityId,n.CompanyName,r)})()},i.HasCapabilityComputed(Capability.BillingEntity_Remove))).AddTitle("Billing Entities")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Brandings",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Brandings=t}(Model||(Model={}));app.router.View(app.route.Group_Brandings,function(n){function t(t){var i=n.call(this,t,new Model.Group_Brandings)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_BrandingsTable.For(i.viewModel.GroupId),click:function(n){return app.route.Branding_Details.NavigateTo(n.BrandingId)},update:!0,sort:"Name",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Group Config History",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ConfigHistory=t}(Model||(Model={}));app.router.View(app.route.Group_ConfigHistory,function(n){function t(t){var i=n.call(this,t,new Model.Group_ConfigHistory)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_ConfigHistoryByTypeTable.For(i.viewModel.GroupId),click:function(n){return app.route.Group_ConfigHistoryDetails.NavigateTo(i.viewModel.GroupId,{moduleConfigHistoryId:n.ModuleConfigHistoryId})},update:!0,sort:"TimeUtc",ascending:!1,size:25}).AddColumn(new FilterTableColumnViewModel("ModuleType","Module Type",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Changed",!0,!0)).AddColumn(new FilterTableColumnViewModel("ChangedByUser","Last Changed By",!0,!0)).AddColumn(new FilterTableColumnViewModel("Reason","Reason",!0,!0)).AddTitle("Configuration History")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.GroupName=ko.observable(""),t.ModuleType=ko.observable(""),t.ModuleConfigHistoryId=ko.observable(0),t.Reason=ko.observable(""),t.UserName=ko.observable(""),t.TimeUtc=ko.observable(""),t.RollbackHistoryId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Config Change Details","Config History",app.route.Group_ConfigHistory.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ConfigHistoryDetails=t}(Model||(Model={}));app.router.View(app.route.Group_ConfigHistoryDetails,function(n){function t(t){var i=n.call(this,t,new Model.Group_ConfigHistoryDetails)||this,u=function(n){return app.route.Group_ConfigHistoryDetails.NavigateTo(i.viewModel.GroupId,{moduleConfigHistoryId:n})},f=new AjaxFilterTableViewModel({route:app.route.Group_ConfigHistoryItemsTable.For(i.viewModel.GroupId,{moduleConfigHistoryId:i.viewModel.ModuleConfigHistoryId,moduleType:i.viewModel.ModuleType}),click:null,update:!1,sort:null,ascending:!0,size:25}).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 i.viewModel.RollbackHistoryId()==null}))).AddTitle("Config History"),r=new AjaxFilterTableViewModel({route:app.route.Group_ConfigHistoryModulesTable.For(i.viewModel.GroupId,{moduleConfigHistoryId:i.viewModel.ModuleConfigHistoryId,moduleType:i.viewModel.ModuleType}),click:function(n){return app.route.Module_ConfigHistory.NavigateTo(n.ModuleId,{moduleConfigHistoryId:i.viewModel.ModuleConfigHistoryId})},update:!1,sort:"ModuleName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!0,!0)).AddColumn(new FilterTableColumnViewModel("Network","Network",!0,!0)).AddColumn(new FilterTableColumnViewModel("Node","Node",!0,!0)).AddTitle("Modules Changed");return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Config History"),new SingleValue_Block("User",i.viewModel.UserName),new SingleValue_Block("Date",ko.computed(function(){return Format.DateTime(moment(i.viewModel.TimeUtc()))})),new SingleValue_Block("Reason",i.viewModel.Reason),new SingleValue_Block("Module Type",i.viewModel.ModuleType),new SingleValue_Block("Module Count",ko.computed(function(){return r.data().length})),new Command_Block("Previous","View the history that was rolled back",function(){return app.route.Group_ConfigHistoryDetails.NavigateTo(i.viewModel.GroupId,{moduleConfigHistoryId:i.viewModel.RollbackHistoryId})},ko.computed(function(){return i.viewModel.RollbackHistoryId()!=null})),new Command_Block("Rollback","Roll back to previous values",i.FormAction(function(){return Form.ModuleRollbackConfigHistory(i.viewModel.GroupId(),i.viewModel.ModuleConfigHistoryId(),r.data().length,u)}))])])),i.AddItem(f),i.AddItem(r),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.DataStreamId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Data Streams",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_DataStreams=t}(Model||(Model={}));app.router.View(app.route.Group_DataStreams,function(n){function t(t){var i=n.call(this,t,new Model.Group_DataStreams)||this,r,u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing data streams",i.FormAction(function(){return Form.GroupAddDataStreams(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.DataStream_Add))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_DataStreamsTable.For(i.viewModel.GroupId),click:function(n){return app.route.DataStream_Details.NavigateTo(n.DataStreamId)},update:!0,sort:"Network",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveDataStream(i.viewModel.GroupId(),n.DataStreamId,n.Trend,u)})()},i.HasCapabilityComputed(Capability.DataStream_Remove))).AddTitle("Data Streams")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentGroupName=ko.observable(""),t.ParentGroupId=ko.observable(0),t.NetworkCount=ko.observable(0),t.UserCount=ko.observable(0),t.RoleCount=ko.observable(0),t.GroupCount=ko.observable(0),t.ModuleCount=ko.observable(0),t.DeviceCount=ko.observable(0),t.BrandingCount=ko.observable(0),t.EscalationListCount=ko.observable(0),t.DataStreamCount=ko.observable(0),t.GisDatasetCount=ko.observable(0),t.IconCount=ko.observable(0),t.LegalTermsCount=ko.observable(0),t.ExportTargetCount=ko.observable(0),t.SimCount=ko.observable(0),t.RfidTagCount=ko.observable(0),t.ApplicationTemplateCount=ko.observable(0),t.SharedCollectionCount=ko.observable(0),t.ReportTemplateCount=ko.observable(0),t.AppCount=ko.observable(0),t.AppModuleSourceCount=ko.observable(0),t.BillingEntityCount=ko.observable(0),t.DeviceTypeCount=ko.observable(0),t.ModuleConfigTemplateCount=ko.observable(0),t.MessageAccountCount=ko.observable(0),t.MessagePlanCount=ko.observable(0),t.NetworkSubscriptionCount=ko.observable(0),t.NetworkSubscriptionPlanCount=ko.observable(0),t.NoteCount=ko.observable(0),t.SmsProviderCount=ko.observable(0),t.EmailProviderCount=ko.observable(0),t.TagCount=ko.observable(0),t.AttachmentCount=ko.observable(0),t.DocumentationPrefixCount=ko.observable(0),t.HasParent=ko.computed(function(){return t.ParentGroupId()!==t.GroupId()}),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Name,function(){return t.HasParent()?t.ParentGroupName():"Groups"},function(){return t.HasParent()?app.route.Group_Details.For(t.ParentGroupId):app.route.Group_Index.For()})},t}return __extends(t,n),t}(n.Base_Model);n.Group_Details=t}(Model||(Model={}));app.router.View(app.route.Group_Details,function(n){function t(t){var i=n.call(this,t,new Model.Group_Details)||this,r=function(n){i.viewModel.Name(n)},u=function(){i.viewModel.GroupId()===i.viewModel.ParentGroupId()?app.route.Group_Index.NavigateTo():app.route.Group_Details.NavigateTo(i.viewModel.ParentGroupId)},f=function(){i.Update()},e=function(n){n!=null&&app.route.Group_Details.NavigateTo(n)},o=function(n){i.CloseFormDialog();app.route.Group_ModuleConfiguration.NavigateTo(i.viewModel.GroupId,{type:n})},s=function(n,t){i.CloseFormDialog();app.route.Group_AssignNetworkApplications.NavigateTo(i.viewModel.GroupId,{deviceTypeId:n,appId:t})},h=function(n){i.CloseFormDialog();var t=n.split("|"),r=t[0],u=t[1];r!=null&&u!=null&&app.route.Group_UpdateNetworkFirmware.NavigateTo(i.viewModel.GroupId,{deviceType:r,deviceModel:u})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Rename","Change the name of this group",i.FormAction(function(){return Form.GroupRename(i.viewModel.GroupId(),i.viewModel.Name(),r)}),i.HasCapabilityComputed(Capability.Group_Rename))]),Tile.CreateWithBlockSet([new Command_Block("Delete","Delete this group",i.FormAction(function(){return Form.GroupDelete(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.Group_Delete))]),Tile.CreateWithBlockSet([new Command_Block("Move","Change parent group",i.FormAction(function(){return Form.GroupMove(i.viewModel.GroupId(),i.viewModel.ParentGroupId(),f)}),i.HasCapabilityComputed(Capability.Group_Remove))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new member group",i.FormAction(function(){return Form.GroupCreate(i.viewModel.GroupId(),e)}),i.HasCapabilityComputed(Capability.Group_Create))]),Tile.CreateWithBlockSet([new Command_Block("Report","Run a report on this group",function(){return app.route.Report_Run.NavigateTo(0,{targetGroupId:i.viewModel.GroupId(),startLocal:moment().add("day",-7).format("YYYY-MM-DD"),endLocal:moment().format("YYYY-MM-DD")})})]),Tile.CreateWithBlockSet([new Command_Block("Status","Network status summary",function(){return app.route.Group_NetworkStatus.NavigateTo(i.viewModel.GroupId)})]),Tile.CreateWithBlockSet([new Command_Block("Tasks","Tasks report",function(){return app.route.Group_Tasks.NavigateTo(i.viewModel.GroupId)})]),Tile.CreateWithBlockSet([new Command_Block("Conversions","Module data conversions",function(){return app.route.Group_ModuleConversions.NavigateTo(i.viewModel.GroupId)},i.HasCapabilityComputed(Capability.Network_CreateNode))]),Tile.CreateWithBlockSet([new Command_Block("Configure","View and edit module configs",i.FormAction(function(){return Form.GroupNestedModuleTypeSelection(i.viewModel.GroupId(),o)}),i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller]))]),Tile.CreateWithBlockSet([new Command_Block("Firmware","Update network firmware",i.FormAction(function(){return Form.GroupNestedNetworkDeviceTypeSelection(i.viewModel.GroupId(),h)}),i.HasCapabilityComputed(Capability.Device_Firmware))]),Tile.CreateWithBlockSet([new Command_Block("Application","Assign network applications",i.FormAction(function(){return Form.GroupNestedDeviceTypesForAppsSelection(i.viewModel.GroupId(),s)}),i.HasCapabilityComputed(Capability.Network_ChangeApplication))]),Tile.CreateWithBlockSet([new Command_Block("Roles","Granted roles",function(){return app.route.Group_GrantedRoles.NavigateTo(i.viewModel.GroupId)},i.HasCapabilityComputed(Capability.Role_GrantToGroup))]),Tile.CreateWithBlockSet([new Command_Block("History","Config history",function(){return app.route.Group_ConfigHistory.NavigateTo(i.viewModel.GroupId)},i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller]))]),Tile.CreateWithBlockSet([new Command_Block("Network Sims","View network sims",function(){return app.route.Group_NetworkSims.NavigateTo(i.viewModel.GroupId)},i.HasCapabilityComputed(Capability.Network_ManageSim))]),Tile.CreateWithBlockSet([new Command_Block("Managers","View network managers",function(){return app.route.Group_NetworkManagers.NavigateTo(i.viewModel.GroupId)},i.HasCapabilityComputed(Capability.Network_ViewManagerUsers))]),Tile.CreateWithBlockSet([new Command_Block("Fonterra","Halo Fonterra provisioning",function(){return app.route.Group_HaloFonterraProvision.NavigateTo(i.viewModel.GroupId)},i.HasCapabilityComputed(Capability.Group_HaloProvision))]),Tile.CreateWithBlockSet([new Command_Block("System Admin","System admin",app.route.Admin_Index.NavigateTo,ko.computed(function(){return i.HasCapability(Capability.System_Admin)&&i.viewModel.GroupId()===1}))])])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text("Networks","Group Networks",i.viewModel.NetworkCount,"Networks in group"),new Header_Actions(function(){return app.route.Group_Networks.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("profile",new Header_Text("Users","Group Users",i.viewModel.UserCount,"Users in group"),new Header_Actions(function(){return app.route.Group_Users.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("role",new Header_Text("Roles","Group Roles",i.viewModel.RoleCount,"Roles in group"),new Header_Actions(function(){return app.route.Group_Roles.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("module",new Header_Text("Modules","Group Modules",i.viewModel.ModuleCount,"Modules in group"),new Header_Actions(function(){return app.route.Group_Modules.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("network-node",new Header_Text("Devices","Group Devices",i.viewModel.DeviceCount,"Devices in group"),new Header_Actions(function(){return app.route.Group_Devices.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("data-stream",new Header_Text("Data Streams","Group Data Streams",i.viewModel.DataStreamCount,"Data streams in group"),new Header_Actions(function(){return app.route.Group_DataStreams.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("warning",new Header_Text("Escalation Lists","Group Escalation Lists",i.viewModel.EscalationListCount,"Escalation lists in group"),new Header_Actions(function(){return app.route.Group_EscalationLists.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("gis-layers",new Header_Text("GIS Datasets","Group GIS Datasets",i.viewModel.GisDatasetCount,"GIS datasets in group"),new Header_Actions(function(){return app.route.Group_GisDatasets.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("chart",new Header_Text("Shared Chart Reports","Group Reports",i.viewModel.SharedCollectionCount,"Reports in group"),new Header_Actions(function(){return app.route.Group_SharedCollections.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("report-template",new Header_Text("Report Templates","Group Templates",i.viewModel.ReportTemplateCount,"Templates in group"),new Header_Actions(function(){return app.route.Group_ReportTemplates.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("config-template",new Header_Text("Config Templates","Group Config Templates",i.viewModel.ModuleConfigTemplateCount,"Templates in group"),new Header_Actions(function(){return app.route.Group_ModuleConfigTemplates.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("application-template",new Header_Text("Application Templates","Group Templates",i.viewModel.ApplicationTemplateCount,"Templates in group"),new Header_Actions(function(){return app.route.Group_ApplicationTemplates.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("logic-application",new Header_Text("Applications","Group Applications",i.viewModel.AppCount,"Applications in group"),new Header_Actions(function(){return app.route.Group_Apps.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("module-source",new Header_Text("Module Sources","Group Module Sources",i.viewModel.AppModuleSourceCount,"Module sources in group"),new Header_Actions(function(){return app.route.Group_AppModuleSources.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("export",new Header_Text("Export Targets","Group Export Targets",i.viewModel.ExportTargetCount,"Export Targets in group"),new Header_Actions(function(){return app.route.Group_ExportTargets.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("icon",new Header_Text("Icons","Group Icons",i.viewModel.IconCount,"Icons in group"),new Header_Actions(function(){return app.route.Group_Icons.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("sim",new Header_Text("Sims","Group Sims",i.viewModel.SimCount,"Sims in group"),new Header_Actions(function(){return app.route.Group_Sims.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("rfid-tag",new Header_Text("Rfid Tags","Group Rfid Tags",i.viewModel.RfidTagCount,"Rfid Tags in group"),new Header_Actions(function(){return app.route.Group_RfidTags.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("brand",new Header_Text("Brandings","Group Brandings",i.viewModel.BrandingCount,"Brandings in group"),new Header_Actions(function(){return app.route.Group_Brandings.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("legal-terms",new Header_Text("Legal Terms","Group Legal Terms",i.viewModel.LegalTermsCount,"Legal terms in group"),new Header_Actions(function(){return app.route.Group_LegalTerms.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text("Billing Entities","Group Billing Entities",i.viewModel.BillingEntityCount,"Billing entities in group"),new Header_Actions(function(){return app.route.Group_BillingEntities.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("device",new Header_Text("Device Types","Group Device Types",i.viewModel.DeviceTypeCount,"Device types in group"),new Header_Actions(function(){return app.route.Group_DeviceTypes.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("message-plan",new Header_Text("Message Plans","Group Message Plans",i.viewModel.MessagePlanCount,"Message plans in group"),new Header_Actions(function(){return app.route.Group_MessagePlans.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("message-plan",new Header_Text("Message Accounts","Group Message Accounts",i.viewModel.MessageAccountCount,"Message accounts in group"),new Header_Actions(function(){return app.route.Group_MessageAccounts.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text("Network Subscriptions","Group Subscriptions",i.viewModel.NetworkSubscriptionCount,"Network subscriptions in group"),new Header_Actions(function(){return app.route.Group_NetworkSubscriptions.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text("Network Subscription Plans","Group Subscriptions Plans",i.viewModel.NetworkSubscriptionPlanCount,"Network subscription plans in group"),new Header_Actions(function(){return app.route.Group_NetworkSubscriptionPlans.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("legal-terms",new Header_Text("Notes","Group Notes",i.viewModel.NoteCount,"Notes in group"),new Header_Actions(function(){return app.route.Group_Notes.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("message-plan",new Header_Text("Sms Providers","Group Sms Providers",i.viewModel.SmsProviderCount,"Providers in group"),new Header_Actions(function(){return app.route.Group_SmsProviders.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("message-plan",new Header_Text("Email Providers","Group Email Providers",i.viewModel.EmailProviderCount,"Providers in group"),new Header_Actions(function(){return app.route.Group_EmailProviders.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("tag",new Header_Text("Tags","Group Tags",i.viewModel.TagCount,"Tags in group"),new Header_Actions(function(){return app.route.Group_Tags.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("report",new Header_Text("Attachments","Group Attachments",i.viewModel.AttachmentCount,"Attachments in group"),new Header_Actions(function(){return app.route.Group_Attachments.NavigateTo(i.viewModel.GroupId)}))]),Tile.CreateWithBlockSet([new Header_Block("report",new Header_Text("Documentation","Group Prefixes",i.viewModel.DocumentationPrefixCount,"Prefixes in group"),new Header_Actions(function(){return app.route.Group_DocumentationPrefixes.NavigateTo(i.viewModel.GroupId)}),ko.computed(function(){return i.HasCapability(Capability.System_Admin)&&i.viewModel.GroupId()===1}))])])),i.AddItem(new AjaxFilterTableViewModel({route:ko.computed(function(){return app.route.Group_MemberGroupsTable.For(i.viewModel.GroupId)}),click:function(n){return app.route.Group_Details.NavigateTo(n.GroupId)},sort:"Name",ascending:!0,update:!0,size:10}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Member Groups")),i.AddItem(new AjaxFilterTableViewModel({route:ko.computed(function(){return app.route.Group_UserActionsForTargetGroupTable.For(i.viewModel.GroupId)}),enabled:i.HasCapabilityComputed(Capability.User_ViewActions),sort:"TimeUtc",ascending:!1,update:!0,size:10}).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new CommandTableColumnViewModel("View User","profile",function(n){return app.route.User_Details.NavigateTo(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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Devices",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Devices=t}(Model||(Model={}));app.router.View(app.route.Group_Devices,function(n){function t(t){var i=n.call(this,t,new Model.Group_Devices)||this,u,e=function(n,t){if(n===!1){i.SetMessage(t);return}u.LoadData()},r=new ToggleTableColumnViewModel("Select Devices","DeviceExtAddress","checked","unchecked"),f=function(){return u.LoadData()},o=function(){r.UnselectAll();u.LoadData()};return u=new AjaxFilterTableViewModel({route:app.route.Group_DevicesTable.For(i.viewModel.GroupId),click:function(n){return app.route.Device_Details.NavigateTo(n.DeviceExtAddress)},update:!0,sort:"DeviceExtAddress",ascending:!0,size:25}).AddColumn(r).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 i.FormAction(function(){return Form.GroupRemoveDevice(i.viewModel.GroupId(),n.DeviceExtAddress,f)})()},i.HasCapabilityComputed(Capability.Device_Remove))).AddTitle("Devices"),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Device Selection"),new SingleValue_Block("Selected",ko.computed(function(){return r.selectedKeys().length===1?"1 device":r.selectedKeys().length+" devices"}).extend({throttle:100})),new Command_Block("Select All","Select all filtered devices",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Invert","Invert selected devices",function(){return r.Invert(u.filteredData())}),new Command_Block("Clear","Deselect all devices",function(){return r.UnselectAll()})]),Tile.CreateWithBlockSet([new Command_Block("Move","Move selected devices",function(){return r.selectedKeys().length>0?i.FormAction(function(){return Form.GroupMoveDevices(i.viewModel.GroupId(),r.selectedKeys().map(function(n){return n.DeviceExtAddress}),o)})():i.SetMessage("No devices selected")})]),Tile.CreateWithBlockSet([new Command_Block("Add","Add existing devices",i.FormAction(function(){return Form.GroupAddDevices(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.Device_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new device",i.FormAction(function(){return Form.GroupCreateDevice(i.viewModel.GroupId(),e)}),i.HasCapabilityComputed(Capability.Device_Create))]),Tile.CreateWithBlockSet([new Command_Block("Summary","View group devices summary",function(){return app.route.Group_DeviceSummary.NavigateTo(i.viewModel.GroupId)},i.HasCapabilityComputed(Capability.Device_Create))])])),i.AddItem(u),r.BindKeyHandlerComputed(u),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Device Summary","Devices",app.route.Group_Devices.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_DeviceSummary=t}(Model||(Model={}));app.router.View(app.route.Group_DeviceSummary,function(n){function t(t){var i=n.call(this,t,new Model.Group_DeviceSummary)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_DeviceSummaryTable.For(i.viewModel.GroupId),click:function(n){return app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId)},update:!0,sort:"Type",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Type","Type",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Quantity","In Stock",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("PendingOrders","Pending Orders",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("Surplus","Surplus",!0,!0,function(n){return n.Quantity-n.PendingOrders})).AddTitle("Device Summary")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Device Types",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_DeviceTypes=t}(Model||(Model={}));app.router.View(app.route.Group_DeviceTypes,function(n){function t(t){var i=n.call(this,t,new Model.Group_DeviceTypes)||this,u,f=function(n){return app.route.DeviceType_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})},r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing device types",i.FormAction(function(){return Form.GroupAddDeviceTypes(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.DeviceType_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new device type",i.FormAction(function(){return Form.GroupCreateDeviceType(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.DeviceType_Create))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_DeviceTypesTable.For(i.viewModel.GroupId),click:function(n){return app.route.DeviceType_Details.NavigateTo(n.DeviceTypeId,{groupId:i.viewModel.GroupId})},update:!0,sort:"DeviceType",ascending:!0,size:50}).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 i.FormAction(function(){return Form.DeviceTypeEdit({DeviceTypeId:n.DeviceTypeId,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},r)})()},i.HasCapabilityComputed(Capability.DeviceType_Edit))).AddColumn(new CommandTableColumnViewModel("Remove Device Type","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveDeviceType(i.viewModel.GroupId(),n.DeviceTypeId,n.DeviceType,r)})()},i.HasCapabilityComputed(Capability.DeviceType_Remove),function(n){return n.ParentTypeId==null})).AddTitle("Device Types")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Document Prefixes",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_DocumentationPrefixes=t}(Model||(Model={}));app.router.View(app.route.Group_DocumentationPrefixes,function(n){function t(t){var i=n.call(this,t,new Model.Group_DocumentationPrefixes)||this,r,u=function(n){return app.route.DocumentationPrefix_Details.NavigateTo(n)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create new prefix in group",i.FormAction(function(){return Form.GroupCreatePrefix(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.Documentation_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_DocumentPrefixesTable.For(i.viewModel.GroupId),click:function(n){return app.route.DocumentationPrefix_Details.NavigateTo(n.Prefix)},update:!0,sort:"Prefix",ascending:!0,size:50}).AddColumn(new FilterTableColumnViewModel("Prefix","Prefix ",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("DocumentCount","Document Count",!1,!0)).AddColumn(new CommandTableColumnViewModel("delete","delete",function(n){return i.FormAction(function(){return Form.GroupRemovePrefix(i.viewModel.GroupId(),n.DocumentationPrefixId,i.Update)})()},!0,function(n){return n.DocumentCount==0&&i.HasCapabilityComputed(Capability.Documentation_Remove)})).AddTitle("Document Prefixes")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Email Providers",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_EmailProviders=t}(Model||(Model={}));app.router.View(app.route.Group_EmailProviders,function(n){function t(t){var i=n.call(this,t,new Model.Group_EmailProviders)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_EmailProvidersTable.For(i.viewModel.GroupId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!1)).AddTitle("Email Providers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.EscalationListId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Escalation Lists",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_EscalationLists=t}(Model||(Model={}));app.router.View(app.route.Group_EscalationLists,function(n){function t(t){var i=n.call(this,t,new Model.Group_EscalationLists)||this,r,f=function(n){return app.route.EscalationList_Details.NavigateTo(n)},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing escalation lists",i.FormAction(function(){return Form.GroupAddEscalationLists(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.EscalationList_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new escalation list",i.FormAction(function(){return Form.GroupCreateEscalationList(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.EscalationList_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_EscalationListsTable.For(i.viewModel.GroupId),click:function(n){return app.route.EscalationList_Details.NavigateTo(n.EscalationListId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveEscalationList(i.viewModel.GroupId(),n.EscalationListId,n.Name,u)})()},i.HasCapabilityComputed(Capability.EscalationList_Remove))).AddTitle("Escalation Lists")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.EscalationListId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Export Targets",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ExportTargets=t}(Model||(Model={}));app.router.View(app.route.Group_ExportTargets,function(n){function t(t){var i=n.call(this,t,new Model.Group_ExportTargets)||this,r,u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing export targets",i.FormAction(function(){return Form.GroupAddExportTargets(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.ExportTarget_Add))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_ExportTargetsTable.For(i.viewModel.GroupId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveExportTarget(i.viewModel.GroupId(),n.ExportTargetId,n.Name,u)})()},i.HasCapabilityComputed(Capability.ExportTarget_Remove))).AddTitle("Export Targets")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Gis Datasets",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_GisDatasets=t}(Model||(Model={}));app.router.View(app.route.Group_GisDatasets,function(n){function t(t){var i=n.call(this,t,new Model.Group_GisDatasets)||this,r,f=function(n){return app.route.GisDataset_Details.NavigateTo(n)},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing GIS datasets",i.FormAction(function(){return Form.GroupAddGisDatasets(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.GisDataset_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create new GIS dataset",i.FormAction(function(){return Form.GroupCreateGisDataset(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.GisDataset_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_GisDatasetsTable.For(i.viewModel.GroupId),click:function(n){return app.route.GisDataset_Details.NavigateTo(n.GisDatasetId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveGisDataset(i.viewModel.GroupId(),n.GisDatasetId,n.Name,u)})()},i.HasCapabilityComputed(Capability.GisDataset_Remove))).AddTitle("GIS Datasets")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Granted Group Roles",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_GrantedRoles=t}(Model||(Model={}));app.router.View(app.route.Group_GrantedRoles,function(n){function t(t){var i=n.call(this,t,new Model.Group_GrantedRoles)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_RolesGrantedOnGroupTable.For(i.viewModel.GroupId),click:function(n){return app.route.Group_Users.NavigateTo(n.SourceGroupId)},update:!0,sort:"SourceGroupName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("SourceGroupName","Source Group",!1,!0)).AddColumn(new FilterTableColumnViewModel("RoleName","Role",!1,!0)).AddTitle("Roles Granted on Group")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Halo Fonterra Provision",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_HaloFonterraProvision=t}(Model||(Model={}));app.router.View(app.route.Group_HaloFonterraProvision,function(n){function t(t){var i=n.call(this,t,new Model.Group_HaloFonterraProvision)||this,r=ko.observable(!1),u=ko.observable("Import a file to begin."),f=ko.observable(""),e=ko.observable(0),o=ko.observable(0),s=ko.observable(0),h=ko.observable(0),c=ko.observable(0),l=function(n,t,i){u(n);t!=null&&f(t);r(i)},a=function(n,t,i,f,l,a,v){u(n);r(t);e(t?i:0);o(t?f:0);s(t?l:0);h(t?a:0);c(t?v:0)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Import","Import provisioning data",i.FormAction(function(){return Form.GroupImportNetworkProvisioningData(i.viewModel.GroupId(),l)})),new Command_Block("Process","Process data",i.FormAction(function(){return Form.GroupProcessNetworkProvisioningData(i.viewModel.GroupId(),f(),e(),o(),s(),h(),c(),a)}),r)])])),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdownNoEsc(u())}))),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Icons",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Icons=t}(Model||(Model={}));app.router.View(app.route.Group_Icons,function(n){function t(t){var i=n.call(this,t,new Model.Group_Icons)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing icons",i.FormAction(function(){return Form.GroupAddIcons(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.Icon_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Upload a new icon",i.FormAction(function(){return Form.GroupCreateIcon(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.Icon_Create))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_IconsTable.For(i.viewModel.GroupId),click:null,update:!0,sort:"IconName",ascending:!0,size:25}).AddColumn(new ImageTableColumnViewModel("IconName","",!1,!1,function(n){return"/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 i.FormAction(function(){return Form.GroupRemoveIcon(i.viewModel.GroupId(),n.IconName,r)})()})).AddTitle("Icons")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Groups","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Group_Index=t}(Model||(Model={}));app.router.View(app.route.Group_Index,function(n){function t(t){var i=n.call(this,t,new Model.Group_Index)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_GroupsTable.For(),click:function(n){return app.route.Group_Details.NavigateTo(n.GroupId)},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Groups")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Legal Terms",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_LegalTerms=t}(Model||(Model={}));app.router.View(app.route.Group_LegalTerms,function(n){function t(t){var i=n.call(this,t,new Model.Group_LegalTerms)||this,r,f=function(n){return app.route.LegalTerms_Details.NavigateTo(n)},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing legal terms",i.FormAction(function(){return Form.GroupAddLegalTerms(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.LegalTerms_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create new legal terms",i.FormAction(function(){return Form.GroupCreateLegalTerms(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.LegalTerms_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_LegalTermsTable.For(i.viewModel.GroupId),click:function(n){return app.route.LegalTerms_Details.NavigateTo(n.LegalTermsId)},update:!0,sort:"CreatedUtc",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveLegalTerms(i.viewModel.GroupId(),n.LegalTermsId,n.Name,u)})()},i.HasCapabilityComputed(Capability.LegalTerms_Remove))).AddTitle("Legal Terms")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Message Accounts",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_MessageAccounts=t}(Model||(Model={}));app.router.View(app.route.Group_MessageAccounts,function(n){function t(t){var i=n.call(this,t,new Model.Group_MessageAccounts)||this,r,f=function(n){return app.route.MessageAccount_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing message accounts",i.FormAction(function(){return Form.GroupAddMessageAccounts(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.MessageAccount_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new message account",i.FormAction(function(){return Form.GroupCreateMessageAccount(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.MessageAccount_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_MessageAccountsTable.For(i.viewModel.GroupId),click:function(n){return app.route.MessageAccount_Details.NavigateTo(n.MessageAccountId,{groupId:i.viewModel.GroupId})},update:!0,sort:"PeriodEnd",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveMessageAccount(i.viewModel.GroupId(),n.MessageAccountId,n.Name,u)})()},i.HasCapabilityComputed(Capability.MessageAccount_Remove))).AddTitle("Message Accounts")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Message Plans",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_MessagePlans=t}(Model||(Model={}));app.router.View(app.route.Group_MessagePlans,function(n){function t(t){var i=n.call(this,t,new Model.Group_MessagePlans)||this,r,f=function(n){return app.route.MessagePlan_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing message plans",i.FormAction(function(){return Form.GroupAddMessagePlans(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.MessagePlan_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new message plan",i.FormAction(function(){return Form.GroupCreateMessagePlan(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.MessagePlan_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_MessagePlansTable.For(i.viewModel.GroupId),click:function(n){return app.route.MessagePlan_Details.NavigateTo(n.MessagePlanId,{groupId:i.viewModel.GroupId})},update:!0,sort:"Name",ascending:!0,size:25}).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 DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new CommandTableColumnViewModel("Remove Message Plan","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveMessagePlan(i.viewModel.GroupId(),n.MessagePlanId,n.Name,u)})()},i.HasCapabilityComputed(Capability.MessagePlan_Remove))).AddTitle("Message Plans")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ModuleType=ko.observable(""),t.Group=ko.observable(""),t.GroupId=ko.observable(0),t.StartLocal=ko.observable(),t.EndLocal=ko.observable(),t.AlertAndStatus=ko.observableArray(),t.Error=ko.observable(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return t.Error()==null?"Module Alerts":"Module Alerts - Error"},t.Group,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ModuleAlerts=t}(Model||(Model={}));app.router.View(app.route.Group_ModuleAlerts,function(n){function t(t){var i=n.call(this,t,new Model.Group_ModuleAlerts)||this,r,u=function(n,t,r,u){return app.route.Group_ModuleAlerts.NavigateTo(i.viewModel.GroupId,{moduleType:n,startLocal:t,endLocal:r,alertAndStatus:u})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Alerts","View module alerts in nested groups",i.FormAction(function(){return Form.GroupSelectModuleTypeAlerts(i.viewModel.GroupId(),i.viewModel.ModuleType(),i.viewModel.StartLocal(),i.viewModel.EndLocal(),u)}),i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))]),Tile.CreateWithBlockSet([new Command_Block("Download","Download csv data",i.FormAction(function(){return Form.GroupDownloadModuleTypeAlerts(i.viewModel.GroupId(),i.viewModel.ModuleType(),i.viewModel.StartLocal(),i.viewModel.EndLocal(),i.viewModel.AlertAndStatus())}),i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))])])),i.OnViewModelReady=function(){i.viewModel.Error()?i.AddItem(new MessagePageItem(i.viewModel.Error())):(i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_GetModuleAlertsForType.For(i.viewModel.GroupId,{type:i.viewModel.ModuleType,startLocal:i.viewModel.StartLocal(),endLocal:i.viewModel.EndLocal(),alertAndStatus:i.viewModel.AlertAndStatus}),click:null,update:!1,sort:"TimeUtc",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Date",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return app.route.Network_Details.For(n.NetworkId).GetUrl()},function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})})).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0,function(n){return Format.NodeAddressAndName(n)})).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return app.route.Module_Details.For(n.ModuleId).GetUrl()},function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("Module","Module",!0,!0)).AddColumn(new FilterTableColumnViewModel("Details","Message",!1,!0)).AddTitle("Module Alerts")),r.LoadData())},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.ModuleType=ko.observable(""),t.ConfigItems=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Config Templates",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ModuleConfigTemplates=t}(Model||(Model={}));app.router.View(app.route.Group_ModuleConfigTemplates,function(n){function t(t){var i=n.call(this,t,new Model.Group_ModuleConfigTemplates)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing template to group",i.FormAction(function(){return Form.ModuleConfigTemplateAdd(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create template in group",i.FormAction(function(){return Form.ModuleConfigTemplateCreate(i,i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Create))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_ModuleConfigTemplatesTable.For(i.viewModel.GroupId),click:function(n){Form.ViewPostRequest(i,{route:app.route.ModuleConfigTemplate_GetModuleConfigTemplateConfigItems.For(n.ModuleConfigTemplateId),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}i.FormAction(function(){return Form.ModuleViewConfig(n)})()}})},update:!0,sort:"ModuleTypeName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("TemplateName","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("ModuleTypeName","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("TemplateDescription","Description",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Created By",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return i.FormAction(function(){return Form.ModuleConfigTemplateEdit(n.ModuleConfigTemplateId,n.TemplateName,n.TemplateDescription,r)})()},i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Edit))).AddColumn(new CommandTableColumnViewModel("Configure","config",function(n){Form.ViewPostRequest(i,{route:app.route.ModuleConfigTemplate_GetModuleConfigTemplateConfigItems.For(n.ModuleConfigTemplateId),onSuccess:function(t){if(t.Success===!1){i.SetMessage(t.Message);return}i.FormAction(function(){return Form.ModuleConfigureTemplate(n,t,app.route.ModuleConfigTemplate_UpdateModuleTemplateConfigItems.For(n.ModuleConfigTemplateId),"Edit Template Config Values","Update",r)})()}})},i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Edit))).AddColumn(new CommandTableColumnViewModel("Clone","group",function(n){return i.FormAction(function(){return Form.ModuleConfigTemplateClone(n.ModuleConfigTemplateId,n.TemplateName,i.viewModel.GroupId(),r)})()},i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Clone))).AddColumn(new CommandTableColumnViewModel("Remove Module Config Template","delete",function(n){return i.FormAction(function(){return Form.ModuleConfigTemplateRemove(n.ModuleConfigTemplateId,n.TemplateName,i.viewModel.GroupId(),r)})()},i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Remove))).AddTitle("Config Templates")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.ModuleType=ko.observable(""),t.ConfigItems=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return t.ModuleType()+" - Configure Modules"},t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ModuleConfiguration=t}(Model||(Model={}));app.router.View(app.route.Group_ModuleConfiguration,function(n){function t(t){var i=n.call(this,t,new Model.Group_ModuleConfiguration)||this;i.ExtendMappingOptions({arrayChildId:{"ConfigItems[i]":"Index"},extend:{}});var l=256,e=function(n){return ko.unwrap(n.Index)*l+(ko.unwrap(n.Bit)||0)},f,o=[],u=ko.observableArray([]),c=function(){return f.LoadData()},r=new ToggleTableColumnViewModel("Select Module","ModuleId","checked","unchecked",!0),s=function(n,t){i.FormAction(function(){return Form.ModuleConfigureBulk({selectedIds:t.map(function(n){return n.ModuleId}),groupId:i.viewModel.GroupId(),configItemsSelection:i.viewModel.ConfigItems().map(function(n){return{Key:ko.unwrap(n.Name),Value:u()[e(n)]()}})},n.filter(function(n){return u()[e(n.Description)]()}),app.route.Module_ConfigureBulk.For(),c)})()},a=function(){r.selectedKeys()[0]!=null&&Form.ViewPostRequest(i,{route:app.route.Module_GetModuleConfigItems.For(r.selectedKeys()[0].ModuleId),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}s(n,r.selectedKeys())}})},v=function(n){Form.ViewPostRequest(i,{route:app.route.Module_GetModuleConfigItems.For(n),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}s(n,r.selectedKeys())}})},y=function(){var n=f.data().filter(function(n){return r.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});i.FormAction(function(){return Form.GroupCopyModuleConfiguration(i.viewModel.ModuleType(),r.selectedKeys().map(function(n){return n.ModuleId}),n,v,null)})()},p=function(n){Form.ViewPostRequest(i,{route:app.route.ModuleConfigTemplate_GetModuleConfigTemplateConfigItems.For(n),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}s(n,r.selectedKeys())}})},w=function(n){u().forEach(function(t,i){t(n.indexOf(i)>-1)});i.CloseFormDialog();i.Update()},b=function(){var n=f.data().filter(function(n){return r.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});i.FormAction(function(){return Form.GroupModuleConfigurationCopyFromTemplate(i.viewModel.ModuleType(),r.selectedKeys().map(function(n){return n.ModuleId}),n,p)})()},h=function(){return r.selectedKeys().length>0?!0:(i.SetMessage("Please select one or more modules."),!1)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Modules"),new SingleValue_Block("Module Type",i.viewModel.ModuleType),new SingleValue_Block("Selected",ko.computed(function(){return r.selectedKeys().length===1?"1 selected module":r.selectedKeys().length+" selected modules"}).extend({throttle:100})),new Command_Block("Edit Config","Edit config for all selected modules",function(){return h()&&a()}),new Command_Block("Copy Config","Copy config to all selected modules",function(){return h()&&y()}),new Command_Block("Use Template","Apply template to all selected modules",function(){return h()&&b()})]),Tile.CreateWithBlockSet([new Command_Block("Select All","Select all filtered items",function(){return r.SelectAll(f.filteredData())}),new Command_Block("Invert","Invert selected items",function(){return r.Invert(f.filteredData())}),new Command_Block("Clear","Clear selection",function(){return r.UnselectAll()})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Config Items"),new SingleValue_Block("Selected",ko.computed(function(){var n=u().filter(function(n){return n()}).length,t=u().length;return n===t?"All items":""+n+"/"+t+" items"}).extend({throttle:100})),new Command_Block("Change","Select which config items to display",i.FormAction(function(){return Form.GroupSelectModuleConfigurationItems(o,u,w)})),new Command_Block("All Items","Show all config items",function(){return u().forEach(function(n){return n(!0)})})])])),i.AddItem(new MessagePageItem("* indicates a default configuration value")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Group_GetNestedModuleConfigsTable.For(i.viewModel.GroupId,{type:i.viewModel.ModuleType}),click:null,update:!0,sort:"NetworkName",ascending:!0,size:10}).AddColumn(r).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return app.route.Network_Details.For(n.NetworkId).GetUrl()},function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},!0,function(n){return n.NetworkId!=null},!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0,Format.NodeAddressAndName)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress: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 app.route.Module_Details.For(n.ModuleId).GetUrl()},function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)})).AddColumn(new CommandTableColumnViewModel("Configure Module","config",function(n){Form.ViewPostRequest(i,{route:app.route.Module_GetModuleConfigItems.For(n.ModuleId),onSuccess:function(t){if(t.Success===!1){i.SetMessage(t.Message);return}i.FormAction(function(){return Form.ModuleConfigure(n.ModuleId,t,app.route.Module_Configure.For(n.ModuleId),c)})()}})},i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureInstaller,Capability.Module_ConfigureSystem]))).AddTitle(ko.computed(function(){return"Module Configurations for Type: "+i.viewModel.ModuleType()}))),r.BindKeyHandlerComputed(f),i.OnViewModelReady=function(){i.viewModel.ConfigItems()!=null&&i.viewModel.ConfigItems().forEach(function(n){var i=new FilterTableColumnViewModel(n.Name(),n.Name(),!0,!0,function(t){return t.ConfigValues[n.Name()].Value+(t.ConfigValues[n.Name()].Value===t.ConfigValues[n.Name()].Default?" *":"")}),t;f.AddColumn(i);t=e(n);o[t]=i;u()[t]=ko.observable(!0)});ko.computed(function(){i.viewModel.ConfigItems().forEach(function(n){var t=e(n);o[t].visible(u()[t]())})}).extend({throttle:50})},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentGroupId=ko.observable(0),t.ParentGroupName=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Conversions",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ModuleConversions=t}(Model||(Model={}));app.router.View(app.route.Group_ModuleConversions,function(n){function t(t){var i=n.call(this,t,new Model.Group_ModuleConversions)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_ModuleConversionsTable.For(i.viewModel.GroupId),click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!0,sort:"ProcessDate",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Modules",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Modules=t}(Model||(Model={}));app.router.View(app.route.Group_Modules,function(n){function t(t){var i=n.call(this,t,new Model.Group_Modules)||this,u,h=function(n,t,r,u){return app.route.Group_ModuleAlerts.NavigateTo(i.viewModel.GroupId,{moduleType:n,startLocal:t,endLocal:r,alertAndStatus:u})},f=function(){return u.LoadData()},r=new ToggleTableColumnViewModel("Select Module","ModuleId","checked","unchecked",!0),e=function(){return r.selectedKeys().map(function(n){return n.ModuleId})},o=function(){return u.data().filter(function(n){return r.selectedKeys().some(function(t){return t.ModuleId===n.ModuleId})}).map(function(n){return n.NetworkName+" - "+n.Name})},s=function(){return r.selectedKeys().length>0?!0:(i.SetMessage("Please select one or more modules."),!1)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Module Selection"),new SingleValue_Block("Selected",ko.computed(function(){return e().length===1?"1 module":e().length+" modules"}).extend({throttle:100})),new Command_Block("Select All","Select all filtered modules",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Invert","Invert selected modules",function(){return r.Invert(u.filteredData())}),new Command_Block("Clear","Deselect all modules",function(){return r.UnselectAll()})]),Tile.CreateWithBlockSet([new Command_Block("Add To","Add selected to another group",function(){return s()&&i.FormAction(function(){return Form.GroupAddSelectedModules(i.viewModel.GroupId(),e(),o(),f)})()}),new Command_Block("Move To","Move selected to another group",function(){return s()&&i.FormAction(function(){return Form.GroupMoveSelectedModules(i.viewModel.GroupId(),e(),o(),f)})()},i.HasCapabilityComputed(Capability.Module_Remove)),new Command_Block("Remove","Remove selected from this group",function(){return s()&&i.FormAction(function(){return Form.GroupRemoveSelectedModules(i.viewModel.GroupId(),e(),o(),f)})()},i.HasCapabilityComputed(Capability.Module_Remove))]),Tile.CreateWithBlockSet([new Command_Block("Add","Add existing modules to group",i.FormAction(function(){return Form.GroupAddModules(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.Module_Add))]),Tile.CreateWithBlockSet([new Command_Block("Alerts","View module alerts in nested groups",i.FormAction(function(){return Form.GroupSelectModuleTypeAlerts(i.viewModel.GroupId(),null,null,null,h)}),i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_ModulesTable.For(i.viewModel.GroupId),click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!0,sort:"NetworkShortName",ascending:!0,size:25}).AddColumn(r).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 i.FormAction(function(){return Form.GroupRemoveModule(i.viewModel.GroupId(),n.ModuleId,n.Name,n.NetworkName,f)})()},i.HasCapabilityComputed(Capability.Module_Remove))).AddTitle("Modules")),r.BindKeyHandlerComputed(u),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Group Network Managers",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_NetworkManagers=t}(Model||(Model={}));app.router.View(app.route.Group_NetworkManagers,function(n){function t(t){var i=n.call(this,t,new Model.Group_NetworkManagers)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_NetworkManagersTable.For(i.viewModel.GroupId),click:function(n){return app.route.Network_Managers.NavigateTo(n.NetworkId)},update:!0,sort:"UserCount",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Networks",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Networks=t}(Model||(Model={}));app.router.View(app.route.Group_Networks,function(n){function t(t){var i=n.call(this,t,new Model.Group_Networks)||this,u,h=function(n){return app.route.Network_Details.NavigateTo(n)},f=function(){return u.LoadData()},r=new ToggleTableColumnViewModel("Select Network","NetworkId","checked","unchecked",!0),e=function(){return r.selectedKeys().map(function(n){return n.NetworkId})},o=function(){return u.data().filter(function(n){return r.selectedKeys().some(function(t){return t.NetworkId===n.NetworkId})}).map(function(n){return n.Name})},s=function(){return r.selectedKeys().length>0?!0:(i.SetMessage("Please select one or more networks."),!1)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Network Selection"),new SingleValue_Block("Selected",ko.computed(function(){return e().length===1?"1 network":e().length+" networks"}).extend({throttle:100})),new Command_Block("Select All","Select all filtered networks",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Invert","Invert selected networks",function(){return r.Invert(u.filteredData())}),new Command_Block("Clear","Deselect all networks",function(){return r.UnselectAll()})]),Tile.CreateWithBlockSet([new Command_Block("Add To","Add selected to another group",function(){return s()&&i.FormAction(function(){return Form.GroupAddSelectedNetworks(i.viewModel.GroupId(),e(),o(),f)})()}),new Command_Block("Move To","Move selected to another group",function(){return s()&&i.FormAction(function(){return Form.GroupMoveSelectedNetworks(i.viewModel.GroupId(),e(),o(),f)})()},i.HasCapabilityComputed(Capability.Network_Remove)),new Command_Block("Remove","Remove selected from this group",function(){return s()&&i.FormAction(function(){return Form.GroupRemoveSelectedNetworks(i.viewModel.GroupId(),e(),o(),f)})()},i.HasCapabilityComputed(Capability.Network_Remove))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new network in group",i.FormAction(function(){return Form.GroupCreateNetwork(i.viewModel.GroupId(),i.viewModel.CurrentUser.TimeZoneName(),i.viewModel.CurrentUser.UtcOffsetHours(),h)}),i.HasCapabilityComputed(Capability.Network_Create)),new Command_Block("Add","Add existing networks to group",i.FormAction(function(){return Form.GroupAddNetworks(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.Network_Add))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_NetworksTable.For(i.viewModel.GroupId),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"ShortName",ascending:!0,size:25}).AddColumn(r).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,function(n){return n.ServiceProvider},i.HasCapabilityComputed(Capability.Network_ViewServiceProvider))).AddColumn(new CommandTableColumnViewModel("Remove Network","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveNetwork(i.viewModel.GroupId(),n.NetworkId,n.Name,f)})()},i.HasCapabilityComputed(Capability.Network_Remove))).AddTitle("Networks")),r.BindKeyHandlerComputed(u),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Sims",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_NetworkSims=t}(Model||(Model={}));app.router.View(app.route.Group_NetworkSims,function(n){function t(t){var i=n.call(this,t,new Model.Group_NetworkSims)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_NetworkSimsTable.For(i.viewModel.GroupId),click:function(n){return n.SimId!=null?app.route.Sim_Details.NavigateTo(n.SimId):i.SetMessage("No sim available")},update:!0,sort:"SimNumber",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Status Summary",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_NetworkStatus=t}(Model||(Model={}));app.router.View(app.route.Group_NetworkStatus,function(n){function t(t){var i=n.call(this,t,new Model.Group_NetworkStatus)||this,u=new MapPageItem(i,!0,!0,!1),r=new ToggleTableColumnViewModel("Select Networks","NetworkId","checked","unchecked"),h=function(n){u.itemSets.forEach(function(t){var r=t.items().filter(function(t){return t.NetworkId===n.NetworkId}),f;r.length===1&&(r[0].Latitude!=null&&r[0].Latitude!==0&&r[0].Longitude!=null&&r[0].Longitude!==0?(f=new google.maps.LatLng(r[0].Latitude,r[0].Longitude),u.infoWindow.setPosition(f),u.map.setCenter(f),google.maps.event.trigger(r[0].map.marker,"click")):(u.infoWindow.close(),i.SetMessage("No location can be shown for this network.")))})},f=new AjaxFilterTableViewModel({route:app.route.Group_GetNetworkLocationSummary.For(i.viewModel.GroupId),click:function(n){return h(n)},update:!0,sort:"LastSync",ascending:!1,size:10}).AddColumn(r).AddColumn(new CommandTableColumnViewModel("View Network","network",function(n){return app.route.Network_Details.NavigateTo(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,i.HasCapabilityComputed(Capability.Network_ViewServiceProvider))).AddTitle("Network Status Summary"),c=function(n){return Form.ViewPostRequest(i,{route:app.route.Network_RecentNetworkAlerts.For(n),onSuccess:function(n){var i=document.createElement("div"),t=document.createElement("div"),r;t.className="resultheader";i.appendChild(t);n==null||n.length<1?t.appendChild(document.createTextNode("No Alerts for 30 days")):(t.appendChild(document.createTextNode("Recent Alerts:")),r=document.createElement("div"),i.appendChild(r),n.filter(function(n){return n!=null}).forEach(function(n){var t=document.createElement("div"),i;t.className="nodealert";t.appendChild(document.createTextNode(Format.LastUpdate(moment(n.TimeUtc))));t.appendChild(document.createTextNode(" ("));i=document.createElement("a");i.href=app.route.Module_Details.For(ko.unwrap(n.ModuleId)).GetUrl();i.setAttribute("onclick","app.route.Module_Details.NavigateTo("+ko.unwrap(n.ModuleId)+"); return false;");i.innerText=n.ModuleName;t.appendChild(i);t.appendChild(document.createTextNode(") "+n.Details));r.appendChild(t)}));$(".map .nodeevents").html(i.outerHTML)}})},l=function(n){var i=document.createElement("div"),r=document.createElement("div"),e=document.createElement("a"),u,o,s,f,y,h,t,p,w,l,a,v;return e.href=app.route.Network_Details.For(ko.unwrap(n.NetworkId)).GetUrl(),e.setAttribute("onclick","app.route.Network_Details.NavigateTo("+ko.unwrap(n.NetworkId)+"); return false;"),e.innerText=ko.unwrap(n.Name),u=document.createElement("a"),u.href=app.route.Network_Map.For(ko.unwrap(n.NetworkId)).GetUrl(),u.setAttribute("onclick","app.route.Network_Map.NavigateTo("+ko.unwrap(n.NetworkId)+"); return false;"),u.innerText="Map",o=document.createElement("span"),o.className="nodetitle",o.appendChild(e),s=document.createElement("span"),s.className="nodetitle",s.appendChild(u),r.appendChild(o),r.appendChild(document.createTextNode(" - (")),r.appendChild(s),r.appendChild(document.createTextNode(")")),i.appendChild(r),ko.unwrap(n.Type)!=null&&(f=document.createElement("div"),f.className="nodeitem",y=document.createElement("strong"),y.innerHTML="Device Type: ",f.appendChild(y),f.appendChild(document.createTextNode(ko.unwrap(n.Type))),i.appendChild(f)),ko.unwrap(n.LastSync)!=null&&(h=document.createElement("div"),h.className="nodetext",t=document.createElement("div"),t.className="nodeitem",p=document.createElement("strong"),p.innerHTML="Last Update: ",t.appendChild(p),t.appendChild(document.createTextNode(Format.LastUpdate(moment(ko.unwrap(n.LastSync))))),ko.unwrap(n.IsOverdue)&&(w=document.createElement("span"),w.className="overdue",t.appendChild(document.createTextNode("Overdue by: "+Format.OverdueBy(moment.duration(moment().diff(ko.unwrap(n.LastSync))))))),h.appendChild(t),i.appendChild(h)),l=document.createElement("div"),l.className="resultheader",l.textContent="Scanning...",a=document.createElement("div"),a.className="nodeevents",a.appendChild(l),v=document.createElement("div"),v.className="nodetext",v.appendChild(a),i.appendChild(v),c(ko.unwrap(n.NetworkId)),i.outerHTML},o=ko.observableArray(),e,s;return ko.computed(function(){return o(f.filteredData())}).extend({throttle:50}),e=ko.observable(0),ko.computed(function(){return e(f.filteredData().length)}).extend({throttle:150}),ko.computed(function(){e();typeof u.zoomToBounds=="function"&&ko.ignoreDependencies(u.zoomToBounds)}).extend({throttle:500}),u.AddItems({items:o,getLatLng:GMap.GetLatLng,getText:function(n){return ko.unwrap(n.Name)},getInfo:l,getIcon:function(n){return ko.unwrap(n.IsOverdue)?GMap.Icons.redDotMarker:ko.unwrap(n.Type)==null?GMap.Icons.blueDotMarker:GMap.Icons.greenDotMarker},getZIndex:function(n){return ko.unwrap(n.IsOverdue)?100:10}}),i.AddItem(u),s=function(){r.UnselectAll();f.LoadData()},i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Network Selection"),new SingleValue_Block("Selected",ko.computed(function(){return r.selectedKeys().length===1?"1 network":r.selectedKeys().length+" networks"}).extend({throttle:100})),new Command_Block("Select All","Select all filtered networks",function(){return r.SelectAll(f.filteredData())}),new Command_Block("Invert","Invert selected networks",function(){return r.Invert(f.filteredData())}),new Command_Block("Clear","Deselect all networks",function(){return r.UnselectAll()}),new Command_Block("Update","Update sync on selected networks",i.FormAction(function(){return Form.NetworkSetMaxSyncIntervals(i.viewModel.GroupId(),r.selectedKeys().map(function(n){return n.NetworkId}),s)}))])])),i.AddItem(f),r.BindKeyHandlerComputed(f),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Subscription Plans",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_NetworkSubscriptionPlans=t}(Model||(Model={}));app.router.View(app.route.Group_NetworkSubscriptionPlans,function(n){function t(t){var i=n.call(this,t,new Model.Group_NetworkSubscriptionPlans)||this,r,u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create new subscription plan",i.FormAction(function(){return Form.GroupCreateNetworkSubscriptionPlan(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.NetworkSubscriptionPlans_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_NetworkSubscriptionPlansTable.For(i.viewModel.GroupId),click:function(n){return app.route.NetworkSubscriptionPlan_Details.NavigateTo(n.NetworkSubscriptionPlanId,{groupId:i.viewModel.GroupId})},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!1,!0)).AddColumn(new FilterTableColumnViewModel("PeriodFee","Fee",!1,!0,function(n){return Format.Currency(n.PeriodFee)})).AddColumn(new NumberFilterTableColumnViewModel("PeriodMonths","Months",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("MaxNodes","Max Nodes",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!0,!0)).AddColumn(new FilterTableColumnViewModel("CreatedByUser","By",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("SubscribedNetworkCount","Networks Subscribed",!0,!0)).AddTitle("Subscription Plans")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Subscriptions",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_NetworkSubscriptions=t}(Model||(Model={}));app.router.View(app.route.Group_NetworkSubscriptions,function(n){function t(t){var i=n.call(this,t,new Model.Group_NetworkSubscriptions)||this,f,u,r=new ToggleTableColumnViewModel("Select Subscription","NetworkSubscriptionId","checked","unchecked",!0),e=function(){r.UnselectAll();u.LoadData()},o=function(){f.LoadData();u.LoadData()},s=function(n){r.UnselectAll();n.forEach(function(n){n.DaysRemaining<=0&&r.selectRow(n)})},h=function(n){r.UnselectAll();n.forEach(function(n){n.DaysRemaining<=30&&r.selectRow(n)})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Subscriptions"),new Command_Block("Renew","Renew selected subscriptions",function(){return r.selectedKeys().length>0?i.FormAction(function(){return Form.GroupRenewNetworkSubscriptions(i.viewModel.GroupId(),r.selectedKeys().map(function(n){return n.NetworkSubscriptionId}),e)})():i.SetMessage("You must select subscriptions first")},null),new Command_Block("Invoice","Invoice renewed subscriptions",i.FormAction(function(){return Form.GroupInvoiceNetworkSubscriptions(i.viewModel.GroupId(),f.data().length,o)}),null)]),Tile.CreateWithBlockSet([new SmallHeader_Block("Subscription Selection"),new Command_Block("Select All","Select all filtered subscriptions",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Expired","Select expired subscriptions",function(){return s(u.filteredData())}),new Command_Block("30 Days","Select expiring within next 30 days",function(){return h(u.filteredData())}),new Command_Block("None","Deselect all subscriptions",function(){return r.UnselectAll()}),new Command_Block("Invert","Invert the subscriptions selections",function(){return r.Invert(u.filteredData())})])])),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Group_NetworkSubscriptionRenewalsTable.For(i.viewModel.GroupId),click:function(n){return app.route.NetworkSubscription_Details.NavigateTo(n.NetworkSubscriptionId,{groupId:i.viewModel.GroupId})},update:!0,sort:"DaysRemaining",ascending:!0,size:25}).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 Format.Currency(n.Fee)})).AddColumn(new FilterTableColumnViewModel("SubscriptionPlan","Plan",!1,!0)).AddColumn(new FilterTableColumnViewModel("EndLocal","Expires",!1,!0,function(n){return Format.DueDate(moment(n.EndLocal))})).AddTitle("Renewals that need invoicing")),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_NetworkSubscriptionsTable.For(i.viewModel.GroupId),click:function(n){return app.route.NetworkSubscription_Details.NavigateTo(n.NetworkSubscriptionId,{groupId:i.viewModel.GroupId})},update:!0,sort:"DaysRemaining",ascending:!0,size:25}).AddColumn(r).AddColumn(new FilterTableColumnViewModel("BillingEntityName","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("SubscriptionPlan","Plan",!1,!0,function(n){return n.SubscriptionPlan+" "+Format.Currency(n.Fee)})).AddColumn(new FilterTableColumnViewModel("EndLocal","Expires",!1,!0,function(n){return Format.DueDate(moment(n.EndLocal))})).AddColumn(new NumberFilterTableColumnViewModel("DaysRemaining","Days Remaining",!1,!0)).AddTitle("Subscriptions")),r.BindKeyHandlerComputed(u),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_CancelledNetworkSubscriptionsTable.For(i.viewModel.GroupId),click:function(n){return app.route.NetworkSubscription_Details.NavigateTo(n.NetworkSubscriptionId,{groupId:i.viewModel.GroupId})},update:!0,sort:"BillingEntityName",ascending:!0,size:25}).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 Format.Currency(n.Fee)})).AddColumn(new FilterTableColumnViewModel("SubscriptionPlan","Plan",!1,!0)).AddColumn(new FilterTableColumnViewModel("CancelledUtc","Cancelled",!1,!0,function(n){return n.CancelledUtc!=null?Format.DueDate(moment(n.CancelledUtc)):"-"})).AddColumn(new FilterTableColumnViewModel("CancelledByUser","Cancelled By",!1,!0,function(n){return n.CancelledUtc!=null?n.CancelledByUser:"-"})).AddTitle("Cancelled Subscriptions")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_UnsubscribedNetworksTable.For(i.viewModel.GroupId),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"NetworkName",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Notes",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Notes=t}(Model||(Model={}));app.router.View(app.route.Group_Notes,function(n){function t(t){var i=n.call(this,t,new Model.Group_Notes)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_NotesTable.For(i.viewModel.GroupId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return app.route.Note_Details.NavigateTo(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 app.route.User_Details.NavigateTo(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Report Templates",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_ReportTemplates=t}(Model||(Model={}));app.router.View(app.route.Group_ReportTemplates,function(n){function t(t){var i=n.call(this,t,new Model.Group_ReportTemplates)||this,r,f=function(n){return app.route.Report_Details.NavigateTo(n)},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing report templates",i.FormAction(function(){return Form.GroupAddReportTemplates(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.Report_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new report template",i.FormAction(function(){return Form.GroupCreateReportTemplate(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.Report_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_ReportTemplatesTable.For(i.viewModel.GroupId),click:function(n){return app.route.Report_Details.NavigateTo(n.ReportTemplateId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveReportTemplate(i.viewModel.GroupId(),n.ReportTemplateId,n.Name,u)})()},i.HasCapabilityComputed(Capability.Report_Remove))).AddTitle("Report Templates")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Rfid Tags",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_RfidTags=t}(Model||(Model={}));app.router.View(app.route.Group_RfidTags,function(n){function t(t){var i=n.call(this,t,new Model.Group_RfidTags)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing rfid tags",i.FormAction(function(){return Form.GroupAddRfidTags(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.RfidTag_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new rfid tag",i.FormAction(function(){return Form.GroupCreateRfidTag(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.RfidTag_Create))]),Tile.CreateWithBlockSet([new Command_Block("Download","Download group rfid tags",function(){return window.location.href=app.route.Group_DownloadRfidTags.For(i.viewModel.GroupId).GetUrl()},i.HasCapabilityComputed(Capability.RfidTag_Add))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_RfidTagsTable.For(i.viewModel.GroupId),click:function(n){return app.route.Rfid_Details.NavigateTo(n.RfidTagId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveRfidTag(i.viewModel.GroupId(),n.RfidTagId,n.Name,r)})()},i.HasCapabilityComputed(Capability.RfidTag_Remove))).AddTitle("Rfid Tags")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Roles",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Roles=t}(Model||(Model={}));app.router.View(app.route.Group_Roles,function(n){function t(t){var i=n.call(this,t,new Model.Group_Roles)||this,r,f=function(n){return app.route.Role_Details.NavigateTo(n)},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add an existing role to group",i.FormAction(function(){return Form.GroupAddRoles(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.Role_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new role in group",i.FormAction(function(){return Form.GroupCreateRole(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.Role_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_RolesTable.For(i.viewModel.GroupId),click:function(n){return app.route.Role_Details.NavigateTo(n.RoleId)},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveRole(i.viewModel.GroupId(),n.RoleId,n.Name,u)})()},i.HasCapabilityComputed(Capability.Role_Remove))).AddTitle("Roles")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Shared Charts",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_SharedCollections=t}(Model||(Model={}));app.router.View(app.route.Group_SharedCollections,function(n){function t(t){var i=n.call(this,t,new Model.Group_SharedCollections)||this,u,f=function(n){return app.route.SharedCollection_Details.NavigateTo(n)},r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing shared collections",i.FormAction(function(){return Form.GroupAddSharedCollections(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.SharedChart_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new shared collection",i.FormAction(function(){return Form.GroupCreateSharedCollection(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.SharedChart_Create))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_SharedCollectionsTable.For(i.viewModel.GroupId),click:function(n){return app.route.SharedCollection_Details.NavigateTo(n.SharedCollectionId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.SharedCollectionDownloadData(n.SharedCollectionId,n.Name,n.DaysToDisplay,0)})()})).AddColumn(new CommandTableColumnViewModel("Configure Collection","config",function(n){return i.FormAction(function(){return Form.SharedCollectionConfigure(n.SharedCollectionId,n.Name,n.DaysToDisplay,r)})()},i.HasCapabilityComputed(Capability.SharedChart_Edit))).AddColumn(new CommandTableColumnViewModel("Remove Shared Collection","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveSharedCollection(i.viewModel.GroupId(),n.SharedCollectionId,n.Name,r)})()},i.HasCapabilityComputed(Capability.SharedChart_Remove))).AddTitle("Shared Charts")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Sims",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Sims=t}(Model||(Model={}));app.router.View(app.route.Group_Sims,function(n){function t(t){var i=n.call(this,t,new Model.Group_Sims)||this,r,f=function(n){return app.route.Sim_Details.NavigateTo(n)},u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing sims",i.FormAction(function(){return Form.GroupAddSims(i.viewModel.GroupId(),u)}),i.HasCapabilityComputed(Capability.Sim_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new sim",i.FormAction(function(){return Form.GroupCreateSim(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.Sim_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_SimsTable.For(i.viewModel.GroupId),click:function(n){return app.route.Sim_Details.NavigateTo(n.SimId)},update:!0,sort:"SimNumber",ascending:!0,size:25}).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","sms",function(n){return CopyToClipboard(n.SimNumber,!0,n.SimNumber)})).AddColumn(new CommandTableColumnViewModel("Copy Phone Number to Clipboard","copyphone",function(n){return CopyToClipboard(n.PhoneNumber,!0,n.PhoneNumber)})).AddColumn(new CommandTableColumnViewModel("Remove Sim","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveSim(i.viewModel.GroupId(),n.SimId,n.SimNumber,u)})()},i.HasCapabilityComputed(Capability.Sim_Remove))).AddTitle("Sims")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Sms Providers",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_SmsProviders=t}(Model||(Model={}));app.router.View(app.route.Group_SmsProviders,function(n){function t(t){var i=n.call(this,t,new Model.Group_SmsProviders)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Group_SmsProvidersTable.For(i.viewModel.GroupId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!1)).AddTitle("Sms Providers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Tags",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Tags=t}(Model||(Model={}));app.router.View(app.route.Group_Tags,function(n){function t(t){var i=n.call(this,t,new Model.Group_Tags)||this,u,r=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing tags",i.FormAction(function(){return Form.GroupAddTags(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.Tag_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new tag",i.FormAction(function(){return Form.GroupCreateTag(i.viewModel.GroupId(),r)}),i.HasCapabilityComputed(Capability.Tag_Create))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_TagsTable.For(i.viewModel.GroupId),click:function(n){return app.route.Tag_Details.NavigateTo(n.TagId,{groupId:i.viewModel.GroupId})},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.GroupRemoveTag(i.viewModel.GroupId(),n.TagId,n.Name,r)})()},i.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Tags")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Tasks",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Tasks=t}(Model||(Model={}));app.router.View(app.route.Group_Tasks,function(n){function t(t){var i=n.call(this,t,new Model.Group_Tasks)||this,r,u=function(){return r.LoadData()};return i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_GetGroupTasks.For(i.viewModel.GroupId),click:null,update:!0,sort:"Source",ascending:!0,size:25}).AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return Task.Icon(n.SourceType)},function(n){return Task.Source(n.SourceType)},function(n){return Task.Route(n.SourceType,n.Parameters)})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Status",!0,!0,function(n){return Task.Source(n.SourceType)+" "+n.Type})).AddColumn(new FilterTableColumnViewModel("Description","Description",!0,!0,function(n){return Task.Tasks[n.Description].GetDescription(n.IsCompleted,n.Parameters)})).AddColumn(new TaskActionsTextTableColumnViewModel("Actions","Actions",i,function(){return u},i.viewModel.Capabilities,function(n){return n})).AddTitle("Tasks")),i.OnViewModelReady=function(){return r.LoadData()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.Name=ko.observable(""),t.DeviceType=ko.observable(""),t.DeviceModel=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return t.DeviceType()+" - Firmware Update"},t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_UpdateNetworkFirmware=t}(Model||(Model={}));app.router.View(app.route.Group_UpdateNetworkFirmware,function(n){function t(t){var i=n.call(this,t,new Model.Group_UpdateNetworkFirmware)||this,r=new ToggleTableColumnViewModel("Select Device",["NetworkId","NodeAddress"],"checked","unchecked"),e=ko.observable(!1),h=0,o=2147483647,s=ko.observable(h),f=ko.observable(o),u=new AjaxFilterTableViewModel({route:ko.computed(function(){return app.route.Group_GetNetworkNodesWithDeviceTable.For(i.viewModel.GroupId,{type:i.viewModel.DeviceType,model:i.viewModel.DeviceModel,includeNoApplication:e,minVersion:s,maxVersion:f})}),click:null,update:!0,sort:null,ascending:!1,size:25}).AddColumn(r).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return app.route.Network_Details.For(n.NetworkId).GetUrl()},function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},!0,function(n){return n.NetworkId!=null},!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0,Format.NodeAddressAndName)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress: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 app.route.Device_Details.For(n.DeviceExtAddress).GetUrl()},function(n){return app.route.Device_Details.NavigateTo(n.DeviceExtAddress)})).AddColumn(new DateFilterTableColumnViewModel("LastSyncUtc","Last Sync",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("FirmwareVersion","Firmware",!1,!0)).AddColumn(new FilterTableColumnViewModel("ApplicationName","Application",!0,!0,function(n){return n.ApplicationName==null?"":n.ApplicationName+" ("+n.ApplicationVersion+")"})).AddTitle("Devices for Type: "+i.viewModel.DeviceType()),c=ko.computed(function(){return s()<=h&&f()>=o?"All":s()+"-"+(f()===o?"Any":f())}),l=function(){return u.LoadData()},a=function(n,t){s(n||h);f(t||o);i.CloseFormDialog();u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Devices"),new SingleValue_Block("Device Type",i.viewModel.DeviceType),new SingleValue_Block("Device Model",i.viewModel.DeviceModel),new Command_Block("Update","Update firmware for selected",i.FormAction(function(){return Form.GroupUpdateNetworkNodesFirmware(i.viewModel.GroupId(),i.viewModel.DeviceType(),i.viewModel.DeviceModel(),r.selectedKeys(),l)}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Device Selection"),new SingleValue_Block("Selected",ko.computed(function(){return r.selectedKeys().length===1?"1 device":r.selectedKeys().length+" devices"}).extend({throttle:100})),new Command_Block("Select All","Select all filtered devices",function(){return r.SelectAll(u.filteredData())}),new Command_Block("Invert","Invert selected devices",function(){return r.Invert(u.filteredData())}),new Command_Block("Clear","Deselect all devices",function(){return r.UnselectAll()})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Filters"),new Command_Block("Included","Showing devices without application",function(){e(!1);u.LoadData()},e),new Command_Block("Excluded","Showing devices with application",function(){e(!0);u.LoadData()},ko.computed(function(){return!e()})),new Command_Block("Versions",c,i.FormAction(function(){return Form.GroupFirmwareVersionRangeSelection(s(),f(),h,o,a)}))])])),i.AddItem(u),r.BindKeyHandlerComputed(u),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.GroupId=ko.observable(0),t.ParentGroupId=ko.observable(0),t.Name=ko.observable(""),t.ParentName=ko.observable(""),t.BrandingId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Users",t.Name,app.route.Group_Details.For(t.GroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Group_Users=t}(Model||(Model={}));app.router.View(app.route.Group_Users,function(n){function t(t){var i=n.call(this,t,new Model.Group_Users)||this,r,u,o=function(n){return app.route.User_Details.NavigateTo(n)},f=function(){return r.LoadData()},e=function(){return u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Add existing users",i.FormAction(function(){return Form.GroupAddUsers(i.viewModel.GroupId(),f)}),i.HasCapabilityComputed(Capability.User_Add))]),Tile.CreateWithBlockSet([new Command_Block("Create","Create a new user",i.FormAction(function(){return Form.GroupCreateUser(i.viewModel.GroupId(),i.viewModel.CurrentUser.TimeZoneName(),i.viewModel.CurrentUser.UtcOffsetHours(),i.viewModel.BrandingId(),o)}),i.HasCapabilityComputed(Capability.User_Create))]),Tile.CreateWithBlockSet([new Command_Block("Terms","Assign legal terms to users",i.FormAction(function(){return Form.GroupAssignLegalTerms(i.viewModel.GroupId())}),i.HasCapabilityComputed(Capability.LegalTerms_Assign))])])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Grant","Grant roles to groups",i.FormAction(function(){return Form.GroupGrantRoles(i.viewModel.GroupId(),e)}),i.HasCapabilityComputed(Capability.Role_GrantToGroup))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Group_UsersTable.For(i.viewModel.GroupId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"Name",ascending:!0,size:10}).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 Format.PhoneNumber(n.PrimaryPhoneNumber)})).AddColumn(new CommandTableColumnViewModel("Copy Email Address to Clipboard","copyemail",function(n){return CopyToClipboard(n.PrimaryEmailAddress,!0,"email address "+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,"phone number "+n.PrimaryPhoneNumber)},!0,function(n){return ko.unwrap(n.PrimaryPhoneNumber)!=null})).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return i.FormAction(function(){return Form.GroupRemoveUser(i.viewModel.GroupId(),n.UserId,n.Name,f)})()},i.HasCapabilityComputed(Capability.User_Remove))).AddTitle("Users")),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Group_GrantedRolesTable.For(i.viewModel.GroupId),click:null,update:!0,sort:"TargetGroupName",ascending:!0,size:10}).AddColumn(new CommandTableColumnViewModel("Group","group",function(n){return app.route.Group_Details.NavigateTo(n.TargetGroupId)})).AddColumn(new FilterTableColumnViewModel("TargetGroupName","Group",!1,!0)).AddColumn(new CommandTableColumnViewModel("Role","group",function(n){return app.route.Role_Details.NavigateTo(n.RoleId)})).AddColumn(new FilterTableColumnViewModel("RoleName","Role",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Role","delete",function(n){return i.FormAction(function(){return Form.GroupRevokeRole(i.viewModel.GroupId(),n.TargetGroupId,n.TargetGroupName,n.RoleId,n.RoleName,e)})()},i.HasCapabilityComputed(Capability.Role_RevokeFromGroup))).AddTitle("Granted Roles")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Groups=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Dashboard")},t}return __extends(t,n),t}(n.Base_Model);n.Home_Index=t}(Model||(Model={}));app.router.View(app.route.Home_Index,function(n){function t(t){var i=n.call(this,t,new Model.Home_Index)||this;return i.ExtendMappingOptions({arrayChildId:{"Groups[i]":"DashboardGroupId"},extend:{"Groups[i]":function(n){var r,t;PageItem.Create(n,"nested");r=new DashboardHeaderPageItem(n.DashboardGroupId,n.Name,TileState.Idle);r.addButton(new DashboardActionButton(n.DashboardGroupId,"edit","Edit Section",function(){return app.route.Section_Details.NavigateTo(n.DashboardGroupId)},!0));r.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());Form.ViewPostRequest(i,{route:app.route.Section_SetExpanded.For(n.DashboardGroupId,{expanded:n.Expanded()}),data:{},onSuccess:function(){n.Expanded()&&i.Update()}})},!0));n.items.push(r);t=Tile.CreatePageItem();t.id=ko.computed(function(){return"groupId-"+n.DashboardGroupId()});t.defaultVisibility=n.Expanded;n.items.push(t);t.addTileSet(n.ModuleTiles);t.addTileSet(n.CumulativeMeterTiles)}}}),i.ExtendMappingOptions(Tile.CreateModuleTileMapping(i,"ModuleTiles[i]")),i.ExtendMappingOptions(Tile.CreateCumulativeMeterTileMapping("CumulativeMeterTiles[i]")),i.AddItem(new PageItem("nested",i.viewModel.Groups)),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("add",new Header_Text("Dashboard Section","Click to add a new section","Add Section"),new Header_Actions(i.FormAction(function(){return Form.SectionCreate(function(n){return app.route.Section_Details.NavigateTo(n)})})))])])),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.LegalTerms={LegalTermsId:ko.observable(0),Name:ko.observable(""),CreatedUtc:ko.observable(),CreatedUserId:ko.observable(0),CreatedUser:ko.observable(""),LegalTermsMarkDown:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.LegalTerms.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.LegalTerms_Details=t}(Model||(Model={}));app.router.View(app.route.LegalTerms_Details,function(n){function t(t){var i=n.call(this,t,new Model.LegalTerms_Details)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("legal-terms",new Header_Text(i.viewModel.LegalTerms.Name,"Name",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.LegalTerms.CreatedUtc()))}),"Creation Date")),new SingleValue_Block("Creator",i.viewModel.LegalTerms.CreatedUser)]),Tile.CreateWithBlockSet([new Command_Block("Delete","Delete these legal terms",i.FormAction(function(){return Form.LegalTermsDelete(i.viewModel.LegalTerms.LegalTermsId(),function(){return window.history.go(-1)})}),i.HasCapabilityComputed(Capability.LegalTerms_Delete))])])),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.LegalTerms.LegalTermsMarkDown())}))),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.LegalTermsId=ko.observable(0),t.Name=ko.observable(""),t.LegalTermsMarkdown=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.LegalTerms_View=t}(Model||(Model={}));app.router.View(app.route.LegalTerms_View,function(n){function t(t){var i=n.call(this,t,new Model.LegalTerms_View)||this;return i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.LegalTermsMarkdown())}))),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.MessageAccount={AccountStart:ko.observable(),BillingEntityId:ko.observable(0),BillingEntityName:ko.observable(""),EmailCount:ko.observable(0),EnforceEmailQuota:ko.observable(!1),EnforceSmsQuota:ko.observable(!1),IsClosed:ko.observable(!1),MessageAccountId:ko.observable(0),MessagePlanId:ko.observable(0),MessagePlanName:ko.observable(""),Name:ko.observable(""),NextMessageAccountId:ko.observable(0),NotifyOnEmailExceeded:ko.observable(!1),NotifyOnSmsExceeded:ko.observable(!1),PeriodEmailQuota:ko.observable(0),PeriodEnd:ko.observable(),PeriodMonths:ko.observable(0),PeriodSmsQuota:ko.observable(0),PeriodStart:ko.observable(),PreviousMessageAccountId:ko.observable(0),SmsCount:ko.observable(0)},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.MessageAccount.Name,function(){return t.GroupId()==null?t.MessageAccount.BillingEntityName():"Message Accounts"},function(){return t.GroupId()==null?app.route.BillingEntity_MessageAccounts.For(t.MessageAccount.BillingEntityId):app.route.Group_MessageAccounts.For(t.GroupId)})},t}return __extends(t,n),t}(n.Base_Model);n.MessageAccount_Details=t}(Model||(Model={}));app.router.View(app.route.MessageAccount_Details,function(n){function t(t){var i=n.call(this,t,new Model.MessageAccount_Details)||this,o,s,h,f=function(){return h.LoadData()},c=function(){return o.LoadData()},e=function(){return s.LoadData()},r=function(n){return ko.computed(function(){return!i.viewModel.MessageAccount.IsClosed()&&i.HasCapability(n)})},l=function(n){return n>0?app.route.MessageAccount_Details.NavigateTo(n,{groupId:i.viewModel.GroupId}):null},u;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("message-plan",new Header_Text(i.viewModel.MessageAccount.Name,"Message Account",ko.computed(function(){return i.viewModel.MessageAccount.IsClosed()?"Closed":""}))),new Command_Block("Previous","View previous account",function(){return app.route.MessageAccount_Details.NavigateTo(i.viewModel.MessageAccount.PreviousMessageAccountId,{groupId:i.viewModel.GroupId})},ko.computed(function(){return i.viewModel.MessageAccount.PreviousMessageAccountId()!=null})),new Command_Block("Next","View next account",function(){return app.route.MessageAccount_Details.NavigateTo(i.viewModel.MessageAccount.NextMessageAccountId,{groupId:i.viewModel.GroupId})},ko.computed(function(){return i.viewModel.MessageAccount.NextMessageAccountId()!=null})),new Command_Block("Billing Entity",i.viewModel.MessageAccount.BillingEntityName,function(){return app.route.BillingEntity_MessageAccounts.NavigateTo(i.viewModel.MessageAccount.BillingEntityId,{groupId:i.viewModel.GroupId})}),new Command_Block("Edit","Rename message account",i.FormAction(function(){return Form.MessageAccountUpdate(i.viewModel.MessageAccount.MessageAccountId(),i.viewModel.MessageAccount.Name(),function(n){return i.viewModel.MessageAccount.Name(n)})}),i.HasCapabilityComputed(Capability.MessageAccount_Edit)),new SingleValue_Block("SMS Count",ko.computed(function(){return i.viewModel.MessageAccount.SmsCount()+"/"+i.viewModel.MessageAccount.PeriodSmsQuota()})),new SingleValue_Block("Email Count",ko.computed(function(){return i.viewModel.MessageAccount.EmailCount()+"/"+i.viewModel.MessageAccount.PeriodEmailQuota()})),new SingleValue_Block("Account Created",ko.computed(function(){return Format.DueDateFromCs(i.viewModel.MessageAccount.AccountStart())})),new SingleValue_Block("Period Start",ko.computed(function(){return Format.DueDateFromCs(i.viewModel.MessageAccount.PeriodStart())})),new SingleValue_Block("Period End",ko.computed(function(){return Format.DueDateFromCs(i.viewModel.MessageAccount.PeriodEnd())})),new Command_Block("Messages","View messages by quota period",function(){return app.route.MessageAccount_Periods.NavigateTo(i.viewModel.MessageAccount.MessageAccountId,{groupId:i.viewModel.GroupId})})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Account Plan"),new Command_Block("Plan",i.viewModel.MessageAccount.MessagePlanName,function(){return app.route.MessagePlan_Details.NavigateTo(i.viewModel.MessageAccount.MessagePlanId,{groupId:i.viewModel.GroupId})}),new Command_Block("Change","Change message plan",i.FormAction(function(){return Form.MessageAccountChangePlan(i.viewModel.MessageAccount.MessageAccountId(),i.viewModel.MessageAccount.MessagePlanId(),l)}),r(Capability.MessageAccount_Create)),new SingleValue_Block("Period",ko.computed(function(){return i.viewModel.MessageAccount.PeriodMonths()+" months"})),new SingleValue_Block("SMS Quota",i.viewModel.MessageAccount.PeriodSmsQuota),new SingleValue_Block("Notify",ko.computed(function(){return i.viewModel.MessageAccount.NotifyOnSmsExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return i.viewModel.MessageAccount.EnforceSmsQuota()?"Enforced":"Not enforced"})),new SingleValue_Block("Email Quota",i.viewModel.MessageAccount.PeriodEmailQuota),new SingleValue_Block("Notify",ko.computed(function(){return i.viewModel.MessageAccount.NotifyOnEmailExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return i.viewModel.MessageAccount.EnforceEmailQuota()?"Enforced":"Not enforced"}))])])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Assign a manager",i.FormAction(function(){return Form.MessageAccountAddManager(i.viewModel.MessageAccount.MessageAccountId(),c)}),r(Capability.MessageAccount_Edit))])])),u=ko.computed(function(){return!i.viewModel.MessageAccount.IsClosed()}),i.AddItem(o=new AjaxFilterTableViewModel({route:app.route.MessageAccount_ManagersTable.For(i.viewModel.MessageAccount.MessageAccountId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"Name",ascending:!0,size:10,enabled:u}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Manager","delete",function(n){return i.FormAction(function(){return Form.MessageAccountRemoveManager(i.viewModel.MessageAccount.MessageAccountId(),n.UserId,n.Name,c)})()},i.HasCapabilityComputed(Capability.MessageAccount_Edit))).AddTitle("Assigned Managers")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Assign a user",i.FormAction(function(){return Form.MessageAccountAddUser(i.viewModel.MessageAccount.MessageAccountId(),e)}),r(Capability.MessageAccount_ManageUser))]),Tile.CreateWithBlockSet([new Command_Block("Add Group","Assign group users",i.FormAction(function(){return Form.MessageAccountAddUserFromGroup(i.viewModel.MessageAccount.MessageAccountId(),e)}),r(Capability.MessageAccount_ManageUser))])])),i.AddItem(s=new AjaxFilterTableViewModel({route:app.route.MessageAccount_UsersTable.For(i.viewModel.MessageAccount.MessageAccountId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"Name",ascending:!0,size:10,enabled:u}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return i.FormAction(function(){return Form.MessageAccountRemoveUser(i.viewModel.MessageAccount.MessageAccountId(),n.UserId,n.Name,e)})()},i.HasCapabilityComputed(Capability.MessageAccount_ManageUser))).AddTitle("Assigned Users")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add","Assign a network",i.FormAction(function(){return Form.MessageAccountAddNetwork(i.viewModel.MessageAccount.MessageAccountId(),f)}),r(Capability.MessageAccount_ManageNetwork))]),Tile.CreateWithBlockSet([new Command_Block("Add Group","Assign group networks",i.FormAction(function(){return Form.MessageAccountAddNetworksFromGroup(i.viewModel.MessageAccount.MessageAccountId(),f)}),r(Capability.MessageAccount_ManageNetwork))])])),i.AddItem(h=new AjaxFilterTableViewModel({route:app.route.MessageAccount_NetworksTable.For(i.viewModel.MessageAccount.MessageAccountId),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"Name",ascending:!0,size:25,enabled:u}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove Network","delete",function(n){return i.FormAction(function(){return Form.MessageAccountRemoveNetwork(i.viewModel.MessageAccount.MessageAccountId(),n.NetworkId,n.Name,f)})()},i.HasCapabilityComputed(Capability.MessageAccount_ManageNetwork))).AddTitle("Assigned Networks")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.MessageAccountId=ko.observable(0),t.MessageAccountName=ko.observable(""),t.PeriodIndex=ko.observable(0),t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Period Messages",function(){return t.MessageAccountName()+" Periods"},app.route.MessageAccount_Periods.For(t.MessageAccountId,{periodIndex:t.PeriodIndex,groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.MessageAccount_PeriodMessages=t}(Model||(Model={}));app.router.View(app.route.MessageAccount_PeriodMessages,function(n){function t(t){var i=n.call(this,t,new Model.MessageAccount_PeriodMessages)||this,e,r=ko.observable(),u=ko.observable(),f=ko.observable(100),o=function(n){f(n);i.CloseFormDialog()},s=function(n,t){r(n);u(t);i.CloseFormDialog()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Filter Messages"),new Command_Block("Date Range",ko.computed(function(){return r()==null||u()==null?"All":Format.DateOnlyRange(moment(r()),moment(u()))}).extend({throttle:100}),i.FormAction(function(){return Form.MessageAccountDateRangeFilter(r(),u(),s)})),new Command_Block("Reset","Clear date range",function(){r(null);u(null);e.LoadData()},ko.computed(function(){return u()!=null||r()!=null})),new Command_Block("Count",ko.computed(function(){return""+f()}),i.FormAction(function(){return Form.MessageAccountResultLimitFilter(f(),o)}))])])),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.MessageAccount_PeriodMessagesTable.For(i.viewModel.MessageAccountId,{periodIndex:i.viewModel.PeriodIndex,limit:f,startUtc:r,endUtc:u}),click:function(n){return i.FormAction(function(){return Form.MessageAccountMessageDetails(n.RecipientName,n.TimeUtc,n.Succeeded,n.Completed,n.IsSms,n.Recipient,n.Message,function(){return i.CloseFormDialog()})})()},update:!0,sort:"TimeUtc",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.MessageAccountId=ko.observable(0),t.MessageAccountName=ko.observable(""),t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Account Periods",t.MessageAccountName,app.route.MessageAccount_Details.For(t.MessageAccountId,{groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.MessageAccount_Periods=t}(Model||(Model={}));app.router.View(app.route.MessageAccount_Periods,function(n){function t(t){var i=n.call(this,t,new Model.MessageAccount_Periods)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.MessageAccount_PeriodsTable.For(i.viewModel.MessageAccountId),click:function(n){return i.HasCapability(Capability.MessageAccount_ViewMessages)?app.route.MessageAccount_PeriodMessages.NavigateTo(i.viewModel.MessageAccountId,{periodIndex:n.PeriodIndex,groupId:i.viewModel.GroupId}):null},update:!0,sort:"PeriodDate",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(),InUse:ko.observable(!1)},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.MessagePlan.Name,function(){return t.GroupId()==null?"Groups":"Message Plans"},function(){return t.GroupId()==null?app.route.Group_Index.For():app.route.Group_MessagePlans.For(t.GroupId)})},t}return __extends(t,n),t}(n.Base_Model);n.MessagePlan_Details=t}(Model||(Model={}));app.router.View(app.route.MessagePlan_Details,function(n){function t(t){var i=n.call(this,t,new Model.MessagePlan_Details)||this,r=function(){return i.viewModel.GroupId()!=null?app.route.Group_MessagePlans.NavigateTo(i.viewModel.GroupId):app.route.Group_Index.NavigateTo()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("message-plan",new Header_Text(i.viewModel.MessagePlan.Name)),new SingleValue_Block("Period",ko.computed(function(){return i.viewModel.MessagePlan.Months()+" "+(i.viewModel.MessagePlan.Months()===1?"month":"months")})),new SingleValue_Block("SMS Provider",i.viewModel.MessagePlan.SmsProviderName),new SingleValue_Block("Email Provider",i.viewModel.MessagePlan.EmailProviderName),new SingleValue_Block("Creator",i.viewModel.MessagePlan.CreatedUserName),new SingleValue_Block("Created",ko.computed(function(){return Format.DateTime(moment(i.viewModel.MessagePlan.CreatedUtc()))})),new Command_Block("Edit","Edit message plan details",i.FormAction(function(){return Form.MessagePlanEdit({MessagePlanId:i.viewModel.MessagePlan.MessagePlanId(),Name:i.viewModel.MessagePlan.Name(),SmsProviderId:i.viewModel.MessagePlan.SmsProviderId(),EmailProviderId:i.viewModel.MessagePlan.EmailProviderId(),PeriodMonths:i.viewModel.MessagePlan.Months()},i.Update)}),ko.computed(function(){return!i.viewModel.MessagePlan.InUse()&&i.HasCapability(Capability.MessagePlan_Edit)})),new Command_Block("Delete","Delete message plan",i.FormAction(function(){return Form.MessagePlanDelete(i.viewModel.MessagePlan.MessagePlanId(),r)}),ko.computed(function(){return!i.viewModel.MessagePlan.InUse()&&i.HasCapability(Capability.MessagePlan_Delete)}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("SMS"),new SingleValue_Block("Quota",i.viewModel.MessagePlan.PeriodSmsQuota),new SingleValue_Block("Notify",ko.computed(function(){return i.viewModel.MessagePlan.NotifyOnSmsExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return i.viewModel.MessagePlan.EnforceSmsQuota()?"Enforced":"Not enforced"})),new Command_Block("Edit Quota","Edit SMS quota",i.FormAction(function(){return Form.MessagePlanEditSmsQuota({MessagePlanId:i.viewModel.MessagePlan.MessagePlanId(),PeriodSmsQuota:i.viewModel.MessagePlan.PeriodSmsQuota(),EnforceSmsQuota:i.viewModel.MessagePlan.EnforceSmsQuota(),NotifyOnSmsExceeded:i.viewModel.MessagePlan.NotifyOnSmsExceeded()},i.Update)}),ko.computed(function(){return!i.viewModel.MessagePlan.InUse()&&i.HasCapability(Capability.MessagePlan_Edit)}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Email"),new SingleValue_Block("Quota",ko.computed(function(){return i.viewModel.MessagePlan.PeriodEmailQuota()})),new SingleValue_Block("Notify",ko.computed(function(){return i.viewModel.MessagePlan.NotifyOnEmailExceeded()?"Notify when exceeded":"Do not notify"})),new SingleValue_Block("Enforce",ko.computed(function(){return i.viewModel.MessagePlan.EnforceEmailQuota()?"Enforced":"Not enforced"})),new Command_Block("Edit Quota","Edit email quota",i.FormAction(function(){return Form.MessagePlanEditEmailQuota({MessagePlanId:i.viewModel.MessagePlan.MessagePlanId(),PeriodEmailQuota:i.viewModel.MessagePlan.PeriodEmailQuota(),EnforceEmailQuota:i.viewModel.MessagePlan.EnforceEmailQuota(),NotifyOnEmailExceeded:i.viewModel.MessagePlan.NotifyOnEmailExceeded()},i.Update)}),ko.computed(function(){return!i.viewModel.MessagePlan.InUse()&&i.HasCapability(Capability.MessagePlan_Edit)}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.MessagePlan_AccountsForMessagePlanTable.For(i.viewModel.MessagePlan.MessagePlanId),click:function(n){return app.route.MessageAccount_Details.NavigateTo(n.MessageAccountId,{groupId:i.viewModel.GroupId})},update:!0,sort:"Name",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CanViewNetwork=ko.observable(!1),t.IsLive=ko.observable(!1),t.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)},t.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(),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(),Type:ko.observable("")},t.ModuleTile=Tile.CreateModuleTile(),t.Escalation={ModuleId:ko.observable(0),AlertAndStatus:ko.observable(0),EscalationListId:ko.observable(0),EscalationListName:ko.observable(""),Delay:ko.observable(0),Users:ko.observable(0)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Alert.Name,"Subscribers",app.route.Module_Subscribers.For(t.Module.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_AlertDetails=t}(Model||(Model={}));app.router.View(app.route.Module_AlertDetails,function(n){function t(t){var i=n.call(this,t,new Model.Module_AlertDetails)||this,u,f,r;return i.ExtendMappingOptions(Tile.CreateModuleTileMappingSingle(i,"ModuleTile")),r=function(){u.LoadData();f.LoadData()},i.AddItem(new HeaderPageItem(ko.computed(function(){return"Module Alert - "+i.viewModel.Alert.Name()}))),i.AddItem(Tile.CreatePageItem().addTileSet([i.viewModel.ModuleTile]).addTileSet([Tile.CreateWithBlockSet([new Header_Block("email",new Header_Text("Alert",null,i.viewModel.Alert.Name,"Alert Name")),new SingleValue_Block("Auto SMS",ko.computed(function(){return i.viewModel.Alert.AutoSms()?"Enabled":"Off"})),new Command_Block("Disable","Disable auto SMS",i.FormAction(function(){return Form.ModuleAlertConfigureAutoSms(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),!1,i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_ConfigureUser)&&i.viewModel.Alert.AutoSms()})),new Command_Block("Enable","Enable auto SMS",i.FormAction(function(){return Form.ModuleAlertConfigureAutoSms(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),!0,i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_ConfigureUser)&&!i.viewModel.Alert.AutoSms()})),new SingleValue_Block("Auto SMS User",ko.computed(function(){return i.viewModel.Module.AutoSmsUser()||"None"})),new Command_Block("Clear","Clear the auto SMS user",i.FormAction(function(){return Form.ModuleAlertClearAutoSmsUser(i.viewModel.Module.ModuleId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_ConfigureUser)&&i.viewModel.Module.AutoSmsUser()!=null})),new Command_Block("Add","Add users to alert",i.FormAction(function(){return Form.ModuleAlertAddUsers(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),r)}),i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))]),Tile.CreateWithBlockSet([new Header_Block("email",new Header_Text("Escalation List",null,ko.computed(function(){return i.viewModel.Escalation.EscalationListName()||"None"}),"Assigned Escalation List"),new Header_Actions(function(){return i.viewModel.Escalation!=null?app.route.EscalationList_Details.NavigateTo(i.viewModel.Escalation.EscalationListId):null})),new SingleValue_Block("Users",ko.computed(function(){return i.viewModel.Escalation!=null?i.viewModel.Escalation.Users():"0"}),ko.computed(function(){return i.viewModel.Escalation.EscalationListId()!==0})),new SingleValue_Block("Delay",ko.computed(function(){return(i.viewModel.Escalation!=null?i.viewModel.Escalation.Delay():"0")+" mins"}),ko.computed(function(){return i.viewModel.Escalation.EscalationListId()!==0})),new Command_Block("Change","Change the assigned list",i.FormAction(function(){return Form.ModuleAlertSetEscalationList(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),i.viewModel.Escalation.EscalationListId(),i.viewModel.Escalation.EscalationListName(),i.Update)}),i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ManageAlertSubscription])),new Command_Block("Remove","Remove the assigned list",i.FormAction(function(){return Form.ModuleAlertRemoveEscalationList(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),i.Update)}),ko.computed(function(){return i.viewModel.Escalation.EscalationListId()!==0&&i.HasCapability(Capability.Module_ConfigureUser)&&i.HasCapability(Capability.Module_ManageAlertSubscription)}))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Module_SubscribedUsersTable.For(i.viewModel.Module.ModuleId,{alertAndStatus:i.viewModel.Alert.AlertAndStatus}),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.ModuleAlertEditUser(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),n.UserId,n.Name,n.SendSms,n.SendEmail,r)})()},i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))).AddColumn(new CommandTableColumnViewModel("Remove User","delete",function(n){return i.FormAction(function(){return Form.ModuleAlertRemoveUser(i.viewModel.Module.ModuleId(),i.viewModel.Alert.AlertAndStatus(),n.UserId,n.Name,r)})()},i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription))).AddTitle("Alert User Subscribers")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Module_UserAlertHistoryTable.For(i.viewModel.Module.ModuleId,{alertAndStatus:i.viewModel.Alert.AlertAndStatus}),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return Format.SubscriptionChange(n.PrevSendSms,n.PrevSendEmail,n.NewSendSms,n.NewSendEmail)})).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!0,!0)).AddTitle("Subscription History")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Module_AlertEventsTable.For(i.viewModel.Module.ModuleId,{alertAndStatus:i.viewModel.Alert.AlertAndStatus}),click:function(n){return app.route.Module_AlertEventDetails.NavigateTo(i.viewModel.Module.ModuleId(),{moduleEventId:n.ModuleEventId})},update:!0,sort:"TimeUtc",ascending:!1,size:25}).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)")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Module_AlertEscalationListHistoryTable.For(i.viewModel.Module.ModuleId,{alertAndStatus:i.viewModel.Alert.AlertAndStatus}),click:function(n){return n.EscalationListId!=null?app.route.EscalationList_Details.NavigateTo(n.EscalationListId):null},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.AlertAndStatus=ko.observable(0),t.ModuleEventId=ko.observable(0),t.TimeUtc=ko.observable(),t.AcknowledgeUtc=ko.observable(),t.AcknowledgeUser=ko.observable(""),t.EscalationComplete=ko.observable(!1),t.Details=ko.observable(""),t.UserName=ko.observable(""),t.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)},t.Messages=ko.observableArray(),t.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(),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(),Type:ko.observable("")},t.ModuleTile=Tile.CreateModuleTile(),t.ModuleTileSnapshot=Tile.CreateModuleTile(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Event Details",function(){return t.Alert.Name()||t.Module.Name()},function(){return t.AlertAndStatus()!=null?app.route.Module_AlertDetails.For(t.Module.ModuleId,{alertAndStatus:t.AlertAndStatus}):app.route.Module_Details.For(t.Module.ModuleId)})},t}return __extends(t,n),t}(n.Base_Model);n.Module_AlertEventDetails=t}(Model||(Model={}));app.router.View(app.route.Module_AlertEventDetails,function(n){function t(t){var i=n.call(this,t,new Model.Module_AlertEventDetails)||this;return i.ExtendMappingOptions({arrayChildId:{"Messages[i]":"TimeUtc"},extend:{}}),i.ExtendMappingOptions(Tile.CreateModuleTileMappingSingle(i,"ModuleTile")),i.ExtendMappingOptions(Tile.CreateModuleTileMappingSingle(i,"ModuleTileSnapshot")),i.viewModel.ModuleTileSnapshot.blockSets()[0][0].footer="",i.viewModel.ModuleTileSnapshot.blockSets().splice(0,0,[new SmallHeader_Block("Alert State")]),i.viewModel.ModuleTileSnapshot.enabled=ko.computed(function(){return i.viewModel.AlertAndStatus()!=null}),i.viewModel.ModuleTile.blockSets().splice(0,0,[new SmallHeader_Block("Current State")]),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("warning",new Header_Text("Module Event",null,i.viewModel.Alert?i.viewModel.Alert.Name():"",i.viewModel.Details)),new SingleValue_Block("Escalation",ko.computed(function(){return i.viewModel.EscalationComplete()?"Complete":"In Progress"}),ko.computed(function(){return i.viewModel.AlertAndStatus()!=null})),new SingleValue_Block("Status",ko.computed(function(){return i.viewModel.AcknowledgeUtc()!=null?"Acknowledged at "+Format.DateTime(moment.utc(i.viewModel.AcknowledgeUtc()).local()):"Unacknowledged"}),ko.computed(function(){return i.viewModel.AlertAndStatus()!=null})),new SingleValue_Block("ACK User",i.viewModel.AcknowledgeUser,ko.computed(function(){return i.viewModel.AcknowledgeUser()!=null})),new SingleValue_Block("Time",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.TimeUtc()).local())})),new SingleValue_Block("Initiator",i.viewModel.UserName,ko.computed(function(){return i.viewModel.UserName()!=null})),new Command_Block("Alert","View alert details",function(){return app.route.Module_AlertDetails.NavigateTo(i.viewModel.Module.ModuleId,{alertAndStatus:i.viewModel.AlertAndStatus})},ko.computed(function(){return i.viewModel.Alert!=null&&i.viewModel.AlertAndStatus()!=null}))])]).addTileSet([i.viewModel.ModuleTileSnapshot]).addTileSet([i.viewModel.ModuleTile])),i.AddItem(new HeaderPageItem("Sent Messages")),i.AddItem(new TableViewModel(i.viewModel.Messages,null).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))),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}();__assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CalibrationInfo={ModuleId:ko.observable(0),ModuleName:ko.observable(""),ModuleLastUpdateUtc:ko.observable(),NetworkId:ko.observable(),NetworkName:ko.observable(""),Type:ko.observable(""),StartTimeUtc:ko.observable(),IsCalibrated:ko.observable(!1),LockedUserId:ko.observable(0),LockedUser:ko.observable(""),LastCalibrationUtc:ko.observable(),Slope:ko.observable(0),Intercept:ko.observable(0),TemperatureOffset:ko.observable(0)},t.Collections=ko.observableArray(),t.NewSlope=ko.observable(),t.NewIntercept=ko.observable(),t.NewTemperatureOffset=ko.observable(),t.AllMeanVolumeDelta=ko.observable(),t.RecentMeanVolumeDelta=ko.observable(),t.OldMeanVolumeDelta=ko.observable(),t.NewMeanVolumeDelta=ko.observable(),t.AllMeanTemperatureDelta=ko.observable(),t.RecentMeanTemperatureDelta=ko.observable(),t.OldMeanTemperatureDelta=ko.observable(),t.NewMeanTemperatureDelta=ko.observable(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Calibration",function(){return t.CalibrationInfo.ModuleName()},app.route.Module_Details.For(t.CalibrationInfo.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_CalibrationDetails=t}(Model||(Model={}));app.router.View(app.route.Module_CalibrationDetails,function(n){function t(t){var i=n.call(this,t,new Model.Module_CalibrationDetails)||this,u,e=function(n){return u.selectedKeys().filter(function(t){return t.TimeUtc===n.TimeUtc()}).length>0};i.ExtendMappingOptions({arrayChildId:{"Collections[i]":"TimeUtc"},extend:{"Collections[i]":function(n){return __assign(__assign({},n),{DeviceLevelDelta:ko.computed(function(){return Math.abs(n.DeviceLevelBefore()-n.DeviceLevelAfter())}),Matches:ko.computed(function(){return n.DeviceVolumeBefore()!=null&&n.ProcessorVolume()!=null}),IsSelected:ko.computed(function(){return e(n)}),OnSelectToggle:function(){e(n)?u.selectedKeys.remove(function(t){return t.TimeUtc===n.TimeUtc()}):u.selectedKeys.push({TimeUtc:n.TimeUtc()})}})}}});var f,r=new HtmlChartPageItem(i.viewModel.Collections,{oldSlope:i.viewModel.CalibrationInfo.Slope,oldIntercept:i.viewModel.CalibrationInfo.Intercept,newSlope:i.viewModel.NewSlope,newIntercept:i.viewModel.NewIntercept}),o=function(){u.UnselectAll();i.Update()},s=function(){return i.Update()},h=function(n){r.highlighted(n)};i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("module",new Header_Text(i.viewModel.CalibrationInfo.ModuleName,"Module",i.viewModel.CalibrationInfo.Type,"Module type",ko.computed(function(){return"Last update: "+Format.LastUpdateWithSeconds(moment.utc(i.viewModel.CalibrationInfo.ModuleLastUpdateUtc()))})),new Header_Actions(function(){return app.route.Module_Details.NavigateTo(i.viewModel.CalibrationInfo.ModuleId)})),new Command_Block("Network",i.viewModel.CalibrationInfo.NetworkName,function(){return app.route.Network_Details.NavigateTo(i.viewModel.CalibrationInfo.NetworkId)}),new Command_Block("Chart","View dynamic chart for module",function(){return app.route.Chart_Module.NavigateTo(null,{moduleId:i.viewModel.CalibrationInfo.ModuleId,showTapes:!1})}),new Command_Block("Enlarge","Enlarge calibration chart",function(){return r.large(!0)},ko.computed(function(){return!r.large()})),new Command_Block("Shrink","Shrink calibration chart",function(){return r.large(!1)},r.large)]),Tile.CreateWithBlockSet([new Header_Block("clock",new Header_Text(ko.computed(function(){return(i.viewModel.AllMeanVolumeDelta()!=null?i.viewModel.AllMeanVolumeDelta():"?")+" L / "+(i.viewModel.AllMeanTemperatureDelta()!=null?i.viewModel.AllMeanTemperatureDelta():"?")+" °C"}),"All Time",ko.computed(function(){return(i.viewModel.RecentMeanVolumeDelta()!=null?i.viewModel.RecentMeanVolumeDelta():"?")+" L / "+(i.viewModel.RecentMeanTemperatureDelta()!=null?i.viewModel.RecentMeanTemperatureDelta():"?")+" °C"}),"Recent")),]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text(ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()?"Current Calibration":"Uncalibrated"}),"",ko.computed(function(){return Format.DateTime(moment(i.viewModel.CalibrationInfo.StartTimeUtc()))}),"Calibration start date")),new SingleValue_Block("Slope",ko.computed(function(){return Format.ToFixed(i.viewModel.CalibrationInfo.Slope(),3)+" L/mm"}),ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()})),new SingleValue_Block("Intercept",ko.computed(function(){return Format.ToFixed(i.viewModel.CalibrationInfo.Intercept(),0)+" L"}),ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()})),new SingleValue_Block("Delta",ko.computed(function(){return i.viewModel.OldMeanVolumeDelta()+" L"}),ko.computed(function(){return i.viewModel.OldMeanVolumeDelta()!=null})),new SingleValue_Block("Temp Offset",ko.computed(function(){return Format.ToFixed(i.viewModel.CalibrationInfo.TemperatureOffset(),1)+" °C"}),ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()})),new SingleValue_Block("Temp Delta",ko.computed(function(){return i.viewModel.OldMeanTemperatureDelta()+" °C"}),ko.computed(function(){return i.viewModel.OldMeanTemperatureDelta()!=null})),new SingleValue_Block("Locked",ko.computed(function(){return i.viewModel.CalibrationInfo.LockedUser()}),ko.computed(function(){return i.viewModel.CalibrationInfo.LockedUserId()!=null})),new Command_Block("Lock","Lock current calibration",i.FormAction(function(){return Form.ModuleLockCalibration(i.viewModel.CalibrationInfo.ModuleId(),i.Update)}),ko.computed(function(){return i.viewModel.CalibrationInfo.LockedUserId()==null&&i.viewModel.CalibrationInfo.IsCalibrated()&&i.HasCapability(Capability.Module_MilkCalibrationEdit)})),new Command_Block("Unlock","Unlock current calibration",i.FormAction(function(){return Form.ModuleUnlockCalibration(i.viewModel.CalibrationInfo.ModuleId(),i.Update)}),ko.computed(function(){return i.viewModel.CalibrationInfo.LockedUserId()!=null&&i.viewModel.CalibrationInfo.IsCalibrated()&&i.HasCapability(Capability.Module_MilkCalibrationEdit)})),new Command_Block("Clear","Current calculated calibration",i.FormAction(function(){return Form.ModuleClearCalibration(i.viewModel.CalibrationInfo.ModuleId(),i.Update)}),ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()&&i.viewModel.CalibrationInfo.LockedUserId()==null&&i.HasCapability(Capability.Module_MilkCalibrationEdit)})),new Command_Block("Start","Set calibration start date",i.FormAction(function(){return Form.ModuleClearCalibration(i.viewModel.CalibrationInfo.ModuleId(),i.Update)}),ko.computed(function(){return!i.viewModel.CalibrationInfo.IsCalibrated()&&i.viewModel.CalibrationInfo.LockedUserId()==null&&i.HasCapability(Capability.Module_MilkCalibrationEdit)})),new Command_Block("Show","Show current calibration",function(){return r.showOldCalibration(!0)},ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()&&!r.showOldCalibration()})),new Command_Block("Hide","Hide current calibration",function(){return r.showOldCalibration(!1)},ko.computed(function(){return i.viewModel.CalibrationInfo.IsCalibrated()&&r.showOldCalibration()}))]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("New Calibration","",ko.computed(function(){return i.viewModel.Collections().reduce(function(n,t){return t.IncludeInCalibration()?n+1:n},0)+" of "+i.viewModel.Collections().length}),"Included collections")),new SingleValue_Block("Slope",ko.computed(function(){return Format.ToFixed(i.viewModel.NewSlope(),3)+" L/mm"})),new SingleValue_Block("Intercept",ko.computed(function(){return Format.ToFixed(i.viewModel.NewIntercept(),0)+" L"})),new SingleValue_Block("Delta",ko.computed(function(){return i.viewModel.NewMeanVolumeDelta()+" L"}),ko.computed(function(){return i.viewModel.NewMeanVolumeDelta()!=null})),new SingleValue_Block("Temp Offset",ko.computed(function(){return Format.ToFixed(i.viewModel.NewTemperatureOffset(),1)+" °C"})),new SingleValue_Block("Temp Delta",ko.computed(function(){return i.viewModel.NewMeanTemperatureDelta()+" °C"}),ko.computed(function(){return i.viewModel.NewMeanTemperatureDelta()!=null})),new Command_Block("Apply","Updated config to the module",i.FormAction(function(){return Form.ModuleApplyCalibration(i.viewModel.CalibrationInfo.ModuleId(),i.viewModel.NewSlope(),i.viewModel.NewIntercept(),i.viewModel.NewTemperatureOffset(),i.Update)}),ko.computed(function(){return i.viewModel.CalibrationInfo.LockedUserId()==null&&i.HasCapability(Capability.Module_MilkCalibrationEdit)})),new Command_Block("Show","Show new calibration",function(){return r.showNewCalibration(!0)},ko.computed(function(){return!r.showNewCalibration()})),new Command_Block("Hide","Hide new calibration",function(){return r.showNewCalibration(!1)},ko.computed(function(){return r.showNewCalibration()}))],null,ko.computed(function(){return i.viewModel.NewSlope()!=null&&i.viewModel.NewIntercept()!=null})),Tile.CreateWithBlockSet([new Command_Block("Select All","Select all filtered items",function(){return u.SelectAll(f.filteredData())}),new Command_Block("Invert","Invert selected items",function(){return u.Invert(f.filteredData())}),new Command_Block("Clear","Deselect all items",function(){return u.UnselectAll()}),new Command_Block("Outliers","Confirm selected items outliers",function(){return u.selectedKeys().length>0?i.FormAction(function(){return Form.ModuleSetCollectionOutlier(i.viewModel.CalibrationInfo.ModuleId(),!0,u.selectedKeys().map(function(n){return n.TimeUtc}),o)})():i.SetMessage("No items selected")},i.HasCapabilityComputed(Capability.Module_MilkCalibrationEdit)),new Command_Block("Not Outliers","Confirm selected items not outliers",function(){return u.selectedKeys().length>0?i.FormAction(function(){return Form.ModuleSetCollectionOutlier(i.viewModel.CalibrationInfo.ModuleId(),!1,u.selectedKeys().map(function(n){return n.TimeUtc}),o)})():i.SetMessage("No items selected")},i.HasCapabilityComputed(Capability.Module_MilkCalibrationEdit))])]));var c=function(n){return n.DeviceVolumeBefore()==null?"":"    "+Format.PadLeft(n.DeviceVolumeBefore(),6)+" L   "+Format.PadLeft(n.DeviceTemperature().toFixed(1),5)+" °C   "+Format.PadLeft(n.DeviceLevelBefore(),6)+" mm    -> "+Format.PadLeft(n.DeviceVolumeBefore()-n.DeviceVolumeAfter(),6)+" L    "},l=function(n){return n.ProcessorVolume()==null?"":"    "+Format.PadLeft(n.ProcessorVolume(),6)+" L   "+Format.PadLeft(n.ProcessorTemperature().toFixed(1),5)+" °C    "},a=function(n){return n.ProcessorVolume()==null?"Device":n.DeviceVolumeBefore()==null?"Processor":"Combined"},v=function(n){return(n.IsOutlier()?"Outlier":n.IsNotOutlier()?"NotOutlier":n.IncludeInCalibration()?"Included":"Excluded")+" "+(n.DeviceLevelAfter()?"Partial":"")+" "+(n.DeviceMilkingInProgress()?"Milking":"")};return i.AddItem(r),i.AddItem(f=new AjaxFilterTableViewModel({route:null,click:function(n){return h(n)},update:!1,sort:"TimeUtc",ascending:!1,size:25,hideRefresh:!0,data:i.viewModel.Collections}).AddColumn(u=new ToggleTableColumnViewModel("Select Collections","TimeUtc","checked","unchecked")).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Device","Device",!1,!0,c,!0,!0)).AddColumn(new FilterTableColumnViewModel("Processor","Processor",!1,!0,l,!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("VolumeDelta","Δ L",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("TemperatureDelta","Δ °C",!1,!0,function(n){return n.TemperatureDelta()==null?null:n.TemperatureDelta().toFixed(1)})).AddColumn(new FilterTableColumnViewModel("Source","Source",!1,!0,a)).AddColumn(new FilterTableColumnViewModel("Status","Status",!1,!0,v)).AddColumn(new CommandWithDynamicIconTableColumnViewModel("Clear outlier status",function(n){return ko.computed(function(){return n.IsOutlier()||n.IsNotOutlier()?"delete":""})},function(){return"Clear outlier status"},function(n){return n.IsOutlier()||n.IsNotOutlier()?i.FormAction(function(){return Form.ModuleClearOutlierStatus(i.viewModel.CalibrationInfo.ModuleId(),n.TimeUtc(),s)})():null})).AddTitle("Collections")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Module={NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),Name:ko.observable(""),ConfigDirty:ko.observable(!1),Type:ko.observable("")},t.ModuleConfigHistoryId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Configuration History",t.Module.Name,app.route.Module_Details.For(t.Module.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_ConfigHistory=t}(Model||(Model={}));app.router.View(app.route.Module_ConfigHistory,function(n){function t(t){var i=n.call(this,t,new Model.Module_ConfigHistory)||this,r,u;return i.OnViewModelReady=function(){var n=ko.observable(i.viewModel.ModuleConfigHistoryId()),t=function(t){n(t);u.LoadData()};i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Module_ConfigHistoryTable.For(i.viewModel.Module.ModuleId),click:function(n){return t(n.ModuleConfigHistoryId)},update:!0,sort:"TimeUtc",ascending:!1,size:25}).AddColumn(new IconTableColumnViewModel("selectedRow",function(){return""},!0,!1,function(t){return ko.computed(function(){return t.ModuleConfigHistoryId===n()?"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(n.ModuleConfigHistoryId);Form.ViewPostRequest(i,{route:app.route.Module_GetModuleConfigHistoryConfigItems.For(i.viewModel.Module.ModuleId,{moduleConfigHistoryId:n.ModuleConfigHistoryId}),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}i.FormAction(function(){return Form.ModuleConfigure(i.viewModel.Module.ModuleId(),n,app.route.Module_Configure.For(i.viewModel.Module.ModuleId),function(){return r.LoadData()})})()}})})).AddTitle("Configuration History Items"));i.AddItem(u=new AjaxFilterTableViewModel({route:ko.computed(function(){return app.route.Module_ConfigHistoryValuesTable.For(i.viewModel.Module.ModuleId,{moduleConfigHistoryId:n})}),click:null,update:!0,sort:"Index",ascending:!0,size:100,enabled:n}).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"));r.LoadData();n()!=null&&u.LoadData()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ModuleId=ko.observable(0),t.ModuleName=ko.observable(""),t.ModuleType=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Config Templates",t.ModuleName,app.route.Module_Details.For(t.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_ConfigTemplates=t}(Model||(Model={}));app.router.View(app.route.Module_ConfigTemplates,function(n){function t(t){var i=n.call(this,t,new Model.Module_ConfigTemplates)||this,r,u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Create","Create config template for module",i.FormAction(function(){return Form.ModuleCreateConfigTemplate(i,i.viewModel.ModuleId(),i.viewModel.ModuleType(),u)}),i.HasCapabilityComputed(Capability.ModuleConfigTemplate_Create))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Module_ModuleConfigTemplatesTable.For(i.viewModel.ModuleId),click:function(n){Form.ViewPostRequest(i,{route:app.route.ModuleConfigTemplate_GetModuleConfigTemplateConfigItems.For(n.ModuleConfigTemplateId),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}i.FormAction(function(){return Form.ModuleViewConfig(n)})()}})},update:!0,sort:"TemplateName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("TemplateName","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("TemplateDescription","Description",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedByUser","Created By",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new CommandTableColumnViewModel("Apply Template","command",function(n){Form.ViewPostRequest(i,{route:app.route.ModuleConfigTemplate_GetModuleConfigTemplateConfigItems.For(n.ModuleConfigTemplateId),onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);return}i.FormAction(function(){return Form.ModuleConfigure(i.viewModel.ModuleId(),n,app.route.Module_Configure.For(i.viewModel.ModuleId),u)})()}})})).AddTitle("Config Templates")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}();__assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.SupportsLocation=ko.observable(!1),t.SupportsRfidTags=ko.observable(!1),t.CanViewNetwork=ko.observable(!1),t.ConversionPercent=ko.observable(0),t.LocationFirstUtc=ko.observable(),t.LocationLastUtc=ko.observable(),t.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(),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(),SuppressionExpiresIn:ko.observable(0),Type:ko.observable(""),IsVirtualModule:ko.observable(!1)},t.ModuleTile=Tile.CreateModuleTile(),t.AllProperties=ko.observableArray(),t.DailyTotalProperties=ko.observableArray(),t.NumberProperties=ko.observableArray(),t.Attributes=ko.observableArray(),t.ConfigItems=ko.observableArray(),t.QuickToggleItems=ko.observableArray(),t.CumulativeMeters=ko.observableArray(),t.DashboardGroups=ko.observableArray(),t.DataStreams=ko.observableArray(),t.Exports=ko.observableArray(),t.RfidTagGroups=ko.observableArray(),t.ModuleTasks=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Module.Name,t.Module.NodeName,app.route.Network_Node.For(t.Module.NetworkId,{nodeAddress:t.Module.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Module_Details=t}(Model||(Model={}));app.router.View(app.route.Module_Details,function(n){function t(t){var i=n.call(this,t,new Model.Module_Details)||this,v,s,p,w,b,k,d,g,nt;i.ExtendMappingOptions({arrayChildId:{"ModuleTasks[i]":"Id","Attributes[i]":"Key","Exports[i]":"Identifier","CumulativeMeters[i]":"CumulativeMeterId","TotalAlarms[i]":"CumulativeMeterTotalAlarmId","TimeAlarms[i]":"CumulativeMeterTimeAlarmId","DashboardGroups[i]":"DashboardGroupId","DataStreams[i]":"DataStreamId","RfidTagGroups[i]":"GroupId","QuickToggleItems[i]":"Name"},extend:{"Attributes[i]":function(n){return __assign(__assign({},n),new Command_Block(n.Key,n.Value,function(){return i.HasCapability(Capability.Module_UpdateAttribute)?i.FormAction(function(){return Form.ModuleEditAttribute(i.viewModel.Module.ModuleId(),n.Key(),n.Value(),function(t){return n.Value(t)})})():null}))},"Exports[i]":function(n){return new ExportValue_Block(n.Trend,n.Target,n.Identifier,n.Scale,ko.computed(function(){return Format.LastUpdate(moment.utc(n.LastExportUtc()))}),ko.computed(function(){return Format.LastUpdate(moment.utc(n.StartExportUtc()))}),n.Enabled,function(){return app.route.Module_ModuleExportTarget.NavigateTo(n.ModuleId,{moduleExportTargetId:n.ModuleExportTargetId})})},"CumulativeMeters[i]":function(n){Tile.MakeTile(n);n.addBlockSet([new Header_Block(n.Icon,new Header_Text(n.Name,null,n.FormattedTotal,"Total",ko.computed(function(){return"Since "+Format.DateTime(moment(n.StartUtc()))})),new Header_Actions(function(){return app.route.CumulativeMeter_Details.NavigateTo(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}),function(){return app.route.CumulativeMeter_Details.NavigateTo(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,function(){return app.route.CumulativeMeter_Details.NavigateTo(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,i.FormAction(function(){return Form.ModuleRemoveFromDashboardGroup(i.viewModel.Module.ModuleId(),n.DashboardGroupId(),n.Name(),i.Update)}))},"DataStreams[i]":function(n){return new DataStream_Block(n.Trend,n.Units,n.DataStreamId,n.Scale,function(){return app.route.DataStream_Details.NavigateTo(n.DataStreamId)})},"QuickToggleItems[i]":function(n){return Tile.MakeTile(n,n.State.TileState).addBlockSet([new SmallHeader_Block(n.State.Description),new Command_Block(n.State.Command,n.State.CommandDescription,i.FormAction(function(){return Form.ModuleQuickToggle(i.viewModel.Module.ModuleId(),n.Name(),!n.Value(),n.State.CommandDescription(),function(){return i.Update()})})),])}}});i.ExtendMappingOptions(Tile.CreateModuleTileMappingSingle(i,"ModuleTile"));var l=6e5,y=1e4,r=ko.observable(0),o=ko.computed(function(){return r()>0}),f=ko.observable(null),e=ko.observable(null),h=ko.observable(100),c=function(){return i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ConfigureSystem,Capability.Module_ConfigureInstaller])()},tt=function(){clearInterval(i.queryModuleStateIntervalHandle);r(l);var n=function(){if(!o()){clearInterval(i.queryModuleStateIntervalHandle);return}r(r()-y);Form.ViewPostRequest(i,{route:app.route.Module_QueryModuleState.For(i.viewModel.Module.ModuleId,{networkId:i.viewModel.Module.NetworkId,nodeAddress:i.viewModel.Module.NodeAddress,moduleIndex:i.viewModel.Module.ModuleIndex}),data:{},onSuccess:function(n){if(n.Success===!1){i.SetMessage(n.Message);r(0);return}KoMapper(i.viewModel.ModuleTile,n,i.GetMappingOptions(),["ModuleTile"])}})};i.queryModuleStateIntervalHandle=setInterval(n,y);n()},a=ko.computed(function(){return i.viewModel.ModuleTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()||!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})}),u=ko.observable(!1);return i.OnViewModelReady=function(){return u(!a())},v=new DashboardHeaderPageItem(0,ko.computed(function(){return"Module "+(a()?"":" - Required tasks outstanding")}),ko.computed(function(){return a()?TileState.Idle:TileState.Faulted}),function(){return u(!u())}),v.addButton(new DashboardActionButton(0,ko.computed(function(){return u()?"collapse":"expand"}),ko.computed(function(){return u()?"Hide":"Show"}),function(){return u(!u())},!0)),i.AddItem(v),i.AddItem(new AjaxFilterTableViewModel({route:null,click:null,update:!1,sort:"SortOrder",ascending:!0,size:25,enabled:u,hideRefresh:!0,data:i.viewModel.ModuleTasks}).AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return Task.Icon(n.SourceType())},function(n){return Task.Source(n.SourceType())},function(n){return Task.Route(n.SourceType(),n.Parameters)})).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 Task.Tasks[n.Description()].GetDescription(n.IsCompleted(),n.Parameters)})).AddColumn(new TaskActionsTextTableColumnViewModel("Actions","Actions",i,function(){return function(){return i.Update()}},i.viewModel.Capabilities,function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks")),p=function(n,t){i.viewModel.ModuleTile.Name(n);i.viewModel.Module.Name(n);i.viewModel.Module.ShortName(t);s.LoadData()},w=function(n){return app.route.Module_Details.NavigateTo(n)},i.AddItem(Tile.CreatePageItem().addTileSet([i.viewModel.ModuleTile]).addTileSet(i.viewModel.QuickToggleItems).addTileSet([Tile.CreateWithBlockSet([new Header_Block("config",new Header_Text("Configuration",null,ko.computed(function(){return i.viewModel.Module.ConfigDirty()?"Update Pending":"Up to Date"}),ko.computed(function(){return i.viewModel.Module.ConfigDirty()?"Module config update in progress":"Module config is up to date"}))),new SingleValue_Block("Status",ko.computed(function(){return i.viewModel.Module.IsEnabled()?"Enabled":"Disabled"})),new SingleValue_Block("SMS",i.viewModel.Module.ShortName),new SingleValue_Block("Auto SMS",ko.computed(function(){return i.viewModel.Module.AutoSmsUser()||"None"})),new Command_Block("Clear","Clear the auto SMS user",i.FormAction(function(){return Form.ModuleClearAutoSmsUser(i.viewModel.Module.ModuleId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_ConfigureUser)&&i.viewModel.Module.AutoSmsUser()!=null})),new Command_Block("View","View the configuration",i.FormAction(function(){return Form.ModuleViewConfig(i.viewModel.ConfigItems())}),ko.computed(function(){return i.viewModel.ConfigItems().length>0})),new Command_Block("Update","Force a configuration update",i.FormAction(function(){return Form.ModuleUpdateConfig(i.viewModel.Module.ModuleId(),i.Update)}),ko.computed(function(){return c()&&i.viewModel.ConfigItems().length>0})),new Command_Block("Edit","Edit the configuration",i.FormAction(function(){return Form.ModuleConfigure(i.viewModel.Module.ModuleId(),i.viewModel.ConfigItems(),app.route.Module_Configure.For(i.viewModel.Module.ModuleId),function(){return setTimeout(i.Update,5e3)})}),ko.computed(function(){return c()&&i.viewModel.ConfigItems().length>0})),new Command_Block("Template","View config templates",function(){return app.route.Module_ConfigTemplates.NavigateTo(i.viewModel.Module.ModuleId)},ko.computed(function(){return c()&&i.viewModel.ConfigItems().length>0})),new Command_Block("History","View configuration history",function(){return app.route.Module_ConfigHistory.NavigateTo(i.viewModel.Module.ModuleId)},ko.computed(function(){return c()&&i.viewModel.ConfigItems().length>0})),new Command_Block("Calibration","View calibration",function(){return app.route.Module_CalibrationDetails.NavigateTo(i.viewModel.Module.ModuleId)},ko.computed(function(){return i.HasCapability(Capability.Module_MilkCalibrationView)&&i.viewModel.Module.Type()===ModuleTypes.HaloFarmVat})),new Command_Block("Map","View the map for the module",function(){return app.route.Module_Map.NavigateTo(i.viewModel.Module.ModuleId)},i.HasCapabilityComputed(Capability.Network_ViewLocation)),new Command_Block("Rename","Rename the module",i.FormAction(function(){return Form.ModuleRename(i.viewModel.Module.ModuleId(),i.viewModel.ModuleTile.Name(),i.viewModel.ModuleTile.ShortName(),p)}),i.HasCapabilityComputed(Capability.Module_ConfigureUser)),new Command_Block("Delete","Delete the module",i.FormAction(function(){return Form.ModuleDelete(i.viewModel.Module.ModuleId(),function(){return app.route.Network_Node.NavigateTo(i.viewModel.Module.NetworkId,{nodeAddress:i.viewModel.Module.NodeAddress})})}),i.HasCapabilityComputed(Capability.Module_Delete))]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Type and Tools",ko.computed(function(){return i.viewModel.Module.IsVirtualModule()?"Virtual Module":""}),i.viewModel.Module.ModuleIndex,"Module Index")),new SingleValue_Block("Type Change",ko.computed(function(){return i.viewModel.ConversionPercent()+"% Complete"}),ko.computed(function(){return i.viewModel.ConversionPercent()!=null}),null,"state-faulted"),new Command_Block("Type",i.viewModel.Module.Type,function(){return CopyToClipboard(i.viewModel.Module.Type)},i.HasCapabilityComputed(Capability.Module_SetType),ko.computed(function(){return i.viewModel.Module.Type()+" (Click to copy to clipboard)"})),new SingleValue_Block("Icon",i.viewModel.Module.Icon,i.HasCapabilityComputed(Capability.Module_SetIcon)),new Command_Block("Move","Move this module to a new node",i.FormAction(function(){return Form.ModuleMove(i.viewModel.Module.ModuleId(),i.Update)}),i.HasCapabilityComputed(Capability.Module_Move)),new Command_Block("Set Index","Set the index of this module",i.FormAction(function(){return Form.ModuleSetIndex(i.viewModel.Module.ModuleId(),i.viewModel.Module.ModuleIndex(),i.Update)}),i.HasCapabilityComputed(Capability.Module_SetIndex)),new Command_Block("Set Type","Set the type of this module",i.FormAction(function(){return Form.ModuleSetType(i.viewModel.Module.ModuleId(),i.viewModel.Module.Type(),w)}),i.HasCapabilityComputed(Capability.Module_SetType)),new Command_Block("Set Icon","Set the icon for this module",i.FormAction(function(){return Form.ModuleSetIcon(i.viewModel.Module.ModuleId(),i.viewModel.Module.Icon(),i.Update)}),i.HasCapabilityComputed(Capability.Module_SetIcon)),new Command_Block("Alerts","Manage alert subscriptions",function(){return app.route.Module_Subscribers.NavigateTo(i.viewModel.Module.ModuleId)}),new Command_Block("Groups","Groups containing this module",function(){return app.route.Module_ContainingGroups.NavigateTo(i.viewModel.Module.ModuleId)}),new Command_Block("Suppress","Suppress alerts from this module",i.FormAction(function(){return Form.ModuleSuppressAlerts(i.viewModel.Module.ModuleId(),i.Update)}),i.HasCapabilityComputed(Capability.Module_SuppressAlerts)),new Command_Block("Clear","Clear alert suppression",i.FormAction(function(){return Form.ModuleClearSuppressedAlerts(i.viewModel.Module.ModuleId(),i.viewModel.Module.Name(),i.Update)}),ko.computed(function(){return i.viewModel.Module.SuppressAlertsUtc()!=null&&i.HasCapability(Capability.Module_SuppressAlerts)})),new SingleValue_Block("Suppressed Until",ko.computed(function(){return i.viewModel.Module.SuppressAlertsUtc()==null?"None Set":Format.DateTime(moment.utc(i.viewModel.Module.SuppressAlertsUtc()))}),ko.computed(function(){return i.viewModel.Module.SuppressAlertsUtc()!=null})),new SingleValue_Block("Expires",ko.computed(function(){return Format.OverdueBy(moment.duration(i.viewModel.Module.SuppressionExpiresIn(),"milliseconds"))}),ko.computed(function(){return i.viewModel.Module.SuppressAlertsUtc()!=null}),ko.computed(function(){return i.viewModel.Module.SuppressAlertsUtc()!=null})),new Command_Block("Live Poll","Start live polling",tt,ko.computed(function(){return!o()&&i.viewModel.Module.IsLinkUp()&&i.HasCapability(Capability.Module_QueryModuleState)})),new Command_Block("Stop Poll","Stop live polling",function(){return r(0)},ko.computed(function(){return o()&&i.HasCapability(Capability.Module_QueryModuleState)})),new Command_Block("Reset Timer","Reset live poll timer",function(){return r(l)},ko.computed(function(){return o()&&r()<l/2&&i.HasCapability(Capability.Module_QueryModuleState)})),new SingleValue_Block("Live Poll Time",ko.computed(function(){return"Poll timeout "+moment.duration(r()).humanize()}),ko.computed(function(){return o()&&i.HasCapability(Capability.Module_QueryModuleState)})),new Command_Block("Tags","View module tags",function(){return app.route.Module_Tags.NavigateTo(i.viewModel.Module.ModuleId)},i.HasCapabilityComputed(Capability.Tag_View)),new Command_Block("Virtual","Set as not virtual",i.FormAction(function(){return Form.ModuleSetVirtualStatus(i.viewModel.Module.ModuleId(),i.viewModel.Module.IsVirtualModule(),i.Update)}),ko.computed(function(){return i.viewModel.Module.IsVirtualModule()&&i.HasCapability(Capability.Module_ManageVirtualStatus)})),new Command_Block("Virtual","Set as virtual module",i.FormAction(function(){return Form.ModuleSetVirtualStatus(i.viewModel.Module.ModuleId(),i.viewModel.Module.IsVirtualModule(),i.Update)}),ko.computed(function(){return!i.viewModel.Module.IsVirtualModule()&&i.HasCapability(Capability.Module_ManageVirtualStatus)})),]),Tile.CreateWithBlockSet([new Header_Block("attributes",new Header_Text("Attributes",null,ko.computed(function(){return i.viewModel.Attributes().length}),"Attributes attached to module"))]).addBlockSet(i.viewModel.Attributes).addBlockSet([new Command_Block("Add","Add an attribute",i.FormAction(function(){return Form.ModuleAddAttribute(i.viewModel.Module.ModuleId(),i.Update)}),i.HasCapabilityComputed(Capability.Module_CreateAttribute)),new Command_Block("Remove","Remove one or more attributes",i.FormAction(function(){return Form.ModuleRemoveAttributes(i.viewModel.Module.ModuleId(),i.viewModel.Attributes(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_DeleteAttribute)&&i.viewModel.Attributes().length>0}))]),Tile.CreateWithBlockSet([new Header_Block("export",new Header_Text("Exports",null,ko.computed(function(){return i.viewModel.Exports().length===0?"No Exports":i.viewModel.Exports().length===1?"1 export":i.viewModel.Exports().length+" exports"}),"Exports for this module"))]).addBlockSet(i.viewModel.Exports).addBlockSet([new Command_Block("Create","Create a new export",i.FormAction(function(){return Form.ModuleCreateExport(i.viewModel.Module.ModuleId(),i.Update)}),i.HasCapabilityComputed(Capability.Module_ManageExports))]),Tile.CreateWithBlockSet([new Header_Block("data-stream",new Header_Text("Data Streams",null,ko.computed(function(){return i.viewModel.DataStreams().length===0?"No Data Streams":i.viewModel.DataStreams().length===1?"1 data stream":i.viewModel.DataStreams().length+" data streams"}),"Data streams for this module"))]).addBlockSet(i.viewModel.DataStreams).addBlockSet([new Command_Block("Create","Create a new data stream",i.FormAction(function(){return Form.ModuleCreateDataStream(i.viewModel.Module.ModuleId(),i.Update)}),i.HasCapabilityComputed(Capability.DataStream_Create))]),Tile.CreateWithBlockSet([new Header_Block("download",new Header_Text("Download Data",null,"Historical Data")),new Command_Block("Daily Totals","Download data totalised daily",i.FormAction(function(){return Form.ModuleDownloadDailyTotals(i.viewModel.Module.ModuleId(),i.viewModel.DailyTotalProperties())}),ko.computed(function(){return i.viewModel.DailyTotalProperties().length>0})),new Command_Block("Raw Data","Download raw log entries",i.FormAction(function(){return Form.ModuleDownloadRawData(i.viewModel.Module.ModuleId(),i.viewModel.AllProperties())}),ko.computed(function(){return i.viewModel.AllProperties().length>0})),new Command_Block("Events","Download events data to CSV file",i.FormAction(function(){return Form.ModuleDownloadEvents(i.viewModel.Module.ModuleId())})),new Command_Block("Chart","View dynamic chart",function(){return app.route.Chart_Module.NavigateTo(null,{moduleId:i.viewModel.Module.ModuleId,showTapes:!1})})]),Tile.CreateWithBlockSet([new SmallHeader_Block("Create Meters",i.HasCapabilityComputed(Capability.CumulativeMeter_Manage)),new Command_Block("Cumulative","Create cumulative meter",i.FormAction(function(){return Form.ModuleCreateCumulativeMeter(i.viewModel.Module.ModuleId(),function(n){return app.route.CumulativeMeter_Details.NavigateTo(n)})}),i.HasCapabilityComputed(Capability.CumulativeMeter_Manage))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Data Manipulation",i.HasCapabilityComputed(Capability.Module_ScaleData)),new Command_Block("Scale","Scale data",i.FormAction(function(){return Form.ModuleScaleData(i.viewModel.Module.ModuleId(),i.viewModel.NumberProperties(),i.Update)}),i.HasCapabilityComputed(Capability.Module_ScaleData))]),Tile.CreateWithBlockSet([new Header_Block("dashboard",new Header_Text("Dashboard",null,ko.computed(function(){var n=i.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",i.FormAction(function(){return Form.ModuleAddToExistingDashboardGroups(i.viewModel.Module.ModuleId(),i.Update)}))]).addBlockSet(i.viewModel.DashboardGroups),Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Module.NetworkName,"Module Network",i.viewModel.Module.NodeName,ko.computed(function(){return"Node "+Format.NodeAddress(i.viewModel.Module.NodeAddress())})),new Header_Actions(function(){return app.route.Network_Node.NavigateTo(i.viewModel.Module.NetworkId,{nodeAddress:i.viewModel.Module.NodeAddress})}))])])),b=new HeaderPageItem("Meters",null,null,null,null,null,null,ko.computed(function(){return i.viewModel.CumulativeMeters().length>0})),k=Tile.CreatePageItem().addTileSet(i.viewModel.CumulativeMeters),i.AddItem(b),i.AddItem(k),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Note","Add a new Note",i.FormAction(function(){return Form.ModuleCreateNote(i.viewModel.Module.ModuleId(),function(){return d.LoadData()})}),i.HasCapabilityComputed(Capability.Note_Create))])])),i.AddItem(d=new AjaxFilterTableViewModel({route:app.route.Module_NotesTable.For(i.viewModel.Module.ModuleId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:10}).AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return app.route.Note_Details.NavigateTo(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 app.route.User_Details.NavigateTo(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes")),g=function(n){h(n);s.LoadData();i.CloseFormDialog()},nt=function(n,t){f(n);e(t);s.LoadData();i.CloseFormDialog()},i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Search Events"),new Command_Block("Date Range",ko.computed(function(){return f()==null||e()==null?"All":Format.DateOnlyRange(moment(f()),moment(e()))}),i.FormAction(function(){return Form.ModuleSetEventDateFilter(f(),e(),nt)})),new Command_Block("Reset","Clear date range",function(){f(null);e(null);s.LoadData()},ko.computed(function(){return e()!=null||f()!=null})),new Command_Block("Count",ko.computed(function(){return""+h()}),i.FormAction(function(){return Form.ModuleSetEventLimit(h(),g)}))])])),i.AddItem(s=new AjaxFilterTableViewModel({route:ko.computed(function(){return app.route.Module_EventsTable.For(i.viewModel.Module.ModuleId,{limit:h,startUtc:f,endUtc:e})}),click:function(n){return i.FormAction(function(){return Form.ModuleEventDetails(i,i.viewModel.Module.ModuleId(),n.ModuleEventId,n.TimeUtc,n.Details,n.EscalationComplete,n.AcknowledgeUtc,n.AcknowledgeUser)})()},update:!0,sort:"TimeUtc",ascending:!1,size:25}).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 app.route.Module_AlertEventDetails.For(i.viewModel.Module.ModuleId,{moduleEventId:n.ModuleEventId}).GetUrl()},function(n){return app.route.Module_AlertEventDetails.NavigateTo(i.viewModel.Module.ModuleId,{moduleEventId:n.ModuleEventId})})).AddTitle("Events")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Rfid Tags","Add Rfid Tag Groups",i.FormAction(function(){return Form.ModuleAddRfidTagGroups(i.viewModel.Module.ModuleId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_ConfigureUser)&&i.viewModel.SupportsRfidTags()}))])])),i.AddItem(new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Group_RfidTags.NavigateTo(n.GroupId)},update:!1,sort:"Name",ascending:!0,size:25,enabled:i.viewModel.SupportsRfidTags,hideRefresh:!0,data:i.viewModel.RfidTagGroups}).AddColumn(new FilterTableColumnViewModel("Name","Group Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("TagCount","Assigned Tags",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.ModuleRemoveRfidTagGroup(i.viewModel.Module.ModuleId(),n.GroupId(),n.Name(),i.Update)})()},i.HasCapabilityComputed(Capability.Module_ConfigureUser))).AddTitle("Rfid Tag Groups")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Module_UserActionsForTargetModuleTable.For(i.viewModel.Module.ModuleId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10,enabled:i.HasCapabilityComputed(Capability.User_ViewActions)}).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")),i}return __extends(t,n),t.prototype.Dispose=function(){clearInterval(this.queryModuleStateIntervalHandle);n.prototype.Dispose.call(this)},t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(),LastUpdateUtc:ko.observable(),UserId:ko.observable(),UserName:ko.observable(""),Latitude:ko.observable(),Longitude:ko.observable(),FirstModuleLatitude:ko.observable(),FirstModuleLongitude:ko.observable()},t.SupportsLocation=ko.observable(!1),t.SupportsTrails=ko.observable(!1),t.GisPolygons={GisDatasetId:ko.observable(),GisPolygonDetails:ko.observableArray(),ItemDescriptions:ko.observableArray()},t.getLat=function(){return t.Module.Latitude()!=null?t.Module.Latitude():t.Module.FirstModuleLatitude()!=null?t.Module.FirstModuleLatitude():null},t.getLng=function(){return t.Module.Longitude()!=null?t.Module.Longitude():t.Module.FirstModuleLongitude()!=null?t.Module.FirstModuleLongitude():null},t.hasLocation=function(){return!(t.Module.Latitude()==null&&t.Module.Longitude()==null)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Map",t.Module.Name,app.route.Module_Details.For(t.Module.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_Map=t}(Model||(Model={}));app.router.View(app.route.Module_Map,function(n){function t(t){var i=n.call(this,t,new Model.Module_Map)||this;return i.StaticMap=function(){var t=new MapPageItem(i,!0),n,r=function(r,u){r===0&&u===0?(i.viewModel.Module.Latitude(null),i.viewModel.Module.Longitude(null)):(i.viewModel.Module.Latitude(r),i.viewModel.Module.Longitude(u));t.zoomToBounds();n.LoadData()};i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("module",new Header_Text("Module",null,i.viewModel.Module.Name,i.viewModel.Module.LastUpdateUtc)),new SingleValue_Block("Network",i.viewModel.Module.NetworkName),new SingleValue_Block("Node",i.viewModel.Module.NodeName),new SingleValue_Block("Set By",i.viewModel.Module.UserName),new SingleValue_Block("Latitude",ko.computed(function(){return i.viewModel.Module.Latitude()!=null?i.viewModel.Module.Latitude().toFixed(6):"none"})),new SingleValue_Block("Longitude",ko.computed(function(){return i.viewModel.Module.Longitude()!=null?i.viewModel.Module.Longitude().toFixed(6):"none"})),new Command_Block("Set Location","Set the module location",i.FormAction(function(){return Form.ModuleSetLocation(i,i.viewModel.Module.ModuleId(),i.viewModel.getLat(),i.viewModel.getLng(),i.viewModel.hasLocation(),r)}),i.HasCapabilityComputed(Capability.Module_SetLocation))])]));t.AddItems({items:ko.observableArray([i.viewModel.Module]),getLatLng:GMap.GetLatLng,getText:function(n){return ko.unwrap(n.Latitude)!=null&&ko.unwrap(n.Longitude)!=null?ko.unwrap(n.Name)+": "+ko.unwrap(n.Latitude).toFixed(6)+", "+ko.unwrap(n.Longitude).toFixed(6):""},getInfo:function(n){return ko.unwrap(n.Latitude)!=null&&ko.unwrap(n.Longitude)!=null?ko.unwrap(n.Name)+" - lat:"+ko.unwrap(n.Latitude).toFixed(6)+", lng:"+ko.unwrap(n.Longitude).toFixed(6):""},getIcon:function(){return GMap.Icons.moduleGreen},getZIndex:function(){return 1}});i.AddItem(t);n=new AjaxFilterTableViewModel({route:app.route.Module_GetModuleLocationHistory.For(i.viewModel.Module.ModuleId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:10}).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 i.FormAction(function(){return Form.ModuleSetLocation(i,i.viewModel.Module.ModuleId(),n.Latitude,n.Longitude,!1,r)})()},i.HasCapabilityComputed(Capability.Module_SetLocation))).AddTitle("Location History");i.AddItem(n);n.LoadData()},i.PathMap=function(){var t=new MapPageItem(i,!0),u=ko.observable(moment.utc().subtract("day",2).toISOString()),f=ko.observable(moment.utc().toISOString()),c=ko.observable(""),l=ko.observable(""),n=ko.observable(!1),o=ko.observable(!0),s=ko.observable(!0),r=ko.observableArray(),a=ko.observableArray(),v=function(){for(var u,e=o()&&i.viewModel.SupportsTrails()&&n(),t=0,f=r();t<f.length;t++)u=f[t],u.SetAreaVisible&&u.SetAreaVisible(e)},y=function(){for(var r,f=s()&&i.viewModel.SupportsTrails()&&n(),t=0,u=a();t<u.length;t++)r=u[t],r.SetVisible&&r.SetVisible(f)},p=function(n){var r,t,i,u;if(n.length<2)return[];for(r=[],t=1;t<n.length;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]],SetVisible:function(){return null}});return r},h=function(e){e===void 0&&(e=!0);Form.ViewPostRequest(i,{route:n()&&i.viewModel.SupportsTrails()?app.route.Module_GetLocationTrails.For(i.viewModel.Module.ModuleId):app.route.Module_GetLocationLogs.For(i.viewModel.Module.ModuleId),data:{startUtc:u(),endUtc:f()},onSuccess:function(n){n.Success===!1&&(i.SetMessage("Failed to load location data"),n.Paths=[]);r(n.Paths);a(p(n.Paths));n.DataStartUtc?c(moment.utc(n.DataStartUtc).toISOString()):c(null);n.DataEndUtc?l(moment.utc(n.DataEndUtc).toISOString()):l(null);e&&(t.zoomToPolygons(),t.zoomToBounds());v();y()}})},e=function(n){var t=moment.utc().subtract("day",n).toISOString(),i=moment.utc().toISOString();u(t);f(i);h()},w=function(){n(!n());h()},b=function(){o(!o());v()},k=function(){s(!s());y()},d=Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("module",new Header_Text(i.viewModel.Module.Name,i.viewModel.Module.NetworkName,null,null)),new SingleValue_Block("Start",ko.computed(function(){return Format.DateTime(moment.utc(c()))}),ko.computed(function(){return r().length>0})),new SingleValue_Block("End",ko.computed(function(){return Format.DateTime(moment.utc(l()))}),ko.computed(function(){return r().length>0})),new SingleValue_Block("No Data","No data available",ko.computed(function(){return r().length===0}))]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Date Range")),new SingleValue_Block("From",ko.computed(function(){return Format.DateTime(moment.utc(u()))})),new SingleValue_Block("To",ko.computed(function(){return Format.DateTime(moment.utc(f()))})),new Command_Block("Set Range","Set date range",i.FormAction(function(){return Form.ModuleSetDateFilter(u(),f(),function(n,t){u(n);f(t);i.CloseFormDialog();h()})})),new Command_Block("24 Hours","View last 24 hours",function(){return e(1)}),new Command_Block("48 Hours","View last 48 hours",function(){return e(2)}),new Command_Block("7 Days","View last 7 days",function(){return e(7)}),new Command_Block("14 Days","View last 14 days",function(){return e(14)}),new Command_Block("30 Days","View last 30 days",function(){return e(30)})]),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Irrigation Views")),new Command_Block("Display",ko.computed(function(){return n()?"Show raw data":"Show aggregate data"}),function(){return w()}),new Command_Block("Areas",ko.computed(function(){return o()?"Hide irrigated areas":"Show irrigated areas"}),function(){return b()},n),new Command_Block("Links",ko.computed(function(){return s()?"Hide line between runs":"Show line between runs"}),function(){return k()},n)],null,i.viewModel.SupportsTrails)]);i.AddItem(d);t.AddTrails({trails:r,getTextStart:function(n){return Format.DateTime(moment.utc(ko.unwrap(n.StartUtc)))},getTextEnd:function(n){return Format.DateTime(moment.utc(ko.unwrap(n.EndUtc)))}});t.AddPolylines({polylines:a,getLatLng:function(n){for(var r=[],i=n.PathPoints,t=0;t<i.length;t++)r.push(new google.maps.LatLng(i[t].lat,i[t].lng));return r}});t.AddPolygons({polygons:i.viewModel.GisPolygons.GisPolygonDetails,getLatLng:function(n){for(var r=[],i=ko.unwrap(n.Coordinates),t=0;t<i.length;++t)r.push(new google.maps.LatLng(ko.unwrap(i[t].Latitude),ko.unwrap(i[t].Longitude)));return r},getName:function(n){return n.Name()},getInfo:function(n){var t="";return n.IndexValues().forEach(function(n){i.viewModel.GisPolygons.ItemDescriptions().forEach(function(i){ko.unwrap(n.Key)===ko.unwrap(i.ItemIndex)&&(t+='<div class="nodetext"><strong>'+ko.unwrap(i.Description)+":<\/strong> "+ko.unwrap(n.Value)+"<\/div>")})}),"<div>"+n.Name()+t+"<\/div>"}});i.AddItem(t);h()},i.ExtendMappingOptions({arrayChildId:{"GisPolygonDetails[i]":"GisPolygonId","ItemDescriptions[i]":"ItemIndex"},extend:{}}),i.OnViewModelReady=function(){i.viewModel.SupportsLocation()?i.PathMap():i.StaticMap()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ModuleId=ko.observable(0),t.ModuleName=ko.observable(""),t.ModuleExportTargetId=ko.observable(0),t.ExportTargetId=ko.observable(0),t.ExportTargetName=ko.observable(""),t.Identifier=ko.observable(""),t.Trend=ko.observable(""),t.Scale=ko.observable(0),t.StartExportUtc=ko.observable(),t.LastExportUtc=ko.observable(),t.Enabled=ko.observable(!1),t.SupportsPreview=ko.observable(!1),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Identifier,t.ModuleName,app.route.Module_Details.For(t.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_ModuleExportTarget=t}(Model||(Model={}));app.router.View(app.route.Module_ModuleExportTarget,function(n){function t(t){var i=n.call(this,t,new Model.Module_ModuleExportTarget)||this,r=function(n){return Form.PostRequest({route:app.route.Module_SetModuleExportTargetEnabledState.For(i.viewModel.ModuleId,{moduleExportTargetId:i.viewModel.ModuleExportTargetId}),data:{state:n},onSuccess:function(){return i.Update()}})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("data-stream",new Header_Text(i.viewModel.Identifier,"Module Export Target",ko.computed(function(){return i.viewModel.Enabled()?"Enabled":"Disabled"}),"Status"),new Header_Actions(function(){return CopyToClipboard(i.viewModel.Identifier)},null,null,null,"Click to copy to clipboard")),new SingleValue_Block("Module",i.viewModel.ModuleName),new SingleValue_Block("Trend",i.viewModel.Trend),new SingleValue_Block("Scale",i.viewModel.Scale),new SingleValue_Block("Start Export",ko.computed(function(){return Format.Date(moment.utc(i.viewModel.StartExportUtc()))})),new SingleValue_Block("Last Export",ko.computed(function(){return Format.LastUpdate(moment.utc(i.viewModel.LastExportUtc()))})),new SingleValue_Block("Export Target",i.viewModel.ExportTargetName)]),Tile.CreateWithBlockSet([new Command_Block("Configure","Configure this module export",i.FormAction(function(){return Form.ModuleConfigureExport(i.viewModel.ModuleId(),i.viewModel.ModuleExportTargetId(),i.viewModel.ExportTargetName(),i.viewModel.ExportTargetId(),i.viewModel.Identifier(),i.viewModel.Trend(),i.viewModel.Scale(),i.Update)}),i.HasCapabilityComputed(Capability.Module_ManageExports)),new Command_Block("Enable","Enable this module export",function(){return r(!0)},ko.computed(function(){return i.HasCapability(Capability.Module_ManageExports)&&!i.viewModel.Enabled()})),new Command_Block("Disable","Disable this module export",function(){return r(!1)},ko.computed(function(){return i.HasCapability(Capability.Module_ManageExports)&&i.viewModel.Enabled()})),new Command_Block("Delete","Delete this module export",i.FormAction(function(){return Form.ModuleDeleteExport(i.viewModel.ModuleId(),i.viewModel.ModuleExportTargetId(),function(){return app.route.Module_Details.NavigateTo(i.viewModel.ModuleId)})}),i.HasCapabilityComputed(Capability.Module_ManageExports)),new Command_Block("Preview","Preview this module export",i.FormAction(function(){return Form.ModulePreviewExport(i.viewModel.ModuleId(),i.viewModel.ModuleExportTargetId())}),ko.computed(function(){return i.HasCapability(Capability.Module_PreviewExportData)&&i.viewModel.SupportsPreview()}))])])),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CanViewNetwork=ko.observable(!1),t.IsLive=ko.observable(!1),t.Module={NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),Name:ko.observable(""),ConfigDirty:ko.observable(!1),Type:ko.observable("")},t.Alerts=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Subscribers",t.Module.Name,app.route.Module_Details.For(t.Module.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_Subscribers=t}(Model||(Model={}));app.router.View(app.route.Module_Subscribers,function(n){function t(t){var i=n.call(this,t,new Model.Module_Subscribers)||this;return i.ExtendMappingOptions({arrayChildId:{"Alerts[i]":"AlertAndStatus"},extend:{}}),i.AddItem(new HeaderPageItem("Your Subscriptions")),i.AddItem(new TableViewModel(i.viewModel.Alerts,null).AddColumn(new TextTableColumnViewModel("Name","Alert",!1,!1)).AddColumn(new TextTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return Format.Subscription(n.SendSms(),n.SendEmail())})).AddColumn(new CommandTableColumnViewModel("Set Subscription","sms",function(n){return i.FormAction(function(){return Form.ModuleSetAlertSubscription(i.viewModel.Module.ModuleId(),n.AlertAndStatus(),n.Name(),n.SendSms(),n.SendEmail(),i.Update)})()}))),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Module_SubscribersTable.For(i.viewModel.Module.ModuleId),click:function(n){return app.route.Module_AlertDetails.NavigateTo(i.viewModel.Module.ModuleId,{alertAndStatus:n.AlertAndStatus})},update:!0,sort:"Name",ascending:!0,size:100,enabled:i.HasCapabilityComputed(Capability.Module_ManageAlertSubscription)}).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 i.FormAction(function(){return Form.ModuleSendTestAlert(i.viewModel.Module.ModuleId(),i.viewModel.Module.Type(),n.AlertAndStatus)})()},i.HasCapabilityComputed(Capability.User_SendTestMessage))).AddColumn(new CommandTableColumnViewModel("Configure Auto SMS","auto-sms",function(n){return i.FormAction(function(){return Form.ModuleConfigureAutoSms(i.viewModel.Module.ModuleId(),n.AlertAndStatus,n.AutoSms,i.Update)})()},i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureUser,Capability.Module_ManageAlertSubscription]))).AddColumn(new CommandTableColumnViewModel("Set Escalation","alert",function(n){return i.FormAction(function(){return Form.ModuleSetAlertEscalationList(i.viewModel.Module.ModuleId(),n.AlertAndStatus,n.EscalationListId,n.EscalationListName,i.Update)})()},i.HasCapabilitySetAnyComputed([Capability.Module_ConfigureInstaller,Capability.Module_ConfigureSystem,Capability.Module_ManageAlertSubscription]))).AddTitle("All User Subscriptions")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Module={NetworkId:ko.observable(0),NetworkName:ko.observable(""),ModuleId:ko.observable(0),Name:ko.observable(""),ConfigDirty:ko.observable(!1),Type:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Tags",t.Module.Name,app.route.Module_Details.For(t.Module.ModuleId))},t}return __extends(t,n),t}(n.Base_Model);n.Module_Tags=t}(Model||(Model={}));app.router.View(app.route.Module_Tags,function(n){function t(t){var i=n.call(this,t,new Model.Module_Tags)||this,u,f,r=function(){u.LoadData();f.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Attach Tags","Add tags to Module",i.FormAction(function(){return Form.ModuleAttachTag(i.viewModel.Module.ModuleId(),r)}),i.HasCapabilityComputed(Capability.Tag_Attach))])])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Module_TagsTable.For(i.viewModel.Module.ModuleId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("TagValue","Value",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Value","edit",function(n){return i.FormAction(function(){return Form.ModuleEditTag(i.viewModel.Module.ModuleId(),n.TagId,n.TagValue,r)})()},i.HasCapabilityComputed(Capability.Tag_Update))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.ModuleRemoveTag(i.viewModel.Module.ModuleId(),i.viewModel.Module.Name(),n.TagId,n.Name,r)})()},i.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Module Tags")),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.Module_TagValueHistoryTable.For(i.viewModel.Module.ModuleId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25,enabled:i.HasCapabilityComputed(Capability.Tag_View)}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.Name=ko.observable(""),t.ShortName=ko.observable(""),t.LastSyncUtc=ko.observable(),t.MaxSyncIntervalSeconds=ko.observable(0),t.CanViewSim=ko.observable(!1),t.HasSim=ko.observable(!1),t.SimId=ko.observable(0),t.SimNumber=ko.observable(""),t.SimPhoneNumber=ko.observable(""),t.SimCellularNetworkId=ko.observable(0),t.SimCellularNetworkName=ko.observable(""),t.SimCancelled=ko.observable(!1),t.SupportsSim=ko.observable(!1),t.RequiresSim=ko.observable(!1),t.DefaultModuleId=ko.observable(0),t.DefaultModule=ko.observable(""),t.DefaultModuleNodeName=ko.observable(""),t.PrimaryNodeExtAddress=ko.observable(""),t.IsSyncOverdue=ko.observable(!1),t.IsLive=ko.observable(!1),t.IsLinkUp=ko.observable(!1),t.GisDatasetId=ko.observable(0),t.GisDatasetName=ko.observable(""),t.MaxSyncInterval=ko.observable(""),t.UserHasSyncAlertSubscription=ko.observable(!1),t.TimeZoneName=ko.observable(""),t.TimeZoneOffset=ko.observable(0),t.IncompleteUpdateCount=ko.observable(0),t.GsmIdleTimeoutSeconds=ko.observable(0),t.StatusId=ko.observable(0),t.NextStatusId=ko.observable(0),t.StatusName=ko.observable(""),t.NextStatusName=ko.observable(""),t.StatusMessage=ko.observable(""),t.StatusState=ko.observable(""),t.NetworkSubscriptionId=ko.observable(0),t.NetworkSubscriptionEnd=ko.observable(""),t.NetworkSubscriptionFee=ko.observable(0),t.NetworkSubscriptionStatus=ko.observable(""),t.NetworkSubscriptionIsCancelled=ko.observable(!1),t.NetworkSubscriptionXeroInvoiceGuid=ko.observable(""),t.NetworkSubscriptionXeroInvoiceNumber=ko.observable(""),t.NetworkSubscriptionXeroInvoicedUtc=ko.observable(),t.NetworkSubscriptionXeroInvoiceIsPaid=ko.observable(!1),t.NetworkSubscriptionPlanId=ko.observable(0),t.NetworkSubscriptionPlan=ko.observable(""),t.BillingEntityName=ko.observable(""),t.HasN8LinkAttached=ko.observable(!1),t.MessageAccountId=ko.observable(0),t.MessageAccountName=ko.observable(""),t.SuppressedModules=ko.observableArray(),t.NetworkTasks=ko.observableArray(),t.IsPowerGeniusBranding=ko.observable(!1),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Name,"Networks",app.route.Network_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Network_Details=t}(Model||(Model={}));app.router.View(app.route.Network_Details,function(n){function t(t){var i=n.call(this,t,new Model.Network_Details)||this,u,r,o,f,h;i.ExtendMappingOptions({arrayChildId:{"NetworkTasks[i]":"Id","SuppressedModules[i]":"ModuleId"},extend:{}});u=ko.computed(function(){return i.viewModel.NetworkTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()||!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})});r=ko.observable(!1);i.OnViewModelReady=function(){return r(!u())};o=function(){i.Update();r(!0)};f=new DashboardHeaderPageItem(0,ko.computed(function(){return"Network - "+(i.viewModel.StatusMessage()!=null?i.viewModel.StatusMessage():"Installed")+(u()?"":" - Required tasks outstanding")}),ko.computed(function(){return TileState[u()?i.viewModel.StatusState():"Faulted"]}),function(){return r(!r())});f.addButton(new DashboardActionButton(0,"command",ko.computed(function(){return"Change status to "+i.viewModel.NextStatusName()}),i.FormAction(function(){return u()?Form.NetworkSetNextNetworkStatusWithCompletedTasks(i.viewModel.NetworkId(),i.viewModel.StatusName(),i.viewModel.NextStatusId(),i.viewModel.NextStatusName(),o):Form.NetworkSetNextNetworkStatusWithIncompleteTasks(i.viewModel.NetworkId(),i.viewModel.NextStatusId(),i.Update)}),ko.computed(function(){return i.viewModel.NextStatusName()!=null})));f.addButton(new DashboardActionButton(0,ko.computed(function(){return r()?"collapse":"expand"}),ko.computed(function(){return r()?"Hide":"Show"}),function(){return r(!r())},!0));i.AddItem(f);i.AddItem(new AjaxFilterTableViewModel({route:null,click:null,update:!1,sort:null,ascending:!0,size:25,enabled:ko.computed(function(){return r()}),hideRefresh:!0,data:i.viewModel.NetworkTasks}).AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return Task.Icon(n.SourceType())},function(n){return Task.Source(n.SourceType())},function(n){return Task.Route(n.SourceType(),n.Parameters)})).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 Task.Tasks[n.Description()].GetDescription(n.IsCompleted(),n.Parameters)})).AddColumn(new TaskActionsTextTableColumnViewModel("Actions","Actions",i,function(){return function(){return i.Update()}},i.viewModel.Capabilities,function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks"));var e,s,c=function(n,t){i.viewModel.Name(n);i.viewModel.ShortName(t);e.LoadData()},l=function(){return e.LoadData()},a=function(n){return app.route.NetworkSubscription_Details.NavigateTo(n)};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Name,"Network Name",i.viewModel.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+Format.LastUpdate(moment.utc(i.viewModel.LastSyncUtc()))}))),new Command_Block("Default",ko.computed(function(){return i.viewModel.DefaultModule()||"None"}),function(){return i.viewModel.DefaultModuleId()?app.route.Module_Details.NavigateTo(i.viewModel.DefaultModuleId):null}),new Command_Block("GIS Dataset",ko.computed(function(){return i.viewModel.GisDatasetName()||"None assigned"}),function(){return i.viewModel.GisDatasetId()?app.route.GisDataset_Details.NavigateTo(i.viewModel.GisDatasetId):null},null,null,ko.computed(function(){return i.viewModel.GisDatasetName()?"state-active":"state-idle"})),new SingleValue_Block("Time Zone",ko.computed(function(){return i.viewModel.TimeZoneName()||""})),new Command_Block("Gateway",ko.computed(function(){return i.viewModel.PrimaryNodeExtAddress()||""}),function(){return CopyToClipboard(i.viewModel.PrimaryNodeExtAddress)},ko.computed(function(){return i.viewModel.PrimaryNodeExtAddress()!=null}),"Click to copy to clipboard"),new SingleValue_Block("Status",ko.computed(function(){return i.viewModel.StatusId()!=null?i.viewModel.StatusName():"Gateway Missing"}),null,"Status of the gateway node"),new Command_Block("History","View status history",function(){return app.route.Network_NodeStatusHistory.NavigateTo(i.viewModel.NetworkId)})]),Tile.CreateWithBlockSet([new Command_Block("Rename","Rename this network",i.FormAction(function(){return Form.NetworkRename(i.viewModel.NetworkId(),i.viewModel.Name(),i.viewModel.ShortName(),c)}),i.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Update","Update device network",i.FormAction(function(){return Form.NetworkUpdateBinary(i.viewModel.NetworkId(),i.Update)}),i.HasCapabilityComputed(Capability.Network_ManageDevices)),new Command_Block("Set Default","Set the default module",i.FormAction(function(){return Form.NetworkSetDefaultModule(i.viewModel.NetworkId(),i.viewModel.DefaultModuleId(),i.viewModel.DefaultModule(),i.viewModel.DefaultModuleNodeName(),i.Update)}),i.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Get Rejected","Get last rejected address",i.FormAction(function(){return Form.NetworkGetLastRejectedAddress(i.viewModel.NetworkId(),l)}),i.HasCapabilityComputed(Capability.Network_ManageDevices)),new Command_Block("Map","View network on map",function(){return app.route.Network_Map.NavigateTo(i.viewModel.NetworkId)},i.HasCapabilityComputed(Capability.Network_ViewLocation)),new Command_Block("GIS Dataset","Assign GIS dataset",i.FormAction(function(){return Form.NetworkAssignGisDataset(i.viewModel.NetworkId(),i.viewModel.GisDatasetId(),i.viewModel.GisDatasetName(),i.Update)}),i.HasCapabilityComputed(Capability.GisDataset_Assign)),new Command_Block("Users","View users with access",function(){return app.route.Network_Users.NavigateTo(i.viewModel.NetworkId)},i.HasCapabilityComputed(Capability.User_Impersonate)),new Command_Block("Groups","Groups containing this network",function(){return app.route.Network_ContainingGroups.NavigateTo(i.viewModel.NetworkId)}),new Command_Block("Time Zone","Change the time zone",i.FormAction(function(){return Form.NetworkChangeTimeZone(i.viewModel.NetworkId(),i.viewModel.TimeZoneName(),i.viewModel.TimeZoneOffset(),i.Update)}),i.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Suppress","Suppress module alerts on network",i.FormAction(function(){return Form.NetworkSuppressAlerts(i.viewModel.NetworkId(),i.Update)}),i.HasCapabilityComputed(Capability.Module_SuppressAlerts)),new Command_Block("Status","Change the network status",i.FormAction(function(){return Form.NetworkChangeStatus(i.viewModel.NetworkId(),i.viewModel.StatusId(),i.viewModel.StatusName(),u(),i.Update)}),i.HasCapabilityComputed(Capability.Network_SetNodeStatus)),new Command_Block("Delete","Delete the network",i.FormAction(function(){return Form.NetworkDelete(i.viewModel.NetworkId(),function(){return app.route.Home_Index.NavigateTo()})}),i.HasCapabilityComputed(Capability.Network_Delete)),new Command_Block("Tags","View network tags",function(){return app.route.Network_Tags.NavigateTo(i.viewModel.NetworkId)},i.HasCapabilityComputed(Capability.Tag_View)),new Command_Block("Modules","View network modules",function(){return app.route.Network_Modules.NavigateTo(i.viewModel.NetworkId)})]),Tile.CreateWithBlockSet([new Header_Block("config",new Header_Text(ko.computed(function(){return i.viewModel.IsSyncOverdue()?"Overdue":i.viewModel.IsLive()?i.viewModel.IsLinkUp()?"Live":"Down":"OK"}),"Sync Status",ko.computed(function(){return i.viewModel.MaxSyncInterval()||"Not Set"}),"Max Sync Interval")),new SingleValue_Block("Alerts",ko.computed(function(){return i.viewModel.UserHasSyncAlertSubscription()?"Subscribed":"Not subscribed"})),new Command_Block("Configure","Configure sync alerts",i.FormAction(function(){return Form.NetworkSetMaxSyncInterval(i.viewModel.NetworkId(),i.viewModel.MaxSyncInterval(),i.Update)}),i.HasCapabilityComputed(Capability.Network_ManageDevices)),new Command_Block("Subscribe","Subscribe to sync alerts",i.FormAction(function(){return Form.NetworkSubscribeToSyncAlerts(i.viewModel.NetworkId(),i.Update)}),ko.computed(function(){return!i.viewModel.UserHasSyncAlertSubscription()})),new Command_Block("Unsubscribe","Unsubscribe from sync alerts",i.FormAction(function(){return Form.NetworkUnsubscribeFromSyncAlerts(i.viewModel.NetworkId(),i.Update)}),i.viewModel.UserHasSyncAlertSubscription),new Command_Block("Subscribers","View subscribers to sync alert",function(){return app.route.Network_OverdueSubscribers.NavigateTo(i.viewModel.NetworkId)},i.HasCapabilityComputed(Capability.Network_ViewStatusSubscribers)),new Command_Block("Managers","View network managers",function(){return app.route.Network_Managers.NavigateTo(i.viewModel.NetworkId)},i.HasCapabilityComputed(Capability.Network_ViewManagerUsers)),new Command_Block("GSM Idle",ko.computed(function(){return i.viewModel.GsmIdleTimeoutSeconds()?i.viewModel.GsmIdleTimeoutSeconds()+" seconds - click to change":"Disabled - click to enable"}),i.FormAction(function(){return Form.NetworkSetGsmIdleTimeout(i.viewModel.NetworkId(),i.viewModel.GsmIdleTimeoutSeconds(),i.Update)}),ko.computed(function(){return i.viewModel.IsLive()&&i.viewModel.HasSim()&&i.HasCapability(Capability.Network_Diagnostics)})),new Command_Block("Attach Link","Attach N8Link device",i.FormAction(function(){return Form.NetworkAttachN8Link(i.viewModel.NetworkId(),i.Update)}),ko.computed(function(){return i.viewModel.IsLive()&&!i.viewModel.HasN8LinkAttached()&&i.HasCapability(Capability.Network_AttachLinkDevice)})),new Command_Block("Detach Link","Detach N8Link device",i.FormAction(function(){return Form.NetworkDetachN8Link(i.viewModel.NetworkId(),i.Update)}),ko.computed(function(){return i.viewModel.IsLive()&&i.viewModel.HasN8LinkAttached()&&i.HasCapability(Capability.Network_AttachLinkDevice)})),new Command_Block("Account",ko.computed(function(){return i.viewModel.MessageAccountId()?i.viewModel.MessageAccountName():"None"}),function(){return app.route.MessageAccount_Details.NavigateTo(i.viewModel.MessageAccountId)},i.HasCapabilityComputed(Capability.Network_ChangeMessageAccount)),new Command_Block("Assign","Assign a message account",i.FormAction(function(){return Form.NetworkSetMessageAccount(i.viewModel.NetworkId(),i.viewModel.MessageAccountId(),i.Update)}),i.HasCapabilityComputed(Capability.Network_ChangeMessageAccount)),new SingleValue_Block("Provider",ko.computed(function(){return i.viewModel.HasSim()?i.viewModel.SimCellularNetworkName():i.viewModel.RequiresSim()?"Unknown":"Customer Local Network"}),i.HasCapabilityComputed(Capability.Network_ViewServiceProvider))],ko.computed(function(){return i.viewModel.IsSyncOverdue()?TileState.Faulted:TileState.Active})),Tile.CreateWithBlockSet([new Header_Block("queue",new Header_Text("Update Queue",null,ko.computed(function(){return i.viewModel.IncompleteUpdateCount()?i.viewModel.IncompleteUpdateCount()+" Pending":"Empty"})),new Header_Actions(function(){return app.route.Network_UpdateQueue.NavigateTo(i.viewModel.NetworkId)}))],ko.computed(function(){return i.viewModel.IncompleteUpdateCount()?TileState.Active:TileState.Idle})),Tile.CreateWithBlockSet([new Header_Block("phone",new Header_Text(ko.computed(function(){return ko.unwrap(i.viewModel.SimNumber)||"None"}),"Sim Number",ko.computed(function(){return i.viewModel.SimPhoneNumber()?Format.PhoneNumber(i.viewModel.SimPhoneNumber()):"None"}),"Phone Number",ko.computed(function(){return ko.unwrap(i.viewModel.SimCellularNetworkName)||"None"})),new Header_Actions(function(){return i.viewModel.CanViewSim()?app.route.Sim_Details.NavigateTo(i.viewModel.SimId):null})),new SingleValue_Block("Status",ko.computed(function(){return i.viewModel.SimCancelled()?"Cancelled":"Active"}),ko.computed(function(){return i.viewModel.HasSim()})),new Command_Block("View","View & Configure this Sim",function(){return app.route.Sim_Details.NavigateTo(i.viewModel.SimId)},ko.computed(function(){return i.viewModel.HasSim()&&i.viewModel.CanViewSim()})),new Command_Block("Remove","Remove this Sim from this Network",i.FormAction(function(){return Form.NetworkRemoveSim(i.viewModel.NetworkId(),i.viewModel.SimId(),i.Update)}),i.viewModel.HasSim),new Command_Block("Attach SIM","Attach an existing SIM",i.FormAction(function(){return Form.NetworkAssignSim(i.viewModel.NetworkId(),i.Update)}),ko.computed(function(){return!i.viewModel.HasSim()&&i.viewModel.SupportsSim()})),new SingleValue_Block("Support","Sim not supported",ko.computed(function(){return i.viewModel.HasSim()&&!i.viewModel.SupportsSim()}))],ko.computed(function(){return i.viewModel.HasSim()&&!i.viewModel.SupportsSim()?TileState.Warning:TileState.Idle}),ko.computed(function(){return i.HasCapability(Capability.Network_ManageSim)&&(i.viewModel.HasSim()||i.viewModel.SupportsSim())})),Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text(i.viewModel.BillingEntityName,"Network subscription",i.viewModel.NetworkSubscriptionStatus,"Subscription status"),new Header_Actions(function(){return app.route.NetworkSubscription_Details.NavigateTo(i.viewModel.NetworkSubscriptionId)},null,null,ko.computed(function(){return i.viewModel.NetworkSubscriptionId()!=null}))),new SingleValue_Block("Plan",ko.computed(function(){return i.viewModel.NetworkSubscriptionPlan()!=null?i.viewModel.NetworkSubscriptionPlan():"Not set"})),new SingleValue_Block("Expires",ko.computed(function(){return Format.DueDate(moment(i.viewModel.NetworkSubscriptionEnd()))}),ko.computed(function(){return i.viewModel.NetworkSubscriptionId()!=null})),new SingleValue_Block("Fee",ko.computed(function(){return Format.Currency(i.viewModel.NetworkSubscriptionFee())}),ko.computed(function(){return i.viewModel.NetworkSubscriptionId()!=null})),new SingleValue_Block("Invoiced",ko.computed(function(){return Format.DateOnly(moment(i.viewModel.NetworkSubscriptionXeroInvoicedUtc()))}),ko.computed(function(){return i.viewModel.NetworkSubscriptionId()!=null})),new SingleValue_Block("Payment",ko.computed(function(){return i.viewModel.NetworkSubscriptionXeroInvoiceIsPaid()?"PAID":i.viewModel.NetworkSubscriptionXeroInvoiceGuid()?"UNPAID":"NOT INVOICED"}),ko.computed(function(){return i.viewModel.NetworkSubscriptionId()!=null})),new Command_Block("Download","Download invoice",i.FormAction(function(){return Form.NetworkSubscriptionDownloadInvoice(i.viewModel.NetworkSubscriptionId())}),ko.computed(function(){return i.viewModel.NetworkSubscriptionXeroInvoiceGuid()!=="00000000-0000-0000-0000-000000000000"&&i.viewModel.NetworkSubscriptionXeroInvoiceGuid()!=null})),new Command_Block("Create","Create subscription for network",i.FormAction(function(){return Form.GroupCreateNetworkSubscription(i.viewModel.NetworkId(),a)}),ko.computed(function(){return(i.viewModel.NetworkSubscriptionId()==null||i.viewModel.NetworkSubscriptionIsCancelled())&&i.HasCapability(Capability.NetworkSubscriptions_Create)}))],ko.computed(function(){return i.viewModel.NetworkSubscriptionStatus()==="Cancelled"?TileState.Faulted:i.viewModel.NetworkSubscriptionStatus()==="Expired"?TileState.Warning:TileState.Active}),i.HasCapabilityComputed(Capability.Network_ViewSubscription))])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Node","Add a new Node",i.FormAction(function(){return Form.NetworkCreateNode(i.viewModel.NetworkId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_CreateNode)&&!i.viewModel.IsPowerGeniusBranding()}))])])),i.AddItem(s=new AjaxFilterTableViewModel({route:app.route.Network_NodesTable.For(i.viewModel.NetworkId),click:function(n){return app.route.Network_Node.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress})},update:!0,sort:"NodeAddress",ascending:!0,size:100}).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return Format.NodeAddress(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 FilterTableColumnViewModel("VerificationIssueCount","Verification Issues",!0,!0,null,ko.computed(function(){return i.viewModel.IsLive()&&i.HasCapability(Capability.Network_VerifyHardware)}))).AddColumn(new CommandTableColumnViewModel("Verify Hardware","command",function(n){return i.FormAction(function(){return Form.NetworkNodeVerifyHardware(i.viewModel.NetworkId(),n.NodeAddress,function(){return s.LoadData()})})()},ko.computed(function(){return i.viewModel.IsLive()&&i.HasCapability(Capability.Network_VerifyHardware)}))).AddColumn(new CommandTableColumnViewModel("Delete Node","delete",function(n){return i.FormAction(function(){return Form.NetworkDeleteNode(i.viewModel.NetworkId(),n.NodeAddress,n.Name,i.Update)})()},i.HasCapabilityComputed(Capability.Network_DeleteNode))).AddTitle("Network Nodes")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Clear All","Clear all module alert suppression",i.FormAction(function(){return Form.NetworkClearSuppressAlerts(i.viewModel.NetworkId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_SuppressAlerts)&&i.viewModel.SuppressedModules().length>0}))])])),i.AddItem(new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!1,sort:"SuppressedAlertsUtc",ascending:!1,size:25,enabled:ko.computed(function(){return i.viewModel.SuppressedModules().length>0}),hideRefresh:!0,data:i.viewModel.SuppressedModules}).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 i.FormAction(function(){return Form.ModuleClearSuppressedAlerts(n.ModuleId(),n.Name(),i.Update)})()},i.HasCapabilityComputed(Capability.Module_SuppressAlerts))).AddTitle("Modules With Suppressed Alerts")),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.Network_EventsTable.For(i.viewModel.NetworkId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10}).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return Format.NodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Details","Event",!1,!0)).AddColumn(new FilterTableColumnViewModel("User","User",!0,!0)).AddTitle("Network Events")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Note","Add a new Note",i.FormAction(function(){return Form.NetworkCreateNote(i.viewModel.NetworkId(),function(){return h.LoadData()})}),i.HasCapabilityComputed(Capability.Note_Create))])])),i.AddItem(h=new AjaxFilterTableViewModel({route:app.route.Network_Notes.For(i.viewModel.NetworkId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:10}).AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return app.route.Note_Details.NavigateTo(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 app.route.User_Details.NavigateTo(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("Notes")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_UserActionsForTargetNetworkTable.For(i.viewModel.NetworkId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10,enabled:i.HasCapabilityComputed(Capability.User_ViewActions)}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Node={NetworkId:ko.observable(0),NodeAddress:ko.observable(0),Name:ko.observable(""),IsLive:ko.observable(!1),LastVerifiedUtc:ko.observable()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Hardware verification issues",t.Node.Name,app.route.Network_Node.For(t.Node.NetworkId,{nodeAddress:t.Node.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_HardwareVerificationIssues=t}(Model||(Model={}));app.router.View(app.route.Network_VerificationIssues,function(n){function t(t){var i=n.call(this,t,new Model.Network_HardwareVerificationIssues)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Node.Name,"Node Name","","",ko.computed(function(){return"Last verified: "+Format.Date(moment(i.viewModel.Node.LastVerifiedUtc()))}))),new Command_Block("Verify","Verify node hardware",i.FormAction(function(){return Form.NetworkNodeVerifyHardware(i.viewModel.Node.NetworkId(),i.viewModel.Node.NodeAddress(),i.Update)}),ko.computed(function(){return i.viewModel.Node.IsLive()&&(i.HasCapability(Capability.Network_Diagnostics)||i.HasCapability(Capability.Network_VerifyHardware))}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_HardwareVerificationIssuesTable.For(i.viewModel.Node.NetworkId,{nodeAddress:i.viewModel.Node.NodeAddress}),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:50}).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Verified",!1,!0)).AddColumn(new FilterTableColumnViewModel("SlotIndex","Slot",!1,!0)).AddColumn(new FilterTableColumnViewModel("IssueType","Type",!1,!0)).AddColumn(new FilterTableColumnViewModel("Details","Details",!1,!0)).AddTitle("Hardware verification issues on node")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Networks","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Network_Index=t}(Model||(Model={}));app.router.View(app.route.Network_Index,function(n){function t(t){var i=n.call(this,t,new Model.Network_Index)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_NetworksTable.For(),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"ShortName",ascending:!0,size:50}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Network={NetworkId:ko.observable(0),NetworkName:ko.observable(""),ShortName:ko.observable(""),NetworkStatus:ko.observable(""),LastSyncUtc:ko.observable()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Managers",t.Network.NetworkName,app.route.Network_Details.For(t.Network.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_Managers=t}(Model||(Model={}));app.router.View(app.route.Network_Managers,function(n){function t(t){var i=n.call(this,t,new Model.Network_Managers)||this,r,u,f=function(){r.LoadData();u.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Network.NetworkName,"Network Name",i.viewModel.Network.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+Format.LastUpdate(moment.utc(i.viewModel.Network.LastSyncUtc()))})),new Header_Actions(function(){return app.route.Network_Details.NavigateTo(i.viewModel.Network.NetworkId)})),new SingleValue_Block("Status",i.viewModel.Network.NetworkStatus)]),Tile.CreateWithBlockSet([new Command_Block("Add manager","Add a new user",i.FormAction(function(){return Form.NetworkAddManagerUsers(i.viewModel.Network.NetworkId(),f)}),i.HasCapabilityComputed(Capability.Network_AddManagerUser))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Network_ManagersTable.For(i.viewModel.Network.NetworkId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"UserName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","User",!1,!0)).AddColumn(new FilterTableColumnViewModel("PhoneNumber","Phone Number",!1,!0,function(n){return Format.PhoneNumber(n.PhoneNumber)})).AddColumn(new FilterTableColumnViewModel("EmailAddress","Email",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.NetworkRemoveManagerUser(i.viewModel.Network.NetworkId(),n.UserId,n.Name,f)})()},i.HasCapabilityComputed(Capability.Network_RemoveManagerUser))).AddTitle("Manager Users")),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.Network_ManagersHistoryTable.For(i.viewModel.Network.NetworkId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NetworkName=ko.observable(""),t.LastSyncUtc=ko.observable(),t.MaxSyncInterval=ko.observable(0),t.NetworkNodes=ko.observableArray(),t.GisPolygons={GisDatasetId:ko.observable(),GisPolygonDetails:ko.observableArray(),ItemDescriptions:ko.observableArray()},t.Modules=ko.observableArray(),t.ModuleLocations=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Map",t.NetworkName,app.route.Network_Details.For(t.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_Map=t}(Model||(Model={}));app.router.View(app.route.Network_Map,function(n){function t(t){var i=n.call(this,t,new Model.Network_Map)||this,e,o;i.ExtendMappingOptions({arrayChildId:{"NetworkNodes[i]":"NodeAddress","Modules[i]":"ModuleId","ModuleLocations[i]":"ModuleId","GisPolygonDetails[i]":"GisPolygonId","ItemDescriptions[i]":"ItemIndex","Coordinates[i]":"Latitude","IndexValues[i]":"Key"},extend:{}});var r=new MapPageItem(i,!0),s=function(n){return i.viewModel.LastSyncUtc()!=null&&moment(ko.unwrap(n.LastUpdateUtc)).diff(moment(i.viewModel.LastSyncUtc()))<=36e5},f=ko.observable(!0),u=ko.observable(!0),h=ko.observableArray();return ko.computed(function(){return h(f()?i.viewModel.NetworkNodes():[])}),r.AddItems({items:h,getLatLng:GMap.GetLatLng,getText:function(n){return Format.NodeAddress(ko.unwrap(n.NodeAddress))+": "+ko.unwrap(n.Name)},getIcon:function(n){return ko.unwrap(n.LastUpdateUtc)==null?ko.unwrap(n.NodeAddress)===0?GMap.Icons.gatewayBlue:GMap.Icons.nodeBlue:s(n)?ko.unwrap(n.NodeAddress)===0?GMap.Icons.gatewayGreen:GMap.Icons.nodeGreen:ko.unwrap(n.NodeAddress)===0?GMap.Icons.gatewayRed:GMap.Icons.nodeRed},getZIndex:function(){return 3},getInfo:function(n){return"<div>"+Format.NodeAddress(ko.unwrap(n.NodeAddress))+': <span class="nodetitle">'+('<a onclick="app.route.Network_Node.NavigateTo('+ko.unwrap(n.NetworkId)+", { nodeAddress: "+ko.unwrap(n.NodeAddress)+' }); return false;" ')+('href="'+app.route.Network_Node.For(ko.unwrap(n.NetworkId),{nodeAddress:ko.unwrap(n.NodeAddress)}).GetUrl()+'">'+ko.unwrap(n.Name)+"<\/a>")+('<\/span><\/div><div class="nodetext">'+Format.OverdueUpdate(moment.utc(ko.unwrap(n.LastUpdateUtc)),i.viewModel.MaxSyncInterval())+"<\/div>")}}),e=ko.observableArray(),ko.computed(function(){return e(u()?i.viewModel.Modules():[])}),r.AddItems({items:e,getLatLng:GMap.GetLatLng,getText:function(n){return Format.NodeAddress(ko.unwrap(n.NodeAddress))+ko.unwrap(n.ModuleIndex)+": "+ko.unwrap(n.Name)},getIcon:function(n){return ko.unwrap(n.LastUpdateUtc)==null?GMap.Icons.moduleRed:s(n)?GMap.Icons.moduleGreen:GMap.Icons.moduleBlue},getZIndex:function(){return 5},getInfo:function(n){return"<div>"+Format.NodeAddress(ko.unwrap(n.NodeAddress))+"."+ko.unwrap(n.ModuleIndex)+': <span class="nodetitle">'+('<a onClick="app.route.Module_Details.NavigateTo('+ko.unwrap(n.ModuleId)+'); return false;" ')+('href="'+app.route.Module_Details.For(ko.unwrap(n.ModuleId)).GetUrl()+'">'+ko.unwrap(n.Name)+"<\/a>")+('<\/span><\/div><div class="nodetext">'+Format.OverdueUpdate(moment.utc(ko.unwrap(n.LastUpdateUtc)),i.viewModel.MaxSyncInterval())+'<\/div><div class="nodetext">GPS Location<\/div>')}}),o=ko.observableArray(),ko.computed(function(){return o(u()?i.viewModel.ModuleLocations():[])}),r.AddItems({items:o,getLatLng:GMap.GetLatLng,getText:function(n){return Format.NodeAddress(ko.unwrap(n.NodeAddress))+ko.unwrap(n.ModuleIndex)+": "+ko.unwrap(n.ModuleName)},getIcon:function(){return GMap.Icons.moduleBlue},getZIndex:function(){return 4},getInfo:function(n){return"<div>"+Format.NodeAddress(ko.unwrap(n.NodeAddress))+"."+ko.unwrap(n.ModuleIndex)+': <span class="nodetitle">'+('<a onClick="app.route.Module_Details.NavigateTo('+ko.unwrap(n.ModuleId)+'); return false;" ')+('href="'+app.route.Module_Details.For(ko.unwrap(n.ModuleId)).GetUrl()+'">'+ko.unwrap(n.ModuleName)+"<\/a>")+('<\/span> - (<span class="nodetitle"><a onclick="app.route.Module_Map.NavigateTo('+ko.unwrap(n.ModuleId)+'); return false;" ')+('href="'+app.route.Module_Map.For(ko.unwrap(n.ModuleId)).GetUrl()+'">Module Map<\/a><\/span>)<\/div>')+('<div class="nodetext">'+Format.OverdueUpdate(moment.utc(ko.unwrap(n.ModuleLastUpdateUtc)),i.viewModel.MaxSyncInterval())+'<\/div><div class="nodetext">Static Location<\/div>')}}),r.AddPolygons({polygons:i.viewModel.GisPolygons.GisPolygonDetails,getLatLng:function(n){for(var r=[],i=ko.unwrap(n.Coordinates),t=0;t<i.length;++t)r.push(new google.maps.LatLng(ko.unwrap(i[t].Latitude),ko.unwrap(i[t].Longitude)));return r},getName:function(n){return ko.unwrap(n.Name)},getInfo:function(n){var t="";return ko.unwrap(n.IndexValues).forEach(function(n){i.viewModel.GisPolygons.ItemDescriptions().forEach(function(i){ko.unwrap(n.Key)===ko.unwrap(i.ItemIndex)&&(t+='<div class="nodetext"><strong>'+ko.unwrap(i.Description)+":<\/strong> "+ko.unwrap(n.Value)+"<\/div>")})}),"<div>"+ko.unwrap(n.Name)+t+"<\/div>"}}),i.AddItem(new HeaderPageItem("Network Map")),i.AddItem(r),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Nodes",ko.computed(function(){return(f()?"Hide":"Show")+" node map markers"}),function(){return f(!f())})]),Tile.CreateWithBlockSet([new Command_Block("Modules",ko.computed(function(){return(u()?"Hide":"Show")+" module map markers"}),function(){return u(!u())})]),Tile.CreateWithBlockSet([new Command_Block("GisDataset","View GIS dataset details",function(){return app.route.GisDataset_Details.NavigateTo(i.viewModel.GisPolygons.GisDatasetId)},ko.computed(function(){return i.viewModel.GisPolygons.GisDatasetId()!=null}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_NodesTable.For(i.viewModel.NetworkId),click:function(n){return app.route.Network_Node.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress})},update:!0,sort:"NodeAddress",ascending:!0,size:100}).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return Format.NodeAddress(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===GMap.DefaultLocation.Latitude)&&(n.Longitude===0||n.Longitude==null||n.Longitude===GMap.DefaultLocation.Longitude)?"Not Set":"("+n.Latitude+","+n.Longitude+")"})).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!1,!0)).AddColumn(new CommandTableColumnViewModel("Update Location","edit",function(n){return i.FormAction(function(){return Form.NetworkNodeSetLocationMap(i,i.viewModel.NetworkId(),n.NodeAddress,n.Latitude,n.Longitude,!1,function(){i.Update()})})()})).AddTitle("Network Nodes")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Network={NetworkId:ko.observable(0),NetworkName:ko.observable(""),ShortName:ko.observable(""),NetworkStatusId:ko.observable(0),NetworkStatus:ko.observable(""),LastSyncUtc:ko.observable(),TimeZoneName:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Modules",t.Network.NetworkName,app.route.Network_Details.For(t.Network.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_Modules=t}(Model||(Model={}));app.router.View(app.route.Network_Modules,function(n){function t(t){var i=n.call(this,t,new Model.Network_Modules)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Network.NetworkName,"Network Name",i.viewModel.Network.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+Format.LastUpdate(moment.utc(i.viewModel.Network.LastSyncUtc()))})),new Header_Actions(function(){return app.route.Network_Details.NavigateTo(i.viewModel.Network.NetworkId)})),new SingleValue_Block("Status",ko.computed(function(){return i.viewModel.Network.NetworkStatus()}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_ModulesTable.For(i.viewModel.Network.NetworkId),click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!0,sort:"NodeAddress",ascending:!0,size:50}).AddColumn(new CommandTableColumnViewModel("Node","node",function(n){return app.route.Network_Node.NavigateTo(i.viewModel.Network.NetworkId,{nodeAddress:n.NodeAddress})})).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!0,!0,function(n){return Format.NodeAddress(n.NodeAddress)})).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Type","Type",!0,!0)).AddColumn(new DateFilterTableColumnViewModel("LastUpdateUtc","Last Update",!1,!0)).AddColumn(new FilterTableColumnViewModel("Status","Status",!1,!0)).AddTitle("Network Modules")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.NodeName=ko.observable(""),t.Report=ko.observable(""),t.MtwImage=ko.observable(""),t.ImageSrc=ko.observable(""),t.MilkingsPerCycle=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("MTW Report",t.NodeName,app.route.Network_Node.For(t.NetworkId,{nodeAddress:t.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_MtwReport=t}(Model||(Model={}));app.router.View(app.route.Network_MtwReport,function(n){function t(t){var i=n.call(this,t,new Model.Network_MtwReport)||this;return i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdownNoEsc(i.viewModel.Report())}))),i.AddItem(new HtmlImagePageItem(i.viewModel.ImageSrc,"320px","720px",i.viewModel.ImageSrc)),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.IsLive=ko.observable(!1),t.Name=ko.observable(""),t.NetworkName=ko.observable(""),t.HasDevice=ko.observable(!1),t.DeviceTypeId=ko.observable(0),t.DeviceType=ko.observable(""),t.IoTypeId=ko.observable(0),t.MaxIoModules=ko.observable(0),t.AttachedIoModules=ko.observable(0),t.UsedSlotCount=ko.observable(0),t.DeviceModel=ko.observable(0),t.DeviceExtAddress=ko.observable(""),t.DeviceFirmwareVersion=ko.observable(0),t.DeviceBuildDate=ko.observable(""),t.DeviceLastUpdate=ko.observable(""),t.Latitude=ko.observable(0),t.Longitude=ko.observable(0),t.AppId=ko.observable(0),t.AppName=ko.observable(""),t.ApplicationGuid=ko.observable(""),t.AppBinaryId=ko.observable(0),t.AppVersionNumber=ko.observable(0),t.AppContainsSupplierIdTag=ko.observable(!1),t.SupplierIdTagValue=ko.observable(""),t.StatusId=ko.observable(0),t.NextStatusId=ko.observable(0),t.StatusName=ko.observable(""),t.NextStatusName=ko.observable(""),t.StatusMessage=ko.observable(""),t.StatusState=ko.observable(""),t.ModuleTiles=ko.observableArray(),t.SuppressedModules=ko.observableArray(),t.NetworkNodeTasks=ko.observableArray(),t.HardwareVerifiedUtc=ko.observable(),t.HardwareVerificationIssueCount=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Name,t.NetworkName,app.route.Network_Details.For(t.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_Node=t}(Model||(Model={}));app.router.View(app.route.Network_Node,function(n){function t(t){var i=n.call(this,t,new Model.Network_Node)||this,u,f,r,e,h,s,c,o,l,a;return i.ExtendMappingOptions({arrayChildId:{"NetworkNodeTasks[i]":"Id","SuppressedModules[i]":"ModuleId"},extend:{}}),u=ko.observable(!1),i.ExtendMappingOptions(Tile.CreateModuleTileMapping(i,"ModuleTiles[i]",function(n){return n.IsEnabled()||u()})),f=ko.computed(function(){return i.viewModel.NetworkNodeTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()||!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})}),r=ko.observable(!1),i.OnViewModelReady=function(){return r(!f())},e=new DashboardHeaderPageItem(0,ko.computed(function(){return"Node - "+(i.viewModel.StatusMessage()!=null?i.viewModel.StatusMessage():"Installed")+(f()?"":" - Required tasks outstanding")}),ko.computed(function(){return TileState[f()?i.viewModel.StatusState():"Faulted"]}),function(){return r(!r())}),e.addButton(new DashboardActionButton(0,"command","Change status to "+i.viewModel.NextStatusName(),i.FormAction(function(){return f()?Form.NetworkNodeConfirmStatusChange(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.StatusName(),i.viewModel.NextStatusId(),i.viewModel.NextStatusName(),i.Update):Form.NetworkNodeConfirmIncompleteStatusChange(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.NextStatusId(),i.Update)}),ko.computed(function(){return i.viewModel.NextStatusName()!=null}))),e.addButton(new DashboardActionButton(0,ko.computed(function(){return r()?"collapse":"expand"}),ko.computed(function(){return r()?"Hide":"Show"}),function(){return r(!r())},!0)),i.AddItem(e),i.AddItem(new AjaxFilterTableViewModel({route:null,click:null,update:!1,sort:"SortOrder",ascending:!0,size:25,enabled:r,hideRefresh:!0,data:i.viewModel.NetworkNodeTasks}).AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return Task.Icon(n.SourceType())},function(n){return Task.Source(n.SourceType())},function(n){return Task.Route(n.SourceType(),n.Parameters)})).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 Task.Tasks[n.Description()].GetDescription(n.IsCompleted(),n.Parameters)})).AddColumn(new TaskActionsTextTableColumnViewModel("Actions","Actions",i,function(){return function(){return i.Update()}},i.viewModel.Capabilities,function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks")),h=function(n,t){return app.route.Network_Node.NavigateTo(n,{nodeAddress:t})},i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return i.viewModel.DeviceType()&&i.viewModel.DeviceModel()?i.viewModel.DeviceType()+" v"+i.viewModel.DeviceModel():"No Device"}),i.viewModel.DeviceExtAddress,Format.NodeAddressComputed(i.viewModel.NodeAddress),"Node Address"),new Header_Actions(null,function(){return i.viewModel.DeviceType()&&i.viewModel.DeviceModel()?CopyToClipboard(i.viewModel.DeviceType()+" v"+i.viewModel.DeviceModel()):null},null,null,"Click to copy to clipboard",null,function(){return CopyToClipboard(i.viewModel.DeviceExtAddress)})),new SingleValue_Block("Status",i.viewModel.StatusName),new Command_Block("Status","Change the node status",i.FormAction(function(){return Form.NetworkNodeChangeStatus(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.StatusId(),i.viewModel.StatusName(),i.Update)}),i.HasCapabilityComputed(Capability.Network_SetNodeStatus)),new Command_Block("Rename","Rename network node",i.FormAction(function(){return Form.NetworkNodeRename(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.Name(),function(n){return i.viewModel.Name(n)})}),i.HasCapabilityComputed(Capability.Network_Edit)),new Command_Block("Map","View the node map",function(){return app.route.Network_NodeMap.NavigateTo(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress})},i.HasCapabilitySetAllComputed([Capability.Network_Edit,Capability.Network_SetLocation])),new Command_Block("Delete","Permanently delete node",i.FormAction(function(){return Form.NetworkNodeDelete(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),function(){return app.route.Network_Details.NavigateTo(i.viewModel.NetworkId)})}),i.HasCapabilityComputed(Capability.Network_DeleteNode))]),Tile.CreateWithBlockSet([new Header_Block("firmware",new Header_Text("Firmware",null,ko.computed(function(){return i.viewModel.DeviceFirmwareVersion()?"v"+i.viewModel.DeviceFirmwareVersion():"Unknown"}),ko.computed(function(){return i.viewModel.DeviceBuildDate()?"Built "+Format.DateTime(moment(i.viewModel.DeviceBuildDate())):""}),ko.computed(function(){return i.viewModel.DeviceLastUpdate()?"Updated "+Format.DateTime(moment(i.viewModel.DeviceLastUpdate())):""}))),new Command_Block("Update","Update node firmware",function(){return i.viewModel.IsLive()?i.FormAction(function(){return Form.NetworkNodeUpdateLiveFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)})():i.FormAction(function(){return Form.NetworkNodeUpdateFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)})()},i.viewModel.HasDevice),new Command_Block("Detach","Detach assigned device",i.FormAction(function(){return Form.NetworkNodeDetachDevice(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),i.viewModel.HasDevice),new Command_Block("View","View device details",function(){return app.route.Device_Details.NavigateTo(i.viewModel.DeviceExtAddress)},i.viewModel.HasDevice),new Command_Block("Attach","Attach a device to this node",i.FormAction(function(){return Form.NetworkNodeAttachDevice(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),ko.computed(function(){return!i.viewModel.HasDevice()})),new Command_Block("Query","Query the node for current version",i.FormAction(function(){return Form.NetworkNodeQueryFirmwareVersion(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),ko.computed(function(){return i.viewModel.IsLive()&&i.viewModel.HasDevice()&&i.HasCapability(Capability.Network_QueryNode)}))],null,i.HasCapabilityComputed(Capability.Network_ManageDevices)),Tile.CreateWithBlockSet([new Header_Block("logic-application",new Header_Text("Application",ko.computed(function(){return i.viewModel.AppVersionNumber()?"version "+i.viewModel.AppVersionNumber():""}),ko.computed(function(){return i.viewModel.AppName()?i.viewModel.AppName():"None"}),"Assigned Application")),new Command_Block("Update","Update node application",i.FormAction(function(){return Form.NetworkNodeUpdateApplication(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),function(){return s.LoadData()})}),ko.computed(function(){return i.viewModel.AppId()!=null&&i.HasCapability(Capability.Network_UpgradeApplication)})),new Command_Block("Config","Trigger configuration update",i.FormAction(function(){return Form.NetworkNodeUpdateConfig(i.viewModel.NetworkId(),i.viewModel.NodeAddress())})),new Command_Block("View","View application details",function(){return app.route.Application_AppVersion.NavigateTo(i.viewModel.AppId,{version:i.viewModel.AppVersionNumber})},ko.computed(function(){return i.viewModel.AppId()!=null&&i.viewModel.AppVersionNumber()!=null})),new Command_Block("Change","Change the assigned application",i.FormAction(function(){return Form.NetworkNodeChangeApplication(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.DeviceTypeId(),i.viewModel.ApplicationGuid(),i.viewModel.AppBinaryId(),i.viewModel.AppName(),i.viewModel.AppVersionNumber(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_ChangeApplication)&&i.viewModel.DeviceTypeId()!=null}))],ko.computed(function(){return i.viewModel.AppName()?"Idle":"Faulted"}),i.HasCapabilitySetAnyComputed([Capability.Network_ChangeApplication,Capability.Network_UpgradeApplication,Capability.Network_ManageDevices])),Tile.CreateWithBlockSet([new Header_Block("tools",new Header_Text("Tools")),new Command_Block("Ping","Ping the network node",i.FormAction(function(){return Form.NetworkNodeLivePing(i.viewModel.NetworkId(),i.viewModel.NodeAddress())}),ko.computed(function(){return i.viewModel.IsLive()&&(i.HasCapability(Capability.Network_Diagnostics)||i.HasCapability(Capability.Network_PingNode))})),new Command_Block("Reboot","Reboot the network node",i.FormAction(function(){return Form.NetworkNodeLiveReboot(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),ko.computed(function(){return i.viewModel.IsLive()&&i.HasCapability(Capability.Network_RemoteReboot)})),new Command_Block("Reboot","Reboot the network node",i.FormAction(function(){return Form.NetworkNodeReboot(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),function(){return s.LoadData()})}),ko.computed(function(){return!i.viewModel.IsLive()&&i.HasCapability(Capability.Network_RemoteReboot)})),new Command_Block("Verify","Verify node hardware",i.FormAction(function(){return Form.NetworkNodeVerifyHardware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),ko.computed(function(){return i.viewModel.IsLive()&&i.HasCapability(Capability.Network_VerifyHardware)})),new Command_Block("Issues","View verification issues",function(){return app.route.Network_VerificationIssues.NavigateTo(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress})},ko.computed(function(){return i.viewModel.HardwareVerifiedUtc()!=null&&i.viewModel.HardwareVerificationIssueCount()>0&&(i.HasCapability(Capability.Network_Diagnostics)||i.HasCapability(Capability.Network_VerifyHardware))}),null,"state-faulted"),new Command_Block("Move","Move the node to a network",i.FormAction(function(){return Form.NetworkNodeMove(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.NetworkName(),h)}),i.HasCapabilityComputed(Capability.Network_CreateNode))],null,ko.computed(function(){return i.viewModel.IsLive()&&i.HasCapability(Capability.Network_Diagnostics)||i.HasCapability(Capability.Network_RemoteReboot)||i.HasCapability(Capability.Network_CreateNode)})),Tile.CreateWithBlockSet([new Header_Block("module",new Header_Text("Modules",null,ko.computed(function(){return i.viewModel.ModuleTiles().length}),"Total number of modules")),new Command_Block("Show","Show disabled modules",function(){return u(!0)},ko.computed(function(){return!u()})),new Command_Block("Hide","Hide disabled modules",function(){return u(!1)},u),new Command_Block("Modules","Apply a template to this node",i.FormAction(function(){return Form.NetworkNodeApplyApplicationTemplate(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.DeviceTypeId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_Edit)&&i.HasCapability(Capability.Network_CreateNode)&&i.viewModel.ModuleTiles().length===0})),new Command_Block("Upgrade","Upgrade modules from a template",i.FormAction(function(){return Form.NetworkNodeApplyTemplateUpgrade(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.DeviceTypeId(),i.HasCapabilityComputed(Capability.Module_Delete),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_Edit)&&i.HasCapability(Capability.Network_CreateNode)&&i.viewModel.ModuleTiles().length>0})),new Command_Block("Create","Create a module on this node",i.FormAction(function(){return Form.NetworkNodeCreateModule(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),i.HasCapabilitySetAllComputed([Capability.Network_Edit,Capability.Module_Create])),new Command_Block("Delete","Remove all modules from node",i.FormAction(function(){return Form.NetworkNodeDeleteModules(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_Edit)&&i.HasCapability(Capability.Module_Delete)&&i.viewModel.ModuleTiles().length>0})),new Command_Block("Suppress","Suppress module alerts on node",i.FormAction(function(){return Form.NetworkNodeSuppressAlerts(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),i.HasCapabilityComputed(Capability.Module_SuppressAlerts)),new Command_Block("Setup","Setup application",i.FormAction(function(){return Form.NetworkNodeSetupApplication(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.SupplierIdTagValue(),i.Update)}),ko.computed(function(){return i.viewModel.AppContainsSupplierIdTag()&&i.HasCapability(Capability.Network_SetupApplication)})),new Command_Block("MTW","View MTW Details",function(){return app.route.Network_MtwReport.NavigateTo(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress})},ko.computed(function(){return i.viewModel.AppContainsSupplierIdTag()&&i.HasCapability(Capability.Network_SetupApplication)}))]),Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text("Network",null,i.viewModel.NetworkName,"Network Name"),new Header_Actions(function(){return app.route.Network_Details.NavigateTo(i.viewModel.NetworkId)}))])])),i.AddItem(new HeaderPageItem("Modules")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Clear All","Clear all suppressed module alerts",i.FormAction(function(){return Form.NetworkNodeClearSuppressedAlerts(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Module_SuppressAlerts)&&i.viewModel.SuppressedModules().length>0}))])])),i.AddItem(new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!1,sort:"SuppressedAlertsUtc",ascending:!1,size:25,enabled:ko.computed(function(){return i.viewModel.SuppressedModules().length>0}),hideRefresh:!0,data:i.viewModel.SuppressedModules}).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 i.FormAction(function(){return Form.ModuleClearSuppressedAlerts(n.ModuleId(),n.Name(),i.Update)})()},i.HasCapabilityComputed(Capability.Module_SuppressAlerts))).AddTitle("Modules With Suppressed Alerts")),c=Tile.CreatePageItem().addTileSet(i.viewModel.ModuleTiles),i.AddItem(c),i.AddItem(new HeaderPageItem("I/O Modules",null,null,null,null,null,null,i.HasCapabilityComputed(Capability.Network_ManageDevices))),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("module",new Header_Text("I/O Modules",null,ko.computed(function(){return i.viewModel.UsedSlotCount()+"/"+i.viewModel.MaxIoModules()}),"Total slots used")),new SingleValue_Block("Device"+(i.viewModel.AttachedIoModules()!==1?"s":"")+" Attached",i.viewModel.AttachedIoModules),new Command_Block("Add","Add I/O module",i.FormAction(function(){return Form.NetworkNodeAddIoModule(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.DeviceTypeId(),i.viewModel.IoTypeId(),i.viewModel.MaxIoModules(),i.Update)}),ko.computed(function(){return i.viewModel.MaxIoModules()>0}))],null,i.HasCapabilityComputed(Capability.Network_ManageDevices))])),l=function(n,t){Form.ViewPostRequest(i,{route:app.route.Network_LiveQueryNodeDeviceExtAddress.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress,slotIndex:t.slotIndex}),onSuccess:function(i){if(i.Response==null){t.message("Device query could not obtain the device extended address");return}t.message(i.Message);n.filterString(i.Response)},onComplete:function(){return t.displayName("Query Device")}})},a=function(n,t,r){o.LoadData();i.FormAction(function(){return Form.NetworkNodeUpdateIoModuleFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n,t,r,i.Update)})()},i.AddItem(o=new AjaxFilterTableViewModel({route:app.route.Network_NodeIoModulesTable.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:function(n){return i.FormAction(function(){return Form.NetworkNodeShowIoDeviceDetails(n.SlotIndex,n.DeviceType,n.DeviceExtAddress,n.HasConfigurableSerialPorts)})()},update:!0,sort:"SlotIndex",ascending:!0,size:10,enabled:i.HasCapabilityComputed(Capability.Network_ManageDevices)}).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 i.FormAction(function(){return Form.NetworkNodeChangeIoModuleDeviceType(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.DeviceTypeId,n.SlotIndex,i.viewModel.IoTypeId(),i.viewModel.MaxIoModules(),function(){return o.LoadData()})})()},!0,function(n){return n.SlotIndex>0})).AddColumn(new CommandTableColumnViewModel("Update Firmware","firmware",function(n){return i.FormAction(function(){return n.SlotIndex==0?i.viewModel.IsLive()?Form.NetworkNodeUpdateLiveFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update):Form.NetworkNodeUpdateFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.Update):n.DeviceExtAddress==null?Form.NetworkNodeAttachDeviceBeforeUpdatingFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.DeviceTypeId,n.SlotIndex,l,a):Form.NetworkNodeUpdateIoModuleFirmware(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.DeviceTypeId,n.SlotIndex,n.DeviceExtAddress,i.Update)})()})).AddColumn(new CommandTableColumnViewModel("Ping IO Module","ping",function(n){return i.FormAction(function(){return n.SlotIndex===0?Form.NetworkNodeLivePing(i.viewModel.NetworkId(),i.viewModel.NodeAddress()):Form.NetworkNodeLivePingIoModule(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.SlotIndex)})()},i.HasCapabilityComputed(Capability.Network_QueryNode))).AddColumn(new CommandTableColumnViewModel("Configure Ports","network-address",function(){return app.route.Network_NodePortConfig.NavigateTo(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress})},i.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return n.SlotIndex===0&&n.HasConfigurableSerialPorts})).AddColumn(new CommandTableColumnViewModel("IO Module State","config",function(n){return app.route.Network_NodeIoModuleDetails.NavigateTo(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress,slotIndex:n.SlotIndex})},i.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return n.IsLive})).AddColumn(new CommandTableColumnViewModel("Temperatures","temperature",function(n){return app.route.Network_NodeIoModuleTemperatureDetails.NavigateTo(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress,slotIndex:n.SlotIndex})},i.HasCapabilityComputed(Capability.Network_QueryTemperatureProbe),function(n){return Form.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 i.FormAction(function(){return n.DeviceExtAddress==null?Form.NetworkNodeAttachDeviceToIoModule(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.DeviceTypeId,n.SlotIndex,n.DeviceType,i.Update):Form.NetworkNodeDetachDeviceFromIoModule(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.SlotIndex,n.DeviceExtAddress,i.Update)})()},i.HasCapabilityComputed(Capability.Network_ManageDevices),function(n){return n.SlotIndex>0})).AddColumn(new CommandTableColumnViewModel("Delete I/O Module Slot","delete",function(n){return i.FormAction(function(){return Form.NetworkNodeDeleteIoModule(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),n.SlotIndex,function(){return o.LoadData()})})()},i.HasCapabilityComputed(Capability.Network_ManageDevices),function(n){return n.SlotIndex>0&&i.HasCapabilityComputed(Capability.Network_PortConfigure)})).AddTitle("Network Node I/O Modules")),i.AddItem(s=new AjaxFilterTableViewModel({route:app.route.Network_NodeEventsTable.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.NetworkName=ko.observable(""),t.NodeName=ko.observable(""),t.DeviceExtAddress=ko.observable(""),t.DeviceType=ko.observable(""),t.DeviceTypeId=ko.observable(0),t.IoType=ko.observable(""),t.IoTypeId=ko.observable(0),t.SlotIndex=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return"I/O Module "+t.SlotIndex()+" Details"},t.NodeName,app.route.Network_Node.For(t.NetworkId,{nodeAddress:t.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_NodeIoModuleDetails=t}(Model||(Model={}));app.router.View(app.route.Network_NodeIoModuleDetails,function(n){function t(t){var i=n.call(this,t,new Model.Network_NodeIoModuleDetails)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_QueryIoState.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress,ioModuleSlot:i.viewModel.SlotIndex,ioTypeId:i.viewModel.IoTypeId,deviceType:i.viewModel.DeviceType}),click:null,update:!0,sort:"Name",ascending:!0,size:50}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Value","State",!1,!0)).AddColumn(new FilterTableColumnViewModel("Status","Notes",!1,!0)).AddTitle("State")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_LiveQueryNodeGetAttachedNodes.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:function(n){return n.NodeAddress<240?app.route.Network_Node.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress}):null},update:!0,sort:"NodeAddress",ascending:!0,size:10}).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node Address",!1,!0,function(n){return Format.NodeAddress(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 app.route.Network_NodeQueryDetails.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress})},i.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return ko.computed(function(){return n.NodeAddress<240})()})).AddTitle("Attached Nodes")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.NodeName=ko.observable(""),t.SlotIndex=ko.observable(0),t.IoTypeId=ko.observable(0),t.DeviceType=ko.observable(""),t.DeviceExtAddress=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("I/O Module Temperature Details",t.NodeName,app.route.Network_Node.For(t.NetworkId,{nodeAddress:t.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_NodeIoModuleTemperatureDetails=t}(Model||(Model={}));app.router.View(app.route.Network_NodeIoModuleTemperatureDetails,function(n){function t(t){var i=n.call(this,t,new Model.Network_NodeIoModuleTemperatureDetails)||this,h=ko.observable(!1),f=ko.observableArray([]),r,e,o,u=function(){r.LoadData();e.LoadData();o.LoadData()},c=32,l=function(n){var i,t;for(f([]),i=function(t){var i=r.data().filter(function(i){return i.Index===t&&i.Channel===n});i.length>0?f.push({Index:t,Type:i[0].IsFixed?"Fixed":"Transient",DeviceExtAddress:i[0].DeviceExtAddress}):f.push({Index:t,Type:"",DeviceExtAddress:""})},t=0;t<c;t++)i(t)},s=function(){return r.data().filter(function(n){return n.IsFixed}).map(function(n){return{Channel:n.Channel,TargetSlot:n.Index,IsFixed:n.IsFixed,DeviceExtAddress:n.DeviceExtAddress}})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Snapshot","Create a snapshot",i.FormAction(function(){return Form.NetworkNodeIoModuleCreateSnapshot(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.IoTypeId(),i.viewModel.SlotIndex(),s(),u)}),ko.computed(function(){return i.HasCapability(Capability.Network_EnrolTemperatureProbe)&&!h()&&r.data().length>0}))])])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network-node",new Header_Text(i.viewModel.DeviceType,i.viewModel.DeviceExtAddress,Format.NodeAddressComputed(i.viewModel.NodeAddress),"Node Address")),new SingleValue_Block("Slot Index",i.viewModel.SlotIndex()),new Command_Block("View","View device",function(){return app.route.Device_Details.NavigateTo(i.viewModel.DeviceExtAddress())},ko.computed(function(){return i.viewModel.DeviceExtAddress()!==""&&i.viewModel.DeviceExtAddress()!=null}))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Network_LiveQueryTemperatures.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress,ioModuleSlot:i.viewModel.SlotIndex,ioTypeId:i.viewModel.IoTypeId}),click:null,update:!0,sort:"Channel",ascending:!0,size:50}).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-enroll","sort",function(n){l(n.Channel);i.FormAction(function(){return Form.NetworkNodeIoModuleChangeSlot(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.IoTypeId(),i.viewModel.SlotIndex(),n.Channel,n.DeviceExtAddress,n.Index,n.IsFixed,n.Temperature,f(),u)})()},i.HasCapabilityComputed(Capability.Network_EnrolTemperatureProbe))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.NetworkNodeIoModuleRemoveProbe(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.IoTypeId(),i.viewModel.SlotIndex(),n.Channel,n.DeviceExtAddress,n.Index,n.IsFixed,n.Temperature,s(),u)})()},i.HasCapabilityComputed(Capability.Network_EnrolTemperatureProbe))).AddTitle("Probes")),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.Network_OneWireTempProbeChangelogs.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress,ioModuleSlot:i.viewModel.SlotIndex,ioTypeId:i.viewModel.IoTypeId}),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:10}).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 i.FormAction(function(){return Form.NetworkNodeIoModuleReEnrollTemperatureProbe(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.IoTypeId(),i.viewModel.SlotIndex(),n.Channel,n.DeviceExtAddress,n.TargetSlot,n.Comment,u)})()},i.HasCapabilityComputed(Capability.Network_EnrolTemperatureProbe))).AddTitle("Temperature Probe Changes")),i.AddItem(o=new AjaxFilterTableViewModel({route:app.route.Network_OneWireTempProbeSnapshots.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:function(n){return i.FormAction(function(){return Form.NetworkNodeIoModuleReapplySnapshot(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.IoTypeId(),i.viewModel.SlotIndex(),n.OneWireTempSnapshotId,n.SnapshotData,u)})()},update:!0,sort:"CreatedUtc",ascending:!1,size:10}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.IsLive=ko.observable(!1),t.Name=ko.observable(""),t.NetworkName=ko.observable(""),t.HasDevice=ko.observable(!1),t.DeviceTypeId=ko.observable(0),t.DeviceType=ko.observable(""),t.IoTypeId=ko.observable(0),t.DeviceModel=ko.observable(0),t.DeviceExtAddress=ko.observable(""),t.DeviceFirmwareVersion=ko.observable(0),t.DeviceBuildDate=ko.observable(),t.DeviceLastUpdate=ko.observable(),t.Latitude=ko.observable(0),t.Longitude=ko.observable(0),t.FirstNodeLatitude=ko.observable(0),t.FirstNodeLongitude=ko.observable(0),t.AppId=ko.observable(0),t.AppName=ko.observable(""),t.ApplicationGuid=ko.observable(""),t.AppBinaryId=ko.observable(0),t.AppVersionNumber=ko.observable(0),t.StatusId=ko.observable(0),t.StatusName=ko.observable(""),t.StatusMessage=ko.observable(""),t.StatusState=ko.observable(""),t.getLat=function(){return t.Latitude()!=null?t.Latitude():t.FirstNodeLatitude()!=null?t.FirstNodeLatitude():null},t.getLng=function(){return t.Longitude()!=null?t.Longitude():t.FirstNodeLongitude()!=null?t.FirstNodeLongitude():null},t.hasLocation=function(){return!(t.Latitude()==null&&t.Longitude()==null)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Node Map",t.Name,app.route.Network_Node.For(t.NetworkId,{nodeAddress:t.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_NodeMap=t}(Model||(Model={}));app.router.View(app.route.Network_NodeMap,function(n){function t(t){var i=n.call(this,t,new Model.Network_NodeMap)||this,r=new MapPageItem(i,!0),u=function(n,t){n===0&&t===0?(i.viewModel.Latitude(null),i.viewModel.Longitude(null)):(i.viewModel.Latitude(n),i.viewModel.Longitude(t));r.zoomToBounds()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network-node",new Header_Text("Network",i.viewModel.NetworkName,i.viewModel.Name,"Node")),new SingleValue_Block("Latitude",ko.computed(function(){return i.viewModel.Latitude()!=null?i.viewModel.Latitude().toFixed(6):"none"})),new SingleValue_Block("Longitude",ko.computed(function(){return i.viewModel.Longitude()!=null?i.viewModel.Longitude().toFixed(6):"none"})),new Command_Block("Set Location","Set the node location",i.FormAction(function(){return Form.NetworkNodeSetLocationMap(i,i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.getLat(),i.viewModel.getLng(),i.viewModel.hasLocation(),u)}),i.HasCapabilityComputed(Capability.Module_SetLocation))])])),i.AddItem(new HeaderPageItem("Network Map")),r.AddItems({items:ko.observableArray([i.viewModel]),getLatLng:GMap.GetLatLng,getText:function(n){return ko.unwrap(n.Latitude)!=null&&ko.unwrap(n.Longitude)!=null?ko.unwrap(n.Name)+": "+ko.unwrap(n.Latitude).toFixed(6)+", "+ko.unwrap(n.Longitude).toFixed(6):""},getInfo:function(n){return ko.unwrap(n.Latitude)!=null&&ko.unwrap(n.Longitude)!=null?ko.unwrap(n.Name)+" - lat:"+ko.unwrap(n.Latitude).toFixed(6)+", lng:"+ko.unwrap(n.Longitude).toFixed(6):""},getIcon:function(){return GMap.Icons.gatewayGreen},getZIndex:function(){return 1}}),i.AddItem(r),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.IsLive=ko.observable(!1),t.IsLinkUp=ko.observable(!1),t.Name=ko.observable(""),t.NetworkName=ko.observable(""),t.HasDevice=ko.observable(!1),t.DeviceType=ko.observable(""),t.DeviceModel=ko.observable(0),t.DeviceExtAddress=ko.observable(""),t.DeviceFirmwareVersion=ko.observable(0),t.DeviceBuildDate=ko.observable(),t.DeviceLastUpdate=ko.observable(""),t.StatusId=ko.observable(0),t.StatusName=ko.observable(""),t.CommsPortTypes=ko.observableArray(),t.SerialParities=ko.observableArray(),t.SerialStopBits=ko.observableArray(),t.ConfigurablePorts=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Node Port Configuration",t.Name,app.route.Network_Node.For(t.NetworkId,{nodeAddress:t.NodeAddress}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_NodePortConfig=t}(Model||(Model={}));app.router.View(app.route.Network_NodePortConfig,function(n){function t(t){var i=n.call(this,t,new Model.Network_NodePortConfig)||this,r=ko.computed(function(){return i.viewModel.IsLive()&&i.viewModel.HasDevice()&&i.viewModel.ConfigurablePorts().length>0&&i.HasCapability(Capability.Network_PortConfigure)}),u;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return i.viewModel.DeviceType()&&i.viewModel.DeviceModel()?i.viewModel.DeviceType()+" v"+i.viewModel.DeviceModel():"No Device"}),i.viewModel.DeviceExtAddress,Format.NodeAddressComputed(i.viewModel.NodeAddress),"Node Address"),new Header_Actions(null,function(){return i.viewModel.DeviceType()&&i.viewModel.DeviceModel()?CopyToClipboard(i.viewModel.DeviceType()+" v"+i.viewModel.DeviceModel()):null},null,null,"Click to copy to clipboard",null,function(){return CopyToClipboard(i.viewModel.DeviceExtAddress)})),new SingleValue_Block("Network",ko.computed(function(){return i.viewModel.IsLinkUp()?"Online":"Offline"}),null,null,ko.computed(function(){return i.viewModel.IsLinkUp()?"state-active":"state-faulted"})),new Command_Block("Configure","Configure port with new settings",function(){return i.viewModel.IsLinkUp()?i.FormAction(function(){return Form.NetworkCreatePortConfig(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.ConfigurablePorts(),i.viewModel.CommsPortTypes(),i.viewModel.SerialStopBits(),i.viewModel.SerialParities(),0,i.viewModel.CommsPortTypes().length>0?i.viewModel.CommsPortTypes()[0]:"",115200,8,i.viewModel.SerialStopBits().length>0?i.viewModel.SerialStopBits()[0]:"",i.viewModel.SerialParities().length>0?i.viewModel.SerialParities()[0]:"",0,i.Update)})():i.SetMessage("Network is offline")},r)])])),u=function(n){return i.FormAction(function(){return Form.NetworkDisplayPortConfig(n.PortIndex,n.PortType,n.BaudRate,n.DataBits,n.StopBits,n.Parity,n.LocalAddress,n.CreatedUtc,n.CreatedUser,n.Reason)})()},i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_NodePortConfigTable.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:u,update:!0,sort:"PortIndex",ascending:!0,size:10}).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 i.viewModel.IsLinkUp()?i.FormAction(function(){return Form.NetworkCreatePortConfig(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.ConfigurablePorts(),i.viewModel.CommsPortTypes(),i.viewModel.SerialStopBits(),i.viewModel.SerialParities(),n.PortIndex,n.PortType,n.BaudRate,n.DataBits,n.StopBits,n.Parity,n.LocalAddress,i.Update)})():i.SetMessage("Network is offline")},r)).AddTitle("Current Configuration")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_NodePortConfigHistoryTable.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:u,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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 i.viewModel.IsLinkUp()?i.FormAction(function(){return Form.NetworkCreatePortConfig(i.viewModel.NetworkId(),i.viewModel.NodeAddress(),i.viewModel.ConfigurablePorts(),i.viewModel.CommsPortTypes(),i.viewModel.SerialStopBits(),i.viewModel.SerialParities(),n.PortIndex,n.PortType,n.BaudRate,n.DataBits,n.StopBits,n.Parity,n.LocalAddress,i.Update)})():i.SetMessage("Network is offline")},r)).AddTitle("Configuration History")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NodeAddress=ko.observable(0),t.IsLive=ko.observable(!1),t.Name=ko.observable(""),t.NetworkName=ko.observable(""),t.DeviceType=ko.observable(""),t.DeviceModel=ko.observable(0),t.DeviceExtAddress=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Query Node",ko.computed(function(){return t.Name()==null?"Unknown":t.Name()}),ko.computed(function(){return t.Name()==null?app.route.Network_Details.For(t.NetworkId):app.route.Network_Node.For(t.NetworkId,{nodeAddress:t.NodeAddress})}))},t}return __extends(t,n),t}(n.Base_Model);n.Network_NodeQueryDetails=t}(Model||(Model={}));app.router.View(app.route.Network_NodeQueryDetails,function(n){function t(t){var i=n.call(this,t,new Model.Network_NodeQueryDetails)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network-node",new Header_Text(ko.computed(function(){return i.viewModel.DeviceType()&&i.viewModel.DeviceModel()?i.viewModel.DeviceType()+" v"+i.viewModel.DeviceModel():"No Device"}),i.viewModel.DeviceExtAddress,Format.NodeAddressComputed(i.viewModel.NodeAddress),"Node Address"),new Header_Actions(null,function(){return i.viewModel.DeviceType()&&i.viewModel.DeviceModel()?CopyToClipboard(i.viewModel.DeviceType()+" v"+i.viewModel.DeviceModel()):null},null,null,"Click to copy to clipboard",null,function(){return CopyToClipboard(i.viewModel.DeviceExtAddress)}))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_LiveQueryNode.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:null,update:!0,sort:null,ascending:!1,size:50}).AddColumn(new FilterTableColumnViewModel("Key","Property",!1,!0)).AddColumn(new FilterTableColumnViewModel("Value","Value",!1,!0)).AddTitle("Network Node Details")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_LiveQueryNodeGetAttachedNodes.For(i.viewModel.NetworkId,{nodeAddress:i.viewModel.NodeAddress}),click:function(n){return n.NodeAddress<240?app.route.Network_Node.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress}):null},update:!0,sort:"NodeAddress",ascending:!0,size:10}).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node Address",!1,!0,function(n){return Format.NodeAddress(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 app.route.Network_NodeQueryDetails.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress})},i.HasCapabilityComputed(Capability.Network_QueryNode),function(n){return n.NodeAddress<240})).AddTitle("Attached Nodes")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.NetworkName=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Status History",t.NetworkName,app.route.Network_Details.For(t.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_NodeStatusHistory=t}(Model||(Model={}));app.router.View(app.route.Network_NodeStatusHistory,function(n){function t(t){var i=n.call(this,t,new Model.Network_NodeStatusHistory)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_NodeStatusHistoryTable.For(i.viewModel.NetworkId),click:function(n){return app.route.Network_Node.NavigateTo(i.viewModel.NetworkId,{nodeAddress:n.NodeAddress})},update:!0,sort:"DateUtc",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("DateUtc","Date",!1,!0)).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!1,!0,Format.NodeAddressAndName)).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Network={NetworkId:ko.observable(0),NetworkName:ko.observable(""),ShortName:ko.observable(""),NetworkStatusId:ko.observable(0),NetworkStatus:ko.observable(""),LastSyncUtc:ko.observable(),TimeZoneName:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Overdue Subscribers",t.Network.NetworkName,app.route.Network_Details.For(t.Network.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_OverdueSubscribers=t}(Model||(Model={}));app.router.View(app.route.Network_OverdueSubscribers,function(n){function t(t){var i=n.call(this,t,new Model.Network_OverdueSubscribers)||this,r;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Network.NetworkName,"Network Name",i.viewModel.Network.ShortName,"SMS Name",ko.computed(function(){return"Last sync: "+Format.LastUpdate(moment.utc(i.viewModel.Network.LastSyncUtc()))})),new Header_Actions(function(){return app.route.Network_Details.NavigateTo(i.viewModel.Network.NetworkId)})),new SingleValue_Block("Status",i.viewModel.Network.NetworkStatus)]),Tile.CreateWithBlockSet([new Command_Block("Add User","Add a new User",i.FormAction(function(){return Form.NetworkAddSubscriberUser(i.viewModel.Network.NetworkId(),function(){return r.LoadData()})}),i.HasCapabilityComputed(Capability.Network_AddStatusSubscribers))])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Network_OverdueSubscribersTable.For(i.viewModel.Network.NetworkId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"UserName",ascending:!0,size:50}).AddColumn(new FilterTableColumnViewModel("Name","User",!1,!0)).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.NetworkRemoveSubscriptionUser(i.viewModel.Network.NetworkId(),n.UserId,n.Name,function(){return r.LoadData()})})()},i.HasCapabilityComputed(Capability.Network_RemoveStatusSubscribers))).AddTitle("Overdue Alert Subscribers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Network={NetworkId:ko.observable(0),NetworkName:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Tags",t.Network.NetworkName,app.route.Network_Details.For(t.Network.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_Tags=t}(Model||(Model={}));app.router.View(app.route.Network_Tags,function(n){function t(t){var i=n.call(this,t,new Model.Network_Tags)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Attach Tags","Add tags to Network",i.FormAction(function(){return Form.NetworkAttachTag(i.viewModel.Network.NetworkId(),i.Update)}),i.HasCapabilityComputed(Capability.Tag_Attach))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_TagsTable.For(i.viewModel.Network.NetworkId),click:null,update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Tag Name",!0,!0)).AddColumn(new FilterTableColumnViewModel("TagValue","Value",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit Value","edit",function(n){return i.FormAction(function(){return Form.NetworkEditTag(i.viewModel.Network.NetworkId(),n.TagId,n.TagValue,i.Update)})()},i.HasCapabilityComputed(Capability.Tag_Update))).AddColumn(new CommandTableColumnViewModel("Remove","delete",function(n){return i.FormAction(function(){return Form.NetworkRemoveTag(i.viewModel.Network.NetworkId(),n.TagId,n.Name,i.viewModel.Network.NetworkName(),i.Update)})()},i.HasCapabilityComputed(Capability.Tag_Remove))).AddTitle("Network Tags")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_TagValueHistoryTable.For(i.viewModel.Network.NetworkId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.Name=ko.observable(""),t.ShortName=ko.observable(""),t.TimeZoneName=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Updates",t.Name,app.route.Network_Details.For(t.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_UpdateQueue=t}(Model||(Model={}));app.router.View(app.route.Network_UpdateQueue,function(n){function t(t){var i=n.call(this,t,new Model.Network_UpdateQueue)||this,r;return i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Network_UpdatesTable.For(i.viewModel.NetworkId),click:function(n){return i.FormAction(function(){return Form.NetworkUpdateDetails(i,i.viewModel.NetworkId(),n.NetworkUpdateId,n.Description,n.CreatedUtc,n.Cancelled,n.CancelledUser,n.Completed,n.Succeeded,n.Attempts)})()},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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 i.FormAction(function(){return Form.NetworkUpdateCancel(i.viewModel.NetworkId(),n.NetworkUpdateId,n.Description,function(){return r.LoadData()})})()},i.HasCapabilityComputed(Capability.Network_CancelUpdate),function(n){return!n.Completed})).AddTitle("Network Updates")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkId=ko.observable(0),t.Name=ko.observable(""),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Users with Access",t.Name,app.route.Network_Details.For(t.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.Network_Users=t}(Model||(Model={}));app.router.View(app.route.Network_Users,function(n){function t(t){var i=n.call(this,t,new Model.Network_Users)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Network_UsersTable.For(i.viewModel.NetworkId),click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!0,sort:"UserName",ascending:!0,size:50}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Subscription={NetworkSubscriptionId:ko.observable(0),NetworkId:ko.observable(0),NetworkName:ko.observable(""),NetworkNodeCount:ko.observable(0),BillingEntityId:ko.observable(0),CustomerName:ko.observable(""),EndLocal:ko.observable(),Fee:ko.observable(0),Expired:ko.observable(!1),CancelledUtc:ko.observable(),CancelledById:ko.observable(0),CancelledByUser:ko.observable(""),IsCancelled:ko.observable(!1),XeroInvoiceGuid:ko.observable(""),XeroInvoicedUtc:ko.observable(),XeroInvoiceNumber:ko.observable(""),XeroInvoiceStatus:ko.observable(""),XeroInvoiceIsPaid:ko.observable(!1),SubscriptionPlanId:ko.observable(0),SubscriptionPlan:ko.observable(""),SubscriptionPeriodMonths:ko.observable(0),MaxNodes:ko.observable(0),SubscriptionPlanAttached:ko.observable(!1)},t.GroupId=ko.observable(0),t.RequestedSubscriptionId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Subscription Details",t.Subscription.NetworkName,app.route.Network_Details.For(t.Subscription.NetworkId))},t}return __extends(t,n),t}(n.Base_Model);n.NetworkSubscription_Details=t}(Model||(Model={}));app.router.View(app.route.NetworkSubscription_Details,function(n){function t(t){var i=n.call(this,t,new Model.NetworkSubscription_Details)||this,r=function(n){return app.route.NetworkSubscription_Details.NavigateTo(n,{groupId:i.viewModel.GroupId})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text(i.viewModel.Subscription.NetworkName,"Network Name",i.viewModel.Subscription.CustomerName,"Customer")),new Command_Block("View","View network details",function(){return app.route.Network_Details.NavigateTo(i.viewModel.Subscription.NetworkId)}),new Command_Block("Billing Entity","Change billing entity",i.FormAction(function(){return Form.NetworkSubscriptionChangeBillingEntity(i.viewModel.Subscription.NetworkSubscriptionId(),i.viewModel.Subscription.BillingEntityId(),r)}),i.HasCapabilityComputed(Capability.NetworkSubscriptions_Create))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Network Subscription"),new SingleValue_Block("Expires",ko.computed(function(){return Format.DueDate(moment(i.viewModel.Subscription.EndLocal()))+(i.viewModel.Subscription.Expired()?"(Expired)":"")})),new SingleValue_Block("Subscription",Format.Currency(i.viewModel.Subscription.Fee())),new SingleValue_Block("Cancelled",Format.DueDate(moment(i.viewModel.Subscription.CancelledUtc())),ko.computed(function(){return i.viewModel.Subscription.IsCancelled()})),new SingleValue_Block("Cancelled By",i.viewModel.Subscription.CancelledByUser,ko.computed(function(){return i.viewModel.Subscription.IsCancelled()})),new Command_Block("Renew","Renew expired subscription",i.FormAction(function(){return Form.NetworkSubscriptionRenew({NetworkSubscriptionId:i.viewModel.Subscription.NetworkSubscriptionId(),NetworkSubscriptionPlanId:i.viewModel.Subscription.SubscriptionPlanId(),SubscriptionPeriodMonths:i.viewModel.Subscription.SubscriptionPeriodMonths(),EndLocal:i.viewModel.Subscription.EndLocal(),Fee:i.viewModel.Subscription.Fee()},r)}),ko.computed(function(){return i.viewModel.Subscription.Expired()&&i.HasCapability(Capability.NetworkSubscriptions_Renew)})),new Command_Block("Cancel","Cancel subscription",i.FormAction(function(){return Form.NetworkSubscriptionCancel(i.viewModel.Subscription.NetworkSubscriptionId(),i.Update)}),ko.computed(function(){return!i.viewModel.Subscription.IsCancelled()&&i.HasCapability(Capability.NetworkSubscriptions_Cancel)})),new Command_Block("Assign","Assign subscription plan",i.FormAction(function(){return Form.NetworkSubscriptionAssignSubscriptionPlan(i.viewModel.Subscription.NetworkSubscriptionId(),i.viewModel.Subscription.SubscriptionPlanId(),i.Update)}),ko.computed(function(){return!i.viewModel.Subscription.SubscriptionPlanAttached()&&!i.viewModel.Subscription.Expired()&&i.HasCapability(Capability.NetworkSubscriptions_Create)}))],ko.computed(function(){return i.viewModel.Subscription.IsCancelled()?TileState.Faulted:i.viewModel.Subscription.Expired()?TileState.Warning:TileState.Active})),Tile.CreateWithBlockSet([new SmallHeader_Block("Subscription Plan"),new Command_Block("Name",i.viewModel.Subscription.SubscriptionPlan,function(){return app.route.NetworkSubscriptionPlan_Details.NavigateTo(i.viewModel.Subscription.SubscriptionPlanId,{groupId:i.viewModel.GroupId})}),new SingleValue_Block("Period",ko.computed(function(){return i.viewModel.Subscription.SubscriptionPeriodMonths()+" months"})),new SingleValue_Block("Period Fee",ko.computed(function(){return Format.Currency(i.viewModel.Subscription.Fee())})),new SingleValue_Block("Nodes",ko.computed(function(){return i.viewModel.Subscription.NetworkNodeCount()+"/"+i.viewModel.Subscription.MaxNodes()+" (max)"}),null,null,ko.computed(function(){return i.viewModel.Subscription.NetworkNodeCount()>i.viewModel.Subscription.MaxNodes()?"state-warning":"state-ok"})),new Command_Block("Change","Change subscription plan",i.FormAction(function(){return Form.NetworkSubscriptionAssignSubscriptionPlan(i.viewModel.Subscription.NetworkSubscriptionId(),i.viewModel.Subscription.SubscriptionPlanId(),i.Update)}))],null,i.viewModel.Subscription.SubscriptionPlanAttached),Tile.CreateWithBlockSet([new SmallHeader_Block("Xero Invoice"),new SingleValue_Block("Invoiced",ko.computed(function(){return Format.DateOnly(moment(i.viewModel.Subscription.XeroInvoicedUtc()))})),new SingleValue_Block("Payment",ko.computed(function(){return i.viewModel.Subscription.XeroInvoiceIsPaid()?"PAID":"UNPAID"})),new Command_Block("Download","Download invoice",i.FormAction(function(){return Form.NetworkSubscriptionDownloadInvoice(i.viewModel.Subscription.NetworkSubscriptionId())}))],null,ko.computed(function(){return i.viewModel.Subscription.XeroInvoiceGuid()!=null&&i.viewModel.Subscription.XeroInvoiceGuid()!=="00000000-0000-0000-0000-000000000000"}))])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.NetworkSubscription_SubscriptionHistoryTable.For(i.viewModel.Subscription.NetworkSubscriptionId,{networkId:i.viewModel.Subscription.NetworkId}),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new FilterTableColumnViewModel("CompanyName","Billing Entity",!1,!0)).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("CreatedBy","Created By",!0,!0)).AddColumn(new FilterTableColumnViewModel("SubscriptionPlan","Plan",!1,!0)).AddColumn(new FilterTableColumnViewModel("AnnualSubscription","Fee",!0,!1,function(n){return Format.Currency(n.AnnualSubscription)})).AddColumn(new FilterTableColumnViewModel("EndLocal","End",!1,!0,function(n){return Format.DueDate(moment(n.EndLocal))})).AddColumn(new FilterTableColumnViewModel("CancelledUtc","Cancelled",!1,!0,function(n){return n.CancelledUtc!=null?Format.DueDate(moment(n.CancelledUtc)):""})).AddTitle("Subscription History")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.NetworkSubscriptionPlan={NetworkSubscriptionPlanId:ko.observable(0),Name:ko.observable(""),Description:ko.observable(""),PeriodMonths:ko.observable(0),PeriodFee:ko.observable(0),MaxNodes:ko.observable(0),CreatedUtc:ko.observable(),CreatedByUser:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.NetworkSubscriptionPlan.Name,function(){return t.GroupId()==null?"Dashboard":"Subscription Plans"},function(){return t.GroupId()==null?app.route.Home_Index.For():app.route.Group_NetworkSubscriptionPlans.For(t.GroupId)})},t}return __extends(t,n),t}(n.Base_Model);n.NetworkSubscriptionPlan_Details=t}(Model||(Model={}));app.router.View(app.route.NetworkSubscriptionPlan_Details,function(n){function t(t){var i=n.call(this,t,new Model.NetworkSubscriptionPlan_Details)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("billing-entity",new Header_Text(i.viewModel.NetworkSubscriptionPlan.Name,"Plan Name",i.viewModel.NetworkSubscriptionPlan.Description,"Description")),new SingleValue_Block("Months",i.viewModel.NetworkSubscriptionPlan.PeriodMonths),new SingleValue_Block("Fee",ko.computed(function(){return Format.Currency(i.viewModel.NetworkSubscriptionPlan.PeriodFee())})),new SingleValue_Block("Nodes",ko.computed(function(){return i.viewModel.NetworkSubscriptionPlan.MaxNodes()+" (max)"})),new SingleValue_Block("Creator",i.viewModel.NetworkSubscriptionPlan.CreatedByUser),new SingleValue_Block("Created",ko.computed(function(){return Format.DateTime(moment(i.viewModel.NetworkSubscriptionPlan.CreatedUtc()))})),new Command_Block("Edit","Update plan details",i.FormAction(function(){return Form.NetworkSubscriptionPlanUpdate({NetworkSubscriptionPlanId:i.viewModel.NetworkSubscriptionPlan.NetworkSubscriptionPlanId(),Name:i.viewModel.NetworkSubscriptionPlan.Name(),Description:i.viewModel.NetworkSubscriptionPlan.Description(),PeriodMonths:i.viewModel.NetworkSubscriptionPlan.PeriodMonths(),PeriodFee:i.viewModel.NetworkSubscriptionPlan.PeriodFee(),MaxNodes:i.viewModel.NetworkSubscriptionPlan.MaxNodes()},function(){return i.Update()})}),i.HasCapabilityComputed(Capability.NetworkSubscriptionPlans_Create))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.NetworkSubscriptionPlan_SubscriptionsTable.For(i.viewModel.NetworkSubscriptionPlan.NetworkSubscriptionPlanId),click:function(n){return app.route.NetworkSubscription_Details.NavigateTo(n.NetworkSubscriptionId)},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new CommandTableColumnViewModel("network","network",function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("Name","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("BillingEntity","Billing Entity",!1,!0)).AddColumn(new FilterTableColumnViewModel("ExpiryDate","Expiry",!1,!0,function(n){return Format.DueDate(moment(n.ExpiryDate))})).AddColumn(new FilterTableColumnViewModel("NodesOnNetwork","Node Count",!0,!0)).AddTitle("Subscribed Networks")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Note={NoteId:ko.observable(0),CreatedUtc:ko.observable(),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("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Note.Title,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Note_Details=t}(Model||(Model={}));app.router.View(app.route.Note_Details,function(n){function t(t){var i=n.call(this,t,new Model.Note_Details)||this,r,u=function(n,t){i.viewModel.Note.Title(n);i.viewModel.Note.Details(t);r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.Note.NetworkName),new Command_Block("View","View network",function(){return app.route.Network_Details.NavigateTo(i.viewModel.Note.NetworkId)})],null,ko.computed(function(){return i.viewModel.Note.NetworkId()!=null})),Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.Note.ModuleName),new Command_Block("View","View module",function(){return app.route.Module_Details.NavigateTo(i.viewModel.Note.ModuleId)})],null,ko.computed(function(){return i.viewModel.Note.ModuleId()!=null})),Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.Note.CumulativeMeterName),new Command_Block("View","View cumulative meter",function(){return app.route.CumulativeMeter_Details.NavigateTo(i.viewModel.Note.CumulativeMeterId)})],null,ko.computed(function(){return i.viewModel.Note.CumulativeMeterId()!=null})),Tile.CreateWithBlockSet([new SmallHeader_Block(i.viewModel.Note.UserName),new Command_Block("View","View user",function(){return app.route.User_Details.NavigateTo(i.viewModel.Note.UserId)})],null,ko.computed(function(){return i.viewModel.Note.UserId()!=null})),Tile.CreateWithBlockSet([new Command_Block("Edit","Edit this note",i.FormAction(function(){return Form.NoteEdit({NoteId:i.viewModel.Note.NoteId(),Title:i.viewModel.Note.Title(),Details:i.viewModel.Note.Details()},u)}),i.HasCapabilityComputed(Capability.Note_Create)),new Command_Block("Delete","Delete this note",i.FormAction(function(){return Form.NoteDelete(i.viewModel.Note.NoteId(),function(){return history.go(-1)})}),i.HasCapabilityComputed(Capability.Note_Create)),new Command_Block("Markdown","Markdown tutorial - External website",function(){return window.open("http://commonmark.org/help/","_blank")})])])),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.Note.Details())}))),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Note_EventsTable.For(i.viewModel.Note.NoteId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("TimeUtc","Time",!1,!0)).AddColumn(new FilterTableColumnViewModel("Message","Event",!1,!1)).AddColumn(new FilterTableColumnViewModel("User","User",!1,!1)).AddTitle("Events")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(),AccountPasswordResetExpiryUtc:ko.observable(""),LegalTermsId:ko.observable(0),LegalTermsName:ko.observable(""),LegalTermsAcceptanceUtc:ko.observable(""),MessageAccountId:ko.observable(0),ModuleEventSubscriptionCount:ko.observable(0),NetworkAlertSubscriptionCount:ko.observable(0),SuppressAlertsUtc:ko.observable(),SuppressionExpiresIn:ko.observable(0),EmailAddresses:ko.observableArray(),PhoneNumbers:ko.observableArray()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Profile","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Profile_Index=t}(Model||(Model={}));app.router.View(app.route.Profile_Index,function(n){function t(t){var i=n.call(this,t,new Model.Profile_Index)||this,r;return i.ExtendMappingOptions({arrayChildId:{"EmailAddresses[i]":"EmailAddress","PhoneNumbers[i]":"PhoneNumber"},extend:{"EmailAddresses[i]":function(n){Tile.MakeTile(n);n.state=ko.computed(function(){return Tile.StateClass(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",i.FormAction(function(){return Form.ProfileRemoveEmailAddress(n.EmailAddress(),i.Update)})),new Command_Block("Set Primary","Set this email address as primary",i.FormAction(function(){return Form.ProfileSetPrimaryEmailAddress(n.EmailAddress(),i.Update)}),ko.computed(function(){return!n.IsPrimary()}))])},"PhoneNumbers[i]":function(n){Tile.MakeTile(n);n.state=ko.computed(function(){return Tile.StateClass(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":""}),Format.PhoneNumberComputed(n.PhoneNumber),null,null,"phone")),new Command_Block("Remove","Remove this phone number",i.FormAction(function(){return Form.ProfileRemovePhoneNumber(n.PhoneNumber(),i.Update)})),new Command_Block("Set Primary","Set this phone number as primary",i.FormAction(function(){return Form.ProfileSetPrimaryPhoneNumber(n.PhoneNumber(),i.Update)}),ko.computed(function(){return!n.IsPrimary()}))])}}}),i.AddItem(new HeaderPageItem("Profile")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("profile",new Header_Text(i.viewModel.User.Name,i.viewModel.User.TimeZoneName,ko.computed(function(){return i.viewModel.User.IsLockedOut()?"Locked Out":i.viewModel.User.IsActive()?"Active":"Disabled"}),"State"),new Header_Actions(function(){return app.route.User_Details.NavigateTo(i.viewModel.User.UserId)})),new Command_Block("Password","Change your password",i.FormAction(function(){return Form.ProfileChangePassword(function(){return r.LoadData()})})),new Command_Block("Name","Change your name",i.FormAction(function(){return Form.ProfileChangeName(i.viewModel.User.Name(),function(n){i.viewModel.User.Name(n);r.LoadData()})})),new Command_Block("Timezone","Change your timezone",i.FormAction(function(){return Form.ProfileChangeTimezone(i.viewModel.User.TimeZoneName(),i.viewModel.CurrentUser.UtcOffsetHours(),function(n){i.viewModel.User.TimeZoneName(n);r.LoadData()})})),new Command_Block("Add Phone","Add a new phone number",i.FormAction(function(){return Form.ProfileAddPhoneNumber(i.Update)})),new Command_Block("Add Email","Add a new email address",i.FormAction(function(){return Form.ProfileAddEmailAddress(i.Update)}))],ko.computed(function(){return i.viewModel.User.IsLockedOut()?TileState.Faulted:TileState.Idle})),Tile.CreateWithBlockSet([new Header_Block("warning",new Header_Text(i.viewModel.User.ModuleEventSubscriptionCount,"Module Events",i.viewModel.User.NetworkAlertSubscriptionCount,"Network Alerts")),new Command_Block("Module","Manage module subscriptions",function(){return app.route.Profile_ModuleEventSubscriptions.NavigateTo()}),new Command_Block("Network","Manage network subscriptions",function(){return app.route.Profile_NetworkAlertSubscriptions.NavigateTo()}),new Command_Block("Events","View module event notifications",function(){return app.route.Profile_ModuleEventNotifications.NavigateTo()}),new Command_Block("Escalation","View users escalation lists",function(){return app.route.User_EscalationLists.NavigateTo(i.viewModel.User.UserId)}),new Command_Block("Account","View message account",function(){return app.route.MessageAccount_Details.NavigateTo(i.viewModel.User.MessageAccountId)},ko.computed(function(){return i.viewModel.User.MessageAccountId()!=null})),new Command_Block("Suppress","Suppress alerts until a time",i.FormAction(function(){return Form.ProfileSuppressAlerts(i.Update)})),new Command_Block("Clear","Clear alert suppression",i.FormAction(function(){return Form.ProfileClearSuppressAlerts(i.Update)}),ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null})),new SingleValue_Block("Suppressed Until",ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()==null?"None Set":Format.DateTime(moment.utc(i.viewModel.User.SuppressAlertsUtc()))}),ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null})),new SingleValue_Block("Expires",ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null?Format.OverdueBy(moment.duration(i.viewModel.User.SuppressionExpiresIn())):""}),ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null}))]),Tile.CreateWithBlockSet([new Header_Block("legal-terms",new Header_Text(i.viewModel.User.LegalTermsName,"Click to view",ko.computed(function(){return i.viewModel.User.LegalTermsAcceptanceUtc()?Format.DateTime(moment.utc(i.viewModel.User.LegalTermsAcceptanceUtc())):"Never"}),"Acceptance date"),new Header_Actions(function(){return app.route.LegalTerms_View.NavigateTo(i.viewModel.User.LegalTermsId)}),ko.computed(function(){return i.viewModel.User.LegalTermsName()!=null}))])]).addTileSet(i.viewModel.User.EmailAddresses).addTileSet(i.viewModel.User.PhoneNumbers)),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Profile_EventsTable.For(),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:10}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Notifications","Profile",app.route.Profile_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Profile_ModuleEventNotifications=t}(Model||(Model={}));app.router.View(app.route.Profile_ModuleEventNotifications,function(n){function t(t){var i=n.call(this,t,new Model.Profile_ModuleEventNotifications)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Profile_ModuleEventsTable.For(),click:function(n){return app.route.Module_AlertEventDetails.NavigateTo(n.ModuleId,{moduleEventId:n.ModuleEventId})},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return app.route.Module_Details.For(n.ModuleId).GetUrl()},function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network Node","network",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Subscriptions","Profile",app.route.Profile_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Profile_ModuleEventSubscriptions=t}(Model||(Model={}));app.router.View(app.route.Profile_ModuleEventSubscriptions,function(n){function t(t){var i=n.call(this,t,new Model.Profile_ModuleEventSubscriptions)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Profile_ModuleEventSubscriptionsTable.For(),click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!0,sort:"NetworkName",ascending:!0,size:25}).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 i.FormAction(function(){return Form.ProfileUnsubscribeFromModuleAlert(n.ModuleId,n.AlertAndStatus,n.EventName,i.Update)})()})).AddTitle("Module Event Subscriptions")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Network Sync Alert Subscriptions","Profile",app.route.Profile_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Profile_NetworkAlertSubscriptions=t}(Model||(Model={}));app.router.View(app.route.Profile_NetworkAlertSubscriptions,function(n){function t(t){var i=n.call(this,t,new Model.Profile_NetworkAlertSubscriptions)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Profile_NetworkAlertSubscriptionsTable.For(),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"Name",ascending:!0,size:25}).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 i.FormAction(function(){return Form.ProfileUnsubscribeFromNetworkSyncAlerts(n.NetworkId,n.Name,i.Update)})()})).AddTitle("Network Sync Alert Subscriptions")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.PurchaseOrder={PurchaseOrderId:ko.observable(0),ReferenceNumber:ko.observable(""),CreatedById:ko.observable(0),CreatedBy:ko.observable(""),CreatedUtc:ko.observable(),CompletedUtc:ko.observable(),CompletedByUser:ko.observable(""),CompletedById:ko.observable(0),AcknowledgedById:ko.observable(0),AcknowledgedByUser:ko.observable(""),AcknowledgedUtc:ko.observable(),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("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.PurchaseOrder.ReferenceNumber,t.PurchaseOrder.BillingEntity,app.route.BillingEntity_Details.For(t.PurchaseOrder.BillingEntityId,{groupId:t.GroupId}))},t}return __extends(t,n),t}(n.Base_Model);n.PurchaseOrder_Details=t}(Model||(Model={}));app.router.View(app.route.PurchaseOrder_Details,function(n){function t(t){var i=n.call(this,t,new Model.PurchaseOrder_Details)||this,r,u,f=ko.observable(!1),o=ko.observable(!1),e=function(){return r.LoadData()},h=function(){return u.LoadData()},c=function(){return r.data().filter(function(n){return!n.RequiresSerial&&n.BackOrdered>0})},s;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("purchase-order",new Header_Text(i.viewModel.PurchaseOrder.ReferenceNumber,"Purchase Order Reference")),new SingleValue_Block("Created",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PurchaseOrder.CreatedUtc()))})),new SingleValue_Block("Created By",i.viewModel.PurchaseOrder.CreatedBy),new Command_Block("Source",i.viewModel.PurchaseOrder.SourceGroup,function(){return app.route.Group_Details.NavigateTo(i.viewModel.PurchaseOrder.SourceGroupId())}),new Command_Block("Complete","Mark purchase order as completed",i.FormAction(function(){return Form.PurchaseOrderComplete(i.viewModel.PurchaseOrder.PurchaseOrderId(),i.viewModel.PurchaseOrder.BillingEntityId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Create)&&i.viewModel.PurchaseOrder.CompletedById()===null&&r.data().length>0})),new Command_Block("Revoke","Revoke completion",i.FormAction(function(){return Form.PurchaseOrderRevokeCompletion(i.viewModel.PurchaseOrder.PurchaseOrderId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_RevokeCompletion)&&i.viewModel.PurchaseOrder.CompletedById()!=null&&r.data().length>0})),new Command_Block("Acknowledge","Mark order as acknowledged",i.FormAction(function(){return Form.PurchaseOrderAcknowledge(i.viewModel.PurchaseOrder.PurchaseOrderId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Acknowledge)&&i.viewModel.PurchaseOrder.AcknowledgedById()==null&&i.viewModel.PurchaseOrder.CompletedById()!==null}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Order Items"),new Command_Block("Add Item(s)","Add items to purchase order",i.FormAction(function(){return Form.PurchaseOrderAddItemTypes(i.viewModel.PurchaseOrder.PurchaseOrderId(),e)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Edit)&&i.viewModel.PurchaseOrder.CompletedById()===null})),new SingleValue_Block("Completed",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PurchaseOrder.CompletedUtc()))}),ko.computed(function(){return i.viewModel.PurchaseOrder.CompletedById()!=null})),new SingleValue_Block("Completed By",i.viewModel.PurchaseOrder.CompletedByUser,ko.computed(function(){return i.viewModel.PurchaseOrder.CompletedById()!=null})),new SingleValue_Block("Acknowledged",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PurchaseOrder.AcknowledgedUtc()))}),ko.computed(function(){return i.viewModel.PurchaseOrder.AcknowledgedById()!=null})),new SingleValue_Block("Acknowledged By",i.viewModel.PurchaseOrder.AcknowledgedByUser,ko.computed(function(){return i.viewModel.PurchaseOrder.AcknowledgedById()!=null}))])])),i.AddItem(new HeaderPageItem("Order Notes","edit","Edit Notes",i.FormAction(function(){return Form.PurchaseOrderEditNotes(i.viewModel.PurchaseOrder.PurchaseOrderId(),i.viewModel.PurchaseOrder.Notes(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Edit)&&i.viewModel.PurchaseOrder.CompletedById()===null}))),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.PurchaseOrder.Notes())}))),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.PurchaseOrder_ItemsTable.For(i.viewModel.PurchaseOrder.PurchaseOrderId,{billingEntityId:i.viewModel.PurchaseOrder.BillingEntityId}),click:function(n){return i.FormAction(function(){return Form.PurchaseOrderViewOrderItemDetail(n.ItemName,n.ItemDescription,n.PriceEstimate,n.Quantity,n.Notes)})()},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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 app.route.Group_Details.NavigateTo(i.viewModel.PurchaseOrder.SourceGroupId)})).AddColumn(new FilterTableColumnViewModel("CountInSourceGroup","In Stock",!0,!0,null,i.HasCapabilityComputed(Capability.PurchaseOrder_CanPickStockItems))).AddColumn(new DueByDateFilterTableColumnViewModel("ExpectedDateUtc","Expected",!0,!0)).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return i.FormAction(function(){return Form.PurchaseOrderUpdateOrderItems({PurchaseOrderItemId:n.PurchaseOrderItemId,ItemName:n.ItemName,ItemDescription:n.ItemDescription,PriceEstimate:n.PriceEstimate,Quantity:n.Quantity,Notes:n.Notes,ExpectedDateUtc:n.ExpectedDateUtc},e)})()},ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Edit)&&i.viewModel.PurchaseOrder.CompletedById()==null}))).AddColumn(new CommandTableColumnViewModel("Set Expected Date","event",function(n){return i.FormAction(function(){return Form.PurchaseOrderUpdateExpectedDate(n.PurchaseOrderItemId,n.ExpectedDateUtc,e)})()},ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Acknowledge)&&i.viewModel.PurchaseOrder.CompletedById()!=null}))).AddColumn(new CommandTableColumnViewModel("Remove Device","delete",function(n){return i.FormAction(function(){return Form.PurchaseOrderRemoveItem(i.viewModel.PurchaseOrder.PurchaseOrderId(),n.PurchaseOrderItemId,i.viewModel.PurchaseOrder.BillingEntityId(),n.ItemName,e)})()},ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Edit)&&i.viewModel.PurchaseOrder.CompletedById()==null}))).AddTitle("Ordered Items")),s=function(n){return app.route.PurchaseOrder_PackingListDetails.NavigateTo(i.viewModel.PurchaseOrder.PurchaseOrderId,{packingListId:n,groupId:i.viewModel.GroupId})},i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Packing Lists"),new Command_Block("Scan","Scan items into packing list",i.FormAction(function(){return Form.PurchaseOrderAddSerialDevice(i.viewModel.PurchaseOrder.PurchaseOrderId(),i.Update)}),ko.computed(function(){return!f()&&i.viewModel.PurchaseOrder.ContainsSerialCostItems()})),new Command_Block("Add","Add serial number to non device items",i.FormAction(function(){return Form.PurchaseOrderAddNonDeviceSerial(i.viewModel.PurchaseOrder.PurchaseOrderId(),i.Update)}),ko.computed(function(){return!f()&&i.viewModel.PurchaseOrder.ContainsNonDeviceSerialCostItems()})),new Command_Block("Pick","Add items into packing list",i.FormAction(function(){return Form.PurchaseOrderAddNonSerialDevice(i.viewModel.PurchaseOrder.PurchaseOrderId(),c(),function(){h();i.Update()})}),ko.computed(function(){return!f()&&i.viewModel.PurchaseOrder.ContainsNonSerialCostItems()})),new Command_Block("Complete","Packing List Completed",i.FormAction(function(){return Form.PurchaseOrderCompletePackingList(i.viewModel.PurchaseOrder.PurchaseOrderId(),s)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_Authorise)&&(o()||i.viewModel.PurchaseOrder.AcknowledgedById()!=null&&i.viewModel.PurchaseOrder.CompletedById()!=null&&o()&&u.data().length>0)}))],null,ko.computed(function(){return i.viewModel.PurchaseOrder.CompletedUtc()!=null&&i.viewModel.PurchaseOrder.AcknowledgedUtc()!=null&&i.HasCapability(Capability.PurchaseOrder_Authorise)}))])),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.PurchaseOrder_OpenPackingListTable.For(i.viewModel.PurchaseOrder.PurchaseOrderId,{billingEntityId:i.viewModel.PurchaseOrder.BillingEntityId}),click:function(n){return n.RequiresSerial?i.FormAction(function(){return Form.PurchaseOrderViewSerialNumbers(n.Serials)})():null},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).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 i.FormAction(function(){return n.RequiresSerial?Form.PurchaseOrderRemoveSerialItemsFromPackingList(i.viewModel.PurchaseOrder.PurchaseOrderId(),n.ItemName,n.Serials,i.Update):n.RequiresNonDeviceSerial?Form.PurchaseOrderRemoveNonDeviceSerialItemsFromPackingList(i.viewModel.PurchaseOrder.PurchaseOrderId(),n.ItemName,n.Serials,i.Update):Form.PurchaseOrderRemoveNonSerialItemsFromPackingList(i.viewModel.PurchaseOrder.PurchaseOrderId(),n.PurchaseOrderItemId,n.ItemName,n.Supplied,i.Update)})()},i.HasCapabilityComputed(Capability.PurchaseOrder_EditPackingSlip))).AddTitle("Current Packing List")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.PurchaseOrder_PackingListsTable.For(i.viewModel.PurchaseOrder.PurchaseOrderId),click:function(n){return app.route.PurchaseOrder_PackingListDetails.NavigateTo(i.viewModel.PurchaseOrder.PurchaseOrderId,{packingListId:n.PackingListId,groupId:i.viewModel.GroupId})},update:!0,sort:"DispatchedUtc",ascending:!1,size:25}).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")),ko.computed(function(){var n=0;r.data().forEach(function(t){t.Quantity!==t.Supplied&&n++});f(n===0);o(u.data().length>0)}),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.PackingList={AddressDetails:{Address:ko.observable(""),AddressId:ko.observable(0),BillingEntityId:ko.observable(0),BillingEntity:ko.observable(""),City:ko.observable(""),Code:ko.observable(""),Country:ko.observable(""),StateProvince:ko.observable("")},BillingEntity:ko.observable(""),BillingEntityId:ko.observable(0),CanDownloadInvoice:ko.observable(!1),CanInvoice:ko.observable(!1),DeliveryNotes:ko.observable(""),DispatchedBy:ko.observable(""),DispatchedById:ko.observable(0),DispatchedUtc:ko.observable(),InvoicedUtc:ko.observable(),PackingListId:ko.observable(0),PurchaseOrderCreatedUtc:ko.observable(),PurchaseOrderCreatedUserId:ko.observable(),PurchaseOrderCreatedUser:ko.observable(),PurchaseOrderId:ko.observable(0),PurchaseOrderReference:ko.observable(""),ReceiptedBy:ko.observable(""),ReceiptedById:ko.observable(0),ReceiptedUtc:ko.observable(),SourceGroupBillingEntityId:ko.observable(0),TrackingNumbers:ko.observableArray(),XeroInvoiceGuid:ko.observable(""),XeroInvoiceIsPaid:ko.observable(!1),XeroInvoiceNumber:ko.observable(""),XeroInvoiceStatus:ko.observable("")},t.Invoiceable=ko.observable(!0),t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return t.PackingList.PurchaseOrderReference()+" - Packing List"},"Purchase Order",app.route.PurchaseOrder_Details.For(t.PackingList.PurchaseOrderId))},t}return __extends(t,n),t}(n.Base_Model);n.PurchaseOrder_PackingListDetails=t}(Model||(Model={}));app.router.View(app.route.PurchaseOrder_PackingListDetails,function(n){function t(t){var i=n.call(this,t,new Model.PurchaseOrder_PackingListDetails)||this,r,u,f;return i.ExtendMappingOptions({arrayChildId:{"TrackingNumbers[i]":"FreightTrackingId"},extend:{}}),f=function(){return u.LoadData()},i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Purchase Order"),new SingleValue_Block("Reference",i.viewModel.PackingList.PurchaseOrderReference),new SingleValue_Block("Created",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PackingList.PurchaseOrderCreatedUtc()))})),new SingleValue_Block("Created By",ko.computed(function(){return i.viewModel.PackingList.PurchaseOrderCreatedUser()}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Delivery Address"),new SingleValue_Block("Billing Entity",ko.computed(function(){return i.viewModel.PackingList.AddressDetails.BillingEntity()})),new SingleValue_Block("Address",i.viewModel.PackingList.AddressDetails.Address),new SingleValue_Block("City",i.viewModel.PackingList.AddressDetails.City),new SingleValue_Block("State/Province",i.viewModel.PackingList.AddressDetails.StateProvince),new SingleValue_Block("Post Code",i.viewModel.PackingList.AddressDetails.Code),new SingleValue_Block("Country",i.viewModel.PackingList.AddressDetails.Country)]),Tile.CreateWithBlockSet([new SmallHeader_Block("Packing List"),new SingleValue_Block("Dispatched",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PackingList.DispatchedUtc()))}),ko.computed(function(){return i.viewModel.PackingList.DispatchedUtc()!=null})),new SingleValue_Block("Dispatched By",i.viewModel.PackingList.DispatchedBy,ko.computed(function(){return i.viewModel.PackingList.DispatchedUtc()!=null})),new Command_Block("Tracking","Add tracking to order",i.FormAction(function(){return Form.PurchaseOrderAddTracking(i.viewModel.PackingList.PackingListId(),i.Update)}),ko.computed(function(){return i.viewModel.PackingList.XeroInvoiceGuid()==null&&i.HasCapability(Capability.PurchaseOrder_Authorise)})),new Command_Block("Packing","Print packing slip",function(){return window.open(app.route.PurchaseOrder_PrintPackingSlip.For(null,{packingListId:i.viewModel.PackingList.PackingListId}).GetUrl(),"_blank")},i.HasCapabilityComputed(Capability.PurchaseOrder_Authorise)),new Command_Block("Shipping","Print shipping label",function(){return window.open(app.route.PurchaseOrder_PrintShippingLabel.For(null,{packingListId:i.viewModel.PackingList.PackingListId}).GetUrl(),"_blank")},i.HasCapabilityComputed(Capability.PurchaseOrder_Authorise))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Invoicing",i.HasCapabilityComputed(Capability.PurchaseOrder_CreateInvoice)),new Command_Block("Create","Create Invoice",function(){return r.data().length===0?i.SetMessage("You must add tracking to this packing list before you can create an invoice"):i.FormAction(function(){return Form.PurchaseOrderCreateInvoiceInXero(i.viewModel.PackingList.PackingListId(),i.Update)})()},ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_CreateInvoice)&&i.viewModel.PackingList.XeroInvoiceGuid()==null&&i.viewModel.Invoiceable()&&i.viewModel.PackingList.DispatchedUtc()!=null}))],null,ko.computed(function(){return i.viewModel.PackingList.XeroInvoiceGuid()==null&&i.HasCapability(Capability.PurchaseOrder_ViewInvoice)})),Tile.CreateWithBlockSet([new SmallHeader_Block("Invoice Details"),new SingleValue_Block("Invoice #",i.viewModel.PackingList.XeroInvoiceNumber),new SingleValue_Block("Created",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PackingList.InvoicedUtc()))})),new SingleValue_Block("Billing Entity",i.viewModel.PackingList.BillingEntity),new SingleValue_Block("Invoice Status",i.viewModel.PackingList.XeroInvoiceStatus),new Command_Block("Download","Download invoice",i.FormAction(function(){return Form.PurchaseOrderDownloadXeroInvoice(i.viewModel.PackingList.PackingListId(),i.Update)}),ko.computed(function(){return i.viewModel.PackingList.CanDownloadInvoice()&&i.HasCapability(Capability.PurchaseOrder_ViewInvoice)}))],null,ko.computed(function(){return i.viewModel.PackingList.XeroInvoiceGuid()!=null&&i.HasCapability(Capability.PurchaseOrder_ViewInvoice)})),Tile.CreateWithBlockSet([new SmallHeader_Block("Delivery Receipt"),new SingleValue_Block("Received",ko.computed(function(){return Format.DateTime(moment.utc(i.viewModel.PackingList.ReceiptedUtc()))}),ko.computed(function(){return i.viewModel.PackingList.ReceiptedUtc()!=null})),new SingleValue_Block("Received By",ko.computed(function(){return i.viewModel.PackingList.ReceiptedBy()}),ko.computed(function(){return i.viewModel.PackingList.ReceiptedUtc()!=null})),new Command_Block("Receive","Mark order as received",i.FormAction(function(){return Form.PurchaseOrderReceiveOrder(i.viewModel.PackingList.PackingListId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.PurchaseOrder_AcknowledgeReceipt)&&i.viewModel.PackingList.DispatchedUtc()!=null&&i.viewModel.PackingList.ReceiptedUtc()==null}))],ko.computed(function(){return i.viewModel.PackingList.ReceiptedUtc()==null?TileState.Warning:TileState.Idle}),ko.computed(function(){return i.viewModel.PackingList.InvoicedUtc()!=null}))])),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new SmallHeader_Block("Packing List Notes",ko.computed(function(){return i.viewModel.PackingList.DeliveryNotes()!==""||i.HasCapability(Capability.PurchaseOrder_Authorise)})),new Command_Block("Edit","Edit packing list notes",i.FormAction(function(){return Form.PurchaseOrderUpdatePackingListNotes(i.viewModel.PackingList.PackingListId(),i.viewModel.PackingList.DeliveryNotes(),i.Update)}),i.HasCapabilityComputed(Capability.PurchaseOrder_EditPackingSlip))])])),i.AddItem(new HtmlMessagePageItem(ko.computed(function(){return Format.EncodeMarkdown(i.viewModel.PackingList.DeliveryNotes())}))),i.AddItem(u=new AjaxFilterTableViewModel({route:app.route.PurchaseOrder_PackingListItemsTable.For(null,{packingListId:i.viewModel.PackingList.PackingListId}),click:function(n){return n.RequiresSerial?i.FormAction(function(){return Form.PurchaseOrderViewSerialNumbers(n.Serials)})():null},update:!0,sort:"ItemName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Quantity","Qty",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemName","Item",!1,!0)).AddColumn(new FilterTableColumnViewModel("ItemDescription","Description",!0,!0)).AddColumn(new FilterTableColumnViewModel("Notes","Notes",!0,!0)).AddColumn(new NumberFilterTableColumnViewModel("PriceEstimate","Unit Price",!1,!0,function(n){return n.PriceEstimate===n.UnitPrice?Format.Currency(n.PriceEstimate):Format.Currency(n.UnitPrice)+" (was "+Format.Currency(n.PriceEstimate)+")"},i.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 i.FormAction(function(){return Form.PurchaseOrderEditPackingListItemPricing(i.viewModel.PackingList.PackingListId(),n.PurchaseOrderItemId,n.UnitPrice,n.Notes,f)})()},ko.computed(function(){return i.viewModel.PackingList.XeroInvoiceGuid()==null&&i.HasCapability(Capability.PurchaseOrder_CreateInvoice)}))).AddTitle("Packing List Items")),i.AddItem(r=new AjaxFilterTableViewModel({route:null,click:null,update:!1,sort:null,ascending:!1,size:25,hideRefresh:!0,data:i.viewModel.PackingList.TrackingNumbers}).AddColumn(new FilterTableColumnViewModel("FreightProvider","Freight Provider",!1,!0)).AddColumn(new HyperlinkTextTableColumnViewModel("TrackingNumber","Tracking Number",function(n){return n.TrackingNumber()},function(n){return n.TrackingUrl()})).AddColumn(new FilterTableColumnViewModel("FreightCost","Freight Price",!1,!0,function(n){return Format.Currency(n.FreightCost())},i.HasCapabilityComputed(Capability.PurchaseOrder_ViewInvoice))).AddColumn(new CommandTableColumnViewModel("Edit","edit",function(n){return i.FormAction(function(){return Form.PurchaseOrderEditTracking(n.FreightTrackingId(),n.TrackingNumber(),n.FreightProviderId(),n.FreightCost(),i.Update)})()},ko.computed(function(){return i.viewModel.PackingList.XeroInvoiceGuid()==null&&i.HasCapability(Capability.PurchaseOrder_CreateInvoice)}))).AddColumn(new CommandTableColumnViewModel("Delete","delete",function(n){return i.FormAction(function(){return Form.PurchaseOrderDeleteTracking(n.FreightTrackingId(),i.Update)})()},ko.computed(function(){return i.viewModel.PackingList.XeroInvoiceGuid()==null&&i.HasCapability(Capability.PurchaseOrder_CreateInvoice)}))).AddTitle("Tracking Numbers")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Report={ReportTemplateId:ko.observable(0),Name:ko.observable(""),CreatedUserId:ko.observable(0),CreatedUserName:ko.observable(""),CreatedUtc:ko.observable(),Json:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Report.Name,"Groups",app.route.Group_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Report_Details=t}(Model||(Model={}));app.router.View(app.route.Report_Details,function(n){function t(t){var i=n.call(this,t,new Model.Report_Details)||this,r=function(n,t,r){i.CloseFormDialog();app.route.Report_Run.NavigateTo(i.viewModel.Report.ReportTemplateId(),{targetGroupId:n,startLocal:t,endLocal:r})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("report-template",new Header_Text(i.viewModel.Report.Name,null,"Report Template",ko.computed(function(){return"Created: "+Format.DateTime(moment(i.viewModel.Report.CreatedUtc()))}),i.viewModel.Report.CreatedUserName)),new Command_Block("Rename","Edit the report name",i.FormAction(function(){return Form.ReportEdit(i.viewModel.Report.ReportTemplateId(),i.viewModel.Report.Name(),function(n){return i.viewModel.Report.Name(n)})}),i.HasCapabilityComputed(Capability.Report_Rename)),new Command_Block("Config","Edit the report json config",i.FormAction(function(){return Form.ReportEditJson(i.viewModel.Report.ReportTemplateId(),i.viewModel.Report.Json(),function(n){return i.viewModel.Report.Json(n)})}),i.HasCapabilityComputed(Capability.Report_Edit)),new Command_Block("Delete","Permanently delete the report",i.FormAction(function(){return Form.ReportDelete(i.viewModel.Report.ReportTemplateId(),function(){return history.go(-1)})}),i.HasCapabilityComputed(Capability.Report_Delete))]),Tile.CreateWithBlockSet([new Command_Block("Run","Run this report on a group",i.FormAction(function(){return Form.ReportRunOnGroup(r)})),new Command_Block("View Types","View available module types",function(){return app.route.Report_ModuleTypes.NavigateTo(i.viewModel.Report.ReportTemplateId)},ko.computed(function(){return i.HasCapability(Capability.Report_Create)||i.HasCapability(Capability.Report_Edit)}))])])),i.AddItem(new MessagePageItem(i.viewModel.Report.Json)),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ReportTemplateId=ko.observable(0),t.ReportName=ko.observable(""),t.TypeNames=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Report Module Types",t.ReportName,app.route.Report_Details.For(t.ReportTemplateId))},t}return __extends(t,n),t}(n.Base_Model);n.Report_ModuleTypes=t}(Model||(Model={}));app.router.View(app.route.Report_ModuleTypes,function(n){function t(t){var i=n.call(this,t,new Model.Report_ModuleTypes)||this,u=function(n,t){t.length===0?i.SetMessage("No alerts selected"):CopyToClipboard(JSON.stringify({Type:n,AlertAndStatus:t.sort(function(n,t){return n<t?-1:1})}),!0,"alerts");i.CloseFormDialog()},r=ko.observableArray();return ko.computed(function(){r(i.viewModel.TypeNames().map(function(n){return{Name:n}}))}).extend({throttle:100}),i.AddItem(new AjaxFilterTableViewModel({route:null,click:function(n){Form.ViewPostRequest(i,{route:app.route.Report_ModuleTypeAlerts.For(i.viewModel.ReportTemplateId,{type:n.Name}),onSuccess:function(t){if(app.router.MatchesWindow(i.route)){if(t.Success===!1){i.SetMessage(t.Message);return}if(t.Alerts.length===0){i.SetMessage("No alerts available for this module type");return}i.FormAction(function(){return Form.ReportModuleTypeAlerts(n.Name,t.Alerts,u)})()}}})},update:!1,sort:"Name",ascending:!0,size:25,data:r,hideRefresh:!0}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Module Types")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.ReportTemplateId=ko.observable(0),t.Name=ko.observable(""),t.TargetGroup=ko.observable(""),t.TargetGroupId=ko.observable(0),t.Error=ko.observable(""),t.StartLocal=ko.observable(),t.EndLocal=ko.observable(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return t.Error()!=null?"Run Report - Error":t.Name()===""?"Run Report":t.Name()},t.TargetGroup,app.route.Group_Details.For(t.TargetGroupId))},t}return __extends(t,n),t}(n.Base_Model);n.Report_Run=t}(Model||(Model={}));app.router.View(app.route.Report_Run,function(n){function t(t){var i=n.call(this,t,new Model.Report_Run)||this,r,u=function(n,t,r){i.CloseFormDialog();app.route.Report_Run.NavigateTo(n,{targetGroupId:i.viewModel.TargetGroupId,startLocal:t,endLocal:r})};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Report","Run a report on this group",i.FormAction(function(){return Form.ReportRun(i.viewModel.ReportTemplateId(),i.viewModel.Name(),i.viewModel.StartLocal(),i.viewModel.EndLocal(),u)}))])])),i.OnViewModelReady=function(){i.viewModel.ReportTemplateId()===0&&i.FormAction(function(){return Form.ReportRun(0,i.viewModel.Name(),i.viewModel.StartLocal(),i.viewModel.EndLocal(),u)})();i.viewModel.Error()!=null?i.AddItem(new MessagePageItem(i.viewModel.Error)):(r=new AjaxFilterTableViewModel({route:ko.computed(function(){return i.viewModel.ReportTemplateId()>0?app.route.Report_RunReportTable.For(i.viewModel.ReportTemplateId,{targetGroupId:i.viewModel.TargetGroupId,startLocal:i.viewModel.StartLocal,endLocal:i.viewModel.EndLocal}):null}),click:null,update:!1,sort:"DateLocal",ascending:!1,size:25}).AddColumn(new DateFilterTableColumnViewModel("DateLocal","Date",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return app.route.Network_Details.For(n.NetworkId).GetUrl()},function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})})).AddColumn(new FilterTableColumnViewModel("NodeName","Node",!0,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return app.route.Module_Details.For(n.ModuleId).GetUrl()},function(n){return app.route.Module_Details.NavigateTo(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"),i.AddItem(new HeaderPageItem(ko.computed(function(){return i.viewModel.Name()+" | "+r.data().length+" modules with messages"}))),i.AddItem(r),r.LoadData())},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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)},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.RfidTag.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Rfid_Details=t}(Model||(Model={}));app.router.View(app.route.Rfid_Details,function(n){function t(t){var i=n.call(this,t,new Model.Rfid_Details)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("rfid-tag",new Header_Text(i.viewModel.RfidTag.Name,ko.computed(function(){return"Assigned Groups: "+i.viewModel.RfidTag.GroupCount()}),ko.computed(function(){return i.viewModel.RfidTag.OpensCabinet()?"Maintenance":"User"}),"Access Level")),new SingleValue_Block("Tag Number",ko.computed(function(){return i.viewModel.RfidTag.SectionCode()+"/"+i.viewModel.RfidTag.SerialCode()}))]),Tile.CreateWithBlockSet([new Command_Block("Rename","Rename this tag",i.FormAction(function(){return Form.RfidRenameTag(i.viewModel.RfidTag.RfidTagId(),i.viewModel.RfidTag.Name(),function(n){return i.viewModel.RfidTag.Name(n)})}),i.HasCapabilityComputed(Capability.RfidTag_Edit)),new Command_Block("Access","Change this tags access level",i.FormAction(function(){return Form.RfidChangeTagAccessLevel(i.viewModel.RfidTag.RfidTagId(),i.viewModel.RfidTag.OpensCabinet(),function(n){return i.viewModel.RfidTag.OpensCabinet(n)})}),i.HasCapabilityComputed(Capability.RfidTag_Edit)),new Command_Block("Delete","Delete this tag",i.FormAction(function(){return Form.RfidDeleteTag(i.viewModel.RfidTag.RfidTagId(),i.viewModel.RfidTag.Name(),function(){return window.history.go(-1)})}),i.HasCapabilityComputed(Capability.RfidTag_Delete))])])),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Rfid_MemberGroupsTable.For(i.viewModel.RfidTag.RfidTagId),click:function(n){return app.route.Group_RfidTags.NavigateTo(n.GroupId)},update:!0,sort:"Name",ascending:!0,size:10}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddTitle("Member Groups")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Rfid_MemberModulesTable.For(i.viewModel.RfidTag.RfidTagId),click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!0,sort:"Name",ascending:!0,size:10}).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new FilterTableColumnViewModel("Name","Module",!1,!0)).AddTitle("Assigned Modules")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Role={RoleId:ko.observable(0),Name:ko.observable(""),Capabilities:ko.observableArray()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Role.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Role_Details=t}(Model||(Model={}));app.router.View(app.route.Role_Details,function(n){function t(t){var i=n.call(this,t,new Model.Role_Details)||this,r,u=function(){return r.LoadData()};return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Rename","Change the name of this role",i.FormAction(function(){return Form.RoleRename(i.viewModel.Role.RoleId(),i.viewModel.Role.Name(),function(n){return i.viewModel.Role.Name(n)})}),i.HasCapabilityComputed(Capability.Role_Rename))]),Tile.CreateWithBlockSet([new Command_Block("Delete","Delete this role",i.FormAction(function(){return Form.RoleDelete(i.viewModel.Role.RoleId(),i.viewModel.Role.Name(),function(){return app.route.Group_Index.NavigateTo()})}),i.HasCapabilityComputed(Capability.Role_Delete))]),Tile.CreateWithBlockSet([new Command_Block("Capability","Add a capability",i.FormAction(function(){return Form.RoleAddCapabilities(i.viewModel.Role.RoleId(),u)}),i.HasCapabilityComputed(Capability.Role_Edit))]),Tile.CreateWithBlockSet([new Command_Block("Groups","Groups containing role",function(){return app.route.Role_ContainingGroups.NavigateTo(i.viewModel.Role.RoleId)})])])),i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.Role_CapabilitiesTable.For(i.viewModel.Role.RoleId),click:null,update:!0,sort:"Name",ascending:!1,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Name",!1,!0)).AddColumn(new FilterTableColumnViewModel("Description","Description",!1,!1)).AddColumn(new CommandTableColumnViewModel("Remove Capability","delete",function(n){return i.FormAction(function(){return Form.RoleRemoveCapability(i.viewModel.Role.RoleId(),n.CapabilityId,i.viewModel.Role.Name(),n.Name,u)})()},i.HasCapabilityComputed(Capability.Role_Edit))).AddTitle("Role Capabilities")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.Role_GrantsForRoleTable.For(i.viewModel.Role.RoleId),click:null,update:!0,sort:"SourceGroupName",ascending:!1,size:25}).AddColumn(new HyperlinkTableColumnViewModel("Source Group","group",function(n){return app.route.Group_Details.For(n.SourceGroupId).GetUrl()},function(n){return app.route.Group_Details.NavigateTo(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 app.route.Group_Details.For(n.TargetGroupId).GetUrl()},function(n){return app.route.Group_Details.NavigateTo(n.TargetGroupId)})).AddColumn(new FilterTableColumnViewModel("TargetGroupName","Target Group",!1,!0,function(n){return n.TargetParentName+" / "+n.TargetGroupName})).AddTitle("Grants For Role")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Search","Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Search_Index=t}(Model||(Model={}));app.router.View(app.route.Search_Index,function(n){function t(t){var i=n.call(this,t,new Model.Search_Index)||this;return i.setType=function(n){i.searchForm.searchType(n);i.searchForm.searchTemplate("search-form-"+n+"-template");i.clearResults();i.searchForm.ClearFields()},i.clearResults=function(){i.networksTable.enabled(!1);i.networkNodesTable.enabled(!1);i.modulesTable.enabled(!1);i.usersTable.enabled(!1);i.devicesTable.enabled(!1);i.simsTable.enabled(!1);i.exportTargetsTable.enabled(!1);i.applicationsTable.enabled(!1);i.purchaseOrdersTable.enabled(!1);i.billingEntitiesTable.enabled(!1);i.networksTable.SetData(null);i.networkNodesTable.SetData(null);i.modulesTable.SetData(null);i.usersTable.SetData(null);i.devicesTable.SetData(null);i.simsTable.SetData(null);i.exportTargetsTable.SetData(null);i.applicationsTable.SetData(null);i.purchaseOrdersTable.SetData(null);i.billingEntitiesTable.SetData(null);i.searchForm.searchStatus("")},i.doSearch=function(){var r,t,n={},u=ko.unwrap(i.searchForm.searchTerm),f=ko.unwrap(i.searchForm.searchTerm2),e=ko.unwrap(i.searchForm.searchTerm3);if(u===""&&f===""&&e==="")return i.searchForm.searchStatus("Please enter a search query"),!1;switch(ko.unwrap(i.searchForm.searchType)){case"networks":r=app.route.Search_Networks.For();t=i.networksTable;n.name=u;break;case"networknodes":r=app.route.Search_NetworkNodes.For();t=i.networkNodesTable;n.name=u;break;case"modules":r=app.route.Search_Modules.For();t=i.modulesTable;n.name=u;n.type=f;break;case"users":r=app.route.Search_Users.For();t=i.usersTable;n.name=u;n.emailAddress=f;n.phoneNumber=e;break;case"devices":r=app.route.Search_Devices.For();t=i.devicesTable;n.extAddress=u;n.type=f;break;case"sims":r=app.route.Search_Sims.For();t=i.simsTable;n.phone=u;n.simNumber=f;n.cellNetwork=e;break;case"exporttargets":r=app.route.Search_ExportTargets.For();t=i.exportTargetsTable;n.identifier=u;n.target=f;break;case"applications":r=app.route.Search_Applications.For();t=i.applicationsTable;n.name=u;n.applicationGuid=f;n.version=e;break;case"purchaseorders":r=app.route.Search_PurchaseOrders.For();t=i.purchaseOrdersTable;n.reference=u;break;case"billingentities":r=app.route.Search_BillingEntities.For();t=i.billingEntitiesTable;n.companyname=u;break;default:return i.searchForm.searchStatus("Please select a valid search type"),!1}return i.clearResults(),t.enabled(!0),t.initialLoadComplete(!1),t.loadFailed(!1),Form.ViewPostRequest(i,{route:r,data:n,onSuccess:function(n){t.initialLoadComplete(!0);t.SetData(n)},onError:function(){t.initialLoadComplete(!0);t.SetFailed("Failed to load data");t.SetData(null)}}),!1},i.AddItem(i.searchForm=new SearchFormPageItem(i,i.doSearch,"search-form-default-template")),i.AddItem(i.networksTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.networkNodesTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return Format.NodeAddress(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")),i.AddItem(i.modulesTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.usersTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.User_Details.NavigateTo(n.UserId)},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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 Format.PhoneNumber(n.PrimaryPhoneNumber)})).AddColumn(new FilterTableColumnViewModel("IsActive","Status",!0,!0,function(n){return n.IsActive?"Active":"Inactive"})).AddTitle("Users")),i.AddItem(i.devicesTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Device_Details.NavigateTo(n.DeviceExtAddress)},update:!1,sort:"DeviceExtAddress",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.simsTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Sim_Details.NavigateTo(n.SimId)},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.exportTargetsTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Module_ModuleExportTarget.NavigateTo(n.ModuleId,{moduleExportTargetId:n.ModuleExportTargetId})},update:!1,sort:"Identifier",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.applicationsTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.Application_AppVersion.NavigateTo(n.AppId,{version:n.Version})},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.purchaseOrdersTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.PurchaseOrder_Details.NavigateTo(n.PurchaseOrderId,{groupId:n.SourceGroupId})},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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")),i.AddItem(i.billingEntitiesTable=new AjaxFilterTableViewModel({route:null,click:function(n){return app.route.BillingEntity_Details.NavigateTo(n.BillingEntityId)},update:!1,sort:"Name",ascending:!0,size:25,enabled:!1}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Group={DashboardGroupId:ko.observable(0),Name:ko.observable(""),SortOrder:ko.observable(0),Expanded:ko.observable(!1),ModuleTiles:ko.observableArray(),CumulativeMeterTiles:ko.observableArray()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Group.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.Section_Details=t}(Model||(Model={}));app.router.View(app.route.Section_Details,function(n){function t(t){var i=n.call(this,t,new Model.Section_Details)||this;return i.ExtendMappingOptions(Tile.CreateModuleTileMapping(i,"ModuleTiles[i]")),i.ExtendMappingOptions(Tile.CreateCumulativeMeterTileMapping("CumulativeMeterTiles[i]")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("attributes",new Header_Text("Dashboard Section",null,i.viewModel.Group.Name)),new SingleValue_Block("Sort Order",i.viewModel.Group.SortOrder)]),Tile.CreateWithBlockSet([new Command_Block("Rename","Rename this section",i.FormAction(function(){return Form.SectionRename(i.viewModel.Group.DashboardGroupId(),i.viewModel.Group.Name(),function(n){return i.viewModel.Group.Name(n)})})),new Command_Block("Delete","Delete this section",i.FormAction(function(){return Form.SectionDelete(i.viewModel.Group.DashboardGroupId(),function(){return app.route.Home_Index.NavigateTo()})})),new Command_Block("Sort Order","Specify the sort order",i.FormAction(function(){return Form.SectionSortOrder(i.viewModel.Group.DashboardGroupId(),i.viewModel.Group.SortOrder(),function(n){return i.viewModel.Group.SortOrder(n)})}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Modules"),new Command_Block("Add","Add modules to this section",i.FormAction(function(){return Form.SectionAddModules(i.viewModel.Group.DashboardGroupId(),i.Update)})),new Command_Block("Remove","Remove modules from this section",i.FormAction(function(){return Form.SectionRemoveModules(i.viewModel.Group.DashboardGroupId(),i.Update)}))]),Tile.CreateWithBlockSet([new SmallHeader_Block("Meters"),new Command_Block("Add","Add meters to this section",i.FormAction(function(){return Form.SectionAddCumulativeMeters(i.viewModel.Group.DashboardGroupId(),i.Update)})),new Command_Block("Remove","Remove meters From this section",i.FormAction(function(){return Form.SectionRemoveCumulativeMeters(i.viewModel.Group.DashboardGroupId(),i.Update)}))])])),i.AddItem(new PageItem("nested",[new HeaderPageItem(i.viewModel.Group.Name),Tile.CreatePageItem().addTileSet(i.viewModel.Group.ModuleTiles),Tile.CreatePageItem().addTileSet(i.viewModel.Group.CumulativeMeterTiles)])),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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()},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.SharedCollection.Name,"Charts",app.route.Chart_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.SharedCollection_Details=t}(Model||(Model={}));app.router.View(app.route.SharedCollection_Details,function(n){function t(t){var i=n.call(this,t,new Model.SharedCollection_Details)||this,r,u,f;return i.ExtendMappingOptions({arrayChildId:{"Charts[i]":"ChartId","ChartItems[i]":"ChartItemId"},extend:{}}),u=function(n,t){i.viewModel.SharedCollection.Name(n);i.viewModel.SharedCollection.DaysToDisplay(t)},i.AddItem(f=Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Configure","Configure chart report",i.FormAction(function(){return Form.SharedCollectionConfigure(i.viewModel.SharedCollection.ChartCollectionId(),i.viewModel.SharedCollection.Name(),i.viewModel.SharedCollection.DaysToDisplay(),u)}),i.HasCapabilityComputed(Capability.SharedChart_Edit))]),Tile.CreateWithBlockSet([new Command_Block("Add","Add chart to report",i.FormAction(function(){return Form.SharedCollectionAddChart(i.viewModel.SharedCollection.ChartCollectionId(),r,i.Update)}),i.HasCapabilityComputed(Capability.SharedChart_Edit))]),Tile.CreateWithBlockSet([new Command_Block("Download","Download Trend Data",i.FormAction(function(){return Form.SharedCollectionDownloadData(i.viewModel.SharedCollection.ChartCollectionId(),i.viewModel.SharedCollection.Name(),i.viewModel.SharedCollection.DaysToDisplay(),null,null)}))]),Tile.CreateWithBlockSet([new Command_Block("Save As...","Save a private copy of this report",i.FormAction(function(){return Form.SharedCollectionCloneToPrivate(i.viewModel.SharedCollection.ChartCollectionId(),i.viewModel.SharedCollection.Name(),i.viewModel.SharedCollection.DaysToDisplay(),function(n){return app.route.Chart_Details.NavigateTo(n)})}))])])),f.lowMargin="true",i.OnViewModelReady=function(){r=new ChartCollection(i,i.viewModel.SharedCollection.ChartCollectionId,i.viewModel.SharedCollection.Name,i.viewModel.SharedCollection.DaysToDisplay,i.viewModel.SharedCollection.Intervals,i.viewModel.SharedCollection.IsVirtual,i.viewModel.SharedCollection.Charts,!0);r.dataCollection.UpdateCollection();i.AddItem(r);r.charts().length===0&&i.FormAction(function(){return Form.SharedCollectionAddChart(i.viewModel.SharedCollection.ChartCollectionId(),r,i.Update)})()},i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(),SimStatus:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(function(){return"Sim "+t.Sim.SimNumber()},function(){return t.Sim.NetworkName()||"Dashboard"},function(){return t.Sim.NetworkId()==null?app.route.Home_Index.For():app.route.Network_Details.For(t.Sim.NetworkId)})},t}return __extends(t,n),t}(n.Base_Model);n.Sim_Details=t}(Model||(Model={}));app.router.View(app.route.Sim_Details,function(n){function t(t){var i=n.call(this,t,new Model.Sim_Details)||this;return i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("sim",new Header_Text(i.viewModel.Sim.SimNumber,"Sim Number",Format.PhoneNumberComputed(i.viewModel.Sim.PhoneNumber),"Phone Number",i.viewModel.Sim.CellularNetworkName),new Header_Actions(null,function(){return CopyToClipboard(i.viewModel.Sim.SimNumber,!0,i.viewModel.Sim.SimNumber())},function(){return CopyToClipboard(i.viewModel.Sim.PhoneNumber)},null,"Click to copy to clipboard","Click to copy to clipboard")),new SingleValue_Block("Status",i.viewModel.Sim.SimStatus),new Command_Block("Edit","Change the details of this sim",i.FormAction(function(){return Form.SimEdit({SimId:i.viewModel.Sim.SimId(),SimNumber:i.viewModel.Sim.SimNumber(),PhoneNumber:i.viewModel.Sim.PhoneNumber(),Cancelled:i.viewModel.Sim.Cancelled()},i.Update)}),i.HasCapabilityComputed(Capability.Sim_Update)),new Command_Block("Groups","Display groups containing sim",function(){return app.route.Sim_ContainingGroups.NavigateTo(i.viewModel.Sim.SimId)}),new Command_Block("Cellular","Change the cellular network",i.FormAction(function(){return Form.SimSetCellularNetwork(i.viewModel.Sim.SimId(),i.viewModel.Sim.CellularNetworkId(),i.Update)}),i.HasCapabilityComputed(Capability.Sim_Update)),new Command_Block("Delete","Delete this sim",i.FormAction(function(){return Form.SimDelete(i.viewModel.Sim.SimId(),function(){return app.route.Group_Index.NavigateTo()})}),i.HasCapabilityComputed(Capability.Sim_Delete))]),Tile.CreateWithBlockSet([new Header_Block("network",new Header_Text("Network",null,ko.computed(function(){return i.viewModel.Sim.NetworkId()!=null?i.viewModel.Sim.NetworkName():"None Assigned"}),"Assigned Network"),new Header_Actions(function(){return i.viewModel.Sim.NetworkId()!=null?app.route.Network_Details.NavigateTo(i.viewModel.Sim.NetworkId):null})),new Command_Block("View Network",ko.computed(function(){return i.viewModel.Sim.NetworkId()!=null?i.viewModel.Sim.NetworkName():"None Assigned"}),function(){return i.viewModel.Sim.NetworkId()!=null?app.route.Network_Details.NavigateTo(i.viewModel.Sim.NetworkId):null}),new Command_Block("View Device",ko.computed(function(){return i.viewModel.Sim.DeviceExtAddress()!=null?i.viewModel.Sim.DeviceExtAddress():"None Assigned"}),function(){return i.viewModel.Sim.DeviceExtAddress()!=null?app.route.Device_Details.NavigateTo(i.viewModel.Sim.DeviceExtAddress):null}),new Command_Block("Assign","Assign to a network device",i.FormAction(function(){return Form.SimSetNetwork(i.viewModel.Sim.SimId(),i.viewModel.Sim.NetworkId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_ManageSim)&&i.viewModel.Sim.DeviceExtAddress()==null})),new Command_Block("Remove","Remove the network assignment",i.FormAction(function(){return Form.NetworkRemoveSim(i.viewModel.Sim.NetworkId(),i.viewModel.Sim.SimId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_ManageSim)&&i.viewModel.Sim.DeviceExtAddress()!=null&&i.viewModel.Sim.NetworkId()!=null})),new Command_Block("Remove","Remove the device assignment",i.FormAction(function(){return Form.DeviceRemoveSim(i.viewModel.Sim.DeviceExtAddress(),i.viewModel.Sim.SimId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.Network_ManageSim)&&i.viewModel.Sim.DeviceExtAddress()!=null&&i.viewModel.Sim.NetworkId()==null}))])])),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.Tag={TagId:ko.observable(0),Name:ko.observable(""),CreatedUtc:ko.observable(),CreatedUserId:ko.observable(0),CreatedUsername:ko.observable("")},t.GroupId=ko.observable(0),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.Tag.Name,ko.computed(function(){return t.GroupId()!=null?"Tags":"Dashboard"}),ko.computed(function(){return t.GroupId()!=null?app.route.Group_Tags.For(t.GroupId):app.route.Home_Index.For()}))},t}return __extends(t,n),t}(n.Base_Model);n.Tag_Details=t}(Model||(Model={}));app.router.View(app.route.Tag_Details,function(n){function t(t){var i=n.call(this,t,new Model.Tag_Details)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.Tag_TagAttachmentsTable.For(i.viewModel.Tag.TagId),click:null,update:!0,sort:"AttachmentType",ascending:!1,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.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(),AccountPasswordResetExpiryUtc:ko.observable(),LegalTermsId:ko.observable(0),LegalTermsName:ko.observable(""),LegalTermsAcceptanceUtc:ko.observable(),MessageAccountId:ko.observable(0),ModuleEventSubscriptionCount:ko.observable(0),NetworkAlertSubscriptionCount:ko.observable(0),SuppressAlertsUtc:ko.observable(),SuppressionExpiresIn:ko.observable(0),EmailAddresses:ko.observableArray(),PhoneNumbers:ko.observableArray()},t.UserTasks=ko.observableArray(),t.CreateBreadcrumbs=function(){return new PageBreadcrumbs(t.User.Name,"Dashboard",app.route.Home_Index.For())},t}return __extends(t,n),t}(n.Base_Model);n.User_Details=t}(Model||(Model={}));app.router.View(app.route.User_Details,function(n){function t(t){var i=n.call(this,t,new Model.User_Details)||this,u,r;i.ExtendMappingOptions({arrayChildId:{"UserTasks[i]":"Id","EmailAddresses[i]":"EmailAddress","PhoneNumbers[i]":"PhoneNumber"},extend:{"EmailAddresses[i]":function(n){Tile.MakeTile(n);n.state=ko.computed(function(){return Tile.StateClass(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",i.FormAction(function(){return Form.UserRemoveEmailAddress(i.viewModel.User.UserId(),n.EmailAddress(),i.Update)}),i.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Edit","Edit this email address",i.FormAction(function(){return Form.UserEditEmailAddress(i.viewModel.User.UserId(),n.EmailAddress(),i.Update)}),i.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Set Primary","Set this email address as primary",i.FormAction(function(){return Form.UserSetPrimaryEmailAddress(i.viewModel.User.UserId(),n.EmailAddress(),i.Update)}),ko.computed(function(){return!n.IsPrimary()&&i.HasCapability(Capability.User_ManageContact)}))])},"PhoneNumbers[i]":function(n){Tile.MakeTile(n);n.state=ko.computed(function(){return Tile.StateClass(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":""}),Format.PhoneNumberComputed(n.PhoneNumber),null,null,"phone")),new Command_Block("Remove","Remove this phone number",i.FormAction(function(){return Form.UserRemovePhoneNumber(i.viewModel.User.UserId(),n.PhoneNumber(),i.Update)}),i.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Edit","Edit this phone number",i.FormAction(function(){return Form.UserEditPhoneNumber(i.viewModel.User.UserId(),n.PhoneNumber(),i.Update)}),i.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Set Primary","Set this phone number as primary",i.FormAction(function(){return Form.UserSetPrimaryPhoneNumber(i.viewModel.User.UserId(),n.PhoneNumber(),i.Update)}),ko.computed(function(){return!n.IsPrimary()&&i.HasCapability(Capability.User_ManageContact)}))])}}});u=ko.computed(function(){return i.viewModel.UserTasks().every(function(n){return n.Type()==="Problem"&&n.IsCompleted()||!((n.Type()==="Problem"||n.Type()==="Task")&&!n.IsCompleted())})});r=ko.observable(!1);i.OnViewModelReady=function(){return r(!u())};var s=function(){return i.viewModel.User.IsLockedOut()?TileState.Faulted:TileState.Idle},h=function(){return i.viewModel.User.LegalTermsAcceptanceUtc()?TileState.Active:TileState.Faulted},f,e,c=function(n){i.viewModel.User.Name(n);f.LoadData()},l=function(n){i.viewModel.User.TimeZoneName(n);f.LoadData()},a=function(){return e.LoadData()},o=new DashboardHeaderPageItem(0,ko.computed(function(){return"User "+(u()?"":" - Required tasks outstanding")}),ko.computed(function(){return u()?TileState.Idle:TileState.Faulted}),function(){return r(!r())});return o.addButton(new DashboardActionButton(0,ko.computed(function(){return r()?"collapse":"expand"}),ko.computed(function(){return r()?"Hide":"Show"}),function(){return r(!r())},!0)),i.AddItem(o),i.AddItem(new AjaxFilterTableViewModel({route:null,click:null,update:!1,sort:"SortOrder",ascending:!0,size:25,enabled:r,hideRefresh:!0,data:i.viewModel.UserTasks}).AddColumn(new CommandWithDynamicIconTableColumnViewModel("sourceIcon",function(n){return Task.Icon(n.SourceType())},function(n){return Task.Source(n.SourceType())},function(n){return Task.Route(n.SourceType(),n.Parameters)})).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 Task.Tasks[n.Description()].GetDescription(n.IsCompleted(),n.Parameters)})).AddColumn(new TaskActionsTextTableColumnViewModel("Actions","Actions",i,function(){return function(){return i.Update()}},i.viewModel.Capabilities,function(n){return n},function(n){return!n.IsCompleted()})).AddTitle("Tasks")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Header_Block("profile",new Header_Text(i.viewModel.User.Name,i.viewModel.User.TimeZoneName,ko.computed(function(){return i.viewModel.User.IsLockedOut()?"Locked Out":i.viewModel.User.IsActive()?"Active":"Disabled"}),"State")),new SingleValue_Block("Account",ko.computed(function(){return i.viewModel.User.HasAccount()?i.viewModel.User.Branding():"No Account"})),new Command_Block("Unlock","Unlock user account",i.FormAction(function(){return Form.UserUnlockAccount(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.User_UnlockUserAccount)&&i.viewModel.User.IsLockedOut()})),new SingleValue_Block("Created",Format.DateTimeComputed(i.viewModel.User.CreationDateUtc))],s),Tile.CreateWithBlockSet([new Command_Block("Name","Change the name of this user",i.FormAction(function(){return Form.UserChangeName(i.viewModel.User.UserId(),i.viewModel.User.Name(),c)}),i.HasCapabilityComputed(Capability.User_ManageDetails)),new Command_Block("Timezone","Change timezone",i.FormAction(function(){return Form.UserChangeTimezone(i.viewModel.User.UserId(),i.viewModel.User.TimeZoneName(),l)}),i.HasCapabilityComputed(Capability.User_ManageDetails)),new Command_Block("Add Phone","Add a new phone number",i.FormAction(function(){return Form.UserAddPhoneNumber(i.viewModel.User.UserId(),i.Update)}),i.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Add Email","Add a new email address",i.FormAction(function(){return Form.UserAddEmailAddress(i.viewModel.User.UserId(),i.Update)}),i.HasCapabilityComputed(Capability.User_ManageContact)),new Command_Block("Impersonate","Log in as this user",i.FormAction(function(){return Form.UserImpersonate(i.viewModel.User.UserId(),function(){return app.route.Home_Index.NavigateTo()})}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.User_Impersonate)})),new Command_Block("Dashboard","Copy dashboard sections",i.FormAction(function(){return Form.UserCopyDashboardSections(i.viewModel.User.UserId())}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.User_Impersonate)})),new Command_Block("Password","Reset the users password",i.FormAction(function(){return Form.UserResetPassword(i.viewModel.User.UserId())}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.User_SetPassword)})),new Command_Block("Set Password","Set the users password",i.FormAction(function(){return Form.UserSetPassword(i.viewModel.User.UserId())}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.System_Admin)})),new Command_Block("Create","Create an account for this user",i.FormAction(function(){return Form.UserCreateAccount(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return!i.viewModel.User.HasAccount()&&i.HasCapability(Capability.User_Create)})),new Command_Block("Remove","Remove the account for this user",i.FormAction(function(){return Form.UserRemoveAccount(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.User_Create)})),new Command_Block("Disable","Disable this user",i.FormAction(function(){return Form.UserDisable(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.User_ChangeActive)&&i.viewModel.User.IsActive()})),new Command_Block("Enable","Enable this user",i.FormAction(function(){return Form.UserEnable(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return i.HasCapability(Capability.User_ChangeActive)&&!i.viewModel.User.IsActive()})),new Command_Block("Groups","Display groups containing the user",function(){return app.route.User_ContainingGroups.NavigateTo(i.viewModel.User.UserId)},ko.computed(function(){return i.HasCapability(Capability.User_Impersonate)})),new Command_Block("Access","Display the groups user can access",function(){return app.route.User_GrantedRoles.NavigateTo(i.viewModel.User.UserId)},ko.computed(function(){return i.HasCapability(Capability.User_Impersonate)})),new Command_Block("Subscription","Alert and network subscriptions",function(){return app.route.User_Subscriptions.NavigateTo(i.viewModel.User.UserId)},ko.computed(function(){return i.HasCapability(Capability.User_Impersonate)})),new Command_Block("Events","View module event notifications",function(){return app.route.User_ModuleEventNotifications.NavigateTo(i.viewModel.User.UserId)},ko.computed(function(){return i.HasCapability(Capability.User_ViewEvent)})),new Command_Block("Escalation","View users escalation lists",function(){return app.route.User_EscalationLists.NavigateTo(i.viewModel.User.UserId)},ko.computed(function(){return i.HasCapability(Capability.User_Impersonate)})),new Command_Block("Account","View message account",function(){return app.route.MessageAccount_Details.NavigateTo(i.viewModel.User.MessageAccountId)},ko.computed(function(){return i.viewModel.User.MessageAccountId()!=null&&i.HasCapability(Capability.User_ChangeMessageAccount)})),new Command_Block("Message","Send a test message",i.FormAction(function(){return Form.UserSendTestMessage(i.viewModel.User.UserId())}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.User_SendTestMessage)})),new Command_Block("Suppress","Suppress alerts until a time",i.FormAction(function(){return Form.UserSuppressAlerts(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return i.viewModel.User.HasAccount()&&i.HasCapability(Capability.Module_SuppressAlerts)})),new Command_Block("Clear","Clear alert suppression",i.FormAction(function(){return Form.UserClearSuppressedAlerts(i.viewModel.User.UserId(),i.Update)}),ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null&&i.HasCapability(Capability.Module_SuppressAlerts)})),new SingleValue_Block("Suppressed Until",ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()==null?"None Set":Format.DateTime(moment.utc(i.viewModel.User.SuppressAlertsUtc()))}),ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null})),new SingleValue_Block("Expires",ko.computed(function(){return Format.OverdueBy(moment.duration(i.viewModel.User.SuppressionExpiresIn(),"milliseconds"))}),ko.computed(function(){return i.viewModel.User.SuppressAlertsUtc()!=null}))]),Tile.CreateWithBlockSet([new Header_Block("legal-terms",new Header_Text(ko.computed(function(){return i.viewModel.User.LegalTermsName()||"None"}),ko.computed(function(){return i.viewModel.User.LegalTermsName()?"Assigned Terms":"No terms assigned"}),ko.computed(function(){return i.viewModel.User.LegalTermsAcceptanceUtc()?Format.DateTime(moment.utc(i.viewModel.User.LegalTermsAcceptanceUtc())):"Never"}),"Acceptance date"),new Header_Actions(function(){return i.viewModel.User.LegalTermsName()!=null?app.route.LegalTerms_View.NavigateTo(i.viewModel.User.LegalTermsId):null}))],h),Tile.CreateWithBlockSet([new Header_Block("brand",new Header_Text(ko.computed(function(){return i.viewModel.User.Branding()||"None"}),"Branding Name",ko.computed(function(){return i.viewModel.User.BrandingDashboard()||""}),"Dashboard")),new Command_Block("Edit","Edit branding for user",i.FormAction(function(){return Form.UserEditBranding(i.viewModel.User.UserId(),i.viewModel.User.BrandingId(),i.Update)}),i.HasCapabilityComputed(Capability.User_Create))])]).addTileSet(i.viewModel.User.EmailAddresses).addTileSet(i.viewModel.User.PhoneNumbers)),i.AddItem(f=new AjaxFilterTableViewModel({route:app.route.User_EventsTable.For(i.viewModel.User.UserId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:25,enabled:i.HasCapabilityComputed(Capability.User_ViewEvent)}).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")),i.AddItem(Tile.CreatePageItem().addTileSet([Tile.CreateWithBlockSet([new Command_Block("Add Note","Add a new Note",i.FormAction(function(){return Form.UserCreateNote(i.viewModel.User.UserId(),a)}),i.HasCapabilityComputed(Capability.Note_Create))])])),i.AddItem(e=new AjaxFilterTableViewModel({route:app.route.User_NotesTable.For(i.viewModel.User.UserId),click:null,update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new CommandTableColumnViewModel("View Notes","report",function(n){return app.route.Note_Details.NavigateTo(n.NoteId)})).AddColumn(new DateFilterTableColumnViewModel("CreatedUtc","Created",!1,!0)).AddColumn(new FilterTableColumnViewModel("Title","Title",!1,!0)).AddColumn(new CommandTableColumnViewModel("Created By","profile",function(n){return app.route.User_Details.NavigateTo(n.CreatedUserId)})).AddColumn(new FilterTableColumnViewModel("CreatorName","Created By",!1,!1)).AddTitle("User Notes")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.User_UserActionsTable.For(i.viewModel.User.UserId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:25,enabled:i.HasCapabilityComputed(Capability.User_ViewActions)}).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")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.User_UserActionsForTargetUserTable.For(i.viewModel.User.UserId),click:null,update:!0,sort:"TimeUtc",ascending:!1,size:25,enabled:i.HasCapabilityComputed(Capability.User_ViewActions)}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.User={UserId:ko.observable(0),Name:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Escalation Lists",t.User.Name,app.route.User_Details.For(t.User.UserId))},t}return __extends(t,n),t}(n.Base_Model);n.User_EscalationLists=t}(Model||(Model={}));app.router.View(app.route.User_EscalationLists,function(n){function t(t){var i=n.call(this,t,new Model.User_EscalationLists)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.User_EscalationListsTable.For(i.viewModel.User.UserId),click:function(n){return app.route.EscalationList_Details.NavigateTo(n.EscalationListId)},update:!0,sort:"Name",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("Name","Escalation List",!1,!0)).AddColumn(new NumberFilterTableColumnViewModel("EscalationDelayMinutes","Delay (mins)",!1,!0)).AddColumn(new FilterTableColumnViewModel("Subscription","Subscription",!1,!1,function(n){return Format.Subscription(n.SendSms,n.SendEmail)})).AddTitle("User Escalation Lists")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.User={UserId:ko.observable(0),Name:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Granted Roles",t.User.Name,app.route.User_Details.For(t.User.UserId))},t}return __extends(t,n),t}(n.Base_Model);n.User_GrantedRoles=t}(Model||(Model={}));app.router.View(app.route.User_GrantedRoles,function(n){function t(t){var i=n.call(this,t,new Model.User_GrantedRoles)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.User_GroupRolesTable.For(i.viewModel.User.UserId),click:function(n){return app.route.Group_Details.NavigateTo(n.TargetGroupId)},update:!0,sort:"TargetGroupName",ascending:!0,size:25}).AddColumn(new FilterTableColumnViewModel("TargetGroupName","Group",!1,!0)).AddColumn(new FilterTableColumnViewModel("RoleName","Role",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("Role","password",function(n){return app.route.Role_Details.For(n.RoleId).GetUrl()},function(n){return app.route.Role_Details.NavigateTo(n.RoleId)},!0)).AddTitle("Granted Group Roles")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.User={UserId:ko.observable(0),Name:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Module Notifications",t.User.Name,app.route.User_Details.For(t.User.UserId))},t}return __extends(t,n),t}(n.Base_Model);n.User_ModuleEventNotifications=t}(Model||(Model={}));app.router.View(app.route.User_ModuleEventNotifications,function(n){function t(t){var i=n.call(this,t,new Model.User_ModuleEventNotifications)||this;return i.AddItem(new AjaxFilterTableViewModel({route:app.route.User_ModuleEventsTable.For(i.viewModel.User.UserId),click:function(n){return app.route.Module_AlertEventDetails.NavigateTo(n.ModuleId,{moduleEventId:n.ModuleEventId})},update:!0,sort:"CreatedUtc",ascending:!1,size:25}).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return app.route.Module_Details.For(n.ModuleId).GetUrl()},function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Network Node","network",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!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")),i}return __extends(t,n),t}(Base_ViewWithModel));__extends=this&&this.__extends||function(){var n=function(t,i){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i])},n(t,i)};return function(t,i){function r(){this.constructor=t}n(t,i);t.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),function(n){var t=function(n){function t(){var t=n!==null&&n.apply(this,arguments)||this;return t.User={UserId:ko.observable(0),Name:ko.observable("")},t.CreateBreadcrumbs=function(){return new PageBreadcrumbs("Subscriptions",t.User.Name,app.route.User_Details.For(t.User.UserId))},t}return __extends(t,n),t}(n.Base_Model);n.User_Subscriptions=t}(Model||(Model={}));app.router.View(app.route.User_Subscriptions,function(n){function t(t){var i=n.call(this,t,new Model.User_Subscriptions)||this,r;return i.AddItem(r=new AjaxFilterTableViewModel({route:app.route.User_SubscriptionAlertsTable.For(i.viewModel.User.UserId),click:function(n){return app.route.Module_AlertDetails.NavigateTo(n.ModuleId,{alertAndStatus:n.AlertAndStatus})},update:!0,sort:"NetworkName",ascending:!0,size:25}).AddColumn(new HyperlinkTableColumnViewModel("View Network","network",function(n){return app.route.Network_Details.For(n.NetworkId).GetUrl()},function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)})).AddColumn(new FilterTableColumnViewModel("NetworkName","Network",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Module","firmware",function(n){return app.route.Module_Details.For(n.ModuleId).GetUrl()},function(n){return app.route.Module_Details.NavigateTo(n.ModuleId)})).AddColumn(new FilterTableColumnViewModel("ModuleName","Module",!1,!0)).AddColumn(new HyperlinkTableColumnViewModel("View Node","node",function(n){return app.route.Network_Node.For(n.NetworkId,{nodeAddress:n.NodeAddress}).GetUrl()},function(n){return app.route.Network_Node.NavigateTo(n.NetworkId,{nodeAddress:n.NodeAddress})})).AddColumn(new FilterTableColumnViewModel("NodeAddress","Node",!1,!0,function(n){return"("+Format.NodeAddress(n.NodeAddress)+") "+n.NodeName})).AddColumn(new FilterTableColumnViewModel("EventName","Alert",!1,!0,function(n){return"("+Format.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 i.FormAction(function(){return Form.UserDeleteSubscription(i.viewModel.User.UserId(),n.ModuleId,n.AlertAndStatus,function(){return r.LoadData()})})()})).AddTitle("Alert Subscriptions")),i.AddItem(new AjaxFilterTableViewModel({route:app.route.User_SubscriptionOverdueNetworksTable.For(i.viewModel.User.UserId),click:function(n){return app.route.Network_Details.NavigateTo(n.NetworkId)},update:!0,sort:"Name",ascending:!0,size:25}).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")),i}return __extends(t,n),t}(Base_ViewWithModel));app.page.NavigateToWindowUrl()