var changepassmodalInstance = null;
var CONST_DATE_FORMAT = "";// global datetime format
var CONFIG_PAGE_SIZE = 10; // global pagesize config
$(document).ready(function () {
// Auto init materialize js
M.AutoInit();
// Init closest
if (!Element.prototype.closest) {
Element.prototype.closest = function (selector) {
return $(this).closest(selector)[0];
}
}
// ajax request check timeout
$(document).ajaxComplete(
function (event, xhr, settings) {
if (xhr.status == 401) {
window.location.href = "/Account/Login?loginMessage=Session%20timeout%21";
var form = document.createElement("")
}
});
// Clear search input when press escape
$(".searchKeyword").on("keyup", function () {
if (event.keyCode == 27) {
event.target.value = "";
event.target.oninput();
event.stopPropagation();
}
});
$('.input-field label').on("click", function () {
var inputField = event.target.closest(".input-field");
var input = inputField.querySelector("input");
input = input || inputField.querySelector("select");
if (input)
input.focus();
});
$(document.body).on("change", 'input[type="text"]', function () {
if(event && event.target && event.target.value)
event.target.value = event.target.value.trim();
});
$('input[type="checkbox"]').on("keypress", function () {
event.target.click();
});
// highlight panel
var highlightList = $(".highlight");
for (var i = 0; i < highlightList.length; i++) {
var hightlightPanel = highlightList[i];
refreshHighlight(hightlightPanel);
}
$('.dropdown-trigger').dropdown();
$('html').click(function (e) {
var avatardropdown = $(".dropdown-trigger.active")[0];
if (avatardropdown != null) {
if (e.target.classList.contains("userInfomation") == false && e.target.id != "avatardropdown") {
M.Dropdown.getInstance(avatardropdown).close();
$(".dropdown-trigger").removeClass("active");
}
}
if (e.target.closest(".sidenav") == null && e.target.closest(".menuIcon") == null) {
var sideNav = document.querySelector(".sidenav");
if(sideNav)
sideNav.classList.remove("open");
}
if (e.target.closest(".searchIcon") == null && e.target.closest(".searchKeyword") == null) {
$(".searchKeyword").removeClass("active")
}
if (e.target.closest(".show") == null) {
$("li.show").removeClass("show");
}
});
// Scrollable table handle
$(window).resize(function () {
resizeScrollableTable();
});
var bodyScrollTop = 0;
$('body').on({
'touchmove': function (e) {
var newY = e.originalEvent.touches[0].clientY;
if (newY < bodyScrollTop)
this.classList.add("scrollDown");
else
this.classList.remove("scrollDown");
bodyScrollTop = newY;
}
});
var startX = 0;
var startY = 0;
var moveElement = null;
$(document).on("mousedown", ".dateInputLabel, .modalTitle, .moveAnchor", function (e) {
moveElement = event.target.closest(".modal");
moveElement = moveElement || event.target.closest(".moveable");
startX = e.clientX;
startY = e.clientY;
var oldTransform = moveElement.style.transform;
if (oldTransform.indexOf("translate3d") != -1) {
oldTransform = oldTransform.substring(12, oldTransform.length - 6);
var arr = oldTransform.split(", ");
startX -= parseInt(arr[0]);
startY -= parseInt(arr[1]);
}
});
$(document).on("mouseup", "body", function (e) {
if (moveElement) {
startX = startY = 0;
moveElement = null;
}
});
$(document).on("mousemove", "body", function (e) {
if (moveElement) {
var x = e.clientX - startX;
var y = e.clientY - startY;
$(moveElement).css("transform", "translate3d(" + x + "px," + y + "px,0px)");
}
});
$(document).on('click', '.datepicker-modal .select-dropdown', function () {
setTimeout(function () {
var ul = $("ul.dropdown-content:visible");
if (ul) {
var li = ul.find("li.selected");
ul.scrollTop(li[0].offsetTop - ul[0].offsetHeight / 2 + 13);
}
}, 150)
});
setTimeout(function () {
var searchKeyword = document.querySelector(".searchKeyword");
if (searchKeyword && searchKeyword.oninput)
searchKeyword.oninput();
}, 0);
$(document).on("click", ".tableHeader th>span, .sortLabel", function () {
if (event.target.nextElementSibling) {
event.target.nextElementSibling.click();
}
});
$(document).on("change", ".tableContent input[type=checkbox]", function () {
var checkAll = $(this).closest(".tableContainer").find(".tableHeader input.checkAll")[0];
if (this.checked == false)
checkAll.checked = false;
else {
var check = true;
$($(this).closest(".tableContent").find("tr>td input[type=checkbox]:not(:disabled):visible")).each(function () {
if (this.checked == false) {
check = false;
return false;
}
});
checkAll.checked = check;
}
});
$(document).on("change", ".tableHeader input.checkAll", function () {
var check = this.checked;
var checkList = $(this).closest(".tableContainer").find(".tableContent input[type=checkbox]:not(:disabled):visible");
$(checkList).each(function () {
this.checked = check;
});
});
var cardContent = $(".cardContent");
if(cardContent)
cardContent.append($('.loading'));
initComponent();
// Init menu tooltip
setTimeout(function () {
var tooltiplist = $('.menuPanel .tooltipped');
var tooltipDiv = $('.material-tooltip:lt(' + tooltiplist.length + ')');
tooltipDiv.addClass("menuTooltip");
}, 500);
// auto format currency
$('input.currency').on("input", (function (event) {
var maxlength = parseInt(this.getAttribute("maxlength"));
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function (index, value) {
value = value.replace(/\D/g, ""); // Remove non digit character
value = parseInt(value); // Parse int
value = value == 0 ? 0 : value ? value : "";
value = value.toString().substr(0, maxlength - Math.floor(maxlength / 3) + 1); // Trim value to max length
value = value.replace(/\B(?=(\d{3})+(?!\d))/g, "."); // Add thousand dot
return value;
});
}));
// auto format percent
$('input.percent').on("input", (function (event) {
var max = parseInt(this.getAttribute("max"));
var min = parseInt(this.getAttribute("min"));
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function (index, value) {
value = value.replace(/\D/g, ""); // Remove non digit character
value = parseInt(value); // Parse int
value = value == 0 ? 0 : value ? value : "";
if (value !== "") {
if (value > max) value = max;
if (value < min) value = min;
}
return value;
});
validateTextInput(this);
}));
// auto format integer
$('input.integer').on("keydown", (function (event) {
if (event.keyCode == 110 || event.keyCode == 188 || event.keyCode == 190) {
event.preventDefault();
event.stopPropagation();
}
}));
// auto format integer
$('input.integer').on("input", (function (event) {
// format number
$(this).val(function (index, value) {
value = value.replace(/\D/g, ""); // Remove non digit character
value = parseFloat(value); // Parse float
value = Math.ceil(value);
return value;
});
}));
$(".disableAutoSubmit").on("keydown","input",function (event) {
if (event.keyCode == 13) {
event.preventDefault();
return false;
}
});
$(document).on("mouseenter", ".helpDiv", function () {
var helpDiv = event.target.closest(".helpDiv");
var helpPanel = helpDiv.querySelector(".helpPanel");
var pos = helpPanel.getBoundingClientRect();
var posLeft = pos.x ? pos.x : pos.left;
var offset = window.innerWidth - (helpPanel.offsetWidth + posLeft) - 10;
if (offset < 0)
helpPanel.style.left = offset + "px";
else
helpPanel.style.left = "";
});
});
function initComponent() {
M.AutoInit();
// Resize when menu panel size changing
var resizeCount = 0;
var resizeInterval = setInterval(function () {
resizeScrollableTable();
resizeCount += 1;
if (resizeCount > 11)
clearInterval(resizeInterval);
}, 30);
initSortActive();
setTimeout(function () {
try {
reloadDateinputs();
} catch (e) {
}
}, 0)
$(".tableContent > tbody").each(function () {
if (this.children.length == 0) {
$(this).append($("
No data available in table |
"));
var checkAll = $(this).closest(".tableContainer").find(".tableHeader input.checkAll")[0];
if (checkAll) checkAll.setAttribute("disabled", "disabled");
}
});
}
function initSortActive() {
var sortName = $("#SortName");
var sortType = $("#SortType");
if (sortName.length != 0 && sortName.val() != "") {
$(".sortIcon.active").removeClass("active");
var sortIcon = $(".sortIcon[sortName=" + sortName.val() + "]");
sortIcon.addClass("active");
sortIcon.attr("sortType", sortType.val());
}
}
// Scrollable table handle
function resizeScrollableTable() {
$(".tableContent").each(function () {
var thList = $(this).find("tr:not(.hide):eq(0) td:not(.hide-on-med-and-up)");
if (thList.length > 0) {
var headerThList = $(this).closest(".tableContainer").find(".tableHeader:eq(0) tr:eq(0) th");
var hideIndex = 0;
for (var thIndex = 0; thIndex < thList.length - 1; thIndex++) {
while (thIndex + hideIndex < thList.length && thList[thIndex + hideIndex].offsetWidth == 0) hideIndex++;
var th = headerThList[thIndex];
if (this.closest("#kpiPanel") == null)
th = headerThList[thIndex + hideIndex];
if (th) {
if (thIndex < headerThList.length - 1)
th.width = thList[thIndex + hideIndex].offsetWidth;
else
th.width = "";
}
}
}
});
}
// Search handle
function applySearch(containerId) {
var searchContainer = document.getElementById(containerId);
var searchKeyword = searchContainer.querySelector(".searchKeyword");
var keyword = searchKeyword.value.toLowerCase();
var searchRowList = searchContainer.querySelectorAll(".searchRow");
var searchThCount = searchContainer.querySelectorAll(".tableHeader tr th").length;
var foundCount = 0;
for (var index = 0; index < searchRowList.length; index++) {
var row = searchRowList[index];
var visibleRowTdCount = row.querySelectorAll("tr td:not(.hide)").length;
if (searchThCount != 0 && searchThCount != visibleRowTdCount) {
row.classList.add("hide");
continue;
}
var detailContainer = row.classList.contains("detailContainer") ? row
: row.querySelector(".detailContainer");
removeHighlightText(row);
if (keyword == "") {
foundCount++;
row.classList.remove("hide");
if (detailContainer && detailContainer.classList.contains("detailContainer"))
collapseDetails(detailContainer);
continue;
}
var searchFieldList = row.querySelectorAll('.searchField');
var results = getSearchResults(keyword, searchFieldList);
if (results.length > 0) {
foundCount++;
highlightText(results, keyword);
row.classList.remove("hide");
if (detailContainer && detailContainer.classList.contains("detailContainer")) {
if(results[0].closest(".detailPanel"))
expandDetails(detailContainer);
else
collapseDetails(detailContainer);
}
} else {
row.classList.add("hide");
row.classList.remove("selected");
if (detailContainer && detailContainer.classList.contains("detailContainer"))
collapseDetails(row);
}
}
// Showing count
var showingCount = searchContainer.querySelector(".showingCount");
if(showingCount!=null)
showingCount.innerHTML = foundCount;
// Total count
var totalCount = searchContainer.querySelector(".totalCount");
if (totalCount)
totalCount.innerHTML = searchRowList.length;
refreshHighlight(searchContainer);
resizeScrollableTable();
}
function getSearchResults(keyword, searchFieldList) {
var results = [];
for (var index = 0; index < searchFieldList.length; index++) {
var el = searchFieldList[index];
if (el.innerText.toLowerCase().indexOf(keyword) != -1)
results.push(el);
}
return results;
}
function highlightText(el, keyword) {
if (Array.isArray(el) == false) {
var temp = el;
el = [];
el.push(temp);
}
for (var index = 0; index < el.length; index++) {
var item = el[index];
var text = item.innerText;
var hIndex = text.toLowerCase().indexOf(keyword.toLowerCase());
var preText = text.substring(0, hIndex);
var keyText = text.substring(hIndex, hIndex + keyword.length);
var sufText = text.substring(hIndex + keyword.length);
text = preText + "" + keyText + "" + sufText;
item.innerHTML = text;
}
}
function removeHighlightText(row) {
var hightlighList = row.querySelectorAll(".textHighlight");
for (var index = 0; index < hightlighList.length; index++) {
var parent = hightlighList[index].parentNode;
parent.innerHTML = parent.innerHTML.replace("", "");
}
}
function isMSIE() {
var ua = window.navigator.userAgent;
if (ua.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))
return true; // If Internet Explorer, return true
return false;
}
function collapseMenu() {
var sideNav = document.querySelector(".sidenav");
sideNav.classList.add("open");
var body = document.body;
var status = "";
if (body.classList.contains("collapsed")) {
body.classList.remove("collapsed");
status = "expanded";
$(".menuIcon")[0].title = "Collapse menu";
$(".menuPanel .active").addClass("expand");
$(".menuPanel .active .childMenuList").css("display", "block");
} else {
body.classList.add("collapsed");
status = "collapsed";
$(".menuIcon")[0].title = "Expand menu";
$(".childMenuList").css("display", "");
$(".menuPanel .expand").removeClass("expand");
}
$.ajax({
url: "/Account/ChangeMenuStatus",
data: { status: status },
type: "post"
});
// Resize when menu panel size changing
var resizeCount = 0;
var resizeInterval = setInterval(function () {
resizeScrollableTable();
resizeCount += 1;
if (resizeCount > 11)
clearInterval(resizeInterval);
}, 30);
}
// Handle Details panel
function toggleDetails(container) {
container = container || event.target.closest(".detailContainer");
if (container.classList.contains("disable")) return;
var btn = container.querySelector(".detailBtn");
var detailPanel = container.querySelector(".detailPanel");
container.classList.add("disabled");
if (container.classList.contains("expand")) {
container.classList.remove("expand");
$(detailPanel).slideUp(200, function () {
// Hide complete.
container.classList.remove("disabled");
});
} else {
container.classList.add("expand");
$(detailPanel).slideDown(200, function () {
// Show complete.
container.classList.remove("disabled");
});
}
event.stopPropagation();
}
// Handle Details panel
function expandDetails(container) {
container = container || event.target.closest(".detailContainer");
if (container.classList.contains("disable")) return;
var btn = container.querySelector(".detailBtn");
var detailPanel = container.querySelector(".detailPanel");
if (container.classList.contains("expand") == false) {
container.classList.add("disabled");
container.classList.add("expand");
$(detailPanel).slideDown(200, function () {
// Hide complete.
container.classList.remove("disabled");
});
}
}
// Handle Details panel
function collapseDetails(container) {
container = container || event.target.closest(".detailContainer");
if (container.classList.contains("disable")) return;
var btn = container.querySelector(".detailBtn");
var detailPanel = container.querySelector(".detailPanel");
if (container.classList.contains("expand")) {
container.classList.add("disabled");
container.classList.remove("expand");
$(detailPanel).slideUp(200, function () {
// Hide complete.
container.classList.remove("disabled");
});
}
}
// Toast message functions
function ToastSuccess(message) {
M.toast({
html: message,
classes: "green lighten-1"
});
}
function ToastError(message) {
M.toast({
html: message,
classes: "red lighten-1"
});
}
function ToastWarning(message) {
M.toast({
html: message,
classes: "yellow darken-2"
});
}
function ToastInfo(message) {
M.toast({
html: message,
classes: "blue lighten-2"
});
}
function OpenModal(modalId) {
var modalElement = document.getElementById(modalId);
modalElement = modalElement || event.target.closest(".modal");
var instance = M.Modal.getInstance(modalElement);
instance.open();
var searchKeyword = modalElement.querySelector(".searchKeyword");
if (searchKeyword) searchKeyword.focus();
}
function CloseModal(modalId) {
var modalElement = document.getElementById(modalId);
modalElement = modalElement || event.target.closest(".modal");
var instance = M.Modal.getInstance(modalElement);
instance.close();
}
function ShowErrorState(inputElement) {
var errorText = inputElement.closest(".input-field").querySelector(".helper-text");
errorText.classList.remove("invisible");
}
function RemoveErrorState(element) {
element = element || event.target;
var errorText = element.closest(".input-field").querySelector(".helper-text");
errorText.classList.add("invisible");
}
function RemoveDuplicateError(element) {
element = element || event.target;
element.classList.remove("duplicate");
}
function RemoveRangeError(element) {
element = element || event.target;
element.classList.remove("range");
}
function ValidateInputRange(element) {
element = element || event.target;
// Check required
if (element.required) {
if (element.value == "") {
element.focus();
element.classList.add("invalid");
return;
}
else
element.classList.remove("invalid");
}
// check group weight range
var value = parseInt(element.value);
var min = parseInt(element.getAttribute("min"));
var max = parseInt(element.getAttribute("max"));
var isValidated = value >= min && value <= max;
if (isValidated == false) {
element.focus();
element.classList.add("range");
}
else
element.classList.remove("range");
return isValidated;
}
function DisableElement(element) {
element.setAttribute("disabled", "disabled");
}
function EnableElement(element) {
element.removeAttribute("disabled");
}
function reloadPanel(url, data, selector, callback) {
showLoading();
$.ajax({
url: url,
data: data,
success: function (response) {
$(selector).html($(response).find(selector).html());
if (callback) callback.call();
initComponent();
hideLoading();
}
});
}
function applySort(containerSelector, sortIndex, valueType) {
showLoading();
var sortType = event.target.getAttribute("sortType");
if (event.target.classList.contains("active") == false) {
event.target.setAttribute("sortType", "asc");
} else {
if (sortType == "asc")
event.target.setAttribute("sortType", "desc");
else
event.target.setAttribute("sortType", "asc");
}
sortType = event.target.getAttribute("sortType");
var sortName = event.target.getAttribute("sortName");
$('.sortIcon.active').removeClass("active");
event.target.classList.add("active");
if (sortName) {// sort on database data with ajax
$('#SortName').val(sortName);
$('#SortType').val(sortType);
var sortForm = $(event.target).closest("form");
reloadPanel(sortForm.attr("action"), sortForm.serialize(), containerSelector);
}
else { // sort on showing data
function getUserType(userType) {
var result = 0;
if (userType.indexOf("Administrator") != -1)
result = 4
else if (userType.indexOf("Manager") != -1)
result = 3
else if (userType.indexOf("Lead") != -1)
result = 2
else if (userType.indexOf("Employee") != -1)
result = 1
return result;
}
function getStatus(status) {
var result = 0;
if (status.indexOf("Pending") != -1)
result = 1
else if (status.indexOf("Delivery Failure") != -1)
result = 2
else if (status.indexOf("Delivered") != -1)
result = 3
return result;
}
var sort_by_name = function (a, b) {
var value1 = a.children[sortIndex].innerText.replace("arrow_drop_up", "").trim();
var value2 = b.children[sortIndex].innerText.replace("arrow_drop_up", "").trim();
if (valueType == "number") {
value1 = Number(value1);
value2 = Number(value2);
}
else if (valueType == "no") {
value1 = value1 || Infinity;
value2 = value2 || Infinity;
value1 = Number(value1);
value2 = Number(value2);
}
else if (valueType == "datetime") {
value1 = parseDateFromString(value1)
value2 = parseDateFromString(value2)
}
else if (valueType == "usertype") {
value1 = getUserType(value1);
value2 = getUserType(value2);
}
else if (valueType == "status") {
value1 = getStatus(value1);
value2 = getStatus(value2);
}
var compareResult = value1 < value2 ? -1 : value1 > value2 ? 1 : 0 - (sortType == "asc");
return compareResult;
}
var container = $(containerSelector);
var list = container.children();
list.sort(sort_by_name);
if (sortType == "desc") {
list = list.get().reverse();
}
container.html(list);
refreshHighlight(container);
hideLoading();
}
}
function refreshHighlight(element) {
element = element || $(".highlight");
$(element).each(function () {
var highlightElment = $(this);
if (highlightElment.is("table")) {
var important = $(element).is(".disableHover") ? " !Important" : "";
highlightElment.find("tr").css('background-color', "");
highlightElment.find("tr:not(.hide):odd").each(function () {
$(this).attr('style', 'background-color: #f3f3f3' + ($(this).hasClass("searchRow") ? "" : important));
});
}
else {
highlightElment.find(".searchRow").css("background", "")
highlightElment.find(".searchRow:not(.hide):odd").css("background-color", "#f3f3f3")
}
});
}
function stopPropagation() {
event.stopPropagation();
}
function validateTextInput(textInput, validated) {
textInput = textInput || event.target;
if (textInput && textInput.value == "") {
if (validated) textInput.focus();
textInput.classList.add("invalid");
validated = false;
} else
textInput.classList.remove("invalid");
return validated;
}
function validateNumberInput(numberInput, validated) {
numberInput = numberInput || event.target;
if (numberInput && numberInput.value == "" || numberInput.validity.valid == false) {
if (validated) numberInput.focus();
numberInput.classList.add("invalid");
validated = false;
} else
numberInput.classList.remove("invalid");
return validated;
}
function validateSelectlist(selectInput, validated) {
if (selectInput && selectInput.value == "") {
ShowErrorState(selectInput);
validated = false;
}
return validated;
}
function resetchangepassmodal() {
document.changepassForm.reset();
var passwordModal = document.getElementById("changepassmodal");
$(passwordModal).find("input").removeClass("invalid");
$(passwordModal).find(".helper-text.red-text").addClass("invisible");
}
function changeNewPassword() {
resetchangepassmodal();
var changepassmodal = document.getElementById("changepassmodal");
if (changepassmodal) {
$(changepassmodal).modal({ dismissible: false });
changepassmodalInstance = M.Modal.getInstance(changepassmodal);
}
changepassmodalInstance.open();
document.getElementById("OldPassword").focus();
}
function validatechangePwd() {
var validated = true;
var password = document.getElementById("NewPassword");
var confirmpassword = document.getElementById("ConfirmPassword");
var oldpassword = document.getElementById("OldPassword");
if (oldpassword.value.length == 0) {
oldpassword.classList.add("invalid");
document.getElementById("olderr").setAttribute("data-error", "Please input old password");
oldpassword.focus();
validated = false;
}
else if (password.value.length == 0) {
password.classList.add("invalid");
password.focus();
validated = false;
}
else if (confirmpassword.value.length == 0) {
confirmpassword.classList.add("invalid");
document.getElementById("confirmerr").setAttribute("data-error", "Please input confirm password");
confirmpassword.focus();
validated = false;
}
else if (password.value != confirmpassword.value) {
confirmpassword.classList.add("invalid");
document.getElementById("confirmerr").setAttribute("data-error", "Password not match");
confirmpassword.focus();
validated = false;
}
return validated;
}
function savePassword() {
if (validatechangePwd() == false) return;
var changepassForm = document.changepassForm;
var url = changepassForm.getAttribute("action");
$.ajax({
url: url,
data: $(changepassForm).serialize(),
type: "post",
dataType: "json",
success: function (data) {
if (data) {
changepassmodalInstance.close();
document.changepassForm.reset();
ToastSuccess("Password successfully changed!");
}
else {
document.getElementById("olderr").setAttribute("data-error", "Old password invalid");
changepassForm.OldPassword.classList.remove("valid");
changepassForm.OldPassword.classList.add("invalid");
}
}
});
}
function newpasswordKeydown() {
if (event.key == "Enter")
savePassword();
}
function uploadfile(avt) {
var formData = new FormData();
var avatar = '';
if (avt) {
var files = $("#fileavt").get(0).files;
avatar = 'true';
}
else
var files = $("#filebg").get(0).files;
formData.append('file', files[0]);
$.ajax({
type: 'post',
url: '/Account/FileUpload?avt=' + avatar,
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (response) {
window.location.reload(true);
}
});
}
function reloadDateinputs() {
// Date input init
var dateInputs = document.querySelectorAll('.dateInput');
for (var i = 0; i < dateInputs.length; i++) {
var dateInput = dateInputs[i];
initDateInput(dateInput);
}
}
function initDateInput(element) {
var defaultDateAttribute = element.getAttribute("defaultdate");
var minDateAttribute = element.getAttribute("minDate");
var maxDateAttribute = element.getAttribute("maxDate");
var onlychoosePassDate = $(element).hasClass("pastDate");
var disableWeekends = $(element).hasClass("disableWeekends");
var disableHolidays = $(element).hasClass("disableHolidays");
var absoluteMindate = new Date(1900, 0, 1);
var absoluteMaxdate = new Date(2099, 11, 31);
var minDate = null;
var maxDate = null;
var options = {
format: CONST_DATE_FORMAT,
yearRange: 100,
autoClose: true,
}
if (defaultDateAttribute) {
var defaultDate = parseDateFromString(defaultDateAttribute);
options["defaultDate"] = defaultDate;
options["setDefaultDate"] = true;
options["parse"] = defaultDate;
}
if (minDateAttribute) {
minDate = parseDateFromString(minDateAttribute);
mindate = minDate < absoluteMindate ? absoluteMindate : minDate;
options["minDate"] = minDate;
}
else
options["minDate"] = absoluteMindate;
absoluteMaxdate = onlychoosePassDate ? new Date() : absoluteMaxdate;
if (maxDateAttribute) {
maxDate = parseDateFromString(maxDateAttribute);
options["maxDate"] = maxDate < absoluteMaxdate ? maxDate : absoluteMaxdate;
}
else
options["maxDate"] = absoluteMaxdate;
options["disableDayFn"] = function (date) {
if (disableWeekends)
if (date.getDay() % 6 == 0)
return true;
if (disableHolidays) {
return isVietNamHoliday(date);
}
return false;
}
$(element).datepicker(options);
var instance = M.Datepicker.getInstance(element);
if (element.value != "") {
instance.date = parseDateFromString(element.value);
instance.gotoDate(instance.date);
}
var inputLabel = element.getAttribute("inputLabel");
if (inputLabel) {
var container = element.closest(".input-field").querySelector(".datepicker-container");
var div = document.createElement('div');
div.innerHTML = inputLabel;
div.className = "dateInputLabel teal lighten-1";
container.appendChild(div);
}
return instance;
}
function parseDateFromString(dateStr) {
if (!dateStr) return false;
var result = null;
var date = -1;
var month = -1;
var year = -1;
var dateSeparate = "/";
var dateArr = dateStr.split(dateSeparate);
var dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
if (dateArr.length != 3) {
dateSeparate = "-";
dateArr = CONST_DATE_FORMAT.split(dateSeparate);
dateArr = dateStr.split(dateSeparate);
dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
}
if (dateArr.length != 3) {
dateSeparate = ".";
dateArr = CONST_DATE_FORMAT.split(dateSeparate);
dateArr = dateStr.split(dateSeparate);
dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
}
if (dateArr.length != 3) {
dateSeparate = ":";
dateArr = CONST_DATE_FORMAT.split(dateSeparate);
dateArr = dateStr.split(dateSeparate);
dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
}
if (dateArr.length != 3)
return false;
for (var index = 0; index < 3; index++) {
var datePart = dateFormatArr[index];
switch (datePart) {
case "dd": date = parseInt(dateArr[index]); break;
case "mm": month = parseInt(dateArr[index]) - 1; break;
case "yyyy": year = parseInt(dateArr[index]); break;
}
}
var result = new Date(year, month, date);
if (result.getDate() != date || result.getMonth() != month || result.getFullYear() != year || result.getFullYear() < 1900)
result = false;
return result;
}
function dateToString(inputDate) {
var result = null;
var date = inputDate.getDate();
var month = inputDate.getMonth() + 1;
var year = inputDate.getFullYear();
var dateSeparate = "/";
var dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
if (dateFormatArr.length != 3) {
dateSeparate = "-";
dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
}
if (dateFormatArr.length != 3) {
dateSeparate = ".";
dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
}
if (dateFormatArr.length != 3) {
dateSeparate = ":";
dateFormatArr = CONST_DATE_FORMAT.split(dateSeparate);
}
var result = "";
for (var index = 0; index < 3; index++) {
var datePart = dateFormatArr[index];
switch (datePart) {
case "dd":
if (index > 0) result += dateSeparate;
result += paddLeft(date, 2);
break;
case "mm":
if (index > 0) result += dateSeparate;
result += paddLeft(month, 2);
break;
case "yyyy":
if (index > 0) result += dateSeparate;
result += year;
break;
}
}
return result;
}
function datetimeToString(inputDateTime) {
var dateString = dateToString(inputDateTime);
var options = {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
};
var timeString = inputDateTime.toLocaleString('en-us', options).replace(',', '');
if (timeString.startsWith("24")) {
timeString = '00' + timeString.substr(2);
}
return dateString + " " + timeString + ':' + paddLeft(inputDateTime.getMilliseconds(), 3);
}
function paddLeft(str, length) {
str = str + "";
var pad = "";
while (length-- > 0) {
pad += "0";
}
var result = pad.substring(0, pad.length - str.length) + str;
return result;
}
function onchangeDateSelect(el) {
el = el || event.target;
var dateField = $(el).siblings(".dateField");
if (dateField)
dateField.val(el.value);
dateField.removeClass("invalid");
}
function onchangeDateInput(el) {
el = el || event.target;
var datecorrect = el.value;
if (datecorrect.indexOf('/') == 1)
datecorrect = '0' + datecorrect;
if (datecorrect.lastIndexOf('/') == 4)
datecorrect = datecorrect.slice(0, 3) + '0' + datecorrect.slice(3);
var dateInput = $(el).siblings(".dateInput");
var instance = M.Datepicker.getInstance(dateInput);
var date = parseDateFromString(datecorrect);
if (date) {
date = getValidateDate(dateInput, date);
instance.setDate(date);
instance.gotoDate(date);
el.value = dateToString(date);
dateInput.val(dateToString(date));
}
else {
instance.setDate(null);
instance.gotoDate(new Date());
el.value = "";
dateInput.val("");
}
}
function getValidateDate(dateInput, date) {
var minDateAttribute = dateInput.attr("minDate");
var maxDateAttribute = dateInput.attr("maxDate");
var onlychoosePassDate = dateInput.hasClass("pastDate");
var disableWeekends = dateInput.hasClass("disableWeekends");
var disableHolidays = dateInput.hasClass("disableHolidays");
var absoluteMindate = new Date(1900, 0, 1);
var absoluteMaxdate = new Date(2099, 11, 31);
var getNext = true;
// Check mindate
if (minDateAttribute) {
var minDate = parseDateFromString(minDateAttribute);
date = date < minDate ? minDate : date;
}
else
date = date < absoluteMindate ? absoluteMindate : date;
// Check only choose passdate
if (onlychoosePassDate) {
var currDate = new Date();
currDate = new Date(currDate.getFullYear(), currDate.getMonth(), currDate.getDate());
date = date > currDate ? currDate : date;
}
// Check maxdate
if (maxDateAttribute) {
var maxDate = parseDateFromString(maxDateAttribute);
date = date > maxDate ? maxDate : date;
}
else if (date > absoluteMaxdate) {
getNext = false;
date = absoluteMaxdate;
}
// disable weekends and holidays
if (disableWeekends && disableHolidays)
while (isVietNamHoliday(date) || date.getDay() % 6 == 0)
date = addDates(date, 1);
// disable weekends only
else if (disableWeekends)
while (date.getDay() % 6 == 0)
date = addDates(date, getNext ? 1 : -1);
// disable holidays only
else if (disableHolidays)
while (isVietNamHoliday(date))
date = addDates(date, getNext ? 1 : -1);
return date;
}
function openDatetimeInput() {
var inputField = event.target.closest(".input-field");
var dateField = inputField.querySelector(".dateField");
if (dateField == null || dateField.disabled == false) {
var dateInput = inputField.querySelector(".dateInput");
var dateInputInstance = M.Datepicker.getInstance(dateInput);
dateInputInstance.open();
}
}
function showSearchInput() {
$(".searchKeyword").toggleClass("active").focus();
}
function userProfile() {
window.location.href = "/Account/UserProfile";
}
function showLoading() {
$('.loading').removeClass('hide');
}
function hideLoading() {
$('.loading').addClass('hide');
}
$(document).on('change', 'input[datetype], input[datetype]~input.dateInput', function () {
var dateFromInput = event.target.closest(".row").querySelector("[datetype=from]");
var dateFrom = $(dateFromInput).siblings(".dateInput");
if (dateFrom.length == 0) {
dateFrom = $(dateFromInput);
}
if (dateFrom.length == 0) {
dateFrom = $("[datetype=from]");
dateFromInput = dateFrom[0];
}
var dateFromInstance = M.Datepicker.getInstance(dateFrom);
var dateToInput = event.target.closest(".row").querySelector("[datetype=to]");
var dateTo = $(dateToInput).siblings(".dateInput");
if (dateTo.length == 0) {
dateTo = $(dateToInput);
}
if (dateTo.length == 0) {
dateTo = $("[datetype=to]");
dateToInput = dateTo[0];
}
var dateToInstance = M.Datepicker.getInstance(dateTo);
if (dateFromInstance != null && dateToInstance != null) {
if (dateFromInstance.date) {
dateToInstance.options.minDate = dateFromInstance.date;
if (dateToInstance.date == null)
dateToInstance.gotoDate(dateFromInstance.date);
if (dateToInstance.date && dateToInstance.date < dateFromInstance.date) {
dateToInstance.setDate(dateFromInstance.date);
dateToInput.value = dateToString(dateFromInstance.date);
onchangeDateSelect(dateToInput);
}
if (dateToInstance.date && parseDateFromString(dateFromInput.value) != dateToInstance.date)
dateToInput.value = dateToString(dateToInstance.date);
}
else {
dateToInstance.options.minDate = null;
}
}
});
function checkTimeout(username ,reloadStatus) {
$.ajax({
url: "/Home/CheckSessionAlive",
data: { username: username },
type: "post",
success: function (response) {
if (response == reloadStatus + "") {
document.location.reload();
}
}
});
}
function dropdownActive() {
event.target.closest(".dropdown-trigger").classList.add("active");
}
function CKupdate() {
try {
for (instance in CKEDITOR.instances)
CKEDITOR.instances[instance].updateElement();
} catch (err) {
}
}
function downloadFile(filename, content) {
if (navigator.msSaveBlob) {
downloadFileWithMSBlob(filename, content);
}
else {
downloadFileWithLink(filename, content);
}
}
function downloadFileWithMSBlob(filename, content) {
var blob = new Blob([content], { type: 'text/text;charset=utf-8;' });
navigator.msSaveBlob(blob, filename);
}
function downloadFileWithLink(filename, content) {
let fileContent = "data:text/plain;charset=utf-8," + content;
var encodedUri = encodeURI(fileContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", filename);
document.body.appendChild(link);
link.click();
}