{"version":3,"file":"site.min.js","sources":["site.js"],"sourcesContent":["const _siteMessageTranslations = {\r\n en: {\r\n warning: \"Warning!\",\r\n loggOff: \"You will be logged off in 5 mins. Please save your work!\",\r\n error: \"Error!\",\r\n success: \"Success!\",\r\n info: \"Info!\",\r\n aiName: \"Ahmed AI\",\r\n aiWelcome:\r\n \"Welcome to Ahmed AI! I'm here to help you create effective and insightful surveys. To get started, simply tell me what type of survey you need, and I'll do the rest.\",\r\n aiDailyLimit:\r\n \"Daily limit for AI usage has been reached. Please try again tomorrow.\",\r\n aiSuccess: \"Successfully generated form.\",\r\n aiUsageLimit:\r\n \"AI Usage limit has been reached. Please contact your administrator.\",\r\n },\r\n ar: {\r\n warning: \"تحذير!\",\r\n loggOff: \"سوف تخرج خلال 5 دقائق. الرجاء حفظ عملك!\",\r\n error: \"هناك خطأ\",\r\n success: \"نجاح\",\r\n info: \"الاعلام\",\r\n aiName: \"أحمد مساعد\",\r\n aiWelcome:\r\n \"مرحباً بكم مع أحمد مساعد الذكاء الاصطناعي! أنا هنا لمساعدتكم في إنشاء استطلاعات فعّالة ومفيدة. للبدء، ما عليك إلا إبلاغي بنوع الاستطلاع أو الاستمارة، وسأقوم أنا بالباقي\",\r\n aiDailyLimit:\r\n \"تم الوصول إلى الحد اليومي لاستخدام الذكاء الاصطناعي ، الرجاء المحاولة مرة أخرى غداً.\",\r\n aiSuccess: \"تم إنشاء النموذج بنجاح.\",\r\n aiUsageLimit:\r\n \"تم الوصول إلى الحد الأعلى لاستخدام خاصية الذكاء الاصطناعي. الرجاء الاتصال بمسؤول النظام.\",\r\n },\r\n};\r\n\r\nsetLoggedUserDetails();\r\nrunPageLoadValidations();\r\n\r\nconst _emailRegex =\r\n /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\r\nconst _passwordRegex =\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&#])[A-Za-z\\d@$!%*?&#]{8,}$/;\r\n\r\nfunction validateRequired(data, shouldHighlight = true) {\r\n let isValid = true;\r\n let count = 0;\r\n let firstKey;\r\n if (typeof data === \"object\" && data !== null && data !== undefined) {\r\n for (const key in data) {\r\n if (data[key] === \"\" || data[key] === null || data[key] === undefined) {\r\n if (shouldHighlight) {\r\n $(`#${key}:visible`).addClass(\"is-invalid\").addClass(\"was-validated\");\r\n if (count === 0) {\r\n firstKey = key;\r\n count++;\r\n }\r\n }\r\n isValid = false;\r\n } else {\r\n $(`#${key}:visible`)\r\n .removeClass(\"is-invalid\")\r\n .removeClass(\"was-validated\");\r\n }\r\n }\r\n } else {\r\n if (data === \"\" || data === null || data === undefined) {\r\n if (shouldHighlight) {\r\n $(`#${key}:visible`).addClass(\"is-invalid\").addClass(\"was-validated\");\r\n if (count === 0) {\r\n firstKey = key;\r\n count++;\r\n }\r\n }\r\n isValid = false;\r\n } else {\r\n $(`#${key}:visible`)\r\n .removeClass(\"is-invalid\")\r\n .removeClass(\"was-validated\");\r\n }\r\n }\r\n\r\n if (firstKey) {\r\n document.getElementById(firstKey).scrollIntoView();\r\n $(`#${firstKey}`).focus();\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\nfunction validateEmail(email) {\r\n let isValid = true;\r\n if (\r\n email === \"\" ||\r\n email === null ||\r\n email === undefined ||\r\n !_emailRegex.test(email)\r\n ) {\r\n isValid = false;\r\n }\r\n return isValid;\r\n}\r\n\r\nfunction validatePassword(password) {\r\n let isValid = true;\r\n if (\r\n password === \"\" ||\r\n password === null ||\r\n password === undefined ||\r\n !_passwordRegex.test(password)\r\n ) {\r\n isValid = false;\r\n }\r\n return isValid;\r\n}\r\n\r\nfunction getUser() {\r\n const userDetails = sessionStorage.getItem(\"eqp_user\");\r\n if (!userDetails) {\r\n window.location = \"/login\";\r\n }\r\n return JSON.parse(userDetails);\r\n}\r\n\r\nfunction getToken() {\r\n const user = getUser();\r\n return user.token;\r\n}\r\n\r\nfunction storeUser(user) {\r\n sessionStorage.setItem(\"eqp_user\", JSON.stringify(user));\r\n}\r\n\r\n//let isLoginExpiryAccepted = false;\r\nfunction initiateLoginExpiryProcess() {\r\n const loginExpiryInterval = setInterval(() => {\r\n // const tokenJson = parseJwt();\r\n // const offset = Math.abs(new Date().getTimezoneOffset());\r\n // const offSetDiff = parseInt(tokenJson.toffset / 10000) - offset * 60 * 1000;\r\n // const exp = new Date(tokenJson.exp * 1000 + offSetDiff);\r\n // const timeRemaining = (exp - new Date()) / (1000 * 60);\r\n // console.log(timeRemaining);\r\n let timeRemaining = parseInt(\r\n sessionStorage.getItem(\"isLoginExpiryTimeRemaining\")\r\n );\r\n let isLoginExpiryAccepted = sessionStorage.getItem(\"isLoginExpiryAccepted\");\r\n\r\n timeRemaining -= 5;\r\n sessionStorage.setItem(\"isLoginExpiryTimeRemaining\", timeRemaining);\r\n\r\n if (timeRemaining < 300 && isLoginExpiryAccepted === \"false\") {\r\n showWarning(getMessageForUserLanguage(\"loggOff\"), false, () => {\r\n isLoginExpiryAccepted = true;\r\n sessionStorage.setItem(\"isLoginExpiryAccepted\", true);\r\n });\r\n }\r\n\r\n if (timeRemaining <= 0) {\r\n clearInterval(loginExpiryInterval);\r\n logout();\r\n }\r\n }, 5000);\r\n}\r\n\r\nfunction showLoader(message) {\r\n $(\"body\").append(`\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n `);\r\n\r\n //$(\".loader-container\").show();\r\n if (message) {\r\n $(\".loader-container-eqp .loaderboxes\").css({ top: \"0\" });\r\n $(\".loader-container-eqp .loader-message\").text(message);\r\n } else {\r\n $(\".loader-container-eqp .loaderboxes\").css({ top: \"50px\" });\r\n }\r\n}\r\n\r\nfunction hideLoader() {\r\n $(\".loader-container-eqp\").remove();\r\n $(\".loader-container-eqp .loaderboxes\").css({ top: \"0\" });\r\n}\r\n\r\nfunction logout() {\r\n var user = getUser();\r\n sessionStorage.clear();\r\n\r\n $.ajax({\r\n url: `${__appUrl}/api/authentication/logout`,\r\n async: true,\r\n type: \"GET\",\r\n contentType: \"application/json;charset=UTF-8\",\r\n success: function (response) {\r\n window.location = \"/\";\r\n },\r\n error: function (err) {\r\n const error = getError(err);\r\n showError(error.messages);\r\n\r\n storeUser(user);\r\n },\r\n });\r\n}\r\n\r\nfunction getError(error) {\r\n if (error.status === 401) {\r\n const pageName = $(\".page-name\").text();\r\n return {\r\n messages: `Access denied for ${pageName}.`,\r\n type: \"Un-authorized\",\r\n };\r\n }\r\n\r\n if (error.responseJSON) {\r\n return {\r\n messages: error.responseJSON.errors.join(\"\\n\"),\r\n type: error.responseJSON.type,\r\n };\r\n }\r\n\r\n const errorVal = JSON.parse(error.responseText);\r\n\r\n return {\r\n messages: errorVal.errors.join(\"\\n\"),\r\n type: errorVal.type,\r\n };\r\n}\r\n\r\n// Alert handlers\r\n\r\nfunction showSuccess(message, showCancelBtn = false) {\r\n Swal.fire({\r\n title: getMessageForUserLanguage(\"success\"),\r\n text: message,\r\n icon: \"success\",\r\n confirmButtonText: \"Ok\",\r\n showCancelButton: showCancelBtn,\r\n });\r\n}\r\n\r\nfunction showSuccess(message, showCancelBtn = false, successFunc) {\r\n Swal.fire({\r\n title: getMessageForUserLanguage(\"success\"),\r\n text: message,\r\n icon: \"success\",\r\n confirmButtonText: \"Ok\",\r\n showCancelButton: showCancelBtn,\r\n }).then((result) => {\r\n if (result.isConfirmed && successFunc) {\r\n successFunc();\r\n }\r\n });\r\n}\r\n\r\nfunction showSuccessSurveySubmission(message, successFunc) {\r\n Swal.fire({\r\n title: getMessageForUserLanguage(\"success\"),\r\n text: message,\r\n icon: \"success\",\r\n confirmButtonText: \"Ok\",\r\n showCancelButton: false,\r\n }).then((result) => {\r\n if (successFunc) {\r\n successFunc();\r\n }\r\n });\r\n}\r\n\r\nfunction showError(message, showCancelBtn = false) {\r\n Swal.fire({\r\n title: getMessageForUserLanguage(\"error\"),\r\n text: message,\r\n icon: \"error\",\r\n confirmButtonText: \"Ok\",\r\n showCancelButton: showCancelBtn,\r\n });\r\n}\r\n\r\nfunction showInfo(message, showCancelBtn = false) {\r\n Swal.fire({\r\n title: getMessageForUserLanguage(\"info\"),\r\n text: message,\r\n icon: \"info\",\r\n confirmButtonText: \"Ok\",\r\n showCancelButton: showCancelBtn,\r\n });\r\n}\r\n\r\nfunction showWarning(message, showCancelBtn = false, okFunc, cancelFunction) {\r\n Swal.fire({\r\n title: getMessageForUserLanguage(\"warning\"),\r\n text: message,\r\n icon: \"warning\",\r\n confirmButtonText: \"Ok\",\r\n showCancelButton: showCancelBtn,\r\n }).then((result) => {\r\n if (result.isConfirmed && okFunc) {\r\n okFunc();\r\n } else if (cancelFunction) {\r\n cancelFunction();\r\n }\r\n });\r\n}\r\n\r\nfunction getMessageForUserLanguage(message) {\r\n if (!_userLanguage) {\r\n _userLanguage = \"en\";\r\n }\r\n return _siteMessageTranslations[_userLanguage][message];\r\n}\r\n\r\nfunction toCamelCase(str) {\r\n if (str.toUpperCase() === str) {\r\n return str.toLowerCase();\r\n }\r\n return str.charAt(0).toLowerCase() + str.slice(1);\r\n}\r\n\r\nfunction formateDateForInput(date) {\r\n const d = new Date(date);\r\n const rDate = `${d.getFullYear()}-${formatGetMonth(d)}-${formatGetDate(d)}`;\r\n return rDate;\r\n}\r\n\r\nfunction formatDate(date) {\r\n if (!date) {\r\n return \"\";\r\n }\r\n\r\n const d = new Date(date);\r\n const rDate = `${d.getFullYear()}/${formatGetMonth(d)}/${formatGetDate(d)}`;\r\n return rDate;\r\n}\r\n\r\nfunction formatDateForSurveyForm(date, format = \"dd/MM/yyyy\") {\r\n let formatParts = [];\r\n let dateParts = [];\r\n if (format.includes(\"/\")) {\r\n formatParts = format.split(\"/\");\r\n dateParts = date.split(\" \")[0].split(\"/\");\r\n } else {\r\n formatParts = format.split(\"-\");\r\n dateParts = date.split(\" \")[0].split(\"-\");\r\n }\r\n\r\n const year = dateParts[formatParts.indexOf(\"yyyy\")];\r\n const month = dateParts[formatParts.indexOf(\"MM\")];\r\n const day = dateParts[formatParts.indexOf(\"dd\")];\r\n\r\n return new Date(`${year}/${month}/${day}`).toISOString();\r\n}\r\n\r\nfunction formatDateTimeForSurveyForm(dateTime, format) {\r\n var d = moment(dateTime);\r\n\r\n if (format.includes(\"dd\")) {\r\n format = format.replace(\"dd\", \"DD\");\r\n }\r\n\r\n return d.format(format);\r\n}\r\n\r\nfunction formatGetMonth(d) {\r\n let month = d.getMonth() + 1;\r\n if (month.toString().length > 1) {\r\n return month;\r\n }\r\n\r\n return `0${month}`;\r\n}\r\n\r\nfunction formatGetDate(d) {\r\n let date = d.getDate();\r\n if (date.toString().length > 1) {\r\n return date;\r\n }\r\n\r\n return `0${date}`;\r\n}\r\n\r\nfunction formatDateMonth(date) {\r\n var d = date.split(\"/\");\r\n var rDate = d[1] + \"/\" + d[0] + \"/\" + d[2];\r\n return rDate;\r\n}\r\n\r\nfunction formatTime(dateTime) {\r\n var d = new Date(dateTime);\r\n var rTime =\r\n d.getHours() +\r\n \":\" +\r\n d.getMinutes() +\r\n \":\" +\r\n d.getSeconds() +\r\n \":\" +\r\n d.getMilliseconds();\r\n return rTime;\r\n}\r\n\r\nfunction formatDateTime(dateTime) {\r\n return `${formatDate(dateTime)} ${formatTime(dateTime)}`;\r\n}\r\n\r\nfunction formatHour(dateTime) {\r\n const hour = dateTime.getHours();\r\n\r\n if (hour < 10) {\r\n return `0${hour}`;\r\n }\r\n\r\n return hour;\r\n}\r\n\r\nfunction formatMinute(dateTime) {\r\n const min = dateTime.getMinutes();\r\n\r\n if (min < 10) {\r\n return `0${min}`;\r\n }\r\n\r\n return min;\r\n}\r\n\r\nfunction formatDateTimePicker(date, isForSave, timeZoneOffSet = 0) {\r\n var d = \"\";\r\n var _d = isForSave\r\n ? moment(date).toDate()\r\n : moment(date).add(new Date().getTimezoneOffset(), \"m\").toDate();\r\n if (date) {\r\n if (isForSave) {\r\n d =\r\n _d.getFullYear() +\r\n \"-\" +\r\n (parseInt(_d.getMonth() + 1) < 10\r\n ? \"0\" + parseInt(_d.getMonth() + 1)\r\n : parseInt(_d.getMonth() + 1)) +\r\n \"-\" +\r\n (parseInt(_d.getDate()) < 10 ? \"0\" + _d.getDate() : _d.getDate()) +\r\n \" \" +\r\n _d.getHours() +\r\n \":\" +\r\n _d.getMinutes() +\r\n \":\" +\r\n \"00\";\r\n } else {\r\n d = `${formatGetDate(_d)}/${formatGetMonth(\r\n _d\r\n )}/${_d.getFullYear()} ${formatHour(_d)}:${formatMinute(_d)}`;\r\n }\r\n }\r\n return d;\r\n}\r\n\r\nfunction formatYesNo(value) {\r\n if (value) {\r\n return \"Yes\";\r\n }\r\n\r\n return \"No\";\r\n}\r\n\r\nfunction extractFromYesNo(value) {\r\n if (value === \"Yes\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction formatEnabledDisabled(value) {\r\n if (value) {\r\n return \"Enabled\";\r\n }\r\n\r\n return \"Disabled\";\r\n}\r\n\r\nfunction extractFromEnabledDisabled(value) {\r\n if (value === \"Enabled\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction formatNull(data) {\r\n if (data === null || data === undefined || data === \"null\") {\r\n return \"\";\r\n }\r\n return data;\r\n}\r\n\r\nfunction formatHiddenTableColumn(data, colShown) {\r\n let outputHtml = \"