{"version":3,"file":"../Truckcom.min.js","sources":["Truckcom.js"],"sourcesContent":["var RequestingGrid;\r\nvar RequestingGridLegacyName;\r\nvar RequestingGridIndex;\r\nvar ShiftKeyDown = false;\r\nvar CtrlKeyDown = false;\r\n\r\n$(function () {\r\n var themeSelected;\r\n\r\n if (localStorage) {\r\n if (localStorage.getItem(\"Theme\") !== null) {\r\n\r\n themeSelected = localStorage.getItem(\"Theme\");\r\n\r\n // Handle old local store variable saved as boolean\r\n if (themeSelected === \"false\") {\r\n themeSelected = \"Light\";\r\n }\r\n else if (themeSelected === \"true\") {\r\n themeSelected = \"Dark\";\r\n }\r\n\r\n if (themeSelected !== 'Light') {\r\n ToggleTheme(themeSelected);\r\n }\r\n\r\n }\r\n\r\n var highContrast = localStorage.getItem(\"HighContrast\") === \"true\";\r\n\r\n ToggleHighContrastTheme(highContrast);\r\n $(\"#ContrastCheckbox\").dxCheckBox({ value: highContrast });\r\n\r\n var compactMode = localStorage.getItem(\"CompactMode\") === \"true\";\r\n\r\n ToggleCompactTheme(compactMode);\r\n $(\"#CompactCheckbox\").dxCheckBox({ value: compactMode });\r\n\r\n var autoRefresh = localStorage.getItem(\"AutoRefreshOff\") === \"true\";\r\n\r\n ToggleAutoRefresh(autoRefresh);\r\n $(\"#AutoRefreshCheckbox\").dxCheckBox({ value: !autoRefresh });\r\n }\r\n\r\n $(\".Truckcom_Navbar_Dropdown, .Truckcom_Navbar_Notifications li\").on(\"mouseenter\", function () {\r\n $(this).addClass(\"Truckcom_Navbar_Dropdown_Active\");\r\n });\r\n\r\n $(\".Truckcom_Navbar_Dropdown, .Truckcom_Navbar_Notifications li\").on(\"mouseleave\", function () {\r\n var item = $(this);\r\n setTimeout(function () {\r\n item.removeClass(\"Truckcom_Navbar_Dropdown_Active\");\r\n }, 500);\r\n });\r\n});\r\n\r\nfunction ToggleTheme(theme) {\r\n var darkThemePath = '/Content/CSS/dx-Truckcom-Theme-Dark.css';\r\n var lightThemePath = '/Content/CSS/dx-Truckcom-Theme-Light.css';\r\n\r\n var darkThemeClass = 'Truckcom-Dark';\r\n var lightThemeClass = 'Truckcom-Light';\r\n\r\n if (theme === 'Dark') {\r\n $('#theme_css').attr('href', darkThemePath);\r\n $('body').removeClass(lightThemeClass);\r\n $('body').addClass(darkThemeClass);\r\n }\r\n else if (theme === 'Light') {\r\n $('#theme_css').attr('href', lightThemePath);\r\n $('body').removeClass(darkThemeClass);\r\n $('body').addClass(lightThemeClass);\r\n }\r\n\r\n localStorage.setItem(\"Theme\", theme);\r\n}\r\n\r\nfunction ToggleHighContrastTheme(highContrastOn) {\r\n var highContrastThemeClass = 'Truckcom-HiContrast';\r\n\r\n if (highContrastOn) {\r\n $('body').addClass(highContrastThemeClass);\r\n } else {\r\n $('body').removeClass(highContrastThemeClass);\r\n }\r\n\r\n localStorage.setItem(\"HighContrast\", highContrastOn);\r\n}\r\n\r\nfunction ToggleCompactTheme(compactModeOn) {\r\n var compactThemeClass = 'Truckcom-Compact';\r\n\r\n if (compactModeOn) {\r\n $('body').addClass(compactThemeClass);\r\n } else {\r\n $('body').removeClass(compactThemeClass);\r\n }\r\n\r\n localStorage.setItem(\"CompactMode\", compactModeOn);\r\n}\r\n\r\nfunction ToggleAutoRefresh(autoRefresh) {\r\n localStorage.setItem(\"AutoRefreshOff\", autoRefresh);\r\n}\r\n\r\n/* Popup Functions */\r\nfunction CloseEditFormPopup() {\r\n ClosePopup(\"EditFormPopup\");\r\n}\r\n\r\nfunction CloseViewPopup() {\r\n ClosePopup(\"ViewPopup\");\r\n}\r\n\r\nfunction CloseBasePopup() {\r\n ClosePopup(\"BasePopup\");\r\n}\r\n\r\nfunction CloseAdvancedSearchPopup() {\r\n FormTitle = \"\";\r\n RequestingGrid = \"JobsGrid\";\r\n ActiveDataGrid = \"JobsGrid\";\r\n ClosePopup(\"AdvancedSearchPopup\");\r\n}\r\n\r\nfunction CloseEmailPopup() {\r\n ClosePopup(\"EmailPopup\");\r\n}\r\n\r\nfunction CloseAddNewPopup() {\r\n ClosePopup(\"AddNewPopup\");\r\n}\r\n\r\nfunction CloseJobDetailsPopup() {\r\n ClosePopup(\"JobDetailsPopup\");\r\n}\r\n\r\nfunction CloseDrillDownPopup() {\r\n ClosePopup(\"DrilldownPopup\");\r\n}\r\n\r\nfunction CloseManageViewsPopup() {\r\n ClosePopup(\"ManageViewsPopup\");\r\n $(\"#\" + ManageViews_PreviousGridId).dxDataGrid(\"instance\").refresh();\r\n}\r\n\r\nfunction ClosePopup(popupId) {\r\n if ($(\"#\" + popupId).children().length > 0) {\r\n $(\"#\" + popupId).dxPopup(\"dispose\");\r\n }\r\n}\r\n\r\nfunction CloseAndRemovePopup(popupId) {\r\n if ($(\"#\" + popupId).children().length > 0) {\r\n $(\"#\" + popupId).dxPopup(\"dispose\");\r\n $(\"#\" + popupId).remove();\r\n }\r\n}\r\n\r\nfunction PasswordChangeCallback(values, userId, isNewUser) {\r\n var newPassword = values[0];\r\n\r\n $(\"#SaveIndicator\").dxLoadPanel(\"instance\").option(\"visible\", true);\r\n \r\n var PasswordData = {\r\n Password: newPassword,\r\n UserId: userId\r\n };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n data: JSON.stringify(PasswordData),\r\n dataType: 'json',\r\n contentType: 'application/json; charset=utf-8',\r\n url: \"/api/AFUtils/ChangePassword\",\r\n success: function (data) {\r\n },\r\n error: function (data) {\r\n if (data.status !== 300) {\r\n if (!isNewUser) {\r\n ShowSuccessToast(\"Password successfully changed\");\r\n }\r\n $(\"#PopupContainer\").dxPopup(\"hide\");\r\n $(\"#SaveIndicator\").dxLoadPanel(\"instance\").option(\"visible\", false);\r\n } else {\r\n ShowWarningPopup(\"New password must be different from the current password\", \"Password not set\", true, true); \r\n $(\"#SaveIndicator\").dxLoadPanel(\"instance\").option(\"visible\", false);\r\n }\r\n }\r\n }); \r\n}\r\n\r\nfunction OpenChangePasswordPopup(passwordComplexityRequired, userId, isNewUser) {\r\n var passwordComplexityValidationRules = [];\r\n\r\n if (passwordComplexityRequired) {\r\n passwordComplexityValidationRules = [{\r\n type: \"pattern\",\r\n pattern: \"^(?=.*[A-Z])\",\r\n message: \"Password must contain at least 1 uppercase character\"\r\n }, {\r\n type: \"pattern\",\r\n pattern: \"^(?=.*[a-z])\",\r\n message: \"Password must contain at least 1 lowercase character\"\r\n }, {\r\n type: \"pattern\",\r\n pattern: \"[^A-Za-z0-9]\",\r\n message: \"Password must contain at least 1 special character\"\r\n }, {\r\n type: \"pattern\",\r\n pattern: \"^(?=.*[0-9])\",\r\n message: \"Password must contain at least 1 number\"\r\n }, {\r\n type: \"pattern\",\r\n pattern: \"^(?=.{8,})\",\r\n message: \"Password must be at least 8 characters long\"\r\n }];\r\n }\r\n\r\n GenericPrompt(\"Please enter new password\", [\"Enter Password*~\", \"Confirm Password#EnterPassword\"], PasswordChangeCallback, passwordComplexityValidationRules, userId, isNewUser);\r\n}\r\n\r\nfunction OpenViewPopup(popupUrl, popupTitle) {\r\n OpenTcvPopup(popupUrl, popupTitle);\r\n}\r\n\r\nfunction OpenBasePopup(popupUrl, popupTitle) {\r\n OpenTcvPopup(popupUrl, popupTitle);\r\n}\r\n\r\nfunction OpenEditPopup(popupUrl, popupTitle) {\r\n OpenTcvPopup(popupUrl, popupTitle);\r\n}\r\n\r\nfunction OpenTcvPopup(popupUrl, popupTitle) {\r\n $.ajax({\r\n type: \"POST\",\r\n url: popupUrl,\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n },\r\n failure: function (response) {\r\n alert(response.responseText);\r\n },\r\n error: function (response) {\r\n SetupPopup(\"\", \"\", \"\", response.responseText, popupTitle);\r\n }\r\n });\r\n}\r\n\r\nfunction GenericPrompt(header, fields, callback, additionalValidationRules, extraCallbackParam, extraCallbackParam2) {\r\n $(\"#PopupContainer\").dxPopup({\r\n title: header,\r\n visible: true,\r\n width: 400,\r\n height: 165,\r\n contentTemplate: function (contentElement) {\r\n var cleanedFieldNames = [];\r\n $.each(fields, function (index, field) {\r\n var textBoxMode = \"text\";\r\n\r\n if (field.toLowerCase().indexOf(\"password\") > -1) {\r\n textBoxMode = \"password\";\r\n }\r\n \r\n var validationRules = [];\r\n\r\n if (field.indexOf(\"*\") > -1) {\r\n // Fields that end with * have a required validator added\r\n field = field.replace(\"*\", \"\");\r\n var requiredFieldText = field.substring(0, field.indexOf(\"*\"));\r\n validationRules.push({\r\n type: \"required\",\r\n message: requiredFieldText + \" is required\"\r\n })\r\n }\r\n\r\n if (field.indexOf(\"#\") > -1) {\r\n // Fields that include # have a comparison validator added - value must match that in the field that is after the # \r\n var matchField = field.substring(field.indexOf(\"#\") + 1);\r\n field = field.substring(0, field.indexOf(\"#\"));\r\n\r\n validationRules.push({\r\n type: \"compare\",\r\n comparisonTarget: function () {\r\n var compareToTextBox = $(\"#\" + matchField).dxTextBox(\"instance\");\r\n if (compareToTextBox) {\r\n return compareToTextBox.option(\"value\");\r\n }\r\n },\r\n message: \"Values do not match\"\r\n });\r\n }\r\n\r\n if (field.indexOf(\"~\") > -1 && additionalValidationRules != undefined) {\r\n // Field includes the ~ indicating to include the additional validation rules for this field (i.e password complexity) \r\n field = field.substring(0, field.indexOf(\"~\"));\r\n\r\n $.each(additionalValidationRules, function (i, additionalValidationRule) {\r\n validationRules.push(additionalValidationRule);\r\n });\r\n }\r\n\r\n cleanedFieldNames.push(field);\r\n\r\n contentElement.append($(\"
\")\r\n .append($(\"
\" + field + \"
\"))\r\n .append($(\"
\").attr(\"id\", field.replace(/\\s+/g, '')).dxTextBox({\r\n mode: textBoxMode\r\n }).dxValidator({\r\n validationRules: validationRules\r\n })\r\n ));\r\n });\r\n\r\n contentElement.append($(\"
\").attr(\"id\", \"ButtonContainer\").addClass(\"Truckcom_Popup_ButtonContainer_NoMarginBottom\"));\r\n\r\n $(\"
\").attr(\"id\", \"templateOkButton\").appendTo(\"#ButtonContainer\").dxButton({\r\n text: \"OK\",\r\n type: \"default\",\r\n elementAttr: { class: \"Truckcom_Button \" },\r\n onClick: function (e) {\r\n if (e.validationGroup.validate().isValid) {\r\n var values = [];\r\n $.each(cleanedFieldNames, function (i, field) {\r\n values[i] = $(\"#\" + field.replace(/\\s+/g, '')).dxTextBox('option', 'value');\r\n });\r\n callback(values, extraCallbackParam, extraCallbackParam2);\r\n }\r\n }\r\n });\r\n\r\n $(\"
\").attr(\"id\", \"templateCancelButton\").appendTo(\"#ButtonContainer\").dxButton({\r\n text: \"Cancel\",\r\n elementAttr: { class: \"Truckcom_Button \" },\r\n onClick: function (e) {\r\n $(\"#PopupContainer\").dxPopup(\"dispose\");\r\n }\r\n });\r\n },\r\n onShown: function () {\r\n $(\"#\" + fields[0].replace(/\\s+/g, '') + \" input\").focus();\r\n }\r\n });\r\n}\r\n\r\n/* Create Controls functions */\r\nfunction CreateTimeEntryControl(id, value) {\r\n $(\"#\" + id).addClass(\"dx-texteditor dx-editor-outlined Truckcom_TimePicker\");\r\n\r\n $(\"#\" + id).append(\"
\");\r\n\r\n if (value !== \"\" && value !== undefined) {\r\n var timeToSet = (value.getHours() < 10 ? '0' : '') + value.getHours() + \":\" + (value.getMinutes() < 10 ? '0' : '') + value.getMinutes();\r\n $(\"#\" + id + \"Input\").val(timeToSet);\r\n }\r\n}\r\n\r\nfunction CreateTimePicker(id, value, timePickerFormat, formId) { // Time picker created for edit forms \r\n if (timePickerFormat === \"1\") { //ST Format time picker - only the popover used\r\n var existingTime = \"\";\r\n if (value !== \"\" && value !== undefined) {\r\n var timeToSet = Pad(value.getHours(), 2) + \":\" + Pad(value.getMinutes(), 2);\r\n if (timeToSet !== \"NaN:NaN\") {\r\n existingTime = timeToSet;\r\n }\r\n }\r\n\r\n $(\"
\").appendTo($(\"#\" + id)).dxButton({\r\n text: existingTime,\r\n elementAttr: { \"class\": \"Truckcom_Form_Picklist_Button\" },\r\n onClick: function (e) {\r\n $(\"#STTimePickerEditor .dx-popup-content\").empty();\r\n\r\n var stTimePicker = CreatePicker(\"\", id, formId);\r\n\r\n $(\"#STTimePickerEditor\").dxPopover({\r\n visible: true,\r\n target: $(\"#\" + id),\r\n closeOnOutsideClick: false\r\n });\r\n\r\n $(\"#STTimePickerEditor .dx-popup-content\").append(stTimePicker);\r\n\r\n if (value !== \"\" && value !== undefined) {\r\n var hours = Pad(value.getHours(), 2);\r\n var minutes = Pad(value.getMinutes(), 2);\r\n\r\n SetTimeValue(hours, minutes);\r\n }\r\n\r\n if (!isEdge()) {\r\n var cleave = new Cleave(\"#TimePickerInput\", {\r\n time: true,\r\n timePattern: ['h', 'm']\r\n });\r\n }\r\n else {\r\n EdgeCompatibleTimeEntry($(\"#TimePickerInput\"));\r\n }\r\n\r\n $(\"#TimePickerInput\").focus();\r\n }\r\n });\r\n\r\n\r\n } else { // Standard time entry text box \r\n CreateTimeEntryControl(id, value);\r\n if (!isEdge()) {\r\n var cleave = new Cleave(\"#\" + id + \"Input\", {\r\n time: true,\r\n timePattern: ['h', 'm']\r\n })\r\n }\r\n else {\r\n EdgeCompatibleTimeEntry($(\"#\" + id + \"Input\"));\r\n }\r\n }\r\n}\r\n\r\nfunction GetTimePickerValue(id, timePickerFormat) {\r\n if (timePickerFormat === \"1\") { //ST Format time picker\r\n var stTimePickerVal = $(\"#\" + id + \".Truckcom_TimeUpdate_TimeBox .Truckcom_Form_Picklist_Button\").dxButton(\"instance\").option(\"text\");\r\n\r\n if (stTimePickerVal != \"\") {\r\n return stTimePickerVal;\r\n }\r\n }\r\n else {\r\n if ($(\"#\" + id + \" input\").val() != \"\") {\r\n var enteredValue = CorrectTimeEntryFormat($(\"#\" + id + \" input\").val());\r\n return enteredValue;\r\n }\r\n }\r\n}\r\n\r\nfunction CorrectTimeEntryFormat(timeEntered) {\r\n var enteredValue = timeEntered;\r\n\r\n if (timeEntered !== \"\" && timeEntered.length < 5) { // Time is not in correct format\r\n enteredValue = \"\";\r\n for (var i = 0; i < 5; i++) { // We need a 5 digit time string (00:00)\r\n if (timeEntered[i] !== undefined) {\r\n enteredValue += timeEntered[i]; // Add whatever value has been entered\r\n } else {\r\n if (i === 2) { // Add the colon separator\r\n enteredValue += \":\";\r\n } else { // Any missing digits set to 0\r\n enteredValue += \"0\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n return enteredValue;\r\n}\r\n\r\nfunction ResizeAutoFormFields(colCount) {\r\n //Resizes the form fields for the auto edit form - specific class and sizes required for these forms\r\n if ($(\".Truckcom_Form .dx-texteditor-input\").length > 0) {\r\n var textBoxWidth;\r\n\r\n if (isIE()) {\r\n var popupWidth = $(\"#EditForm_Container\").width();\r\n var widestLabel = $(\".dx-field-item-label\").width();\r\n var padding = 25 * (colCount - 1);\r\n textBoxWidth = (popupWidth / colCount) - (widestLabel + padding);\r\n }\r\n else {\r\n $(\".Truckcom_Form .dx-item-content:not(.dx-collection)\").each(function () {\r\n $(this).width(420);\r\n });\r\n\r\n // Size the date picker controls\r\n $(\".Truckcom_Form .dx-datebox\").each(function () {\r\n $(this).width(\"inherit\");\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction ViewCallback(objectIds, methodName, datasetFullyQualifiedName, modelName, popupId, closeFormAfter, successMethod, startdate, enddate, preventLoadingIcon, parentId, parentId2, parentId3) {\r\n {\r\n var theModel;\r\n\r\n if (typeof eval(modelName) === \"string\") {\r\n theModel = eval(modelName);\r\n } else {\r\n theModel = JSON.stringify(eval(modelName));\r\n }\r\n\r\n if (!preventLoadingIcon) {\r\n $('#LoadIndicator').dxLoadPanel(\"instance\").option(\"visible\", true);\r\n }\r\n\r\n var CallbackObject = {\r\n ObjectIds: objectIds,\r\n Name: methodName,\r\n datasetFullyQualifiedName: datasetFullyQualifiedName,\r\n model: theModel,\r\n StartDate: startdate,\r\n EndDate: enddate,\r\n ParentID: parentId,\r\n ParentID2: parentId2,\r\n ParentID3: parentId3\r\n };\r\n\r\n var ClientDialogObject = {\r\n ObjectIds: objectIds,\r\n Name: methodName,\r\n datasetFullyQualifiedName: datasetFullyQualifiedName,\r\n StartDate: startdate,\r\n EndDate: enddate\r\n };\r\n\r\n ClientDialog.push(ClientDialogObject);\r\n\r\n $.ajax({\r\n type: 'POST', url: '/Home/CallBack',\r\n data: JSON.stringify(CallbackObject),\r\n contentType: 'application/json; charset = utf-8', dataType: 'json',\r\n success: function (data) {\r\n var CallbackObject = {\r\n IdstoRemove: data.IdsToRemove,\r\n Success: \"true\",\r\n time: new Date().toString()\r\n };\r\n \r\n ClientDialog.push(CallbackObject);\r\n if (JSON.parse(closeFormAfter.toLowerCase()) && $('#' + popupId).children().length > 0) {\r\n if ($('#' + popupId).hasClass(\"Truckcom_Auto_Popup\")) {\r\n $('#' + popupId).dxPopup('instance').dispose();\r\n $('#' + popupId).remove();\r\n } else {\r\n $('#' + popupId).dxPopup('instance').dispose();\r\n }\r\n }\r\n var myDataGrid = $('#' + RequestingGrid).dxDataGrid('instance');\r\n\r\n if (successMethod !== \"\") {\r\n if (successMethod.indexOf(\"(\") > 0) {\r\n eval(successMethod);\r\n } else {\r\n var theresult = window[successMethod](data);\r\n if (theresult && theresult.includes(\"Popup\")) {\r\n popupId = theresult;\r\n }\r\n }\r\n }\r\n\r\n if (typeof RequestingGrid != \"undefined\" && typeof window[RequestingGrid + \"_SelectorType\"] !== \"undefined\" && data.ObjectType === eval(RequestingGrid + \"_SelectorType\")) {\r\n if (RequestingGrid == \"InvoiceableJobs\") {\r\n RefreshInvoiceableJobsGrid();\r\n }\r\n else {\r\n $.each(data.IdsToRemove, function (index, element) {\r\n var rowIndex = myDataGrid.getRowIndexByKey(element);\r\n var visibleRows = myDataGrid.getVisibleRows().length;\r\n if (visibleRows > myDataGrid.pageSize()) {\r\n // If we are showing more than the page size then just hide the row for now\r\n var row = myDataGrid.getRowElement(rowIndex)\r\n $(row).hide();\r\n }\r\n else {\r\n // Can delete it via push \r\n eval(RequestingGrid + \"_DataStore\").push([{ type: \"remove\", key: element }]);\r\n }\r\n\r\n var GridData = eval(RequestingGrid + \"_GridData\");\r\n var indextoremove = -1;\r\n $.each(eval(RequestingGrid + \"_GridData\"), function (theindex, row) {\r\n\r\n if (row.DatabaseID == element) {\r\n indextoremove = theindex;\r\n }\r\n });\r\n\r\n GridData.splice(indextoremove, 1);\r\n });\r\n var LastIndex = 0;\r\n\r\n $.each(data.DatasetObjects, function (index, element) {\r\n var rowIndex = -1;\r\n if (myDataGrid != undefined) {\r\n rowIndex = myDataGrid.getRowIndexByKey(element.DatabaseID);\r\n }\r\n\r\n if (rowIndex > -1) {\r\n var row = myDataGrid.getVisibleRows()[rowIndex];\r\n\r\n $.each(Object.keys(element), function (index, e) {\r\n $('#' + RequestingGrid).dxDataGrid('instance').getVisibleRows()[rowIndex].data[e] = element[e];\r\n });\r\n LastIndex = rowIndex + 1;\r\n myDataGrid.repaintRows(rowIndex);\r\n } else {\r\n if (eval(RequestingGrid + \"_GridData\") !== undefined && Array.isArray(eval(RequestingGrid + \"_GridData\"))) {\r\n eval(RequestingGrid + \"_GridData\").push(element);\r\n }\r\n\r\n if (eval(RequestingGrid + \"_DataStore\") !== undefined) {\r\n eval(RequestingGrid + \"_DataStore\").push([{ type: \"insert\", data: element, index: LastIndex }]);\r\n }\r\n }\r\n\r\n });\r\n\r\n if (data.UpdateGroupedJobs && (data.DatasetObjects[0].GroupedJobs !== \"\" || data.DatasetObjects[0].PairedJobs !== \"\")) {\r\n // Trigger the background update only on this grid for the changed job ids\r\n var groupValue = data.DatasetObjects[0].GroupedJobs;\r\n\r\n if (data.DatasetObjects[0].PairedJobs !== undefined && data.DatasetObjects[0].PairedJobs !== \"\") {\r\n groupValue = data.DatasetObjects[0].PairedJobs;\r\n }\r\n\r\n BackgroundUpdate(RequestingGrid, groupValue);\r\n }\r\n\r\n if (RequestingGrid == \"WeeklyTimeSheetsGrid\" && data.DatasetObjects.length > 0) {\r\n BackgroundUpdate(RequestingGrid, data.DatasetObjects[0].DatabaseID);\r\n }\r\n\r\n UpdateGridText(RequestingGrid);\r\n }\r\n }\r\n else if (typeof RequestingGrid != \"undefined\" && typeof window[RequestingGrid + \"_SelectorType\"] !== \"undefined\" && data.ObjectType === \"StcLeg\" && window[RequestingGrid + \"_SelectorType\"] == \"StcJob\") {\r\n // We are in a jobs grid but the object that has been updated is a leg - trigger the job to be updated to update the properties\r\n if (data.DatasetObjects[0].Id !== undefined && data.DatasetObjects[0].LegLetter !== undefined) { \r\n var jobId = parseInt(data.DatasetObjects[0].Id.replace(data.DatasetObjects[0].LegLetter, \"\"));\r\n if (!isNaN(jobId)) {\r\n BackgroundUpdate(RequestingGrid, jobId); \r\n }\r\n }\r\n }\r\n\r\n if (data.Warning !== \"\" && data.Warning !== null) {\r\n ShowWarning(data.Warning);\r\n }\r\n\r\n if (data.View !== null) {\r\n if (data.View.substring(0, 4) === \"http\" || data.View.substring(0, 1) == \"/\") {\r\n window.open(data.View, \"_blank\");\r\n } else {\r\n var newPopupId = GetPopupIdFromView(data.View.substring(0, 30));\r\n\r\n $('#' + newPopupId).dxPopup({\r\n contentTemplate: function (contentElement) {\r\n contentElement.append(data.View);\r\n },\r\n showTitle: true,\r\n title: 'Information',\r\n visible: true,\r\n onHidden: function () {\r\n $('#' + newPopupId).dxPopup('instance').option('contentTemplate', null);\r\n $('#' + newPopupId).dxPopup('instance').dispose(); \r\n },\r\n onShown: function () {\r\n $('#LoadIndicator').dxLoadPanel('instance').option('visible', false);\r\n },\r\n onInitialized: function () {\r\n $('#' + newPopupId).hide();\r\n },\r\n onDisposing: function () {\r\n var CallbackObject = {\r\n Message: newPopupId + \" Closing\",\r\n time: new Date().toString()\r\n };\r\n\r\n ClientDialog.push(CallbackObject);\r\n }\r\n });\r\n }\r\n }\r\n\r\n $('#LoadIndicator').dxLoadPanel('instance').option('visible', false);\r\n },\r\n error: function (data) {\r\n var ErrorID = Base64.fromInt(new Date().getTime()).substring(2);\r\n\r\n var TheErrorObject = {\r\n ID: ErrorID,\r\n TheMessage: \"Error from /Home/CallBack\",\r\n StackTrace: \"No Stack Trace Available\",\r\n Location: window.location.href,\r\n Browser: window.navigator.appVersion,\r\n HTMLCopy: data.responseText,\r\n databaseKey: DatabaseKey\r\n };\r\n\r\n var Output = JSON.stringify(TheErrorObject);\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/Home/Oops?IsPopup=True\",\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n data: Output,\r\n success: function (response) {\r\n },\r\n failure: function (response) {\r\n alert(response.responseText);\r\n },\r\n error: function (response) {\r\n var date = new Date();\r\n\r\n $(\"#ErrorPopup\").dxPopup({\r\n contentTemplate: function (contentElement) {\r\n contentElement.append(response.responseText);\r\n },\r\n showTitle: true,\r\n title: \"Error: \" + ErrorID + \" \" + date.toLocaleTimeString() + \" \" + date.toLocaleDateString(),\r\n height: \"auto\",\r\n visible: true,\r\n showCloseButton: false\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\nvar SendButtonCallbackName;\r\nfunction SendButton() {\r\n\r\n var IDS = [];\r\n RequestingGrid = \"VehicleJobGrid\";\r\n var Rows = $(\"#VehicleJobGrid\").dxDataGrid(\"instance\").getVisibleRows();\r\n SendButtonCallbackName = ResourceRowHeadertext;\r\n\r\n for (var i = 0; i < Rows.length; i++) {\r\n IDS.push(Rows[i].data.DatabaseID);\r\n }\r\n\r\n ViewCallback(IDS.join(\", \"), \"SendJobs\", \"TruckcomModel.StcVehicleJobDataset, TruckcomModel\", \"SendButtonCallbackName\", \"ViewPopup\", \"false\", \"\", new Date(), new Date());\r\n $(\"#Send\").dxButton(\"instance\").option(\"disabled\", true);\r\n $(\"#UnSend\").dxButton(\"instance\").option(\"disabled\", false);\r\n}\r\n\r\nfunction UnSendButton() {\r\n\r\n var IDS = [];\r\n RequestingGrid = \"VehicleJobGrid\";\r\n var Rows = $(\"#VehicleJobGrid\").dxDataGrid(\"instance\").getVisibleRows();\r\n SendButtonCallbackName = ResourceRowHeadertext;\r\n\r\n for (var i = 0; i < Rows.length; i++) {\r\n IDS.push(Rows[i].data.DatabaseID);\r\n }\r\n\r\n ViewCallback(IDS.join(\", \"), \"UnSendJobs\", \"TruckcomModel.StcVehicleJobDataset, TruckcomModel\", \"SendButtonCallbackName\", \"ViewPopup\", \"false\", \"\", new Date(), new Date());\r\n $(\"#UnSend\").dxButton(\"instance\").option(\"disabled\", true);\r\n $(\"#Send\").dxButton(\"instance\").option(\"disabled\", false);\r\n}\r\n\r\nfunction SendLegs() {\r\n\r\n var IDS = [];\r\n RequestingGrid = \"VehicleLegGrid\";\r\n var Rows = $(\"#VehicleLegGrid\").dxDataGrid(\"instance\").getVisibleRows();\r\n\r\n for (var i = 0; i < Rows.length; i++) {\r\n IDS.push(Rows[i].data.DatabaseID);\r\n }\r\n\r\n ViewCallback(IDS.join(\", \"), \"SendLegsCallback\", \"TruckcomModel.StcLegDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"\", new Date(), new Date());\r\n}\r\n\r\nfunction GetResizablePopup_MapSize(mapId) {\r\n var height = $(mapId).parents(\".Truckcom_Grid_Map_Container \").height();\r\n return height;\r\n}\r\n\r\n/* Utility Functions */\r\nfunction htmlDecode(input) {\r\n var txt = document.createElement('textarea');\r\n txt.innerHTML = input;\r\n return txt.value;\r\n}\r\n\r\nfunction isNumber(e, allowDecimals, tPrefixAllowed) {\r\n var regex;\r\n var charCode = e.event.key;\r\n\r\n if (tPrefixAllowed !== undefined) {\r\n if (allowDecimals) {\r\n regex = /^[tT0-9.,-]+$/;\r\n }\r\n else {\r\n regex = /^[tT0-9]+$/;\r\n }\r\n }\r\n else {\r\n if (allowDecimals) {\r\n regex = /^[0-9.,-]+$/;\r\n }\r\n else {\r\n regex = /^[0-9]+$/;\r\n }\r\n }\r\n\r\n if (!regex.test(charCode)) {\r\n e.event.preventDefault();\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction isIE() {\r\n var ua = window.navigator.userAgent;\r\n var msie = ua.indexOf(\"MSIE \");\r\n\r\n if (msie > -1 || !!navigator.userAgent.match(/Trident.*rv\\:11\\./)) // If Internet Explorer\r\n {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isEdge() {\r\n if (navigator.userAgent.indexOf(\"Edge\") > -1) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hexToRgbA(hex) {\r\n var c;\r\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\r\n c = hex.substring(1).split('');\r\n if (c.length === 3) {\r\n c = [c[0], c[0], c[1], c[1], c[2], c[2]];\r\n }\r\n c = '0x' + c.join('');\r\n return 'rgba(' + [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(',') + ',0.5)';\r\n }\r\n throw new Error('Bad Hex');\r\n}\r\n\r\nfunction sortByThenBy(array, keys) {\r\n return array.sort(function (a, b) {\r\n var r = 0;\r\n keys.some(function (k) {\r\n return r = a[k] - b[k];\r\n });\r\n return r;\r\n });\r\n}\r\n\r\nfunction findWithAttr(array, attr, value) {\r\n for (var i = 0; i < array.length; i += 1) {\r\n if (array[i][attr] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction GetGridSavedDates(Client_Grid_ID) {\r\n var savedStartDate = sessionStorage.getItem(Client_Grid_ID + \"StartDate\");\r\n\r\n var savedEndDate = sessionStorage.getItem(Client_Grid_ID + \"EndDate\");\r\n var startDate;\r\n var endDate;\r\n\r\n if (savedStartDate != null) {\r\n startDate = new Date(savedStartDate);\r\n }\r\n else {\r\n startDate = new Date();\r\n }\r\n\r\n if (savedEndDate != null) {\r\n endDate = new Date(savedEndDate);\r\n }\r\n else {\r\n endDate = new Date();\r\n }\r\n\r\n var startDateString = startDate.getFullYear() + \"-\" + ('0' + (startDate.getMonth() + 1)).slice(-2) + \"-\" + ('0' + startDate.getDate()).slice(-2);\r\n var endDateString = endDate.getFullYear() + \"-\" + ('0' + (endDate.getMonth() + 1)).slice(-2) + \"-\" + ('0' + endDate.getDate()).slice(-2);\r\n\r\n return [startDateString, endDateString];\r\n}\r\n\r\nfunction NewAddressFinished(e) {\r\n setTimeout(function () {\r\n if ($(\"#SelectorPopupDatagrid\").children().length > 0) {\r\n $(\"#SelectorPopupDatagrid\").dxDataGrid(\"instance\").selectRowsByIndexes(e.CallbackResult);\r\n SelectorPopupDatagrid_SelectedID = $(\"#SelectorPopupDatagrid\").dxDataGrid(\"instance\").getKeyByRowIndex(e.CallbackResult);\r\n }\r\n }, 500);\r\n\r\n}\r\n\r\nfunction CreateNotesPopoverEditor(existingValue, editorTextBox, saveOnClickFunction) {\r\n if ($(\"#NotesEditor\").length == 0) {\r\n $(\"body\").append($(\"
\"));\r\n }\r\n\r\n var notesPopover = $(\"#NotesEditor\").append(\r\n $(\"
\").attr(\"id\", \"NotesTextBox\").dxTextArea({\r\n width: 400,\r\n height: 200,\r\n value: existingValue\r\n }))\r\n .append(\r\n $(\"
\").attr(\"id\", \"NotesEditorButtons\").attr(\"class\", \"Truckcom_Popup_ButtonContainer_NoMarginBottom\")\r\n .append(\r\n $(\"
\").attr(\"id\", \"NotesEditorOK\").dxButton({\r\n text: \"OK\",\r\n type: \"default\",\r\n elementAttr: {\r\n class: \"Truckcom_Button\"\r\n },\r\n onClick: function () {\r\n eval(saveOnClickFunction);\r\n }\r\n }))\r\n .append(\r\n $(\"
\").attr(\"id\", \"NotesEditorCancel\").dxButton({\r\n text: \"Cancel\",\r\n elementAttr: {\r\n class: \"Truckcom_Button\"\r\n },\r\n onClick: function () {\r\n $(\"#NotesEditor\").dxPopover(\"instance\").dispose();\r\n }\r\n }))\r\n )\r\n .appendTo($(\"body\"));\r\n\r\n $(\"#NotesEditor\").dxPopover({\r\n visible: true,\r\n target: editorTextBox,\r\n onShown: function () {\r\n $(\"#NotesTextBox .dx-texteditor-input-container\").height(200);\r\n\r\n $(\"#NotesTextBox .dx-texteditor-input\").focus();\r\n },\r\n onHidden: function () {\r\n $(\"#NotesEditor\").dxPopover(\"instance\").dispose();\r\n }\r\n });\r\n}\r\n\r\nfunction SaveNotesEditorValue(formId, dataField) {\r\n var newTextValue = $(\"#NotesTextBox\").dxTextArea(\"instance\").option(\"value\");\r\n $(\"#\" + formId + \" .dx-textbox[fieldname='\" + dataField + \"']\").dxTextBox(\"instance\").option(\"value\", newTextValue); // Set the textbox field value in the form\r\n\r\n $(\"#\" + formId).dxForm(\"instance\").option(\"formData.\" + dataField, newTextValue);\r\n $(\"#NotesEditor\").dxPopover(\"instance\").dispose();\r\n $(\"#\" + formId + \" .dx-texteditor-input[datafield='\" + dataField + \"']\").focus();\r\n}\r\n\r\n// Listens for node inserted events of dx-overlay-wrapper class and sets z-index of newly added divs\r\nvar insertListener = function (event) {\r\n if (event.animationName == \"nodeInserted\") {\r\n if ($(event.target).hasClass(\"dx-overlay-wrapper\")) {\r\n var maxZ = getMaxZ($(\".dx-overlay-wrapper:not('.dx-toast-wrapper')\"));\r\n\r\n $(event.target).css(\"z-index\", maxZ + 1);\r\n $(event.target).find(\".dx-overlay-content\").css(\"z-index\", maxZ + 100);\r\n } else if ($(event.target).hasClass(\"dx-toast\") || $(event.target).hasClass(\"dx-dialog\")) {\r\n $(event.target).find(\".dx-toast-wrapper\").css(\"z-index\", 9999);\r\n $(event.target).find(\".dx-toast-content\").css(\"z-index\", 9999);\r\n }\r\n }\r\n};\r\n\r\n// Get the highest z-index of the selector provided\r\nvar getMaxZ = function (selector) {\r\n return Math.max.apply(null, $(selector).map(function () {\r\n var z;\r\n return isNaN(z = parseInt($(this).css(\"z-index\"), 10)) ? 0 : z;\r\n }));\r\n};\r\n\r\nfunction PrintRunsheet(databaseKey) {\r\n var IDS = [];\r\n RequestingGrid = \"ProfitCentreGrid\";\r\n SendButtonCallbackName = ResourceRowHeadertext;\r\n\r\n IDS.push(VehicleJobGrid_ParentID);\r\n ViewCallback(IDS.join(\", \"), \"PrintRunSheetJob\", \"TruckcomModel.StcSearchableProfitCentreDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"\", ProfitCentreGrid_StartDate, ProfitCentreGrid_EndDate);\r\n\r\n if (databaseKey.toUpperCase() == \"SIMARCO\") {\r\n ShowBarcodes(databaseKey);\r\n }\r\n}\r\n\r\nfunction PrintRunsheetLeg(e) {\r\n var IDS = [];\r\n RequestingGrid = \"ProfitCentreGrid\";\r\n SendButtonCallbackName = ResourceRowHeadertext;\r\n\r\n IDS.push(VehicleLegGrid_ParentID);\r\n ViewCallback(IDS.join(\", \"), \"PrintRunSheetLeg\", \"TruckcomModel.StcSearchableProfitCentreDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"\", ProfitCentreGrid_StartDate, ProfitCentreGrid_EndDate);\r\n}\r\n\r\nfunction PrintLabels(e) {\r\n var IDS = [];\r\n RequestingGrid = \"ProfitCentreGrid\";\r\n\r\n IDS.push(VehicleJobGrid_ParentID);\r\n ViewCallback(IDS.join(\", \"), \"PrintJobLabels\", \"TruckcomModel.StcSearchableProfitCentreDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"\", ProfitCentreGrid_StartDate, ProfitCentreGrid_EndDate);\r\n}\r\n\r\nfunction ShowBarcodes(e) {\r\n var IDS = [];\r\n RequestingGrid = \"ProfitCentreGrid\";\r\n\r\n IDS.push(VehicleJobGrid_ParentID);\r\n ViewCallback(IDS.join(\", \"), \"ShowJobBarcodes\", \"TruckcomModel.StcSearchableProfitCentreDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"\", ProfitCentreGrid_StartDate, ProfitCentreGrid_EndDate);\r\n}\r\n\r\nfunction AddNote(e) {\r\n var IDS = [];\r\n RequestingGrid = \"ProfitCentreGrid\";\r\n SendButtonCallbackName = ResourceRowHeadertext;\r\n\r\n IDS.push(VehicleLegGrid_ParentID);\r\n ViewCallback(IDS.join(\", \"), \"AddNotesJobXT\", \"TruckcomModel.StcSearchableProfitCentreDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"\", ProfitCentreGrid_StartDate, ProfitCentreGrid_EndDate);\r\n}\r\n\r\nfunction AddDepot(e) {\r\n var IDS = [];\r\n RequestingGrid = \"ProfitCentreGrid\";\r\n SendButtonCallbackName = ResourceRowHeadertext;\r\n\r\n IDS.push(VehicleLegGrid_ParentID);\r\n ViewCallback(IDS.join(\", \"), \"AddDepotLegXT\", \"TruckcomModel.StcSearchableProfitCentreDataset, TruckcomModel\", \"\", \"ViewPopup\", \"false\", \"ReloadVehicleLegs\", ProfitCentreGrid_StartDate, ProfitCentreGrid_EndDate);\r\n}\r\n\r\nfunction ReloadVehicleLegs() {\r\n $(\"#VehicleLegGrid\").dxDataGrid(\"getDataSource\").reload();\r\n\r\n}\r\n\r\nfunction DateSelectorOnClick(data, formId, itemElement, changedValuesName) {\r\n $(\"#DateEditor\").dxPopover({\r\n visible: true,\r\n target: itemElement\r\n });\r\n\r\n var Dates = [\"\"];\r\n var DateUndefined = true;\r\n var theChangedValuesObject = \"ChangedValues\";\r\n\r\n if (changedValuesName != undefined) {\r\n theChangedValuesObject = changedValuesName;\r\n }\r\n\r\n if (data.component.option('formData')[data.dataField].value) {\r\n Dates = data.component.option('formData')[data.dataField].value.split(',');\r\n DateUndefined = false;\r\n }\r\n\r\n SelectorCellInfo = {\r\n displayValue: data.component.option('formData')[data.dataField]\r\n .value\r\n };\r\n\r\n $(\"#DateEditor .dx-popup-content\").empty();\r\n\r\n if (Dates.length == 1) {\r\n var dateValue;\r\n\r\n if (DateUndefined) {\r\n dateValue = new Date();\r\n }\r\n else {\r\n dateValue = new Date(Dates[0].substr(6, 4),\r\n Dates[0].substr(3, 2) - 1,\r\n Dates[0].substr(0, 2));\r\n }\r\n\r\n $(\"#DateEditor .dx-popup-content\").append($(\"
\").dxCalendar({\r\n value: dateValue,\r\n onValueChanged: function (e) {\r\n data.component.option('formData')[data.dataField].value = Globalize(\"en-GB\").dateFormatter()(e.value);\r\n\r\n $(\"#\" + formId + \" .dx-field-item-content[fieldname='\" + data.dataField + \"'] .Truckcom_Form_Picklist_Button\")\r\n .dxButton(\"instance\").option(\"text\", Globalize(\"en-GB\").dateFormatter()(e.value));\r\n\r\n window[theChangedValuesObject].push(data.dataField);\r\n $(\"#DateEditor\").dxPopover(\"dispose\");\r\n itemElement.find(\".dx-button\").focus();\r\n },\r\n showTodayButton: dateValue.getFullYear() == 2008\r\n }));\r\n } else {\r\n var validDates = 0;\r\n $.each(Dates,\r\n function (i, theDate) {\r\n theDate = theDate.replace(' ', '');\r\n\r\n if (theDate !== \"\") {\r\n var dateValue = new Date(theDate.substr(6, 4),\r\n theDate.substr(3, 2) - 1,\r\n theDate.substr(0, 2));\r\n\r\n $(\"#DateEditor .dx-popup-content\").append($(\"
\").dxCalendar({\r\n value: dateValue\r\n }));\r\n\r\n validDates++;\r\n }\r\n });\r\n\r\n var margins = validDates * 20;\r\n $(\"#DateEditor .dx-popup-content\").width((validDates * 232) + margins);\r\n\r\n $(\"#DateEditor .dx-popup-content\").append($(\"
\")\r\n .append($(\"
\").dxButton({\r\n type: \"default\",\r\n text: \"OK\",\r\n onClick: function (e) {\r\n var Count = data.component.option('formData')[data.dataField].value.split(',').length;\r\n var TheDateArray = [];\r\n for (var j = 0; j < Count; j++) {\r\n TheDateArray.push(Globalize(\"en-GB\").dateFormatter()($(\"#Date\" + j).dxCalendar(\"instance\")\r\n .option(\"value\")));\r\n }\r\n\r\n var NewValue = TheDateArray.join(', ');\r\n data.component.option('formData')[data.dataField].value = NewValue;\r\n\r\n $(\"#\" + formId + \" .dx-field-item-content[fieldname='\" + data.dataField + \"'] .Truckcom_Form_Picklist_Button\")\r\n .dxButton(\"instance\").option(\"text\", NewValue);\r\n\r\n window[theChangedValuesObject].push(data.dataField);\r\n $(\"#DateEditor\").dxPopover(\"dispose\");\r\n }\r\n }))\r\n .append($(\"
\").dxButton({\r\n text: \"Cancel\",\r\n onClick: function (e) {\r\n $(\"#DateEditor\").dxPopover(\"dispose\");\r\n }\r\n })));\r\n }\r\n}\r\n\r\nfunction FindIndexInArray(items, property, value) {\r\n var index = -1;\r\n\r\n items.some(function (el, i) {\r\n if (property !== null) {\r\n if (el[property] == value) {\r\n index = i;\r\n return true;\r\n }\r\n } else {\r\n if (el == value) {\r\n index = i;\r\n return true;\r\n }\r\n }\r\n });\r\n\r\n return index;\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function (search, this_len) {\r\n if (this_len === undefined || this_len > this.length) {\r\n this_len = this.length;\r\n }\r\n return this.substring(this_len - search.length, this_len) === search;\r\n };\r\n}\r\n\r\nfunction CircularBuffer(n) {\r\n this._array = new Array(n);\r\n this.length = 0;\r\n}\r\nCircularBuffer.prototype.toString = function () {\r\n return '[object CircularBuffer(' + this._array.length + ') length ' + this.length + ']';\r\n};\r\nCircularBuffer.prototype.get = function (i) {\r\n if (i < 0 || i < this.length - this._array.length)\r\n return undefined;\r\n return this._array[i % this._array.length];\r\n};\r\nCircularBuffer.prototype.set = function (i, v) {\r\n if (i < 0 || i < this.length - this._array.length)\r\n throw CircularBuffer.IndexError;\r\n while (i > this.length) {\r\n this._array[this.length % this._array.length] = undefined;\r\n this.length++;\r\n }\r\n this._array[i % this._array.length] = v;\r\n if (i == this.length)\r\n this.length++;\r\n};\r\n\r\nCircularBuffer.prototype.push = function (v) {\r\n this._array[this.length % this._array.length] = v;\r\n this.length++;\r\n};\r\n\r\nCircularBuffer.prototype.getAll = function () {\r\n return this._array;\r\n};\r\n\r\nCircularBuffer.IndexError = {};\r\n\r\n\r\nfunction IsNullorUndefined(element) {\r\n return (element === undefined || element === null);\r\n}\r\n\r\nfunction CreateHtmlEditor(editorId, editorVariable, heightToSet) {\r\n ClassicEditor\r\n .create(document.querySelector(\"#\" + editorId), {\r\n\r\n toolbar: {\r\n items: [\r\n 'heading',\r\n '|',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'link',\r\n 'bulletedList',\r\n 'numberedList',\r\n 'insertTable',\r\n '|',\r\n 'undo',\r\n 'redo'\r\n ]\r\n },\r\n language: 'en',\r\n //table: {\r\n // contentToolbar: [\r\n // 'tableColumn',\r\n // 'tableRow',\r\n // 'mergeTableCells',\r\n // 'tableCellProperties',\r\n // 'tableProperties'\r\n // ]\r\n //}\r\n })\r\n .then(function (newEditor) {\r\n HtmlEditors[editorId] = newEditor;\r\n heightToSet -= 40; // Html editor toolbar height\r\n $(\".ck-editor__main\").height(heightToSet);\r\n });\r\n}\r\n\r\nfunction CreatePicker(cellElement, data, formId) {\r\n\r\n if (data === undefined) {\r\n data = \"\";\r\n }\r\n\r\n if (formId === undefined) {\r\n formId = \"\";\r\n }\r\n\r\n var picker = $(\"
\").attr({ \"id\": \"TruckcomTimePicker\", \"class\": \"Truckcom_Plugin_TimePicker\" });\r\n\r\n // Create the time picker tab options with click event\r\n var pickerTabs = $(\"
    \").attr(\"class\", \"Truckcom_Plugin_TimePicker_Tabs\")\r\n .append($(\"
  • \").attr({ \"class\": \"Truckcom_Plugin_TimePicker_TabActive dx-button-default dx-button-mode-contained\", \"id\": \"time\" }).text(\"HH:MM\"))\r\n .append($(\"
  • \").attr(\"id\", \"am\").text(\"AM\"))\r\n .append($(\"
  • \").attr(\"id\", \"pm\").text(\"PM\"))\r\n .append($(\"
  • \").attr(\"id\", \"tba\").text(\"TBA\"))\r\n\r\n $(document).on(\"click\", \".Truckcom_Plugin_TimePicker_Tabs li\", function () {\r\n TimePicker_Tab_Click($(this));\r\n });\r\n\r\n picker.append(pickerTabs);\r\n\r\n var entryTab = CreateTimePickerEntryTab(data, formId);\r\n picker.append(entryTab);\r\n\r\n var amTab = CreateTimePickerAMTab(data, formId);\r\n picker.append(amTab);\r\n\r\n var pmTab = CreateTimePickerPMTab(data, formId);\r\n picker.append(pmTab);\r\n\r\n var tbaTab = CreateTimePickerTBATab(data, formId);\r\n picker.append(tbaTab);\r\n\r\n SetupClickEvents(cellElement, data, formId);\r\n\r\n return picker;\r\n}\r\n\r\nfunction SetupClickEvents(cellElement, data, formId) {\r\n var gridId = \"\";\r\n\r\n if (cellElement !== \"\") {\r\n if (cellElement.parents(\".Truckcom_Data_Grid\").attr(\"id\") !== undefined) {\r\n gridId = cellElement.parents(\".Truckcom_Data_Grid\").attr(\"id\").replace(\"_Datagrid\", \"\");\r\n }\r\n }\r\n\r\n $(document).on(\"click\", \"#TimeOK\", function () {\r\n TimePickerOK_Clicked(data, formId, gridId);\r\n $(document).off(\"click\", \"#TimeOK\");\r\n $(document).off(\"click\", \"#TimeCancel\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.CloseOnSet\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.MinuteButton\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.HourButton\");\r\n });\r\n\r\n $(document).on(\"click\", \"#TimeCancel\", function () {\r\n CloseTimePicker(gridId);\r\n $(document).off(\"click\", \"#TimeCancel\");\r\n $(document).off(\"click\", \"#TimeOK\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.CloseOnSet\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.MinuteButton\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.HourButton\");\r\n });\r\n\r\n $(document).on(\"mouseenter\", \".Truckcom_Plugin_TimePicker_TimeButton\", function () {\r\n $(this).addClass(\"dx-state-hover\");\r\n });\r\n\r\n $(document).on(\"mouseleave\", \".Truckcom_Plugin_TimePicker_TimeButton\", function () {\r\n $(this).removeClass(\"dx-state-hover\");\r\n });\r\n\r\n $(document).on(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.HourButton\", function () {\r\n $(this).parent().find(\".dx-calendar-selected-date\").removeClass(\"dx-calendar-selected-date\");\r\n $(this).addClass(\"dx-calendar-selected-date\");\r\n TimePickerSetValue($(this).text(), \"#Hour\");\r\n });\r\n\r\n $(document).on(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.MinuteButton\", function () {\r\n $(this).parent().find(\".dx-calendar-selected-date\").removeClass(\"dx-calendar-selected-date\");\r\n $(this).addClass(\"dx-calendar-selected-date\");\r\n TimePickerSetValue($(this).text(), \"#Minute\");\r\n });\r\n\r\n $(document).on(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.CloseOnSet\", function () {\r\n $(this).parent().find(\".dx-calendar-selected-date\").removeClass(\"dx-calendar-selected-date\");\r\n $(this).addClass(\"dx-calendar-selected-date\");\r\n TimePickerValueChosen($(this), data, formId, gridId);\r\n $(document).off(\"click\", \"#TimeCancel\");\r\n $(document).off(\"click\", \"#TimeOK\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.CloseOnSet\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.MinuteButton\");\r\n $(document).off(\"click\", \".Truckcom_Plugin_TimePicker_TimeButton.HourButton\");\r\n });\r\n\r\n $(document).on(\"keyup\", \"#TimePickerInput\", function () {\r\n TimePickerInput_KeyUp($(this));\r\n });\r\n}\r\n\r\nfunction CreateTimePickerEntryTab(data, formId) {\r\n var entryTimePickerTab = $(\"
    \").attr({ \"id\": \"timeContent\", \"class\": \"Truckcom_Plugin_TimePicker_TabContent Truckcom_Plugin_TimePicker_TabContentActive\" });\r\n\r\n entryTimePickerTab.append($(\"
    \").attr(\"class\", \"Truckcom_TimeUpdate_TimeBox dx-texteditor dx-editor-outlined Truckcom_TimePicker dx-widget\")\r\n .append($(\"
    \").attr(\"class\", \"dx-texteditor-container\")\r\n .append($(\"\").attr({ \"id\": \"TimePickerInput\", \"class\": \"dx-texteditor-input\" }))));\r\n\r\n entryTimePickerTab.append($(\"

    \").text(\"Hour\"));\r\n\r\n var hourContainer = $(\"

    \");\r\n\r\n for (var i = 0; i < 24; i++) {\r\n hourContainer.append($(\"
    \")\r\n .attr(\"class\", \"Truckcom_Plugin_TimePicker_TimeButton HourButton dx-calendar-cell\")\r\n .text(Pad(i, 2)));\r\n }\r\n\r\n entryTimePickerTab.append(hourContainer);\r\n entryTimePickerTab.append($(\"

    \").text(\"Minute\"));\r\n\r\n var minuteContainer = $(\"

    \");\r\n\r\n for (var i = 0; i < 12; i++) {\r\n minuteContainer.append($(\"
    \")\r\n .attr(\"class\", \"Truckcom_Plugin_TimePicker_TimeButton MinuteButton dx-calendar-cell\")\r\n .text(Pad(i * 5, 2)));\r\n }\r\n\r\n entryTimePickerTab.append(minuteContainer);\r\n\r\n var timePickerButtons = $(\"
    \").attr(\"class\", \"Truckcom_Plugin_TimePicker_Button_Container\")\r\n .append($(\"
    \")\r\n .attr({ \"id\": \"TimeOK\", \"class\": \"Truckcom_Plugin_TimePicker_Button dx-button dx-button-default dx-button-mode-contained dx-widget\" })\r\n .css(\"pointer-events\", \"none\")\r\n .append($(\"
    \").attr(\"class\", \"dx-button-content\").text(\"OK\")))\r\n .append($(\"
    \")\r\n .attr({ \"id\": \"TimeCancel\", \"class\": \"Truckcom_Plugin_TimePicker_Button dx-button dx-button-normal dx-button-mode-contained dx-widget\" })\r\n .append($(\"
    \").attr(\"class\", \"dx-button-content\").text(\"Cancel\")));\r\n\r\n var selectedTimeArea = $(\"
    \").attr(\"class\", \"Truckcom_Plugin_TimePicker_SelectedTime\")\r\n .append($(\"\").attr(\"id\", \"TimePickerChosenValue\").css(\"display\", \"none\"))\r\n .append($(\"\").attr(\"id\", \"Hour\"))\r\n .append($(\"\").text(\":\"))\r\n .append($(\"\").attr(\"id\", \"Minute\"))\r\n .append(timePickerButtons)\r\n\r\n entryTimePickerTab.append(selectedTimeArea);\r\n\r\n return entryTimePickerTab;\r\n}\r\n\r\nfunction CreateTimePickerAMTab(data, formId) {\r\n var amTab = $(\"
    \").attr({ \"id\": \"amContent\", \"class\": \"Truckcom_Plugin_TimePicker_TabContent\" });\r\n\r\n for (var i = 0; i < 12; i++) {\r\n for (var x = 0; x < 4; x++) {\r\n amTab.append($(\"
    \")\r\n .attr(\"class\", \"Truckcom_Plugin_TimePicker_TimeButton CloseOnSet dx-calendar-cell\")\r\n .text(Pad(i, 2) + \":\" + Pad(x * 15, 2)));\r\n }\r\n }\r\n\r\n return amTab;\r\n}\r\n\r\nfunction CreateTimePickerPMTab(data, formId) {\r\n var pmTab = $(\"
    \").attr({ \"id\": \"pmContent\", \"class\": \"Truckcom_Plugin_TimePicker_TabContent\" });\r\n\r\n for (var i = 12; i < 24; i++) {\r\n for (var x = 0; x < 4; x++) {\r\n pmTab.append($(\"
    \")\r\n .attr(\"class\", \"Truckcom_Plugin_TimePicker_TimeButton CloseOnSet dx-calendar-cell\")\r\n .text(Pad(i, 2) + \":\" + Pad(x * 15, 2)));\r\n }\r\n }\r\n\r\n return pmTab;\r\n}\r\n\r\nfunction CreateTimePickerTBATab(data, formId) {\r\n var tbaTab = $(\"
    \").attr({ \"id\": \"tbaContent\", \"class\": \"Truckcom_Plugin_TimePicker_TabContent\" });\r\n\r\n tbaTab.append($(\"
    \")\r\n .attr(\"class\", \"Truckcom_Plugin_TimePicker_TimeButton CloseOnSet dx-calendar-cell\")\r\n .text(\"23:59\"));\r\n\r\n return tbaTab;\r\n}\r\n\r\nfunction CloseTimePicker(gridId) {\r\n if ($(\"#STTimePickerEditor\").children().length > 0) {\r\n $(\"#TruckcomTimePickerOverlay\").remove();\r\n $(\"#TruckcomTimePicker\").remove();\r\n $(\"#STTimePickerEditor\").dxPopover(\"dispose\");\r\n }\r\n else {\r\n if (!IsNullorUndefined(gridId)) {\r\n if ($(\"#\" + gridId + \"_TimePickerPopup\") !== undefined && $(\"#\" + gridId + \"_TimePickerPopup\").dxPopover(\"instance\") !== undefined) {\r\n $(\"#\" + gridId + \"_TimePickerPopup\").dxPopover(\"instance\").hide();\r\n }\r\n\r\n var TheObject = {\r\n TimePickerGrid: gridId,\r\n Message: \"TimePicker Closed\",\r\n time: new Date().toString()\r\n };\r\n\r\n ClientDialog.push(TheObject);\r\n }\r\n }\r\n}\r\n\r\nfunction TimePicker_Tab_Click(tab) {\r\n var id = tab.attr(\"id\");\r\n $(\".Truckcom_Plugin_TimePicker_TabActive\").removeClass(\"Truckcom_Plugin_TimePicker_TabActive\").removeClass(\"dx-button-default\").removeClass(\"dx-button-mode-contained\");\r\n $(\".Truckcom_Plugin_TimePicker_TabContentActive\").removeClass(\"Truckcom_Plugin_TimePicker_TabContentActive\");\r\n\r\n $(tab).addClass(\"Truckcom_Plugin_TimePicker_TabActive\").addClass(\"dx-button-default\").addClass(\"dx-button-mode-contained\");\r\n $(\"#\" + id + \"Content\").addClass(\"Truckcom_Plugin_TimePicker_TabContentActive\");\r\n}\r\n\r\nfunction TimePickerOK_Clicked(data, formId, gridId) {\r\n var timeValue = $(\"#TimePickerChosenValue\").val();\r\n\r\n if (data !== \"\" && formId !== \"\") {\r\n TimePickerCloseAndSetForm(timeValue, data, formId, gridId);\r\n }\r\n else {\r\n TimePickerCloseAndSet(timeValue, gridId);\r\n }\r\n}\r\n\r\nfunction TimePickerSetValue(value, input) {\r\n var val = Pad(value, 2);\r\n $(input).text(val);\r\n\r\n $(\"#TimePickerInput\").val(\"\");\r\n\r\n $(\"#TimePickerChosenValue\").val($(\"#Hour\").text().trim() + \":\" + $(\"#Minute\").text().trim());\r\n if ($(\"#TimePickerChosenValue\").val().length === 5) {\r\n\r\n $(\"#TimeOK\").css(\"pointer-events\", \"auto\");\r\n }\r\n else {\r\n $(\"#TimeOK\").css(\"pointer-events\", \"none\");\r\n }\r\n}\r\n\r\nfunction SetTimeValue(hour, minute) {\r\n $(\"#Hour\").text(hour);\r\n $(\"#Minute\").text(minute);\r\n\r\n $(\"#TimePickerInput\").val(hour + \":\" + minute);\r\n\r\n $(\"#TimeOK\").css(\"pointer-events\", \"auto\");\r\n}\r\n\r\nfunction TimePickerValueChosen(timeButton, data, formId, gridId) {\r\n var time = timeButton.text().trim();\r\n\r\n if (data !== \"\" && formId !== \"\") {\r\n TimePickerCloseAndSetForm(time, data, formId);\r\n }\r\n else {\r\n TimePickerCloseAndSet(time, gridId);\r\n }\r\n}\r\n\r\nfunction TimePickerCloseAndSet(timeValue, gridId) {\r\n TimePickerCellInfo.setValue(timeValue);\r\n TimePickerCellInfo.component.saveEditData();\r\n\r\n CloseTimePicker(gridId);\r\n}\r\n\r\nfunction TimePickerCloseAndSetForm(timeValue, dataField, formId, gridId) {\r\n if ($(\"#\" + formId).hasClass(\"dx-form\")) {\r\n $(\"#\" + formId).dxForm(\"instance\").option('formData')[dataField] = timeValue;\r\n $(\"#\" + formId + \" .dx-field-item-content[fieldname='\" + dataField + \"'] .Truckcom_Form_Picklist_Button\").dxButton(\"instance\").option(\"text\", timeValue);\r\n }\r\n else {\r\n $(\"#\" + formId + \" #\" + dataField + \" .Truckcom_Form_Picklist_Button\").dxButton(\"instance\").option(\"text\", timeValue);\r\n }\r\n\r\n var theChangedValues = \"ChangedValues\";\r\n\r\n if (formId == \"AutoForm\") {\r\n theChangedValues = \"AutoFormChangedValues\";\r\n }\r\n\r\n if (typeof window[theChangedValues] !== \"undefined\") {\r\n window[theChangedValues].push(dataField);\r\n }\r\n\r\n CloseTimePicker(gridId);\r\n}\r\n\r\nfunction TimePickerInput_KeyUp(input) {\r\n if (input.val().length === 5) {\r\n $(\"#TimePickerChosenValue\").val(input.val());\r\n $(\"#Hour\").text(input.val().substring(0, 2));\r\n $(\"#Minute\").text(input.val().substring(3));\r\n\r\n $(\"#TimeOK\").css(\"pointer-events\", \"auto\");\r\n }\r\n else {\r\n $(\"#TimeOK\").css(\"pointer-events\", \"none\");\r\n }\r\n}\r\n\r\nfunction Pad(str, max) {\r\n str = str.toString();\r\n return str.length < max ? Pad(\"0\" + str, max) : str;\r\n}\r\n\r\nfunction CreateDataGrid(dataGridProperties) {\r\n if (dataGridProperties.GridId !== undefined && dataGridProperties.GridId !== \"\" &&\r\n dataGridProperties.Dataset !== undefined && dataGridProperties.Dataset !== \"\" &&\r\n dataGridProperties.DataSetType !== undefined && dataGridProperties.DataSetType !== \"\" &&\r\n dataGridProperties.StartDate !== undefined && dataGridProperties.StartDate !== \"\" &&\r\n dataGridProperties.EndDate !== undefined && dataGridProperties.EndDate !== \"\") {\r\n\r\n if (dataGridProperties.LegacyColumnNames == undefined) {\r\n dataGridProperties.LegacyColumnNames = \"\";\r\n }\r\n\r\n if (dataGridProperties.CustomSearchText == undefined) {\r\n dataGridProperties.CustomSearchText = \"\";\r\n }\r\n\r\n if (dataGridProperties.ParentId == undefined) {\r\n dataGridProperties.ParentId = 0;\r\n }\r\n\r\n if (dataGridProperties.DatabaseKey == undefined) {\r\n dataGridProperties.DatabaseKey = \"\";\r\n }\r\n\r\n if (dataGridProperties.IsNotColumnSortable == undefined) {\r\n dataGridProperties.IsNotColumnSortable = false;\r\n }\r\n\r\n if (dataGridProperties.IsReadOnly == undefined) {\r\n dataGridProperties.IsReadOnly = false;\r\n }\r\n\r\n if (dataGridProperties.ColumnLimit == undefined) {\r\n dataGridProperties.ColumnLimit = 10;\r\n }\r\n\r\n if (dataGridProperties.ViewName == undefined) {\r\n dataGridProperties.ViewName = \"\";\r\n }\r\n\r\n if (dataGridProperties.SortedByProperties == undefined) {\r\n dataGridProperties.SortedByProperties = \"\";\r\n }\r\n\r\n if (dataGridProperties.RowDragAndDropEnabled == undefined) {\r\n dataGridProperties.RowDragAndDropEnabled = false;\r\n }\r\n\r\n if (dataGridProperties.CellDragandDropEnabled == undefined) {\r\n dataGridProperties.CellDragandDropEnabled = false;\r\n }\r\n\r\n if (dataGridProperties.IconFilters == undefined) {\r\n dataGridProperties.IconFilters = [];\r\n }\r\n\r\n if (dataGridProperties.FilterColumns == undefined) {\r\n dataGridProperties.FilterColumns = [];\r\n }\r\n\r\n if (dataGridProperties.RightClicksEnabled == undefined) {\r\n dataGridProperties.RightClicksEnabled = true;\r\n }\r\n\r\n if (dataGridProperties.DragCopy == undefined) {\r\n dataGridProperties.DragCopy = false;\r\n }\r\n\r\n if (dataGridProperties.HideIconColumn == undefined) {\r\n dataGridProperties.HideIconColumn = false;\r\n }\r\n\r\n if (dataGridProperties.ShowRowLines == undefined) {\r\n dataGridProperties.ShowRowLines = false;\r\n }\r\n\r\n if (dataGridProperties.ShowColumnLines == undefined) {\r\n dataGridProperties.ShowColumnLines = true;\r\n }\r\n\r\n if (dataGridProperties.PropertiesToShow == undefined) {\r\n dataGridProperties.PropertiesToShow = \"\";\r\n }\r\n\r\n if (dataGridProperties.MustContain == undefined) {\r\n dataGridProperties.MustContain = \"\";\r\n }\r\n\r\n if (dataGridProperties.SortingMode == undefined) {\r\n dataGridProperties.SortingMode = \"single\";\r\n }\r\n\r\n if (dataGridProperties.CustomDroppedFunction == undefined) {\r\n dataGridProperties.CustomDroppedFunction = \"\";\r\n }\r\n\r\n if (dataGridProperties.ContentReadyFunction == undefined) {\r\n dataGridProperties.ContentReadyFunction = \"\";\r\n }\r\n\r\n if (dataGridProperties.SetGridSize == undefined) {\r\n dataGridProperties.SetGridSize = false;\r\n }\r\n\r\n if (dataGridProperties.UseStandardScrolling == undefined) {\r\n dataGridProperties.UseStandardScrolling = false;\r\n }\r\n\r\n if (dataGridProperties.EnableFocusedRow == undefined) {\r\n dataGridProperties.EnableFocusedRow = false;\r\n }\r\n\r\n if (dataGridProperties.DropAtAnyPosition == undefined) {\r\n dataGridProperties.DropAtAnyPosition = false;\r\n }\r\n\r\n if (dataGridProperties.AutoSortProperty == undefined) {\r\n dataGridProperties.AutoSortProperty = \"\";\r\n }\r\n\r\n if (dataGridProperties.ImportType == undefined) {\r\n dataGridProperties.ImportType = \"\";\r\n }\r\n\r\n window[dataGridProperties.GridId + \"_RowDragandDropEnabled\"] = dataGridProperties.RowDragAndDropEnabled;\r\n window[dataGridProperties.GridId + \"_CellDragandDropEnabled\"] = dataGridProperties.CellDragAndDropEnabled;\r\n\r\n window[dataGridProperties.GridId + \"_StartDate\"] = dataGridProperties.StartDate;\r\n window[dataGridProperties.GridId + \"_EndDate\"] = dataGridProperties.EndDate;\r\n window[dataGridProperties.GridId + \"_SelectorDatasetType\"] = dataGridProperties.DataSetType;\r\n window[dataGridProperties.GridId + \"_SelectorDataset\"] = dataGridProperties.Dataset;\r\n window[dataGridProperties.GridId + \"_IsNotColumnSortable\"] = dataGridProperties.IsNotColumnSortable;\r\n window[dataGridProperties.GridId + \"_SortedByProperties\"] = dataGridProperties.SortedByProperties;\r\n window[dataGridProperties.GridId + \"_ParentID\"] = dataGridProperties.ParentId;\r\n window[dataGridProperties.GridId + \"_AlwaysDragCopy\"] = dataGridProperties.DragCopy;\r\n window[dataGridProperties.GridId + \"_SearchText\"] = dataGridProperties.SearchText;\r\n window[dataGridProperties.GridId + \"_CustomDroppedFunction\"] = dataGridProperties.CustomDroppedFunction;\r\n window[dataGridProperties.GridId + \"_DatagridInFocusColumnNames\"] = dataGridProperties.LegacyColumnNames;\r\n window[dataGridProperties.GridId + \"_IconFilters\"] = [];\r\n window[dataGridProperties.GridId + \"_SelectorType\"] = dataGridProperties.ObjectType;\r\n window[dataGridProperties.GridId + \"_DropAtAnyPosition\"] = dataGridProperties.DropAtAnyPosition;\r\n window[dataGridProperties.GridId + \"_AutoSortProperty\"] = dataGridProperties.AutoSortProperty;\r\n window[dataGridProperties.GridId + \"_TimeGenerated\"] = { Time: \"\" };\r\n\r\n var columnProfile = dataGridProperties.ColumnProfile;\r\n\r\n window[dataGridProperties.GridId + \"_DataStore\"] = new DevExpress.data.AspNet.createStore({\r\n key: \"DatabaseID\",\r\n loadParams: {\r\n StartDate: function () { return Globalize(\"en-GB\").dateFormatter()(window[dataGridProperties.GridId + \"_StartDate\"]); },\r\n EndDate: function () { return Globalize(\"en-GB\").dateFormatter()(window[dataGridProperties.GridId + \"_EndDate\"]); },\r\n SearchText: function () { return dataGridProperties.SearchText; },\r\n CustomSearchText: function () { return dataGridProperties.CustomSearchText; },\r\n Dataset: dataGridProperties.Dataset,\r\n ParentID: function () { return window[dataGridProperties.GridId + \"_ParentID\"]; },\r\n ParentID2: function () { return dataGridProperties.ParentID2; },\r\n //SelectedIDs: function () { return @(Model.ClientID) _SelectedID; },\r\n DataGridName: function () {\r\n return dataGridProperties.LegacyColumnNames + dataGridProperties.ViewName;\r\n },\r\n PropertiesToShow: function () { dataGridProperties.PropertiesToShow },\r\n DatabaseKey: dataGridProperties.DatabaseKey,\r\n MustContain: function () { return dataGridProperties.MustContain; },\r\n ExtraConstructorParam: function () { return dataGridProperties.ImportType; }\r\n },\r\n //onBeforeSend: TruckcomGrid_onBeforeSend,\r\n loadUrl: \"/api/AFData\",\r\n dataLoaded: function (updatedGridData, extras) {\r\n window[dataGridProperties.GridId + \"_GridData\"] = updatedGridData;\r\n window[dataGridProperties.GridId + \"_GridDataFiltered\"] = updatedGridData;\r\n window[dataGridProperties.GridId + \"_GridCount\"] = window[dataGridProperties.GridId + \"_GridDataFiltered\"].length;\r\n\r\n window[dataGridProperties.GridId + \"_LocalColumns\"] = extras.summary[2];\r\n\r\n if (columnProfile == null) { // Done like this so to not break Rail planner etc but so it works for the planning grids\r\n columnProfile = extras.summary[2];\r\n }\r\n\r\n window[dataGridProperties.GridId + \"_TimeGenerated\"].Time = extras.summary[0];\r\n\r\n //UpdateGridText(\"@(Model.ClientID)\");\r\n //@(Model.DataLoadedOverride != \"\" ? Model.DataLoadedOverride : \"\")\r\n }\r\n });\r\n\r\n window[dataGridProperties.GridId + \"_DataStore\"].update = function (key, values) {\r\n var e = {\r\n key: key,\r\n newData: values\r\n };\r\n\r\n return DataGrid_updating(e, dataGridProperties.GridId);\r\n };\r\n\r\n var TruckcomGrid_dataSource = new DevExpress.data.DataSource({\r\n store: window[dataGridProperties.GridId + \"_DataStore\"],\r\n pushAggregationTimeout: 100,\r\n requireTotalCount: true,\r\n reshapeOnPush: !dataGridProperties.IsNotColumnSortable\r\n });\r\n\r\n var defaultScrollingProperties = {\r\n mode: \"infinite\",\r\n showScrollbar: \"always\",\r\n useNative: true,\r\n preloadEnabled: true,\r\n };\r\n\r\n var scrollingProps = {};\r\n\r\n if (dataGridProperties.UseStandardScrolling) {\r\n scrollingProps = defaultScrollingProperties;\r\n }\r\n\r\n $(\"#\" + dataGridProperties.GridId).dxDataGrid({\r\n dataSource: TruckcomGrid_dataSource,\r\n showBorders: true,\r\n showRowLines: dataGridProperties.ShowRowLines,\r\n sorting: {\r\n mode: dataGridProperties.SortingMode\r\n },\r\n customizeColumns: function (e) {\r\n DataGridRenderColumns(\r\n e,\r\n dataGridProperties.GridId,\r\n dataGridProperties.IsReadOnly,\r\n dataGridProperties.ColumnLimit,\r\n dataGridProperties.Dataset,\r\n dataGridProperties.LegacyColumnNames,\r\n dataGridProperties.StartDate,\r\n dataGridProperties.EndDate,\r\n dataGridProperties.PropertiesToShow,\r\n dataGridProperties.DatabaseKey,\r\n dataGridProperties.ViewName,\r\n dataGridProperties.IconFilters,\r\n dataGridProperties.FilterColumns,\r\n dataGridProperties.HideIconColumn,\r\n dataGridProperties.ParentId,\r\n false,\r\n columnProfile\r\n );\r\n },\r\n onContextMenuPreparing: function (e) {\r\n if (dataGridProperties.RightClicksEnabled) {\r\n RightClickMenu(e, dataGridProperties.GridId);\r\n }\r\n },\r\n onContentReady: function (e) {\r\n if (window[dataGridProperties.GridId + \"_RowDragandDropEnabled\"] || window[dataGridProperties.GridId + \"_CellDragandDropEnabled\"]) {\r\n $(\"#\" + dataGridProperties.GridId).addClass(\"Truckcom_DragAndDrop\");\r\n SetupDragandDrop();\r\n }\r\n\r\n if (dataGridProperties.ContentReadyFunction !== \"\") {\r\n window[dataGridProperties.ContentReadyFunction](e);\r\n }\r\n\r\n },\r\n onRowPrepared: function (e) {\r\n RowPrepared(e);\r\n if (dataGridProperties.RowPrepared !== undefined) {\r\n dataGridProperties.RowPrepared(e);\r\n }\r\n },\r\n onCellPrepared: CellCustomisation,\r\n height: function () { if (dataGridProperties.SetGridSize) { return GridHeight(dataGridProperties.GridId) } },\r\n width: function () { if (dataGridProperties.SetGridSize) { return GridWidth(dataGridProperties.GridId) } },\r\n scrolling: scrollingProps,\r\n focusedRowEnabled: dataGridProperties.EnableFocusedRow,\r\n onCellClick: function (e) {\r\n if (e.cellElement.parents(\".dx-datagrid-rowsview\").length > 0 && e.cellElement.parents(\".dx-freespace-row\").length === 0 && e.cellElement.parents(\".dx-datagrid-filter-row\").length === 0) {\r\n DatagridCellClick(e, dataGridProperties.GridId);\r\n }\r\n else {\r\n e.component.option(\"focusedRowIndex\", -1);\r\n e.component.option(\"focusedColumnIndex\", -1);\r\n\r\n if (e.cellElement.parents(\".dx-header-row\").length === 0 && !window[dataGridProperties.GridId + \"_UseSingleSelectionMode\"]) { // Not sorting row and onl multi select grid\r\n // Clears selected rows\r\n e.component.deselectAll();\r\n }\r\n }\r\n },\r\n editing: {\r\n refreshMode: \"repaint\",\r\n allowUpdating: !dataGridProperties.IsReadOnly,\r\n startEditAction: \"click\",\r\n mode: \"cell\",\r\n texts: {\r\n confirmDeleteMessage: \"\"\r\n },\r\n selectTextOnEditStart: true\r\n },\r\n repaintChangesOnly: true,\r\n paging: {\r\n enabled: false\r\n }\r\n });\r\n\r\n if (!dataGridProperties.ShowColumnLines) {\r\n $(\"#\" + dataGridProperties.GridId).addClass(\"Truckcom_RailPlannerGrid\");\r\n }\r\n }\r\n else {\r\n // Missing Properties\r\n }\r\n}\r\n\r\nfunction EdgeCompatibleTimeEntry(input) {\r\n input.on(\"keypress\", function (evt) {\r\n var regex = /^[0-9]+$/;\r\n\r\n if (regex.test(evt.key)) {\r\n if (evt.target.value.length == 2) {\r\n evt.target.value = evt.target.value + \":\";\r\n }\r\n\r\n if (evt.target.value.length == 5) {\r\n evt.preventDefault();\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n });\r\n}\r\n\r\nfunction ShowSuccessToast(messageText, timeToDisplayFor) {\r\n ShowToastNotification(messageText, \"success\", timeToDisplayFor);\r\n}\r\n\r\nfunction ShowErrorToast(messageText, timeToDisplayFor) {\r\n ShowWarningPopup(messageText, \"Error\");\r\n}\r\n\r\nfunction ShowWarningToast(messageText, timeToDisplayFor) {\r\n ShowWarningPopup(messageText);\r\n}\r\n\r\nfunction ShowToastNotification(messageText, toastType, timeToDisplayFor) {\r\n // Show a particular toast type with the message text\r\n if (timeToDisplayFor === undefined) {\r\n timeToDisplayFor = 12000;\r\n }\r\n\r\n var ToastConfig = {\r\n closeOnOutsideClick: true,\r\n message: messageText,\r\n visible: true\r\n };\r\n DevExpress.ui.notify(ToastConfig, toastType, timeToDisplayFor);\r\n}\r\n\r\nfunction ShowWarningPopup(contentHtml, title, doNotShowCopyButton, autoSize) {\r\n if ($(\"#WarningPopup\").length == 0) {\r\n $(\"body\").append($(\"
    \"));\r\n }\r\n\r\n if (title == undefined) {\r\n title = \"Warning/Information\";\r\n }\r\n\r\n var Height = \"35%\";\r\n var Width = \"50%\";\r\n\r\n if (autoSize) {\r\n Height = \"auto\";\r\n Width = \"Auto\";\r\n }\r\n\r\n $(\"#WarningPopup\").dxPopup({\r\n height: Height,\r\n width: Width,\r\n visible: true,\r\n resizeEnabled: true,\r\n title: title,\r\n contentTemplate: function (container) {\r\n var scrollView = $(\"
    \");\r\n var content = $(\"
    \");\r\n var hiddenInput = $(\"