{"version":3,"sources":["../Areas/Framework/Scripts/utility/labels-utility.js","../Areas/Framework/Scripts/utility/utility.js","../Areas/Framework/Scripts/utility/hotkey-utility.js","../Areas/Framework/Scripts/utility/text-utility.js","../Areas/Framework/Scripts/utility/form-utility.js"],"names":["S_CONTINUE","S_CONFIRMATION","S_CONFIRM_EXIT_DATA_LOST","S_SUCCESS","S_UPLOAD_CANCELLED","S_UPLOAD_ABORTED","S_UPLOAD_RECORDS_SUCCESS","S_SOMETHING_WENT_WRONG","S_GENERATE_MODAL_BILLING","S_DISCLAIMER_AGREE","S_ANY_CHANGES_WONT_AFFECT","S_CONFIRM_UPLOAD","sFileName","S_GENERATE_INITIAL_BILLING","sCompanyName","S_GENERATE_MISC_BILLING","S_POST_ADJUSTMNET_BILLING","S_UPLOAD_FAILED_ROWS","iFailedRowCount","iTotalRowCount","S_UPLOAD_DESCREPANCY_ROWS","S_KEEN_DATATABLE_ERROR","objJqXhr","status","statusText","S_JQUERY_DATATABLE_ERROR","sErrMsg","S_ALLOWED_SERVICES_ONLY","S_ALLOWED_MEMBERS_ONLY","S_CONFIRM_SAVE_FEE","S_SAVE_FEE_SUCCESS","S_CONFIRM_SAVE_PROVIDER_ACCESS","S_SAVE_PROVIDER_ACCESS_SUCCESS","sSaveType","S_ALLOWED_PROVIDERS_ONLY","S_RESTRICTED_PROVIDERS_ONLY","S_APPROVE_CONTRACT_SETUP_SUCCESS","S_RETRIEVE_APPROVAL_CONTRACT_SETUP_SUCCESS","S_FLAG_TEMPLATE_AND_PLAN_AS_APPROVED_SUCCESS","sPlanName","S_FLAG_PLAN_AS_REVIEWED_SUCCESS","S_CONFIRM_SAVE_TEMPLATE_AND_PLAN","S_CONFIRM_SAVE_TEMPLATE_AND_PLAN_SUCCESS","sTemplateType","S_CONFIRM_SAVE_RETAIL_TEMPLATE","S_CONFIRM_UPDATE_RETAIL_TEMPLATE","S_CONFIRM_SAVE_RETAIL_TEMPLATE_SUCCESS","S_CONFIRM_RECREATE_LIMITS","S_RECREATE_LIMITS_SUCCESS","S_CONFIRM_SAVE_SA_INNER_LIMITS","S_SAVE_SA_INNER_LIMITS_SUCCESS","S_CONFIRM_SAVE_INNER_LIMIT","S_SAVE_INNER_LIMIT_SUCCESS","S_CONFIRM_SAVE_OUTER_LIMIT","S_SAVE_OUTER_LIMIT_SUCCESS","S_QUICK_SEARCH_CHAR_LIMIT","S_CONFIRM_GENERATE_MOVEMENT","S_GENERATE_MOVEMENT_SUCCESS","S_CONFIRM_SAVE_SPECIFY_BATCH_NO","S_CONFIRM_SAVE_SPECIFY_BATCH_NO_SUCCESS","S_CONFIRM_SAVE_TOLERANCE_SETTINGS","S_CONFIRM_SAVE_TOLERANCE_SETTINGS_SUCCESS","S_CONFIRM_SAVE_AMOUNT_REASON","S_CONFIRM_SAVE_AMOUNT_REASON_SUCCESS","S_CONFIRM_SAVE_ADJUSTMENT_REASON","S_CONFIRM_SAVE_ADJUSTMENT_SUCCESS","blinkElement","element","delay","fadeOut","fadeIn","objToUrlParam","obj","Object","keys","map","key","join","blockUi","message","KApp","block","overlayColor","opacity","type","state","blockUiNoSpinner","_size","blocknospinner","size","unBlockUi","unblock","openInNewtab","modulecode","restrictioncode","$","post","urlSetter","replace","response","access","window","open","action","controller","swal","openLink","area","toUpperCase","location","getUrlParam","parameter","defaultvalue","urlparameter","href","indexOf","getUrlVars","vars","m","value","setTabIndexes","document","on","attr","each","index","input","tabIndex","htmlEntities","str","String","deepClone","initalObj","finalObj","i","prop","constructor","Array","ResetQueryContainer","QueryContainer","find","val","el","change","initMap","anchorEl","center","lat","long","zoom","Number","google","maps","Map","LatLng","Marker","position","initLeafletMap","L","latLng","provider","tileLayer","attribution","marker","addTo","initEmbeddedGMap","providername","uri","encodeURI","html","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","convertToObject","serializeForm","data","split","toggleShowPassword","btn","css","parent","e","off","addClass","removeClass","toggleClearInput","hiddenInput","initDatatable","dtContainer","KDatatable","destroy","datatable","err","debugError","errMsg","toastr","options","closeButton","debug","newestOnTop","progressBar","positionClass","preventDuplicates","onclick","showDuration","hideDuration","timeOut","extendedTimeOut","showEasing","hideEasing","showMethod","hideMethod","console","toastrError","toastrWarning","hideduration","title","warning","toastrInfo","info","toastrSuccess","msg","success","toastrError_NoAutoHide","toastrInfo_NoAutoHide","clearQuickSearch","container","validator","addMethod","params","end","dateNow","moment","format","setTimeout","proxy","this","optional","isAfter","isSame","start","dateToBeCompared","days","targetMaxDate","add","isBefore","interveningPeriodFrom","interveningPeriodTo","startDate","Date","parse","endDate","enteredDate","parseFloat","valid","param","files","notEqual","trim","length","same","value1","value2","minimumCoverage","maximumCoverage","equalToZero","nelAmount","nmlAmount","ageFromPrin","parseInt","ageToPrin","ageFrom","ageTo","paramAgeTo","paramAgeFromTerm","paramAgeToTerm","paramDayFrom","ageEqualToZero","fromMultiplier","toMultiplier","paramAgeFrom","paramDayTo","fn","extend","trackChanges","form","isChanged","animateCss","animationName","callback","one","putCursorAtEnd","$el","is","focus","setSelectionRange","len","scrollTop","isOnScreen","partial","box","first","getBoundingClientRect","win","height","width","topEdgeInRange","top","bottomEdgeInRange","bottom","leftEdgeInRange","left","rightEdgeInRange","right","coverScreenHorizontally","coverScreenVertically","topEdgeInScreen","bottomEdgeInScreen","leftEdgeInScreen","rightEdgeInScreen","expr","filters","onscreen","elem","entireonscreen","navigator","sendBeacon","url","client","XMLHttpRequest","setRequestHeader","send","formUtil","massConvertFormatToCurrency","arrCurrencyProperty","hasOwnProperty","formatToCurrency","resetSaveForm","saveForm","_validated","trigger","rbGroup","cb","next","select","selectpicker","hasClass","resetForm","errorElements","validate","_this","_validatedForm","errorElement","errorClass","rules","custom","ignore","messages","errorPlacement","unhighlight","submitHandler","undefined","successMessage","customValidations","ajaxSave","parents","preSave","_type","_url","_data","serialize","ajax","done","textStatus","xhr","saveSuccessCallback","isTwoSubmit","submitType","Error","dataTable","reload","HTMLElement","status_code","reason","fail","always","fillFormData","dateArray","inputTypes","includes","convertDateMMDDYYYY","datepicker","updateCheckBoxValue","n","currentTarget","v","fixTabindex","selectTextOnFocus","getFirstInput","listInput","validateElement","strElSelecter","setMultiSelectCorrectOrder","selectElement","clickedIndex","isSelected","arrSelectedOptions","children","filter","arrSelectedOrder","arrSelectedValue","push","a","item","SwalYesNo","objOptions","confirmFunction","denyFunction","text","showCancelButton","confirmButtonText","cancelButtonText","reverseButtons","allowOutsideClick","allowEscapeKey","allowEnterKey","then","res","SwalYes","customContainerClass","delayExec","ms","swalConfirm","swalInfo","swalConfirmYes","ApiErrorException","errorMsg","Message","error_description","popOverUpdate","shownPopover","popover","FocusOnLastRowOnModalHide","onLastCell","stored","lastRow","lastRowIndex","lastCell","lastCellIndex","distinctProp","focusOnLastRow","openedModals","modal","getLastRowAndFocus","suspectedRow","getDistinctProperty","target","cell","row","preventBlurEventIfSameLastValue","$inputs","lastValue","stopImmediatePropagation","truncateLongText","truncateText","getDecimal","nFloat","Math","floor","PasswordToggler","formGroup","checkBox","prepend","click","inputExceeded","s","append","remove","MemberTypeToolTip","arrMemberType","apiCallBack","makeTooltip","arrData","sHtml","membertype","description","htmlTooltip","tooltip","getJSON","classorder","CustomPopOver","selector","defaults","minWidth","maxHeight","header","spinner","setDefaults","content","onShownEvent","onHiddenEvent","async","onClickEvent","validateShow","setLedgerHotKeys","fulldirect","elFocused","activeElement","elFocusedRow","closest","dTable","ledgerID","dataTableID","datafield","indexField","prevrow","prev","prevtel","nextrow","nextel","modalID","ctrlKey","which","preventDefault","_newFocus","onCtrlG","log","elPrev","elNext","elModal","toString","openmodal","openmodals","eq","onEnter","prevAll","onUp","onDown","setQueryHotKeys","elContainer","searchContainer","onCtrlA","onF6","onF9","onF7","onF8","SetFormIndexHotKey","override","nextInput","SetFormHotkey","listFormInputs","prev_index","firstInputEvent","firstinput","proceedToNextElement","getNextVisibleInput","altKey","onI","onEsc","savebutton","savecontinuebutton","onF11","onF12","id","currentInput","shiftKey","SetModalHotkeys","dataNullOrEmpty","string","dataNullOrEmptyV2","dataNullOrEmptyV3","stringToParseFloat","replaceStringIfMatch","match","number","fixedNumber","toFixed","formattedNumber","formatToCurrencyNoRounding","formatToCurrencyFourDecimalPlaces","numParts","formatToDecimalPlaces","decimal","formatToDecimalNoRounding","formatToNumber","roundOff","decimals","toSentenceCase","toLowerCase","validateEmail","test","setValueIfNull","newvalue","fields","ex","setValueIf","oldvalue","returnValueIf","compareto","tinFormat","field","num","substring","replaceDoubleQuotes","padZeroes","padLeft","substr","truncate","useWordBoundary","subString","lastIndexOf","htmlDecode","removeCommas","nullToStringDefault","capitalizedString","toCapitalCasing","removeSpecialChars","getProviderAddress","address","streetaddress","cityname","provincename","exception","getCompleteAddress","convertPoundsToKilo","pounds","isNaN","kilo","round","convertKiloToPounds","convertFeetToMeter","feet","inches","meter","convertMeterToFeet","ordinalSuffixOf","j","k","selectionStart","selectionEnd","createTextRange","range","collapse","moveEnd","moveStart","setCaretToPos","pos","getFlooredFixed","d","pow","DOMParser","parseFromString","documentElement","textContent","prototype","txt","charAt","isEmptyThen","stringDefault","addSlashes","fillup_form","values","disablefields","placeholder","withplaceholder","_element","_elementtype","elementtpye","_datatype","datatype","_callback","fillupformbyname","dateFields","currencyFields","timefields","selectFields","numberFields","elInput","dataValue","dataKey","tagName","sKey","forEach","fillUpForm","ckey"],"mappings":"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","file":"signin.index.min.js","sourcesContent":["let S_CONTINUE = `Do you want to continue?`;\r\nlet S_CONFIRMATION = `Confirmation`;\r\nlet S_CONFIRM_EXIT_DATA_LOST = `Are you sure you want to exit? All details entered will be lost.`;\r\nlet S_SUCCESS = `Success!`;\r\nlet S_UPLOAD_CANCELLED = `Upload has been Cancelled`;\r\nlet S_UPLOAD_ABORTED = `Upload has been aborted`;\r\nlet S_UPLOAD_RECORDS_SUCCESS = `All records has been uploaded successfully.`;\r\nlet S_SOMETHING_WENT_WRONG = `Something went wrong. Please try again.`;\r\nlet S_GENERATE_MODAL_BILLING = `Are you sure you want to generate a Modal Billing for the selected Cutoff?`;\r\nlet S_DISCLAIMER_AGREE = `Please read and agree with the above disclaimer.`;\r\nlet S_ANY_CHANGES_WONT_AFFECT = `Please take note that any changes that will made on this document will not affect the original content of the MAS record.`;\r\n\r\nlet S_CONFIRM_UPLOAD = function (sFileName = '') { return `You are about to upload ${sFileName}`; };\r\nlet S_GENERATE_INITIAL_BILLING = function (sCompanyName = '') { return `Are you sure you want to create Initial billing for ${sCompanyName} ?`; };\r\nlet S_GENERATE_MISC_BILLING = function (sCompanyName = '') { return `Are you sure you want to create Miscellaneous billing for ${sCompanyName} ?`; };\r\nlet S_POST_ADJUSTMNET_BILLING = function (sCompanyName = '') { return `Are you sure you want to post Adjustment for ${sCompanyName}?`; };\r\nlet S_UPLOAD_FAILED_ROWS = function (iFailedRowCount = 0, iTotalRowCount = 0) { return `${iFailedRowCount} / ${iTotalRowCount} records failed.`; };\r\nlet S_UPLOAD_DESCREPANCY_ROWS = function (iFailedRowCount = 0, iTotalRowCount = 0) { return `${iFailedRowCount} / ${iTotalRowCount} records failed.`; };\r\n\r\nlet S_KEEN_DATATABLE_ERROR = function (objJqXhr = { status: '', statusText: '' }) { return `An error has been reported by KDataTables: ${objJqXhr.status} ${objJqXhr.statusText}.`; };\r\nlet S_JQUERY_DATATABLE_ERROR = function (sErrMsg = '') { return `An error has been reported by DataTables: ${sErrMsg}.`; };\r\n\r\n// Benefit Template / Plan Labels\r\nlet S_ALLOWED_SERVICES_ONLY = `Selected applicable service are greater than the covered services from the benefit plan, attempt to add/change applicable services is denied.`;\r\nlet S_ALLOWED_MEMBERS_ONLY = `Selected member types are greater than the benefit plan's member types. Attempt to add/change member type is denied.`;\r\n\r\nlet S_CONFIRM_SAVE_FEE = `Are you sure you want to save this fee?`;\r\nlet S_SAVE_FEE_SUCCESS = `Your fee has been saved.`;\r\n\r\nlet S_CONFIRM_SAVE_PROVIDER_ACCESS = `Are you sure you want to save this provider access?`;\r\nlet S_SAVE_PROVIDER_ACCESS_SUCCESS = function (sSaveType = '') { return sSaveType === 'CREATE' ? `Sucessfully added Provider to the list.` : `Sucessfully updated the Provider Access.` };\r\nlet S_ALLOWED_PROVIDERS_ONLY = `The system detected that this plan already have Allowed Providers, adding restricted providers will not be allowed.`;\r\nlet S_RESTRICTED_PROVIDERS_ONLY = `The system detected that this plan already have Restricted Providers, adding allowed providers will not be allowed.`;\r\n\r\nlet S_APPROVE_CONTRACT_SETUP_SUCCESS = `The Selected Contract Setup has been successfully Approved.`;\r\nlet S_RETRIEVE_APPROVAL_CONTRACT_SETUP_SUCCESS = `The Selected Contract Setup has been Retrieved for Approval Successfully.`;\r\nlet S_FLAG_TEMPLATE_AND_PLAN_AS_APPROVED_SUCCESS = function (sPlanName = '') { return `${sPlanName} is now tagged as Approved.`; };\r\nlet S_FLAG_PLAN_AS_REVIEWED_SUCCESS = function (sPlanName = '') { return `${sPlanName} is now tagged as Reviewed.`; };\r\n\r\nlet S_CONFIRM_SAVE_TEMPLATE_AND_PLAN = function (sSaveType = '') { return sSaveType === 'CREATE' ? `Are you sure you want to create this Benefit Plan?` : sSaveType === 'UPDATE' ? `Are you sure you want to update this Benefit Plan?` : `Are you sure you want to amend this Benefit Plan?`; };\r\nlet S_CONFIRM_SAVE_TEMPLATE_AND_PLAN_SUCCESS = function (sTemplateType = '') { return sTemplateType === 'PER_COMPANY' ? `Successfully saved Benefit Plan.` : `Your benefit plan template has been saved!`; };\r\nlet S_CONFIRM_SAVE_RETAIL_TEMPLATE = `Are you sure you want to save this benefit plan template?`;\r\nlet S_CONFIRM_UPDATE_RETAIL_TEMPLATE = `Are you sure to save changes on this benefit plan template?`;\r\nlet S_CONFIRM_SAVE_RETAIL_TEMPLATE_SUCCESS = `Your benefit plan template has been saved!`;\r\n\r\nlet S_CONFIRM_RECREATE_LIMITS = `Are you sure you want to recreate these limits?`;\r\nlet S_RECREATE_LIMITS_SUCCESS = `Limits successfully recreated!`;\r\n\r\nlet S_CONFIRM_SAVE_SA_INNER_LIMITS = `Are you sure you want to save these SA inner limits?`;\r\nlet S_SAVE_SA_INNER_LIMITS_SUCCESS = `Your selected SA inner limits has been successfully saved.`;\r\n\r\nlet S_CONFIRM_SAVE_INNER_LIMIT = `Are you sure you want to save this inner limit?`;\r\nlet S_SAVE_INNER_LIMIT_SUCCESS = `Your inner limit setup has been saved successfully.`;\r\n\r\nlet S_CONFIRM_SAVE_OUTER_LIMIT = `Are you sure you want to save these outer limits?`;\r\nlet S_SAVE_OUTER_LIMIT_SUCCESS = `Your outer limits has been updated!`;\r\n// Benefit Template / Plan Labels\r\n\r\n// Quick Search Labels\r\nlet S_QUICK_SEARCH_CHAR_LIMIT = `For optimized search results, please enter at least 4 characters on your search query.`;\r\n// Quick Search Labels\r\n\r\n// Telemedicine Movement Labels\r\nlet S_CONFIRM_GENERATE_MOVEMENT = `Are you sure you want to generate telemedicine movement?`;\r\nlet S_GENERATE_MOVEMENT_SUCCESS = `Telemedicine movement succesfully generated.`;\r\n// Telemedicine Movement Labels\r\n\r\n// WebKit Amendment Labels\r\nlet S_CONFIRM_SAVE_SPECIFY_BATCH_NO = `Are you sure you want to specify this batch number?`;\r\nlet S_CONFIRM_SAVE_SPECIFY_BATCH_NO_SUCCESS = `The batch number was successfully specified.`;\r\n// WebKit Amendment Labels\r\n\r\n// Payment Settings Labels\r\nlet S_CONFIRM_SAVE_TOLERANCE_SETTINGS = `Are you sure you want to save this tolerance settings?`;\r\nlet S_CONFIRM_SAVE_TOLERANCE_SETTINGS_SUCCESS = `The tolerance settings was successfully saved.`;\r\n\r\nlet S_CONFIRM_SAVE_AMOUNT_REASON = `Are you sure you want to save this amount reason?`;\r\nlet S_CONFIRM_SAVE_AMOUNT_REASON_SUCCESS = `The amount reason was successfully saved.`;\r\n\r\nlet S_CONFIRM_SAVE_ADJUSTMENT_REASON = `Are you sure you want to save this adjustment reason?`;\r\nlet S_CONFIRM_SAVE_ADJUSTMENT_SUCCESS = `The adjustment reason was successfully saved.`;\r\n// Payment Settings Labels","\"use strict\"\r\n\r\n///TESTING FOR BRANCH////\r\n//////////////////////////\r\n\r\nfunction blinkElement(element) {\r\n element.delay(100).fadeOut().fadeIn('slow')\r\n}\r\n\r\nfunction objToUrlParam(obj) {\r\n let s = Object.keys(obj).map(function (key) {\r\n return key + '=' + obj[key];\r\n }).join('&');\r\n\r\n return s;\r\n}\r\n\r\nfunction blockUi(element, message = \"Loading...\") {\r\n KApp.block(element, {\r\n overlayColor: \"#000000\",\r\n opacity: 0,\r\n type: \"v2\",\r\n state: \"brand\",\r\n message: message\r\n });\r\n}\r\n\r\nfunction blockUiNoSpinner(element, message = \"Loading...\", _size = 'lg') {\r\n KApp.blocknospinner(element, {\r\n overlayColor: \"#000000\",\r\n type: \"v2\",\r\n state: \"brand\",\r\n message: message,\r\n size: _size\r\n });\r\n}\r\n\r\nfunction unBlockUi(element) {\r\n KApp.unblock(element);\r\n}\r\n\r\nfunction openInNewtab(element, modulecode = \"\", restrictioncode = \"\") {\r\n $.post(\r\n urlSetter.replace('Action', 'user-checkrestriction').replace('Controller', 'useraccess').replace('Controller', 'framework'),\r\n {\r\n modulecode: modulecode,\r\n restrictioncode: restrictioncode\r\n },\r\n function (response) {\r\n\r\n if (response.access === true) {\r\n window.open(urlSetter.replace('Action', action).replace('Controller', controller), '_blank');\r\n } else {\r\n swal(\r\n 'System Warning',\r\n response.message,\r\n 'warning'\r\n );\r\n }\r\n }\r\n );\r\n}\r\n\r\nfunction openLink(action = '', controller = '', area = '', modulecode = '', restrictioncode = '') {\r\n $('#divLoadPage').fadeIn('slow', function () {\r\n\r\n if (modulecode !== \"\" && restrictioncode !== \"\") {\r\n $.post(\r\n urlSetter.replace('Action', 'user-checkrestriction').replace('Controller', 'useraccess').replace('Area', 'framework'),\r\n {\r\n modulecode: modulecode,\r\n restrictioncode: restrictioncode\r\n },\r\n function (response) {\r\n\r\n if (response.access === true) {\r\n if (area[0].toUpperCase() === area[0]) {\r\n window.location.replace(`/${area}/${controller}/${action}`);\r\n } else {\r\n window.location.replace(urlSetter.replace('Action', action).replace('Controller', controller).replace('Area', area));\r\n }\r\n } else {\r\n swal(\r\n 'Restricted Access',\r\n response.message,\r\n 'warning'\r\n );\r\n $('#divLoadPage').fadeOut();\r\n }\r\n }\r\n );\r\n } else {\r\n if (area[0].toUpperCase() === area[0]) {\r\n window.location.replace(`/${area}/${controller}/${action}`);\r\n } else {\r\n window.location.replace(urlSetter.replace('Action', action).replace('Controller', controller).replace('Area', area));\r\n }\r\n }\r\n\r\n });\r\n\r\n}\r\n\r\nfunction getUrlParam(parameter, defaultvalue) {\r\n let urlparameter = defaultvalue;\r\n if (window.location.href.indexOf(parameter) > -1) {\r\n urlparameter = getUrlVars()[parameter];\r\n }\r\n return urlparameter;\r\n}\r\n\r\nfunction getUrlVars() {\r\n let vars = {};\r\n let parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\r\n vars[key] = value;\r\n });\r\n return vars;\r\n}\r\n\r\nfunction setTabIndexes() {\r\n // On the open of Modal window\r\n //Updating the tabindex value to another attribute and make the tabindex =-1 which is the background\r\n $(document).on('open', '.remodal', function () {\r\n $('input').attr('tabindex', \"-1\");\r\n $('.modal-form input').each(function (index, input) {\r\n input.tabIndex = index + 1;\r\n });\r\n });\r\n\r\n $(document).on('close', '.remodal', function () {\r\n $('input').each(function (index, input) {\r\n input.tabIndex = index + 1;\r\n });\r\n });\r\n}\r\n\r\n$.validator.addMethod('notEarlyThanDateToday', function (value, element, params) {\r\n // if end date is valid, validate it as well\r\n let end = $(params);\r\n let dateNow = moment().format('MM/DD/YYYY');\r\n if (!end.data('validation.running')) {\r\n $(element).data('validation.running', true);\r\n // The validator internally keeps track of which element is being validated currently. This ensures that validating 'end' will not trample 'start'\r\n // see http://stackoverflow.com/questions/22107742/jquery-validation-date-range-issue\r\n setTimeout($.proxy(\r\n\r\n function () {\r\n this.element(end);\r\n }, this), 0);\r\n // Ensure clearing the 'flag' happens after the validation of 'end' to prevent endless looping\r\n setTimeout(function () {\r\n $(element).data('validation.running', false);\r\n }, 0);\r\n }\r\n return this.optional(element) || this.optional(end[0]) || moment(value).isAfter(moment(dateNow)) || moment(value).isSame(moment(dateNow));\r\n}, 'Must not be before date today');\r\n\r\n$.validator.addMethod('notEarlyThanDateFrom', function (value, element, params) {\r\n // if start date is valid, validate it as well\r\n let start = $(params);\r\n if (!start.data('validation.running')) {\r\n $(element).data('validation.running', true);\r\n setTimeout($.proxy(\r\n\r\n function () {\r\n this.element(start);\r\n }, this), 0);\r\n setTimeout(function () {\r\n $(element).data('validation.running', false);\r\n }, 0);\r\n }\r\n return this.optional(element) || this.optional(start[0]) || moment(value).isAfter(moment(start.val()));\r\n}, 'Must be after corresponding start date');\r\n\r\n$.validator.addMethod('notMoreThanDate', function (value, element, params) {\r\n let dateToBeCompared = params[0];\r\n let days = params[1];\r\n let targetMaxDate = moment(dateToBeCompared).add(days, 'd').format('MM/DD/YYYY');\r\n return moment(value).isBefore(moment(targetMaxDate)) || moment(value).isSame(moment(targetMaxDate));\r\n}, 'Must not be more than date compared');\r\n\r\n$.validator.addMethod('interveningPeriod', function (value, element, params) {\r\n let interveningPeriodFrom = $(params).val();\r\n let interveningPeriodTo = value;\r\n return this.optional(element) || interveningPeriodTo <= 90 && interveningPeriodFrom >= 0;\r\n}, 'Intervening Period should range from 0 day up to 90 days only.');\r\n\r\n// Add Custom Date Range Validation \r\n$.validator.addMethod('daterange', function (value, element, parameter) {\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n let startDate = Date.parse('01/01/1900'),\r\n endDate = Date.parse(new Date()),\r\n enteredDate = Date.parse(value);\r\n return ((startDate <= enteredDate) && (enteredDate <= endDate));\r\n}, \"Please specify a valid date.\");\r\n\r\nfunction htmlEntities(str) {\r\n return String(str).replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"');\r\n}\r\n\r\n// amountOptional\r\n$.validator.addMethod(\"amountOptional\", function (value, element, params) {\r\n element = $(element);\r\n if (element.val() !== \"\" && parseFloat(element.val()) !== 0.00) {\r\n let valid = false;\r\n value = parseFloat(value);\r\n if (value >= params[0] && value <= params[1]) {\r\n valid = true;\r\n }\r\n return valid;\r\n } else {\r\n return true;\r\n }\r\n}, \"Please enter an amount between {0} and {1}\");\r\n\r\n$.validator.addMethod('filesize', function (value, element, param) {\r\n // param = size (en bytes) \r\n // element = element to validate ()\r\n // value = value of the element (file name)\r\n return this.optional(element || element.files[0].size <= param);\r\n}, 'File exceeded upload limit.');\r\n\r\n$.validator.addMethod(\"notEqualTo\", function (value, element, param) {\r\n let notEqual = true;\r\n value = $.trim(value);\r\n\r\n if (param instanceof Array) {\r\n for (i = 0; i < param.length; i++) {\r\n if (value === $.trim($(param[i]).val())) {\r\n notEqual = false;\r\n }\r\n }\r\n }\r\n else if (typeof param == \"function\") {\r\n let compareValueWith = param();\r\n if (compareValueWith.toUpperCase() === value.toUpperCase()) {\r\n notEqual = false;\r\n }\r\n }\r\n else if (typeof param == \"string\") {\r\n if (value.toUpperCase() === $.trim(param).toUpperCase()) {\r\n notEqual = false;\r\n }\r\n }\r\n else {\r\n if (value.toUpperCase() === $.trim($(param).val()).toUpperCase()) {\r\n notEqual = false;\r\n }\r\n }\r\n\r\n return this.optional(element) || notEqual;\r\n}, \"Please enter a different value.\");\r\n\r\n$.validator.addMethod(\"sameWith\", function (value, element, param) {\r\n let same = true;\r\n value = $.trim(value);\r\n\r\n //if (param instanceof Array) {\r\n // for (i = 0; i < param.length; i++) {\r\n // if (value !== $.trim($(param[i]).val())) {\r\n // same = false;\r\n // }\r\n // }\r\n //}\r\n //else if (typeof param == \"function\") {\r\n // let compareValueWith = param();\r\n // if (compareValueWith !== value) {\r\n // same = false;\r\n // }\r\n //}\r\n //else if (typeof param == \"string\") {\r\n // if (value !== $.trim(param)) {\r\n // same = false;\r\n // }\r\n //}\r\n //else {\r\n // if (value !== $.trim($(param).val())) {\r\n // same = false;\r\n // }\r\n //}\r\n\r\n if (value !== $.trim(param)) {\r\n same = false;\r\n }\r\n\r\n //return this.optional(element) || same;\r\n return same;\r\n}, \"Please enter a different value.\");\r\n\r\n$.validator.addMethod('uwFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Underweight From lesser than Underweight To');\r\n\r\n$.validator.addMethod('uwTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value1 > value2;\r\n}, 'Please specify Underweight To greater than Underweight From');\r\n\r\n$.validator.addMethod('uwFromVSnFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Underweight From lesser than the Normal weight');\r\n\r\n$.validator.addMethod('uwFromVSowFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Underweight From lesser than the Overweight');\r\n\r\n$.validator.addMethod('uwFromVSobese', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Underweight From lesser than the Obese weight');\r\n\r\n$.validator.addMethod('nFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Normal From lesser than Normal To');\r\n\r\n$.validator.addMethod('nTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value1 > value2;\r\n}, 'Please specify Normal To greater than Normal From');\r\n\r\n$.validator.addMethod('nFromVSuwFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 < value1;\r\n}, 'Please specify Normal Weight From greater than the Underweight');\r\n\r\n$.validator.addMethod('nFromVSowFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Normal Weight From lesser than the Overweight');\r\n\r\n$.validator.addMethod('nFromVSobese', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Normal Weight From lesser than the Obese weight');\r\n\r\n$.validator.addMethod('owFrom', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Overweight From lesser than Overweight To');\r\n\r\n$.validator.addMethod('owTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value1 > value2;\r\n}, 'Please specify Overweight To greater than Overweight From');\r\n\r\n$.validator.addMethod('owFromVSuwTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 < value1;\r\n}, 'Please specify Overweight From greater than the Underweight');\r\n\r\n$.validator.addMethod('owFromVSnTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 < value1;\r\n}, 'Please specify Overweight From greater than the Normal weight');\r\n\r\n$.validator.addMethod('owFromVSobese', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 > value1;\r\n}, 'Please specify Overweight From lesser than the Obese weight');\r\n\r\n$.validator.addMethod('obeseVSuwTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 < value1;\r\n}, 'Please specify Obese weight greater than the Underweight');\r\n\r\n$.validator.addMethod('obeseVSnTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 < value1;\r\n}, 'Please specify Obese weight greater than the Normal weight');\r\n\r\n$.validator.addMethod('obeseVSowTo', function (value, element, param) {\r\n let value1 = parseFloat(value);\r\n let value2 = parseFloat($(param).val());\r\n\r\n return this.optional(element) || value2 < value1;\r\n}, 'Please specify Obese weight greater than the Overweight');\r\n\r\n$.validator.addMethod('minimumCoverage', function (value, element, param) {\r\n let minimumCoverage = value === '' ? 0 : parseFloat(value.replace(',', ''));\r\n let maximumCoverage = parseFloat($(param).val().replace(',', ''));\r\n let equalToZero = false;\r\n\r\n if (minimumCoverage === 0 && maximumCoverage === 0) {\r\n equalToZero = true;\r\n } else {\r\n equalToZero = false;\r\n }\r\n\r\n return this.optional(element) || maximumCoverage > minimumCoverage || equalToZero;\r\n}, 'Minimum Coverage should not exceed Maximum Coverage.');\r\n\r\n$.validator.addMethod('maximumCoverage', function (value, element, param) {\r\n let maximumCoverage = value === '' ? 0 : parseFloat(value.replace(',', ''));\r\n let minimumCoverage = parseFloat($(param).val().replace(',', ''));\r\n let equalToZero = false;\r\n\r\n if (minimumCoverage === 0 && maximumCoverage === 0) {\r\n equalToZero = true;\r\n } else {\r\n equalToZero = false;\r\n }\r\n\r\n return this.optional(element) || minimumCoverage < maximumCoverage || equalToZero;\r\n}, 'Maximum Coverage should not be less than Minimum Coverage.');\r\n\r\n$.validator.addMethod('nmlAmount', function (value, element, param) {\r\n let nelAmount = parseFloat($(param).val().replace(',', ''));\r\n let nmlAmount = parseFloat(value.replace(',', ''));\r\n let equalToZero = false;\r\n\r\n if (nmlAmount === 0) {\r\n equalToZero = true;\r\n } else {\r\n equalToZero = false;\r\n }\r\n\r\n return this.optional(element) || nmlAmount > nelAmount || equalToZero;\r\n}, 'NML Amount must be larger than NEL Amount.')\r\n\r\n$.validator.addMethod('ageFrom', function (value, element, param) {\r\n let ageFromPrin = value === '' ? 0 : parseInt(value);\r\n let ageToPrin = parseInt($(param).val());\r\n let equalToZero = true;\r\n\r\n if (ageFromPrin === 0 && ageToPrin === 0) {\r\n equalToZero = true;\r\n } else {\r\n equalToZero = false;\r\n }\r\n\r\n return this.optional(element) || ageFromPrin < ageToPrin || equalToZero;\r\n}, 'Invalid Age Range (Age From)');\r\n\r\n$.validator.addMethod('ageTo', function (value, element, param) {\r\n let ageToPrin = value === '' ? 0 : parseInt(value);\r\n let ageFromPrin = parseInt($(param).val());\r\n let equalToZero = true;\r\n\r\n if (ageFromPrin === 0 && ageToPrin === 0) {\r\n equalToZero = true;\r\n } else {\r\n equalToZero = false;\r\n }\r\n\r\n return this.optional(element) || ageToPrin > ageFromPrin || equalToZero;\r\n}, 'Invalid Age Range (Age To)');\r\n\r\n$.validator.addMethod('ageFromTerm', function (value, element, param) {\r\n let ageFrom = 0;\r\n let ageTo = 0;\r\n let paramAgeTo = param[0];\r\n let paramAgeFromTerm = param[1];\r\n let paramAgeToTerm = param[2];\r\n let paramDayFrom = param[3];\r\n let ageEqualToZero = false;\r\n\r\n let fromMultiplier = 0;\r\n switch (parseInt(paramAgeFromTerm.val())) {\r\n case 1: fromMultiplier = 1; break;\r\n case 2: fromMultiplier = 7; break;\r\n case 3: fromMultiplier = 31; break;\r\n case 4: fromMultiplier = 365; break;\r\n }\r\n\r\n let toMultiplier = 0;\r\n switch (parseInt(paramAgeToTerm.val())) {\r\n case 1: toMultiplier = 1; break;\r\n case 2: toMultiplier = 7; break;\r\n case 3: toMultiplier = 31; break;\r\n case 4: toMultiplier = 365; break;\r\n }\r\n\r\n if (parseInt(paramAgeFromTerm.val()) === 1) {\r\n value = value === '' ? 0 : parseInt(value);\r\n ageFrom = value\r\n } else {\r\n value = value === '' ? 0 : parseInt(value);\r\n ageFrom = value * fromMultiplier;\r\n }\r\n\r\n if (parseInt(paramAgeToTerm.val()) === 1) {\r\n ageTo = parseInt(paramAgeTo.val());\r\n } else {\r\n ageTo = parseInt(paramAgeTo.val()) * toMultiplier;\r\n }\r\n\r\n if (ageFrom === 0 && ageTo === 0) {\r\n ageEqualToZero = true;\r\n } else {\r\n ageEqualToZero = false;\r\n }\r\n\r\n paramDayFrom.val(ageFrom);\r\n\r\n return this.optional(element) || ageTo > ageFrom || ageFrom < ageTo || ageEqualToZero;\r\n}, 'Invalid Age Range (Age From)');\r\n\r\n$.validator.addMethod('ageToTerm', function (value, element, param) {\r\n let ageFrom = 0;\r\n let ageTo = 0;\r\n let paramAgeFrom = param[0];\r\n let paramAgeFromTerm = param[1];\r\n let paramAgeToTerm = param[2];\r\n let paramDayTo = param[3];\r\n let ageEqualToZero = false;\r\n\r\n let fromMultiplier = 0;\r\n switch (parseInt(paramAgeFromTerm.val())) {\r\n case 1: fromMultiplier = 1; break;\r\n case 2: fromMultiplier = 7; break;\r\n case 3: fromMultiplier = 31; break;\r\n case 4: fromMultiplier = 365; break;\r\n }\r\n\r\n let toMultiplier = 0;\r\n switch (parseInt(paramAgeToTerm.val())) {\r\n case 1: toMultiplier = 1; break;\r\n case 2: toMultiplier = 7; break;\r\n case 3: toMultiplier = 31; break;\r\n case 4: toMultiplier = 365; break;\r\n }\r\n\r\n if (parseInt(paramAgeFromTerm.val()) === 1) {\r\n ageFrom = parseInt(paramAgeFrom.val());\r\n } else {\r\n ageFrom = parseInt(paramAgeFrom.val()) * fromMultiplier;\r\n }\r\n\r\n if (parseInt(paramAgeToTerm.val()) === 1) {\r\n value = value === '' ? 0 : parseInt(value);\r\n ageTo = value\r\n } else {\r\n value = value === '' ? 0 : parseInt(value);\r\n ageTo = value * toMultiplier;\r\n }\r\n\r\n if (ageFrom === 0 && ageTo === 0) {\r\n ageEqualToZero = true;\r\n } else {\r\n ageEqualToZero = false;\r\n }\r\n\r\n paramDayTo.val(ageTo);\r\n\r\n return this.optional(element) || ageFrom < ageTo || ageTo > ageFrom || ageEqualToZero;\r\n}, 'Invalid Age Range (Age To)');\r\n\r\n$.validator.addMethod('valueNotEqualTo', function (value, element, param) {\r\n return this.optional(element) || param !== value;\r\n}, 'Please specify the Parameter')\r\n\r\n$.validator.addMethod(\"isObjectNull\", function (value, element, param) {\r\n\r\n if (param) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n}, \"Object is null\")\r\n\r\n$.validator.addMethod(\"custom\", function (value, element, param) {\r\n\r\n if (param) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n}, \"\")\r\n\r\n$.validator.addMethod('greaterThan', function (value, el, param) {\r\n return value > param;\r\n}, \"\");\r\n\r\n// Return true if form has changed, else false.\r\n$.fn.extend({\r\n trackChanges: function () {\r\n $(\":input\", this).on('input', function () {\r\n $(this.form).attr(\"data-changed\", true);\r\n });\r\n\r\n $(\".selectpicker\", this).on('changed.bs.select', function () {\r\n $(this.form).attr(\"data-changed\", true);\r\n });\r\n }\r\n ,\r\n isChanged: function () {\r\n return this.attr(\"data-changed\") === 'true' ? true : false;\r\n }\r\n});\r\n\r\n$.fn.extend({\r\n animateCss: function (animationName, callback) {\r\n let animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';\r\n this.addClass('animated ' + animationName).one(animationEnd, function () {\r\n let element = $(this);\r\n element.removeClass('animated ' + animationName);\r\n if (callback && typeof callback === 'function') callback(element);\r\n });\r\n }\r\n});\r\n\r\n$.fn.putCursorAtEnd = function () {\r\n return this.each(function () {\r\n // Cache references\r\n let $el = $(this),\r\n el = this;\r\n\r\n // Only focus if input isn't already\r\n if (!$el.is(\":focus\")) {\r\n $el.focus();\r\n }\r\n // If this function exists... (IE 9+)\r\n if (el.setSelectionRange) {\r\n\r\n // Double the length because Opera is inconsistent about whether a carriage return is one character or two.\r\n let len = $el.val().length * 2;\r\n\r\n // Timeout seems to be required for Blink\r\n setTimeout(function () {\r\n el.setSelectionRange(len, len);\r\n }, 1);\r\n\r\n } else {\r\n // As a fallback, replace the contents with itself\r\n // Doesn't work in Chrome, but Chrome supports setSelectionRange\r\n $el.val($el.val());\r\n }\r\n\r\n // Scroll to the bottom, in case we're in a tall textarea\r\n // (Necessary for Firefox and Chrome)\r\n this.scrollTop = 999999;\r\n });\r\n};\r\n\r\n$.fn.isOnScreen = function (partial) {\r\n\r\n //let's be sure we're checking only one element (in case function is called on set)\r\n var t = $(this).first();\r\n\r\n //we're using getBoundingClientRect to get position of element relative to viewport\r\n //so we dont need to care about scroll position\r\n var box = t[0].getBoundingClientRect();\r\n\r\n //let's save window size\r\n var win = {\r\n h: $(window).height(),\r\n w: $(window).width()\r\n };\r\n\r\n //now we check against edges of element\r\n\r\n //firstly we check one axis\r\n //for example we check if left edge of element is between left and right edge of scree (still might be above/below)\r\n var topEdgeInRange = box.top >= 0 && box.top <= win.h;\r\n var bottomEdgeInRange = box.bottom >= 0 && box.bottom <= win.h;\r\n\r\n var leftEdgeInRange = box.left >= 0 && box.left <= win.w;\r\n var rightEdgeInRange = box.right >= 0 && box.right <= win.w;\r\n\r\n\r\n //here we check if element is bigger then window and 'covers' the screen in given axis\r\n var coverScreenHorizontally = box.left <= 0 && box.right >= win.w;\r\n var coverScreenVertically = box.top <= 0 && box.bottom >= win.h;\r\n\r\n //now we check 2nd axis\r\n var topEdgeInScreen = topEdgeInRange && (leftEdgeInRange || rightEdgeInRange || coverScreenHorizontally);\r\n var bottomEdgeInScreen = bottomEdgeInRange && (leftEdgeInRange || rightEdgeInRange || coverScreenHorizontally);\r\n\r\n var leftEdgeInScreen = leftEdgeInRange && (topEdgeInRange || bottomEdgeInRange || coverScreenVertically);\r\n var rightEdgeInScreen = rightEdgeInRange && (topEdgeInRange || bottomEdgeInRange || coverScreenVertically);\r\n\r\n //now knowing presence of each edge on screen, we check if element is partially or entirely present on screen\r\n var isPartiallyOnScreen = topEdgeInScreen || bottomEdgeInScreen || leftEdgeInScreen || rightEdgeInScreen;\r\n var isEntirelyOnScreen = topEdgeInScreen && bottomEdgeInScreen && leftEdgeInScreen && rightEdgeInScreen;\r\n\r\n return partial ? isPartiallyOnScreen : isEntirelyOnScreen;\r\n\r\n};\r\n\r\n$.expr.filters.onscreen = function (elem) {\r\n return $(elem).isOnScreen(true);\r\n};\r\n\r\n$.expr.filters.entireonscreen = function (elem) {\r\n return $(elem).isOnScreen(false);\r\n};\r\n\r\nfunction deepClone(initalObj, finalObj) {\r\n let obj = finalObj || {};\r\n for (let i in initalObj) {\r\n let prop = initalObj[i];\r\n // Avoid infinite loop\r\n if (prop === obj) {\r\n continue;\r\n }\r\n\r\n if (typeof prop === 'object') {\r\n if (prop === null) {\r\n obj[i] = prop;\r\n } else {\r\n obj[i] = (prop.constructor === Array) ? [] : {};\r\n deepClone(prop, obj[i]);\r\n }\r\n } else {\r\n obj[i] = prop;\r\n }\r\n }\r\n return obj;\r\n}\r\n\r\nfunction ResetQueryContainer(QueryContainer) {\r\n QueryContainer.find('input[type=text]').val(\"\");\r\n QueryContainer.find('input[type=hidden]').val(\"0\");\r\n QueryContainer.find('select.bootstrap-select').each(function (i, el) {\r\n $(el).val($(el).find('option:first').val()).change();\r\n });\r\n\r\n}\r\n\r\nfunction initMap(anchorEl = $(), center = { lat: 0.00, long: 0.00 }, zoom = 8) {\r\n center.lat = Number(center.lat);\r\n center.long = Number(center.long);\r\n\r\n let map = new google.maps.Map($(anchorEl)[0], {\r\n center: new google.maps.LatLng(center.lat, center.long),\r\n zoom: zoom\r\n });\r\n\r\n let marker = new google.maps.Marker({\r\n position: new google.maps.LatLng(center.lat, center.long),\r\n map: map\r\n });\r\n}\r\n\r\nfunction initLeafletMap(map = null, anchorEl = $(), center = { lat: 0.00, long: 0.00 }, zoom = 8) {\r\n center.lat = Number(center.lat);\r\n center.long = Number(center.long);\r\n\r\n map = L.map($(anchorEl)[0], {\r\n center: L.latLng(center.lat, center.long),\r\n zoom: zoom\r\n });\r\n\r\n let provider = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {\r\n attribution: '© OpenStreetMap contributor'\r\n });\r\n\r\n let marker = L.marker(L.latLng(center.lat, center.long));\r\n\r\n provider.addTo(map);\r\n marker.addTo(map);\r\n\r\n return map;\r\n}\r\n\r\nfunction initEmbeddedGMap(anchorEl = $(), providername = '') {\r\n let uri = `https://maps.google.com/maps?q=providername&t=&z=14&ie=UTF8&iwloc=&output=embed`;\r\n uri = encodeURI(uri.replace('providername', providername));\r\n anchorEl.html(`\r\n
\r\n
\r\n \r\n
\r\n
\r\n `);\r\n}\r\n\r\n//function initEmbeddedGMapAddress(anchorEl = $(), provideraddress = '') {\r\n// let uri = `https://maps.google.com/maps?q=provideraddress&t=&z=30&ie=UTF8&iwloc=&output=embed`;\r\n// anchorEl.html(`\r\n//
\r\n//
\r\n// \r\n//
\r\n//
\r\n// `);\r\n//}\r\n\r\nnavigator.sendBeacon = navigator.sendBeacon || function (url, data) {\r\n let client = new XMLHttpRequest();\r\n client.open(\"POST\", url, false);\r\n client.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n client.send(data);\r\n};\r\n\r\nfunction getBase64(file) {\r\n return new Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n}\r\n\r\nfunction convertToObject(serializeForm = '') {\r\n let data = serializeForm.split(\"&\");\r\n let obj = {};\r\n for (let key in data) {\r\n obj[data[key].split(\"=\")[0]] = data[key].split(\"=\")[1];\r\n }\r\n return obj;\r\n}\r\n\r\nfunction toggleShowPassword(btn, input) {\r\n $(btn).css('visibility', 'hidden');\r\n $(btn).attr('disabled', true);\r\n\r\n $(input).parent()\r\n .on('focus mouseenter', function (e) {\r\n $(btn).css('visibility', 'visible');\r\n $(btn).attr('disabled', false);\r\n })\r\n .on('mouseleave', function (e) {\r\n $(btn).css('visibility', 'hidden');\r\n $(btn).attr('disabled', true);\r\n });\r\n\r\n $(btn)\r\n .off('click')\r\n .on('click', function (e) {\r\n if ($(input).attr('type') === \"password\") {\r\n $(input).attr('type', 'text');\r\n $(btn).html('');\r\n $(btn).attr('data-original-title', \"Hide Password\");\r\n $(btn).addClass('show');\r\n }\r\n else {\r\n $(input).attr('type', 'password');\r\n $(btn).html('');\r\n $(btn).attr('data-original-title', \"Show Password\");\r\n $(btn).removeClass('show');\r\n\r\n }\r\n });\r\n}\r\n\r\nfunction toggleClearInput(btn, input, hiddenInput) {\r\n $(btn).css('visibility', 'hidden');\r\n $(btn).attr('disabled', true);\r\n\r\n $(input).parent()\r\n .on('focus mouseenter', function (e) {\r\n $(btn).css('visibility', 'visible');\r\n $(btn).attr('disabled', false);\r\n })\r\n .on('mouseleave', function (e) {\r\n $(btn).css('visibility', 'hidden');\r\n $(btn).attr('disabled', true);\r\n });\r\n\r\n $(btn)\r\n .off('click')\r\n .on('click', function (e) {\r\n\r\n\r\n\r\n });\r\n}\r\n\r\nfunction initDatatable(dtContainer) {\r\n blockUi($(dtContainer));\r\n try {\r\n let _datatable = $(dtContainer).KDatatable();\r\n _datatable.destroy();\r\n $(dtContainer).prop('isKDatatable', false);\r\n datatable();\r\n }\r\n catch (err) {\r\n datatable();\r\n }\r\n unBlockUi($(dtContainer));\r\n}\r\n\r\nfunction debugError(errMsg) {\r\n\r\n toastr.options = {\r\n \"closeButton\": true,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-center\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"1500\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": \"0\",\r\n \"extendedTimeOut\": \"0\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n };\r\n\r\n console.error(errMsg);\r\n}\r\n\r\nfunction toastrError(errMsg) {\r\n\r\n let _timeOut = \"7000\";\r\n\r\n toastr.options = {\r\n \"closeButton\": false,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-center\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"300\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": _timeOut,\r\n \"extendedTimeOut\": \"1000\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n };\r\n\r\n toastr.error(errMsg);\r\n}\r\n\r\nfunction toastrWarning(errMsg, hideduration = 1000, title = \"\") {\r\n\r\n let _timeOut = \"7000\";\r\n //toastr.remove();\r\n\r\n toastr.options = {\r\n \"closeButton\": false,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-center\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"300\",\r\n \"hideDuration\": hideduration,\r\n \"timeOut\": _timeOut,\r\n \"extendedTimeOut\": \"1000\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\",\r\n };\r\n\r\n toastr.warning(title, errMsg);\r\n}\r\n\r\nfunction toastrInfo(errMsg) {\r\n\r\n //toastr.remove();\r\n let _timeOut = \"7000\";\r\n\r\n toastr.options = {\r\n \"closeButton\": false,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-center\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"300\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": _timeOut,\r\n \"extendedTimeOut\": \"1000\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n };\r\n\r\n toastr.info(errMsg);\r\n}\r\n\r\nfunction toastrSuccess(msg) {\r\n let _timeOut = \"7000\";\r\n\r\n toastr.options = {\r\n \"closeButton\": false,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-center\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"300\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": _timeOut,\r\n \"extendedTimeOut\": \"1000\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n };\r\n\r\n toastr.success(msg);\r\n}\r\n\r\nfunction toastrError_NoAutoHide(errMsg) {\r\n\r\n toastr.options = {\r\n \"closeButton\": true,\r\n \"debug\": false,\r\n \"newestOnTop\": false,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-bottom-center\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"1500\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": \"0\",\r\n \"extendedTimeOut\": \"0\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n };\r\n\r\n toastr.error(errMsg);\r\n}\r\n\r\nfunction toastrInfo_NoAutoHide(msg) {\r\n\r\n toastr.options = {\r\n \"closeButton\": true,\r\n \"debug\": false,\r\n \"newestOnTop\": true,\r\n \"progressBar\": false,\r\n \"positionClass\": \"toast-top-right\",\r\n \"preventDuplicates\": true,\r\n \"onclick\": null,\r\n \"showDuration\": \"1500\",\r\n \"hideDuration\": \"1000\",\r\n \"timeOut\": \"0\",\r\n \"extendedTimeOut\": \"0\",\r\n \"showEasing\": \"swing\",\r\n \"hideEasing\": \"linear\",\r\n \"showMethod\": \"fadeIn\",\r\n \"hideMethod\": \"fadeOut\"\r\n };\r\n\r\n toastr.info(msg);\r\n}\r\n\r\nfunction clearQuickSearch(container) {\r\n container.find('.quick-search').attr(\"disabled\", false);\r\n container.find('.btn-remove-search').attr(\"disabled\", false);\r\n}\r\n\r\nlet formUtil = {\r\n massConvertFormatToCurrency: function (obj, arrCurrencyProperty) {\r\n\r\n for (let prop of arrCurrencyProperty) {\r\n if (obj.hasOwnProperty(prop)) {\r\n obj[prop] = formatToCurrency(obj[prop]);\r\n }\r\n }\r\n\r\n return obj;\r\n },\r\n resetSaveForm: function (saveForm, _validated) {\r\n\r\n //console.log('resetting');\r\n saveForm.trigger('reset');\r\n saveForm.find('input[type=hidden]').val('0');\r\n saveForm.find('input[type=text]').val('');\r\n saveForm.find('textarea').val(\"\");\r\n saveForm.find('input[type=radio]:not([value=\"No\"])').prop('checked', false);\r\n saveForm.find('.radio-group').each(function (i, rbGroup) {\r\n $(rbGroup).find('input[type=radio]:first').prop('checked', true).change();\r\n });\r\n saveForm.find('input[type=checkbox]').each(function (i, cb) {\r\n $(cb).attr('checked', false);\r\n $(cb).next('input[type=hidden]').val('false');\r\n });\r\n saveForm.find('.selectpicker').each(function (i, select) {\r\n $(this).selectpicker('val', $(select).find('option:first').val());\r\n //stylize Selectpicker disabled\r\n if ($(this).hasClass('disabled')) {\r\n $(this).next('button').attr('disabled', true);\r\n }\r\n });\r\n\r\n if (_validated) {\r\n _validated.resetForm();\r\n }\r\n\r\n // removes border-danger class\r\n let errorElements = saveForm.find('.border-danger');\r\n errorElements.map(function (e) {\r\n $(errorElements[e]).removeClass('border-danger');\r\n });\r\n\r\n // removes text-danger class\r\n errorElements = saveForm.find('.text-danger:not(i)');\r\n errorElements.map(function (e) {\r\n $(errorElements[e]).removeClass('text-danger');\r\n });\r\n\r\n },\r\n validate: function (params) {\r\n let _this = new Object(this);\r\n //let formUtil = this;\r\n //params = {\r\n // form: \"\",\r\n // custom: {},\r\n // dataTable: \"\",\r\n // isTwoSubmit: true,\r\n // saveSuccessCallback: function,\r\n // preSave(form, modal),\r\n // successMessage: \"\"\r\n // ajax: { type, url, data }\r\n //}\r\n\r\n try {\r\n let _validatedForm = $(params.form).validate({\r\n debug: true,\r\n errorElement: \"small\",\r\n errorClass: \"border-danger text-danger\",\r\n rules: params.custom.rules,\r\n ignore: params.custom.ignore,\r\n messages: params.custom.messages,\r\n errorPlacement: params.custom.errorPlacement,\r\n unhighlight: params.custom.unhighlight,\r\n success: params.custom.success,\r\n submitHandler: function (form) {\r\n form = $(form);\r\n\r\n params.successMessage === undefined ? params.successMessage = \"Success! Record was saved.\" : params.successMessage = params.successMessage;\r\n // params.customValidations should return object { success: boolean, message: string }\r\n if (params.customValidations !== undefined && typeof params.customValidations === 'function') {\r\n let result = params.customValidations();\r\n if (result.hasOwnProperty('error')) {\r\n toastrError(result.error)\r\n return;\r\n } else {\r\n ajaxSave();\r\n }\r\n } else {\r\n ajaxSave();\r\n }\r\n\r\n function ajaxSave() {\r\n blockUi(form.parents('.modal-content'), 'Saving...');\r\n\r\n if (params.preSave !== undefined) {\r\n params.preSave(form, $(form).parents('.modal.show'));\r\n }\r\n\r\n\r\n let _type = $(form).attr('method'),\r\n _url = $(form).attr('action'),\r\n _data = $(form).serialize();\r\n\r\n if (params.ajax) {\r\n _type = params.ajax.type;\r\n _url = params.ajax.url;\r\n _data = params.ajax.data;\r\n }\r\n\r\n\r\n $.ajax({\r\n type: _type,\r\n url: _url,\r\n data: _data\r\n }).done(function (data, textStatus, xhr) {\r\n if (data.hasOwnProperty('data')) {\r\n\r\n //successMessage\r\n toastrSuccess(params.successMessage);\r\n\r\n //successCallBack\r\n if (typeof params.saveSuccessCallback == \"function\") {\r\n params.saveSuccessCallback(form);\r\n }\r\n\r\n if (params.isTwoSubmit) {\r\n\r\n let submitType = \"\";\r\n\r\n if (typeof params.submitType === \"function\") {\r\n submitType = params.submitType();\r\n } else if (typeof params.submitType === \"string\") {\r\n submitType = params.submitType;\r\n } else {\r\n throw new Error(\"Submit type parameter is undefined\");\r\n }\r\n\r\n\r\n\r\n if (submitType === \"done\") {\r\n $(form).parents('.modal').find('.modal-header > a.close').trigger('click');\r\n } else {\r\n _this.resetSaveForm($(form), _validatedForm);\r\n }\r\n\r\n } else {\r\n $(form).parents('.modal.show').find('.modal-header > a.close').trigger('click');\r\n }\r\n\r\n if (params.dataTable) {\r\n if (typeof params.dataTable === \"function\") {\r\n let datatable = params.dataTable();\r\n datatable.reload();\r\n }\r\n else if (params.dataTable.length == 1 && params.dataTable[0] instanceof HTMLElement) {\r\n $(params.dataTable).KDatatable().reload();\r\n }\r\n }\r\n\r\n\r\n\r\n } else {\r\n if (data.hasOwnProperty('error') || data.hasOwnProperty('message')) {\r\n let errMsg = data.hasOwnProperty('status_code') ? data.status_code.reason : data.message;\r\n swal(\r\n 'System Warning',\r\n errMsg,\r\n 'warning'\r\n );\r\n }\r\n }\r\n\r\n }).fail(function (xhr, textStatus) {\r\n swal(\r\n 'Error!',\r\n 'Error: ' + textStatus,\r\n 'error'\r\n );\r\n }).always(function (data, textStatus, xhr) {\r\n unBlockUi(form.parents('.modal-content'));\r\n });\r\n }\r\n }\r\n });\r\n\r\n let modal = params.form.parents('.modal');\r\n\r\n return _validatedForm;\r\n }\r\n catch (error) {\r\n\r\n swal(\r\n 'System Warning',\r\n 'Something went wrong',\r\n 'warning'\r\n );\r\n\r\n throw error;\r\n\r\n }\r\n\r\n },\r\n fillFormData: function (result, form, dateArray = null, callback) {\r\n\r\n //result = response.data\r\n let inputTypes = ['text', 'hidden', 'number'];\r\n\r\n //loop that assigns data to input/textarea/dropdowns/checkboxes with same 'name' attr\r\n // i = key | result = value\r\n for (let i in result) {\r\n\r\n let el = form.find(\"[name='\" + i + \"']\");\r\n\r\n if (el !== undefined && el.length !== 0 && result[i] !== \"\") {\r\n\r\n if (typeof result[i] == \"string\") result[i] = result[i].trim();\r\n\r\n //radio inputs\r\n\r\n if ($(el).length > 1) {\r\n //form.find(`[type=radio][name=${i}][value=\"${result[i]}\"]`)\r\n // .prop('checked', true)\r\n // .change();\r\n\r\n if ($(el).attr('type') === 'checkbox') {\r\n $(el).attr('checked', result[i]).prop('checked', result[i]).change();\r\n form.find(\"[name='\" + i + \"'][type=hidden]\").val(result[i]);\r\n } else if ($(el).attr('type') === 'radio') {\r\n // Radio here\r\n form.find(`[name=\"${i}\"][value=\"${result[i]}\"]`).attr('checked', true).prop('checked', true).change();\r\n } else if ($(el).prop('nodeName') === 'SELECT') {\r\n //manually change this part for dropdowns to match HTML text\r\n if (result[i] !== \"\") {\r\n //SELECT\r\n $(el).selectpicker('val', result[i]).change();\r\n }\r\n } else if (inputTypes.includes($(el).attr('type')) || $(el).prop('nodeName') === 'TEXTAREA') {\r\n if (dateArray) {\r\n if (dateArray.length > 0 && dateArray.includes(i)) {\r\n $(el).val(convertDateMMDDYYYY(result[i]));\r\n $(el).datepicker('update');\r\n } else {\r\n $(el).val(result[i]);\r\n }\r\n }\r\n else {\r\n $(el).val(result[i]);\r\n }\r\n }\r\n continue;\r\n } else if ($(el).attr('type') === 'checkbox') {\r\n $(el).attr('checked', result[i]).prop('checked', result[i]).change();\r\n form.find(\"[name='\" + i + \"'][type=hidden]\").val(result[i]);\r\n }\r\n //else if ($(el).attr('type') === 'radio') {\r\n // $(el).attr('checked', result[i]).change();\r\n // form.find(\"[name='\" + i + \"'][type=hidden]\").val(result[i]);\r\n //}\r\n else if ($(el).prop('nodeName') === 'SELECT') {\r\n\r\n //manually change this part for dropdowns to match HTML text\r\n if (result[i] !== \"\") {\r\n //SELECT\r\n $(el).selectpicker('val', result[i]).change();\r\n }\r\n\r\n }\r\n else if (inputTypes.includes($(el).attr('type')) || $(el).prop('nodeName') === 'TEXTAREA') {\r\n\r\n if (dateArray) {\r\n if (dateArray.length > 0 && dateArray.includes(i)) {\r\n $(el).val(convertDateMMDDYYYY(result[i]));\r\n $(el).datepicker('update');\r\n } else {\r\n $(el).val(result[i]);\r\n }\r\n }\r\n else {\r\n\r\n $(el).val(result[i]);\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n if (callback !== undefined) {\r\n callback(result, form);\r\n }\r\n },\r\n updateCheckBoxValue: function (form) {\r\n form.find('input[type=checkbox]').each(function (i, cb) {\r\n $(cb).off('change')\r\n .on('change', function (e) {\r\n let n = $(e.currentTarget).attr('name'),\r\n v = $(e.currentTarget).prop('checked');\r\n form.find('input[type=hidden][name=' + n + ']').val(v);\r\n $(this).val(v);\r\n });\r\n\r\n let n = $(cb).attr('name'),\r\n v = $(cb).prop('checked');\r\n form.find('input[type=hidden][name=' + n + ']').val(v);\r\n $(cb).val(v);\r\n\r\n });\r\n },\r\n fixTabindex: function (form) {\r\n //let tabindex = 1;\r\n form.find('input,select,button').each(function () {\r\n if (this.type != \"hidden\") {\r\n let $input = $(this);\r\n $input.attr(\"tabindex\", 1);\r\n //tabindex++;\r\n }\r\n });\r\n },\r\n selectTextOnFocus: function (form) {\r\n form.find('input[type=text], textarea').focus(function (e) {\r\n $(this).select();\r\n });\r\n },\r\n getFirstInput(form) {\r\n let listInput = form.find('input[type=text]:visible, select.bootstrap-select:not(:disabled) ~ button:visible, .k-checkbox > span');\r\n\r\n if (listInput.length > 0) {\r\n return listInput[0];\r\n } else {\r\n return null;\r\n }\r\n\r\n },\r\n validateElement(validator, strElSelecter = \"\") {\r\n if (validator != null && typeof strElSelecter == \"string\") {\r\n validator.element(strElSelecter);\r\n }\r\n },\r\n setMultiSelectCorrectOrder(selectElement, clickedIndex, isSelected) {\r\n let arrSelectedOptions = selectElement.children('option').filter(':selected');\r\n let arrSelectedOrder = selectElement.prop('arrMultiSelectCorrectOrder') || [];\r\n let arrSelectedValue = [];\r\n $.each(arrSelectedOptions, function () {\r\n arrSelectedValue.push($(this).val());\r\n });\r\n\r\n // DESELECTED ALL\r\n if (arrSelectedOptions.length === 0) {\r\n arrSelectedOrder = [];\r\n // THERE IS AT LEAST ONE SELECTED\r\n } else {\r\n // SELECTED AN OPTION\r\n if (isSelected === true) {\r\n for (let a = 0; a < arrSelectedOptions.length; a++) {\r\n if ($(arrSelectedOptions[a]).index() === clickedIndex) {\r\n arrSelectedOrder.push($(arrSelectedOptions[a]).val());\r\n break;\r\n }\r\n }\r\n // DESELECTED AN OPTION\r\n } else if (isSelected === false) {\r\n arrSelectedOrder = arrSelectedOrder.filter(function (item) {\r\n return arrSelectedValue.includes(item);\r\n });\r\n // SELECTED ALL\r\n } else {\r\n arrSelectedOrder = arrSelectedValue;\r\n }\r\n }\r\n\r\n selectElement.prop('arrMultiSelectCorrectOrder', arrSelectedOrder);\r\n\r\n return arrSelectedOrder;\r\n }\r\n};\r\n\r\nfunction SwalYesNo(objOptions, confirmFunction, denyFunction) {\r\n /*\r\n @param object objOptions\r\n @param function confirmFunction()\r\n\r\n objOptions = {\r\n title: \"Confirmation\", // String:\r\n type: \"question\", // String: info, error, warning, question\r\n text: \"question\", // String:\r\n }\r\n\r\n */\r\n\r\n if (!objOptions.title) objOptions.title = \"Confirmation\";\r\n if (!objOptions.title) objOptions.type = \"question\";\r\n if (!objOptions.text && !objOptions.html) {\r\n return new Error('No text was given to SwalYesNo');\r\n }\r\n if (typeof confirmFunction != \"function\" || confirmFunction == undefined) {\r\n return new Error('No Confirm function was given');\r\n }\r\n\r\n swal({\r\n title: objOptions.title,\r\n text: \"\",\r\n html: objOptions.html ? objOptions.html : objOptions.text,\r\n type: objOptions.type,\r\n showCancelButton: true,\r\n confirmButtonText: objOptions.confirmButtonText || \"Yes\",\r\n cancelButtonText: objOptions.cancelButtonText || \"No\",\r\n reverseButtons: false,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n allowEnterKey: true\r\n })\r\n .then(function (res) {\r\n res.value = res.value ? true : false;\r\n\r\n if (res.value) {\r\n if (typeof confirmFunction == \"function\") {\r\n confirmFunction();\r\n }\r\n } else {\r\n if (typeof denyFunction == \"function\") {\r\n denyFunction();\r\n }\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n}\r\n\r\nfunction SwalYes(objOptions, confirmFunction) {\r\n\r\n\r\n if (!objOptions.title) objOptions.title = \"Notice\";\r\n if (!objOptions.title) objOptions.type = \"question\";\r\n if (!objOptions.text && !objOptions.html) {\r\n return new Error('No text was given to SwalYesNo');\r\n }\r\n //if (typeof confirmFunction != \"function\" || confirmFunction == undefined) {\r\n // return new Error('No Confirm function was given');\r\n //}\r\n\r\n let options = {\r\n title: objOptions.title,\r\n text: \"\",\r\n html: objOptions.html ? objOptions.html : objOptions.text,\r\n type: objOptions.type,\r\n showCancelButton: false,\r\n confirmButtonText: objOptions.confirmButtonText || \"Yes\",\r\n customContainerClass: objOptions.customContainerClass || \"\",\r\n reverseButtons: false,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n allowEnterKey: true,\r\n }\r\n\r\n //if (objOptions.hasOwnProperty(\"customClass\") && typeof objOptions.customClass == \"object\") {\r\n // Object.assign(options, {\r\n // customClass: objOptions.customClass\r\n // });\r\n //}\r\n\r\n swal(options)\r\n .then(function (res) {\r\n if (typeof confirmFunction == \"function\") {\r\n confirmFunction();\r\n }\r\n });\r\n\r\n}\r\n\r\nfunction delayExec(ms = 500) {\r\n return new Promise(resolve => {\r\n setTimeout(() => { resolve() }, ms);\r\n })\r\n}\r\n\r\nfunction swalConfirm(msg, type = \"question\", title = 'Confirmation') {\r\n return new Promise((resolve) => {\r\n swal({\r\n title: title,\r\n html: msg,\r\n type: type,\r\n showCancelButton: true,\r\n confirmButtonText: 'Yes',\r\n cancelButtonText: 'No',\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n allowEnterKey: true\r\n }).then(function (result) {\r\n if (result.value) {\r\n resolve(true);\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n })\r\n}\r\n\r\nfunction swalInfo(msg, type = \"info\", title = 'Notice') {\r\n return new Promise((resolve) => {\r\n swal({\r\n title: title,\r\n html: msg,\r\n type: type,\r\n showCancelButton: false,\r\n confirmButtonText: 'Ok',\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n allowEnterKey: true\r\n }).then(function (result) {\r\n if (result.value) {\r\n resolve(true);\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n })\r\n}\r\n\r\n\r\nfunction swalConfirmYes(msg, type = \"question\", title = 'Confirmation', confirmButtonText = \"Yes\") {\r\n return new Promise((resolve) => {\r\n swal({\r\n title: title,\r\n html: msg,\r\n type: type,\r\n showCancelButton: false,\r\n confirmButtonText: confirmButtonText,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n allowEnterKey: true\r\n }).then(function (result) {\r\n if (result.value) {\r\n resolve(true);\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n })\r\n}\r\n\r\n\r\nfunction ApiErrorException(res, container) {\r\n let errorMsg = S_SOMETHING_WENT_WRONG;\r\n if (res.hasOwnProperty('Message')) errorMsg = res.Message;\r\n if (res.hasOwnProperty('error')) errorMsg = res.error + \"
Please contact MIS/IT.\";\r\n if (res.hasOwnProperty('message')) errorMsg = res.message;\r\n if (res.hasOwnProperty('error_description')) errorMsg = res.error_description + \"
Please contact MIS/IT.\";\r\n if (res.hasOwnProperty('status_code') && res.status_code !== null) errorMsg = res.status_code.reason;\r\n\r\n if (container) {\r\n unBlockUi(container);\r\n }\r\n\r\n toastrError(errorMsg);\r\n}\r\n\r\nfunction popOverUpdate() {\r\n let shownPopover = $(\".popover\");\r\n\r\n if (shownPopover.length > 0) {\r\n shownPopover = shownPopover[0];\r\n let b = shownPopover.getBoundingClientRect();\r\n if (b.bottom > $(window).height()) {\r\n $('.popover').popover('update');\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\nfunction FocusOnLastRowOnModalHide(params) {\r\n\r\n if (!params.hasOwnProperty(\"onLastCell\")) {\r\n params.onLastCell = false;\r\n }\r\n\r\n let stored = {\r\n lastRow: null,\r\n lastRowIndex: null,\r\n lastCell: null,\r\n lastCellIndex: null,\r\n distinctProp: null\r\n }\r\n\r\n //params = {\r\n // datatable: null,\r\n // modal: null,\r\n // //function that returns a distinct value to compare with last savedRow\r\n // getDistinctProperty(row) {\r\n // }\r\n //}\r\n\r\n $(params.datatable).on(\"click\", \"tbody\", e => {\r\n\r\n if (params.onLastCell == true) {\r\n\r\n if ($(e.target).parents('td:first').length > 0) {\r\n let cell = $(e.target).parents('td:first');\r\n let row = cell.parents('tr:first');\r\n\r\n stored.lastCell = cell;\r\n stored.lastCellIndex = cell.index();\r\n stored.lastRow = row;\r\n stored.lastRowIndex = row.attr(\"data-row\") || row.index();\r\n\r\n if (params.hasOwnProperty(\"getDistinctProperty\")) {\r\n if (!$(row).is('.k-datatable__row-subtable')) {\r\n stored.distinctProp = params.getDistinctProperty(row);\r\n }\r\n\r\n }\r\n }\r\n else {\r\n stored.lastRow = null;\r\n stored.lastRowIndex = null;\r\n stored.lastCell = null;\r\n stored.lastCellIndex = null;\r\n }\r\n\r\n }\r\n else {\r\n if ($(e.target).parents('tr:first').length > 0) {\r\n let row = $(e.target).parents('tr:first');\r\n stored.lastRow = row;\r\n stored.lastRowIndex = row.attr(\"data-row\") || row.index();\r\n\r\n if (params.hasOwnProperty(\"getDistinctProperty\")) {\r\n if (!$(row).is('.k-datatable__row-subtable')) {\r\n stored.distinctProp = params.getDistinctProperty(row);\r\n }\r\n }\r\n }\r\n else {\r\n stored.lastRow = null;\r\n stored.lastRowIndex = null;\r\n }\r\n }\r\n\r\n\r\n });\r\n\r\n $('.modal').on(\"hidden.bs.modal\", e => {\r\n let openedModals = $(\".modal.show\");\r\n setTimeout(() => { focusOnLastRow(openedModals); }, 300);\r\n });\r\n\r\n //TODO: Detect datatable update\r\n if ($(params.datatable).KDatatable()) {\r\n $(params.datatable).KDatatable().on(\"k-datatable--on-layout-rendered\", e => {\r\n let openedModals = $(\".modal.show\");\r\n focusOnLastRow(openedModals);\r\n });\r\n }\r\n\r\n function focusOnLastRow(openedModals) {\r\n\r\n if (params.onLastCell == true) {\r\n\r\n\r\n // == exit if null last index\r\n if (stored.lastRowIndex == null || stored.lastRow == null || stored.lastCell == null) {\r\n return;\r\n }\r\n\r\n if ($(params.modal) && openedModals.length > 0) {\r\n //Check if modal is last in open modals\r\n if ($(params.modal).is(openedModals[openedModals.length - 1])) {\r\n //check if nag-eexist pa si last stored row\r\n if (stored.lastRow.is(\":visible\")) {\r\n stored.lastCell.focus();\r\n }\r\n else {\r\n getLastRowAndFocus();\r\n }\r\n }\r\n }\r\n else {\r\n if (stored.lastRow.is(\":visible\")) {\r\n stored.lastCell.trigger(\"focus\");\r\n } else {\r\n getLastRowAndFocus();\r\n }\r\n }\r\n\r\n\r\n }\r\n else {\r\n\r\n // == exit if null last index\r\n if (stored.lastRowIndex == null || stored.lastRow == null) {\r\n return;\r\n }\r\n\r\n\r\n if ($(params.modal) && openedModals.length > 0) {\r\n //Check if modal is last in open modals\r\n if ($(params.modal).is(openedModals[openedModals.length - 1])) {\r\n //check if nag-eexist pa si last stored row\r\n if (stored.lastRow.is(\":visible\")) {\r\n stored.lastRow.focus();\r\n }\r\n else {\r\n getLastRowAndFocus();\r\n }\r\n }\r\n }\r\n else {\r\n if (stored.lastRow.is(\":visible\")) {\r\n stored.lastRow.trigger(\"focus\");\r\n } else {\r\n getLastRowAndFocus();\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n function getLastRowAndFocus() {\r\n if (params.onLastCell == true) {\r\n\r\n let suspectedRow = params.datatable.find(`tbody tr[data-row='${stored.lastRowIndex}']`);\r\n\r\n // === get distinct property of both rows to see if last row is still in updated datatable\r\n if (suspectedRow.length == 1 &&\r\n params.hasOwnProperty(\"getDistinctProperty\") && stored.distinctProp &&\r\n params.getDistinctProperty(suspectedRow) === stored.distinctProp) {\r\n //focus on stored cell index of suspected row\r\n suspectedRow.children(`td:nth-child(${stored.lastCellIndex + 1})`).trigger(\"focus\");\r\n }\r\n\r\n }\r\n else {\r\n\r\n // === get selected row based on index\r\n let suspectedRow = params.datatable.find(`tbody tr[data-row='${stored.lastRowIndex}']`), suspectedRowProp = null;\r\n\r\n // === get distinct property of both rows to see if last row is still in updated datatable\r\n\r\n //if (suspectedRow.length == 1 && params.hasOwnProperty(\"getDistinctProperty\")) {\r\n // try {\r\n // suspectedRowProp = params.getDistinctProperty(suspectedRow)\r\n // }\r\n // catch (err) {\r\n // return;\r\n // }\r\n\r\n // if (suspectedRowProp === stored.distinctProp) {\r\n // suspectedRow.trigger(\"focus\");\r\n // }\r\n\r\n //}\r\n\r\n if (suspectedRow.length == 1 &&\r\n params.hasOwnProperty(\"getDistinctProperty\") &&\r\n params.getDistinctProperty(suspectedRow) === stored.distinctProp) {\r\n suspectedRow.trigger(\"focus\");\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\n\r\nfunction preventBlurEventIfSameLastValue($inputs) {\r\n\r\n for (let input of $inputs) {\r\n\r\n let rememberValue = function () {\r\n let lastValue;\r\n\r\n $(input).on('focus', e => {\r\n lastValue = $(e.currentTarget).val();\r\n });\r\n\r\n $(input).on('blur', e => {\r\n if ($(e.currentTarget).val() == lastValue) {\r\n e.stopImmediatePropagation();\r\n }\r\n });\r\n\r\n }();\r\n\r\n }\r\n\r\n}\r\n\r\nfunction truncateLongText(data) {\r\n return (data.length > 35) ? '
' + data + '
' : data;\r\n}\r\n\r\nfunction truncateText(data, length) {\r\n return (data.length > length) ? '' + data + '' : data;\r\n}\r\n\r\nfunction getDecimal(nFloat) {\r\n return nFloat - Math.floor(nFloat);\r\n}\r\n\r\nfunction PasswordToggler(formGroup) {\r\n let checkBox = $(\"\");\r\n checkBox.css('display', 'none');\r\n checkBox.addClass('password_checkbox');\r\n formGroup.prepend(checkBox);\r\n\r\n formGroup.find('.password_toggler:first').find('.hide').css('display', '');\r\n formGroup.find('.password_toggler:first').on('click', e => {\r\n checkBox.click();\r\n });\r\n checkBox.on('change', e => {\r\n let isToggled = $(e.currentTarget).prop('checked');\r\n if (isToggled) {\r\n formGroup.find('.password_input').attr('type', 'text');\r\n }\r\n else {\r\n formGroup.find('.password_input').attr('type', 'password');\r\n }\r\n })\r\n\r\n formGroup.find('.password_input').parent()\r\n .on('focus mouseenter', function (e) {\r\n formGroup.find('.password_input').parent().addClass(\"visible\");\r\n })\r\n .on('mouseleave', function (e) {\r\n formGroup.find('.password_input').parent().removeClass(\"visible\");\r\n });\r\n\r\n}\r\n\r\nfunction inputExceeded(el) {\r\n var s = $('' + el.val() + '');\r\n s.css({\r\n position: 'absolute',\r\n left: -9999,\r\n top: -9999,\r\n // ensure that the span has same font properties as the element\r\n 'font-family': el.css('font-family'),\r\n 'font-size': el.css('font-size'),\r\n 'font-weight': el.css('font-weight'),\r\n 'font-style': el.css('font-style')\r\n });\r\n $('body').append(s);\r\n var result = s.width() > el.width();\r\n //remove the newly created span\r\n s.remove();\r\n return result;\r\n}\r\n\r\nfunction MemberTypeToolTip(element = $(), arrMemberType = [], apiCallBack = null) {\r\n\r\n if (arrMemberType != null && arrMemberType.length > 0) {\r\n \r\n makeTooltip(element, arrMemberType);\r\n }\r\n else {\r\n blockUi(element, 'Loading member types...');\r\n $.getJSON(\r\n urlSetter.replace('Action', 'membertypes').replace('Controller', 'search').replace('Area', 'framework'), {\r\n classorder: \"\"\r\n },\r\n function (response) {\r\n if (response.hasOwnProperty('data')) {\r\n if (response.data.length === 0) {\r\n //\r\n } else {\r\n makeTooltip(element, response.data)\r\n }\r\n\r\n\r\n if (typeof apiCallBack == \"function\") {\r\n apiCallBack(response.data);\r\n }\r\n\r\n } else {\r\n // Something went wrong. Please try again.\r\n }\r\n\r\n }\r\n ).always(function () {\r\n\r\n\r\n\r\n unBlockUi(element);\r\n });\r\n }\r\n \r\n\r\n function makeTooltip(element, arrData) {\r\n let htmlTooltip = function () {\r\n let sHtml = '';\r\n\r\n //sHtml += `
`;\r\n\r\n for (let i = 0; i < arrData.length; i++) {\r\n sHtml += `
  • ${arrData[i].membertype.trim() + ' - ' + arrData[i].description.trim()}
  • `;\r\n }\r\n\r\n //sHtml += `
    `;\r\n\r\n return sHtml;\r\n };\r\n\r\n element.attr('data-original-title', htmlTooltip());\r\n element.attr('data-html', 'true');\r\n element.tooltip();\r\n }\r\n}\r\n\r\n$.fn.CustomPopOver = function (params) {\r\n\r\n let selector = $(this);\r\n\r\n\r\n let defaults = {\r\n container: \"body\",\r\n minWidth: 250,\r\n maxHeight: 0,\r\n header: \"\",\r\n spinner: false,\r\n }\r\n\r\n //set defaults\r\n setDefaults();\r\n\r\n params.content = function () {\r\n\r\n let maxHeight = function () {\r\n if (params.maxHeight != 0 && typeof params.maxHeight == 'number') {\r\n return `max-height: ${params.maxHeight}px!important;`\r\n }\r\n }\r\n\r\n return `
    `;\r\n }\r\n\r\n selector.attr('data-html', true);\r\n //selector.attr('data-trigger', 'click');\r\n //selector.attr('data-container', params.container);\r\n selector.attr('data-content', params.content());\r\n\r\n selector.off('shown.bs.popover').on('shown.bs.popover', e => {\r\n\r\n e.stopImmediatePropagation();\r\n\r\n if (params.header != \"\") {\r\n $('.popover-header').html(\r\n `
    \r\n
    ${params.header}
    \r\n
    `);\r\n }\r\n\r\n if (params.spinner) {\r\n $('.popover-body .popover-inner-body').html(`
    Loading...
    `);\r\n }\r\n\r\n if (typeof params.onShownEvent == \"function\") {\r\n params.onShownEvent($('.popover-body'), $('.popover-body .popover-inner-body'), $('.popover-header'));\r\n }\r\n })\r\n selector.on('hidden.bs.popover', e => {\r\n if (typeof params.onHiddenEvent == \"function\") {\r\n params.onHiddenEvent();\r\n }\r\n });\r\n\r\n selector.on('click', e => {\r\n\r\n let init = async function () {\r\n\r\n if (typeof params.onClickEvent == 'function') {\r\n await params.onClickEvent(e);\r\n }\r\n\r\n if (typeof params.validateShow == 'function') {\r\n\r\n let isShow = await params.validateShow(e);\r\n\r\n if (isShow == false) {\r\n return;\r\n }\r\n else {\r\n $(e.currentTarget).popover('show');\r\n }\r\n }\r\n else {\r\n $(e.currentTarget).popover('show');\r\n }\r\n\r\n //$(e.currentTarget).popover('show');\r\n\r\n }();\r\n });\r\n\r\n function setDefaults() {\r\n\r\n for (let key in defaults) {\r\n if (!params.hasOwnProperty(key)) {\r\n params[key] = defaults[key]\r\n }\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\n","function setLedgerHotKeys(params) {\r\n\r\n //setLedgerHotKeys(\r\n // {\r\n // modalID: 'modalId',\r\n // ledgerID: 'dtId',\r\n // onEnter: function (dt,elFocused) { }\r\n // }\r\n //);\r\n\r\n if (params.fulldirect == true) {\r\n $(document).on('keydown', function (e) { \r\n\r\n let elFocused = $(e.currentTarget.activeElement);\r\n let elFocusedRow = elFocused.closest('tr');\r\n let dTable = $('#' + params.ledgerID);\r\n let dataTableID = elFocusedRow.closest('.k-datatable').attr('id');\r\n\r\n let datafield = elFocused.attr('data-field');\r\n let indexField = elFocused.index();\r\n\r\n let prevrow = elFocusedRow.prev();\r\n let prevtel = prevrow.find('td:eq(' + indexField + ')');\r\n\r\n let nextrow = elFocusedRow.next();\r\n let nextel = nextrow.find('td:eq(' + indexField + ')');\r\n\r\n if (params.modalID === '' || params.modalID === undefined || params.modalID === null) {\r\n if (!$('.modal').hasClass('show')) {\r\n if (e.ctrlKey) {\r\n try {\r\n switch (e.which) {\r\n //CTRL+G\r\n case 71:\r\n e.preventDefault();\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n e.preventDefault();\r\n let elRow = $('#' + params.ledgerID + ' table tbody tr:first td:first');\r\n elRow.focus();\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onCtrlG === \"function\") {\r\n params.onCtrlG(dTable, _newFocus);\r\n }\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n try {\r\n switch (e.which) {\r\n //ENTER\r\n case 13:\r\n if (dataTableID == params.ledgerID) {\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n\r\n if (elFocused.find('a:first').length != 0) {\r\n elFocused.find('a:first').click();\r\n } else {\r\n elFocused.find('button:first').click();\r\n elFocused.find('input[type=\"checkbox\"]').click();\r\n }\r\n }\r\n } else {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n\r\n if (elFocused.find('a:first').length != 0) {\r\n elFocused.find('a:first').click();\r\n } else {\r\n elFocused.find('button:first').click();\r\n elFocused.find('input[type=\"checkbox\"]').click();\r\n }\r\n }\r\n \r\n if (elFocused.hasClass('dropdown-item')) {\r\n elFocused.click();\r\n }\r\n break;\r\n //UP\r\n case 38:\r\n if (dataTableID == params.ledgerID) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n\r\n if (prevrow.length !== 0 && prevrow.hasClass('k-datatable__row')) {\r\n elFocusedRow.removeClass('row-focused');\r\n prevtel.focus();\r\n } else {\r\n if (prevrow.hasClass('k-datatable__row-subtable')) {\r\n elFocusedRow.removeClass('row-focused');\r\n prevrow.prev().find('td:eq(' + indexField + ')').focus();\r\n }\r\n }\r\n } else {\r\n if (prevrow.length !== 0 && prevrow.is('tr')) {\r\n elFocusedRow.removeClass('row-focused');\r\n prevtel.focus();\r\n }\r\n }\r\n }\r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n let elPrev = elFocused.prev();\r\n\r\n if (elPrev.hasClass('dropdown-divider')) {\r\n elPrev.prev().trigger('focus');\r\n } else {\r\n elFocused.prev().trigger('focus');\r\n }\r\n }\r\n break;\r\n //DOWN\r\n case 40:\r\n if (dataTableID == params.ledgerID) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n\r\n if (nextrow.length !== 0 && nextrow.hasClass('k-datatable__row')) {\r\n elFocusedRow.removeClass('row-focused');\r\n nextel.focus();\r\n } else {\r\n if (nextrow.hasClass('k-datatable__row-subtable')) {\r\n elFocusedRow.removeClass('row-focused');\r\n nextrow.next().find('td:eq(' + indexField + ')').focus();\r\n }\r\n }\r\n } else {\r\n if (nextrow.length !== 0 && nextrow.is('tr')) {\r\n elFocusedRow.removeClass('row-focused');\r\n nextel.focus();\r\n }\r\n }\r\n }\r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n let elNext = elFocused.next();\r\n\r\n if (elNext.hasClass('dropdown-divider')) {\r\n elNext.next().focus();\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n\r\n }\r\n break;\r\n //LEFT\r\n case 37:\r\n if (dataTableID == params.ledgerID) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n // If KDatatable has locked columns\r\n if (elFocused.prev().length === 0 & elFocused.parents(':eq(1)').hasClass('k-datatable__lock')) {\r\n elFocused.parents(':eq(1)').prev('div.k-datatable__lock').find(`tr:nth-child(${elFocused.parent().index() + 1}) td:last-child`).focus();\r\n } else {\r\n elFocused.prev().focus();\r\n }\r\n } else {\r\n elFocused.prev().focus();\r\n }\r\n }\r\n\r\n break;\r\n //RIGHT\r\n case 39:\r\n if (dataTableID == params.ledgerID) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n // If KDatatable has locked columns\r\n if (elFocused.is('td') && elFocused.next().length === 0 & elFocused.parents(':eq(1)').hasClass('k-datatable__lock')) {\r\n elFocused.parents(':eq(1)').next('div.k-datatable__lock').find(`tr:nth-child(${elFocused.parent().index() + 1}) td:first-child`).focus();\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n }\r\n break;\r\n }\r\n \r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n }\r\n }\r\n else {\r\n let elModal = $('#' + params.modalID.toString());\r\n var openmodal = openmodals[openmodals.length - 1];\r\n if (elModal.hasClass('show') && $('#' + openmodal).is(':visible') && params.modalID.toString() === openmodal) {\r\n if (e.ctrlKey) {\r\n try {\r\n switch (e.which) {\r\n //CTRL+G\r\n case 71:\r\n e.preventDefault();\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n e.preventDefault();\r\n let elRow = $('#' + params.ledgerID + ' table tbody tr:first td:first');\r\n elRow.focus();\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onCtrlG === \"function\") {\r\n params.onCtrlG(dTable, _newFocus);\r\n }\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n try {\r\n switch (e.which) {\r\n //ENTER\r\n case 13:\r\n //if (dataTableID == params.ledgerID) {\r\n \r\n //}\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n e.preventDefault();\r\n\r\n if (elFocused.find('a:first').length != 0) {\r\n elFocused.find('a:first').click();\r\n } else {\r\n elFocused.find('button:first').click();\r\n elFocused.find('input[type=\"checkbox\"]').click();\r\n }\r\n } else {\r\n e.preventDefault();\r\n\r\n if (elFocused.find('a:first').length != 0) {\r\n elFocused.find('a:first').click();\r\n } else {\r\n elFocused.find('button:first').click();\r\n elFocused.find('input[type=\"checkbox\"]').click();\r\n }\r\n }\r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n elFocused.click();\r\n }\r\n break;\r\n //UP\r\n case 38:\r\n //if (dataTableID == params.ledgerID) {\r\n \r\n //}\r\n\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n\r\n if (prevrow.length !== 0 && prevrow.hasClass('k-datatable__row')) {\r\n elFocusedRow.removeClass('row-focused');\r\n prevtel.focus();\r\n } else {\r\n if (prevrow.hasClass('k-datatable__row-subtable')) {\r\n elFocusedRow.removeClass('row-focused');\r\n prevrow.prev().find('[data-field=\"' + datafield + '\"]').focus();\r\n }\r\n }\r\n } else {\r\n if (prevrow.length !== 0 && prevrow.is('tr')) {\r\n elFocusedRow.removeClass('row-focused');\r\n prevtel.focus();\r\n }\r\n }\r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n elFocused.prev().focus();\r\n elFocused.parent().prev().children().focus();\r\n }\r\n break;\r\n //DOWN\r\n case 40:\r\n //if (dataTableID == params.ledgerID) {\r\n \r\n //}\r\n\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n\r\n if (nextrow.length !== 0 && nextrow.hasClass('k-datatable__row')) {\r\n elFocusedRow.removeClass('row-focused');\r\n nextel.focus();\r\n } else {\r\n if (nextrow.hasClass('k-datatable__row-subtable')) {\r\n elFocusedRow.removeClass('row-focused');\r\n nextrow.next().find('[data-field=\"' + datafield + '\"]').focus();\r\n }\r\n }\r\n } else {\r\n if (nextrow.length !== 0 && nextrow.is('tr')) {\r\n elFocusedRow.removeClass('row-focused');\r\n nextel.focus();\r\n }\r\n }\r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n elFocused.next().focus();\r\n elFocused.parent().next().children().focus();\r\n }\r\n break;\r\n //LEFT\r\n case 37:\r\n //if (dataTableID == params.ledgerID) {\r\n \r\n //}\r\n\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n // If KDatatable has locked columns\r\n if (elFocused.prev().length === 0 & elFocused.parents(':eq(1)').hasClass('k-datatable__lock')) {\r\n elFocused.parents(':eq(1)').prev('div.k-datatable__lock').find(`tr:nth-child(${elFocused.parent().index() + 1}) td:last-child`).focus();\r\n } else {\r\n elFocused.prev().focus();\r\n }\r\n } else {\r\n elFocused.prev().focus();\r\n }\r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n elFocused.parent().parent().prev().focus();\r\n }\r\n break;\r\n //RIGHT\r\n case 39:\r\n //if (dataTableID == params.ledgerID) {\r\n \r\n //}\r\n\r\n e.preventDefault();\r\n\r\n if (elFocused.hasClass('k-datatable__cell')) {\r\n // If KDatatable has locked columns\r\n if (elFocused.is('td') && elFocused.next().length === 0 & elFocused.parents(':eq(1)').hasClass('k-datatable__lock')) {\r\n elFocused.parents(':eq(1)').next('div.k-datatable__lock').find(`tr:nth-child(${elFocused.parent().index() + 1}) td:first-child`).focus();\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n \r\n\r\n if (elFocused.hasClass('dropdown-item')) {\r\n elFocused.next().children().eq(0).children().focus();\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n\r\n $(document).on('keydown', function (e) {\r\n let elFocused = $(e.currentTarget.activeElement);\r\n let dTable = $('#' + params.ledgerID);\r\n if (params.modalID === '' || params.modalID === undefined || params.modalID === null) {\r\n if (!$('.modal').hasClass('show')) {\r\n if (e.ctrlKey) {\r\n try {\r\n switch (e.which) {\r\n //CTRL+G\r\n case 71:\r\n e.preventDefault();\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n e.preventDefault();\r\n let elRow = $('#' + params.ledgerID + ' table tbody tr:first');\r\n elRow.focus();\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onCtrlG === \"function\") {\r\n params.onCtrlG(dTable, _newFocus);\r\n }\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n try {\r\n switch (e.which) {\r\n //ENTER\r\n case 13:\r\n e.preventDefault();\r\n\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n if (elFocused.is('#' + params.ledgerID + ' tr')) {\r\n params.onEnter(dTable, elFocused);\r\n }\r\n }\r\n break;\r\n //UP\r\n case 38:\r\n e.preventDefault();\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n if (elFocused.is('#' + params.ledgerID + ' tr')) {\r\n if (elFocused.prev().hasClass('k-datatable__row-subtable')) {\r\n elFocused.prevAll().eq(1).focus();\r\n } else {\r\n elFocused.prev().focus();\r\n }\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onUp == \"function\") {\r\n params.onUp(dTable, _newFocus);\r\n }\r\n }\r\n }\r\n break;\r\n //DOWN\r\n case 40:\r\n e.preventDefault();\r\n if (elFocused.is('#' + params.ledgerID + ' tr')) {\r\n if (elFocused.next().hasClass('k-datatable__row-subtable')) {\r\n elFocused.next().next().focus();\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onDown == \"function\") {\r\n params.onDown(dTable, _newFocus);\r\n }\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n }\r\n }\r\n else {\r\n let elModal = $('#' + params.modalID.toString());\r\n var openmodal = openmodals[openmodals.length - 1];\r\n if (elModal.hasClass('show') && $('#' + openmodal).is(':visible')) {\r\n try {\r\n if (e.ctrlKey) {\r\n switch (e.which) {\r\n //CTRL+G\r\n case 71:\r\n e.preventDefault();\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n e.preventDefault();\r\n let elRow = $('#' + params.ledgerID + ' table tbody tr:first');\r\n elRow.focus();\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onCtrlG === \"function\") {\r\n params.onCtrlG(dTable, _newFocus);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n switch (e.which) {\r\n //ENTER\r\n case 13:\r\n e.preventDefault();\r\n\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n if (elFocused.is('#' + params.ledgerID + ' tr')) {\r\n params.onEnter(dTable, elFocused);\r\n }\r\n }\r\n break;\r\n //UP\r\n case 38:\r\n e.preventDefault();\r\n if (params.ledgerID !== null && params.ledgerID !== '' && params.ledgerID !== undefined) {\r\n if (elFocused.is('#' + params.ledgerID + ' tr')) {\r\n if (elFocused.prev().hasClass('k-datatable__row-subtable')) {\r\n elFocused.prevAll().eq(1).focus();\r\n } else {\r\n elFocused.prev().focus();\r\n }\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onUp == \"function\") {\r\n params.onUp(dTable, _newFocus);\r\n }\r\n }\r\n }\r\n break;\r\n //DOWN\r\n case 40:\r\n e.preventDefault();\r\n if (elFocused.is('#' + params.ledgerID + ' tr')) {\r\n if (elFocused.next().hasClass('k-datatable__row-subtable')) {\r\n elFocused.next().next().focus();\r\n } else {\r\n elFocused.next().focus();\r\n }\r\n\r\n let _newFocus = $(e.currentTarget.activeElement);\r\n\r\n if (typeof params.onDown == \"function\") {\r\n params.onDown(dTable, _newFocus);\r\n }\r\n }\r\n break;\r\n\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction setQueryHotKeys(params) {\r\n //setDropdownMenuHotKeys(\r\n // {\r\n // onModalShown: false,\r\n // modal: 'modalId',\r\n // onEnter: function (searchContainer, elFocused) { }\r\n // onUp: function (searchContainer, elFocused) { }\r\n // onDown: function (searchContainer, elFocused) { }\r\n // onF6: function (searchContainer, elFocused) { }\r\n // onF9: function (searchContainer, elFocused) { }\r\n // }\r\n //);\r\n\r\n $(document).on('keydown', function (e) {\r\n let elFocused = $(e.currentTarget.activeElement);\r\n let elContainer = $('#' + params.searchContainer);\r\n\r\n if (params.modalID === '' || params.modalID === undefined || params.modalID === null) {\r\n\r\n //if (!$('.modal').hasClass('show')) {\r\n if (!$('.modal').hasClass('show')) {\r\n if (e.ctrlKey) {\r\n try {\r\n switch (e.which) {\r\n //CTRL+A\r\n case 65:\r\n if (typeof params.onCtrlA == \"function\" && !elFocused.is('input[type=text], input[type=number]')) {\r\n e.preventDefault();\r\n params.onCtrlA(elContainer, elFocused);\r\n } \r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n if (!elFocused.hasClass('k-datatable__row')) {\r\n try {\r\n switch (e.which) {\r\n //ENTER\r\n case 13:\r\n if (typeof params.onEnter == \"function\") {\r\n e.preventDefault();\r\n params.onEnter(elContainer, elFocused);\r\n }\r\n break;\r\n //UP\r\n case 38:\r\n if (typeof params.onUp == \"function\") {\r\n e.preventDefault();\r\n params.onUp(elContainer, elFocused);\r\n }\r\n break;\r\n //DOWN\r\n case 40:\r\n if (typeof params.onDown == \"function\") {\r\n e.preventDefault();\r\n params.onDown(elContainer, elFocused);\r\n }\r\n break;\r\n //F6\r\n case 117:\r\n if (typeof params.onF6 == \"function\") {\r\n e.preventDefault();\r\n params.onF6(elContainer, elFocused);\r\n }\r\n break;\r\n //F9\r\n case 120:\r\n if (typeof params.onF9 == \"function\") {\r\n e.preventDefault();\r\n params.onF9(elContainer, elFocused);\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n } else {\r\n try {\r\n switch (e.which) {\r\n //F6\r\n case 117:\r\n if (typeof params.onF6 == \"function\") {\r\n e.preventDefault();\r\n params.onF6(elContainer, elFocused);\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n let elModal = $('#' + params.modalID);\r\n var openmodal = openmodals[openmodals.length - 1];\r\n\r\n if (elModal.hasClass('show') && $('#' + openmodal).is(':visible') && params.modalID.toString() === openmodal) {\r\n //let elFocused = $(e.currentTarget.activeElement);\r\n //let elContainer = $('#' + params.searchContainer);\r\n\r\n try {\r\n if (e.ctrlKey) {\r\n switch (e.which) {\r\n //CTRL+A\r\n case 65:\r\n e.preventDefault();\r\n if (typeof params.onCtrlA == \"function\") {\r\n params.onCtrlA(elContainer, elFocused);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n switch (e.which) {\r\n //ENTER\r\n case 13:\r\n e.preventDefault();\r\n if (typeof params.onEnter == \"function\") {\r\n params.onEnter(elContainer, elFocused);\r\n }\r\n break;\r\n //UP\r\n case 38:\r\n e.preventDefault();\r\n if (typeof params.onUp == \"function\") {\r\n params.onUp(elContainer, elFocused);\r\n }\r\n break;\r\n //DOWN\r\n case 40:\r\n e.preventDefault();\r\n if (typeof params.onDown == \"function\") {\r\n params.onDown(elContainer, elFocused);\r\n }\r\n break;\r\n //F6\r\n case 117:\r\n e.preventDefault();\r\n if (typeof params.onF6 == \"function\") {\r\n params.onF6(elContainer, elFocused);\r\n }\r\n break;\r\n //F7\r\n case 118:\r\n if (typeof params.onF7 == \"function\") {\r\n e.preventDefault();\r\n params.onF7(elContainer, elFocused);\r\n }\r\n break;\r\n //F8\r\n case 119:\r\n if (typeof params.onF8 == \"function\") {\r\n e.preventDefault();\r\n params.onF8(elContainer, elFocused);\r\n }\r\n break;\r\n //F9\r\n case 120:\r\n e.preventDefault();\r\n if (typeof params.onF9 == \"function\") {\r\n params.onF9(elContainer, elFocused);\r\n }\r\n break;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n }\r\n\r\n });\r\n}\r\n\r\nfunction SetFormIndexHotKey(params) {\r\n\r\n //SetFormIndexHotKey(\r\n // {\r\n // form: $('#form'),\r\n // override: null,\r\n // }\r\n //);\r\n\r\n //let listInput = params.form.find('input[type=text]:visible, select.bootstrap-select ~ button:not(:disabled):visible, .k-checkbox > span');\r\n //let listInput = params.form.find('input[type=text]:visible, select.bootstrap-select ~ button:visible, select.selectpicker ~ button:visible, .k-checkbox > span');\r\n let listInput = params.form.find('input[type=text]:visible, select ~ button, .k-checkbox > span');\r\n\r\n listInput.each((i, el) => {\r\n $(el).addClass('mas-record').attr('tabindex', 0).attr('data-mas-index', i);\r\n });\r\n\r\n params.form.on('keydown', '.mas-record', e => {\r\n if (e.which == 13) {\r\n e.preventDefault();\r\n\r\n if (params.override == undefined || params.override == null) {\r\n console.log(e);\r\n let i = parseInt($(e.target).attr('data-mas-index'));\r\n\r\n //Avoid Quick-Search text input\r\n if ($(listInput[i]).hasClass('.quick-search')) { return; }\r\n\r\n if (i + 1 > listInput.length) { $(listInput[0]).focus(); }\r\n else { $(listInput[i + 1]).focus(); }\r\n }\r\n else {\r\n params.override(listInput, listInput[i],nextInput[i+1]);\r\n }\r\n \r\n }\r\n });\r\n}\r\n\r\nfunction SetFormHotkey(params) {\r\n //SetFormHotkey({\r\n // modal: $('#modal'),\r\n // firstinput: modal.find('#txt'),\r\n // onF8: \r\n // savebutton:\r\n // onF7:\r\n // savecontinuebutton:\r\n // onEnter: {} //object\r\n //});\r\n\r\n let listFormInputs = params.modal.find('input:not([type=hidden]), textarea, select.bootstrap-select ~ button');\r\n let prev_index = 0;\r\n listFormInputs.each((i, el) => {\r\n $(el).addClass('mas-record').attr('tabindex', 0).attr('data-mas-index', i);\r\n\r\n if ($(el).attr('required')) {\r\n $(el).parent().addClass('mas-required');\r\n }\r\n\r\n });\r\n \r\n\r\n $(document).on('keydown', function (e) {\r\n if (params.modal !== undefined && params.modal !== null) {\r\n\r\n var openmodal = openmodals[openmodals.length - 1];\r\n if (\r\n params.modal.hasClass('show')\r\n && $(params.modal).attr('id') == openmodal\r\n )\r\n {\r\n\r\n if (e.altKey) {\r\n switch (e.which) {\r\n case 73:\r\n if (params.hasOwnProperty(\"altKey\")) {\r\n if (params.altKey.hasOwnProperty(\"onI\")) {\r\n if (params.altKey.onI !== undefined && params.altKey.onI !== null) {\r\n e.preventDefault();\r\n params.altKey.onI(params.modal);\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n } else if (e.ctrlKey) {\r\n switch (e.which) {\r\n case 65: \r\n if (typeof params.onCtrlA == \"function\" && !$(document.activeElement).is('input[type=text]')) {\r\n e.preventDefault();\r\n params.onCtrlA();\r\n }\r\n break; \r\n }\r\n }\r\n else {\r\n switch (e.which) {\r\n case 27:\r\n e.preventDefault();\r\n if (params.onEsc !== undefined && params.onEsc !== null) {\r\n params.onEsc(params.modal);\r\n }\r\n break;\r\n case 117:\r\n e.preventDefault();\r\n if (params.onF6 !== undefined && params.onF6 !== null) {\r\n params.onF6(params.modal);\r\n }\r\n break;\r\n case 119:\r\n e.preventDefault();\r\n if (params.onF8 !== undefined && params.onF8 !== null) {\r\n params.onF8(params.modal);\r\n }\r\n else {\r\n if (params.savebutton !== undefined && params.savebutton !== null) {\r\n params.savebutton.click();\r\n }\r\n }\r\n break;\r\n case 118:\r\n e.preventDefault();\r\n if (params.onF7 !== undefined && params.onF7 !== null) {\r\n params.onF7(params.modal);\r\n } else {\r\n if (params.savecontinuebutton !== undefined && params.savecontinuebutton !== null) {\r\n params.savecontinuebutton.click();\r\n }\r\n }\r\n break;\r\n case 122:\r\n e.preventDefault();\r\n if (params.onF11 !== undefined && params.onF11 !== null) {\r\n params.onF11(params.modal);\r\n } \r\n break;\r\n case 123:\r\n e.preventDefault();\r\n if (params.onF12 !== undefined && params.onF12 !== null) {\r\n params.onF12(params.modal);\r\n } \r\n break;\r\n default:\r\n //e.preventDefault();\r\n //let elementFocused = $(e.currentTarget.activeElement);\r\n //elementFocused.next().focus();\r\n break;\r\n }\r\n\r\n }\r\n\r\n //if (e.which == 13) {\r\n // if (params.onEnter !== undefined && params.onEnter !== null) {\r\n // params.onEnter(modal);\r\n // } else {\r\n // var elementFocused = $(e.currentTarget.activeElement);\r\n // elementFocused.next().focus();\r\n // }\r\n //}\r\n }\r\n }\r\n });\r\n\r\n params.modal.on('keydown', '.mas-record', e => {\r\n let i = parseInt($(e.target).attr('data-mas-index')),\r\n id = $(e.target).attr('id'),\r\n currentInput = $(listFormInputs[i]),\r\n nextInput = $(listFormInputs[i + 1]);\r\n\r\n if (e.which == 13) {\r\n //Avoid Quick-Search text input, and textarea\r\n if (currentInput.is('.quick-search, textarea, .tt-input')) { return; }\r\n\r\n if (typeof params.onEnter == \"object\") {\r\n if (params.onEnter.hasOwnProperty(id) && typeof params.onEnter[id] == \"function\") {\r\n params.onEnter[id](e, listFormInputs, currentInput, nextInput);\r\n } else {\r\n proceedToNextElement(e, i, nextInput);\r\n }\r\n } else {\r\n\r\n if (currentInput.is('input:checkbox')) {\r\n currentInput.trigger('click');\r\n proceedToNextElement(e, i, nextInput);\r\n } else {\r\n proceedToNextElement(e, i, nextInput);\r\n }\r\n }\r\n } else {\r\n if (e.which == 9 && e.shiftKey == false) {\r\n prev_index = i;\r\n proceedToNextElement(e, i, nextInput);\r\n }\r\n }\r\n\r\n });\r\n\r\n //params.modal.on('keyup', '.mas-record', e => {\r\n // let i = prev_index,\r\n // lastMasRecordInput = $(listFormInputs[i]),\r\n // nextInput = $(listFormInputs[i + 1]);\r\n\r\n // if (e.which == 9 && !e.shiftKey) {\r\n\r\n // if (!$(document.activeElement).is(':visible:not(.tt-hint):not(.search-input-custom):not(.quick-search)')) {\r\n // proceedToNextElement(e, i, nextInput);\r\n // }\r\n // }\r\n //});\r\n\r\n params.modal.on('focus', '.mas-record', e => {\r\n if ($(e.currentTarget).is('input[type=\"text\"], input[type=\"number\"], textarea')) {\r\n $(e.currentTarget).select();\r\n }\r\n });\r\n\r\n //Initial Modal Shown\r\n firstInputEvent();\r\n\r\n params.modal.on('shown.bs.modal', function () {\r\n firstInputEvent();\r\n });\r\n\r\n\r\n function firstInputEvent() {\r\n if (params.firstinput !== undefined && typeof params.firstinput != \"function\") {\r\n params.firstinput.focus();\r\n }\r\n else if (typeof params.firstinput == \"function\") {\r\n params.firstinput(); // FOR OVERRIDE\r\n }\r\n else {\r\n params.modal.find('form input:not([readonly]):enabled:visible:first').focus();\r\n }\r\n }\r\n\r\n function proceedToNextElement(e, i, nextInput) {\r\n if (i + 1 > listFormInputs.length) {\r\n //e.preventDefault();\r\n //$(listFormInputs[0]).focus();\r\n }\r\n else {\r\n getNextVisibleInput(e, i, nextInput);\r\n //$(listFormInputs[i + 1]).focus();\r\n }\r\n }\r\n\r\n function getNextVisibleInput(e,i, nextInput) {\r\n if (nextInput.is(\":visible\") && nextInput.is(\":not(.tt-hint):not(:disabled):not([readonly])\")) {\r\n e.preventDefault();\r\n\r\n if (nextInput.hasClass('pointer-events-none')) {\r\n return;\r\n } else {\r\n nextInput.focus();\r\n }\r\n\r\n return;\r\n } else {\r\n i++;\r\n nextInput = $(listFormInputs[i + 1]);\r\n proceedToNextElement(e, i, nextInput);\r\n }\r\n }\r\n\r\n \r\n}\r\n\r\nfunction SetModalHotkeys(params) {\r\n\r\n}","\"use strict\"\r\n\r\n// undefined or null detail\r\nfunction dataNullOrEmpty(string) {\r\n\r\n if (typeof string == \"string\") {\r\n string = string.trim();\r\n }\r\n\r\n if (string === null || string === \"\" || string === \"1/1/1900\" || string === \"01/01/1900\" || string === \"//\"\r\n || string === \"Invalid date\" || string === \"Invalid date - Invalid date\" || string === undefined || string === \", , \" || string === \"--select--\") {\r\n return \"NOT SPECIFIED\";\r\n } else {\r\n return string;\r\n }\r\n}\r\n\r\n\r\n// undefined or null detail v2 but returns empty string\r\nfunction dataNullOrEmptyV2(string) {\r\n if (string === null || string === \"\" || string === \"1/1/1900\" || string === \"01/01/1900\" || string === \"//\"\r\n || string === \"Invalid date\" || string === \"Invalid date - Invalid date\" || string === undefined || string === \", , \") {\r\n return \"\";\r\n } else {\r\n return string;\r\n }\r\n}\r\n\r\n//for checking of empty tin\r\nfunction dataNullOrEmptyV3(string) {\r\n\r\n if (typeof string == \"string\") {\r\n string = string.trim();\r\n }\r\n\r\n string.replace(/-/g, '');\r\n string = stringToParseFloat(string);\r\n\r\n if(string === 0) {\r\n return \"NOT SPECIFIED\";\r\n } else {\r\n return string;\r\n }\r\n}\r\n\r\nfunction replaceStringIfMatch(string, match) {\r\n if (string.trim() === match.trim()) {\r\n return \"\";\r\n } else {\r\n return string;\r\n }\r\n}\r\n\r\n// Format input to currency\r\nfunction formatToCurrency(number) {\r\n const fixedNumber = Number.parseFloat(number).toFixed(2);\r\n let formattedNumber = String(fixedNumber).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n formattedNumber = formattedNumber ? formattedNumber : \"0.00\";\r\n\r\n return formattedNumber;\r\n\r\n}\r\n\r\n// Format input to currency without rounding off\r\nfunction formatToCurrencyNoRounding(number) {\r\n const fixedNumber = Number.parseFloat(number.toString().match(/^-?\\d+(?:\\.\\d{0,2})?/)[0]).toFixed(2);\r\n let formattedNumber = String(fixedNumber).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n formattedNumber = formattedNumber ? formattedNumber : \"0.00\";\r\n\r\n return formattedNumber;\r\n\r\n}\r\n\r\nfunction formatToCurrencyFourDecimalPlaces(number) {\r\n let fixedNumber = (Math.floor(number * 10000) / 10000).toFixed(4);\r\n let numParts = fixedNumber.toString().split('.');\r\n let formattedNumber = numParts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + (numParts[1] ? \".\" + numParts[1] : \"\");\r\n\r\n return formattedNumber;\r\n}\r\n\r\n// Format input to decimal places\r\nfunction formatToDecimalPlaces(number, decimal = 2) {\r\n return Number.parseFloat(number).toFixed(decimal);\r\n}\r\n\r\n// Format input to decimal without rounding off\r\nfunction formatToDecimalNoRounding(number) {\r\n return Number.parseFloat(number.toString().match(/^-?\\d+(?:\\.\\d{0,2})?/)[0]);\r\n}\r\n\r\nfunction formatToNumber(number) {\r\n return String(number).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n}\r\n\r\nfunction roundOff(n, decimals = 2) {\r\n return +(n).toFixed(decimals);\r\n}\r\n\r\n// Format to Capital Casing\r\nString.prototype.toCapitalCasing = function () {\r\n\r\n //if (typeof this != \"string\") {\r\n // return this;\r\n //}\r\n\r\n return this.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });\r\n};\r\n\r\n// Is Null or Empty\r\nString.prototype.isEmptyThen = function (stringDefault = \"\") {\r\n\r\n //if (typeof this != \"string\") {\r\n // return this;\r\n //}\r\n\r\n if (this == null || this.trim() == \"\") {\r\n return stringDefault;\r\n }\r\n else {\r\n return this;\r\n }\r\n};\r\n\r\n// Escapes \"/[\\\\\"']/\" in string\r\nString.prototype.addSlashes = function () {\r\n\r\n //if (typeof this != \"string\") {\r\n // return this;\r\n //}\r\n\r\n //no need to do (str+'') anymore because 'this' can only be a string\r\n return this.replace(/[\\\\\"']/g, '\\\\$&').replace(/\\u0000/g, '\\\\0');\r\n};\r\n\r\n//retrieve\r\nfunction toSentenceCase(a) {\r\n return a.toLowerCase().replace(/(?:^|\\s)\\w/g, function (match) {\r\n return match.toUpperCase();\r\n });\r\n}\r\n\r\nfunction validateEmail(string) {\r\n let email = string;\r\n let re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n //returns true or false\r\n return re.test(email);\r\n}\r\n\r\nfunction setValueIfNull(newvalue, fields) {\r\n for (var i = 0; i < fields.length; i++) {\r\n try {\r\n let value = fields[i].val().trim();\r\n if (value.length === 0) {\r\n fields[i].val(newvalue);\r\n }\r\n } catch (ex) {\r\n //\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction setValueIf(oldvalue, newvalue, fields) {\r\n for (i = 0; i < fields.length; i++) {\r\n try {\r\n let value = fields[i].val().trim();\r\n if (value === oldvalue) {\r\n fields[i].val(newvalue);\r\n }\r\n } catch (ex) {\r\n //\r\n }\r\n }\r\n}\r\n\r\nfunction returnValueIf(value, compareto, newvalue) {\r\n if (value === compareto) {\r\n return (newvalue);\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\nfunction tinFormat(field, num) {\r\n let regex = /^[0-9-]+$/;\r\n if (!regex.test(num)) {\r\n return \"\";\r\n }\r\n\r\n let length = num.length;\r\n\r\n if (length === 3 || length === 7 || length === 11) {\r\n num = num + \"-\";\r\n }\r\n\r\n if (length >= 16) {\r\n num = num.substring(0, 15);\r\n if (num.indexOf(\"-\") >= 0) {\r\n if (num.match(/-/gi).length !== 3) {\r\n num = \"\";\r\n }\r\n } else {\r\n num = \"\";\r\n }\r\n }\r\n\r\n field.val(num);\r\n}\r\n\r\nfunction replaceDoubleQuotes(str) {\r\n return str.replace(/\"/g, \"'\");\r\n}\r\n\r\nfunction padZeroes(number, length) {\r\n let str = '' + number;\r\n while (str.length < length) {\r\n str = '0' + str;\r\n }\r\n\r\n return str;\r\n\r\n}\r\n\r\nfunction padLeft(number, size) {\r\n var s = \"000000\" + number;\r\n return s.substr(s.length - size);\r\n}\r\n\r\nfunction truncate(n, useWordBoundary) {\r\n if (this.length <= n) { return this; }\r\n if (this.length === undefined || this.length === null) { return ''; }\r\n let subString = this.substr(0, n - 1);\r\n return (useWordBoundary\r\n ? subString.substr(0, subString.lastIndexOf(' '))\r\n : subString) + htmlDecode(\"…\");\r\n}\r\n\r\nfunction removeCommas(str = '') {\r\n return str.replace(',', '');\r\n}\r\n\r\nfunction nullToStringDefault(value) {\r\n if (value === null) {\r\n return \"\";\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\nfunction capitalizedString(string) {\r\n\r\n if (string !== undefined) {\r\n\r\n if (string !== '') {\r\n string = string.toLowerCase();\r\n return string.toCapitalCasing();\r\n } else {\r\n return string;\r\n }\r\n \r\n } else {\r\n return string;\r\n }\r\n\r\n //return string.toCapitalCasing();\r\n}\r\n\r\nfunction removeSpecialChars(str) {\r\n if (str !== null) {\r\n return str.replace(/[^A-Z0-9]/ig, \"_\");\r\n } else {\r\n return str;\r\n }\r\n}\r\n\r\nfunction getProviderAddress(data) {\r\n try {\r\n let address = \"\";\r\n\r\n if (data.streetaddress != \"\") {\r\n address = data.streetaddress;\r\n }\r\n\r\n if (data.cityname != \"\") {\r\n address === \"\" ? address = data.cityname : address = address + \", \" + data.cityname;\r\n }\r\n\r\n if (data.provincename != \"\") {\r\n address === \"\" ? address = data.provincename : address = address + \", \" + data.provincename;\r\n }\r\n\r\n return address;\r\n }\r\n catch (exception) {\r\n throw new Error(\"Check provider details given\");\r\n }\r\n}\r\n\r\nfunction getCompleteAddress(streetaddress, cityname, provincename) {\r\n try {\r\n let address = \"\";\r\n\r\n if (streetaddress != \"\") {\r\n address = streetaddress;\r\n }\r\n\r\n if (cityname != \"\") {\r\n address === \"\" ? address = cityname : address = address + \", \" + cityname;\r\n }\r\n\r\n if (provincename != \"\") {\r\n address === \"\" ? address = provincename : address = address + \", \" + provincename;\r\n }\r\n\r\n return address;\r\n }\r\n catch (exception) {\r\n throw new Error(\"Check account details given\");\r\n }\r\n}\r\n\r\nfunction convertPoundsToKilo(pounds) {\r\n if (pounds === \"\") pounds = 0;\r\n pounds = parseFloat(pounds);\r\n if (!isNaN(pounds)) {\r\n let kilo = pounds * 0.45359237;\r\n return Math.round(kilo * 100) / 100;\r\n } else { \r\n throw new Error(\"The weight given is invalid.\");\r\n }\r\n\r\n\r\n}\r\n\r\nfunction convertKiloToPounds(kilo) {\r\n if (kilo === \"\") kilo = 0;\r\n\r\n kilo = parseFloat(kilo);\r\n if (!isNaN(kilo)) {\r\n let pounds = kilo / 0.45359237;\r\n return Math.round(pounds * 100) / 100;\r\n } else {\r\n throw new Error(\"The weight given is invalid.\");\r\n }\r\n\r\n\r\n}\r\n\r\nfunction convertFeetToMeter(feet, inches) {\r\n\r\n let error = 0;\r\n\r\n if (feet === \"\") feet = 0;\r\n if (inches === \"\") inches = 0;\r\n\r\n feet = parseInt(feet);\r\n inches = parseFloat(inches);\r\n\r\n if (isNaN(feet)) error++;\r\n if (isNaN(inches)) error++;\r\n\r\n\r\n if (error === 0) {\r\n let meter = ((feet * 12) + inches) / 39.3701;\r\n return Math.round(meter * 100) / 100;\r\n //let meter = ((feet * 12) + inches) * 0.0254;\r\n //return Math.round(meter * 100) / 100;\r\n } else {\r\n throw new Error(\"The height given is invalid.\");\r\n }\r\n\r\n}\r\n\r\nfunction convertMeterToFeet(meter) {\r\n let inches, feet;\r\n\r\n meter = parseFloat(meter);\r\n\r\n if (!isNaN(meter)) {\r\n\r\n feet = meter * 3.28;\r\n\r\n inches = (feet - Math.floor(feet)) * 12;\r\n\r\n //inches = meter / 0.0254;\r\n //feet = Math.floor(inches / 12);\r\n //inches = inches - (feet * 12);\r\n\r\n return {\r\n //inches: Math.round(inches * 100) / 100,\r\n inches: Math.round(inches),\r\n feet: Math.floor(feet)\r\n };\r\n\r\n } else {\r\n throw new Error(\"The number given is invalid.\");\r\n }\r\n\r\n}\r\n\r\nfunction stringToParseFloat(str) {\r\n if (typeof str == \"string\") {\r\n str == \"\" ? str = \"0\" : str = str;\r\n str = str.replace(/,/g, '');\r\n return parseFloat(str);\r\n }\r\n else {\r\n return str;\r\n }\r\n}\r\n\r\nfunction ordinalSuffixOf(i) {\r\n var j = i % 10,\r\n k = i % 100;\r\n if (j == 1 && k != 11) {\r\n return i + \"st\";\r\n }\r\n if (j == 2 && k != 12) {\r\n return i + \"nd\";\r\n }\r\n if (j == 3 && k != 13) {\r\n return i + \"rd\";\r\n }\r\n return i + \"th\";\r\n}\r\n\r\nfunction setSelectionRange(input, selectionStart, selectionEnd) {\r\n if (input.setSelectionRange) {\r\n input.focus();\r\n input.setSelectionRange(selectionStart, selectionEnd);\r\n } else if (input.createTextRange) {\r\n var range = input.createTextRange();\r\n range.collapse(true);\r\n range.moveEnd('character', selectionEnd);\r\n range.moveStart('character', selectionStart);\r\n range.select();\r\n }\r\n}\r\n\r\nfunction setCaretToPos(input, pos) {\r\n setSelectionRange(input, pos, pos);\r\n}\r\n\r\nfunction getFlooredFixed(v, d) {\r\n return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);\r\n}\r\n\r\nfunction htmlDecode(input) {\r\n let doc = new DOMParser().parseFromString(input, \"text/html\");\r\n return doc.documentElement.textContent;\r\n}","function fillup_form(params) {\r\n\r\n //fillup_form({\r\n // data: '{}',\r\n // container: modal,\r\n // disablefields: true,\r\n // values: [{\r\n // element: 'txtAccountInitials', //element id\r\n // elementtpye: 'text', //elementtpye [text,dropdown,checkbox,radiobutton]\r\n // data: 'lname', //datakey\r\n // datatype: 'text', //data type [text,currency,number,date]\r\n // callback: function(data){} //custom function for field\r\n // }\r\n // ]\r\n //});\r\n\r\n let data;\r\n\r\n //add option for function\r\n if (typeof params.data == \"function\") {\r\n data = params.data();\r\n } else {\r\n data = params.data;\r\n }\r\n\r\n let container = params.container;\r\n let values = params.values;\r\n let disablefields = params.disablefields;\r\n let placeholder = params.placeholder !== undefined && params.placeholder !== null ? params.placeholder : '';\r\n let withplaceholder = params.withplaceholder;\r\n\r\n for (let i = 0; i < values.length; i++) {\r\n let _element = container.find('#' + values[i].element);\r\n let _elementtype = values[i].elementtpye;\r\n let _data = values[i].data;\r\n let _datatype = values[i].datatype;\r\n let _callback = values[i].callback;\r\n \r\n\r\n if (_element !== undefined) {\r\n switch (_elementtype) {\r\n case 'label':\r\n if (_data !== null) {\r\n\r\n switch (_datatype) {\r\n case 'currency':\r\n _data = formatToCurrency(_data)\r\n break;\r\n case 'number':\r\n _data = formatToNumber(_data)\r\n break;\r\n case 'date':\r\n _data = convertDateMMDDYYYY(_data)\r\n break;\r\n default:\r\n if (_data !== undefined && _data !== '' && _data !== null) {\r\n _data = _data;\r\n\r\n } else {\r\n if (withplaceholder) {\r\n _data = placeholder;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n _element.text(_data);\r\n\r\n if (_callback !== undefined) {\r\n values[i].callback(_data, _element);\r\n }\r\n } else {\r\n\r\n }\r\n break;\r\n case 'text':\r\n if (_data !== null) {\r\n switch (_datatype) {\r\n case 'currency':\r\n _data = formatToCurrency(_data)\r\n break;\r\n case 'number':\r\n _data = formatToNumber(_data)\r\n break;\r\n case 'date':\r\n _data = convertDateMMDDYYYY(_data)\r\n break;\r\n default:\r\n _data = _data;\r\n break;\r\n }\r\n _element.val(_data);\r\n\r\n if (disablefields) {\r\n _element.prop('readonly', true);\r\n }\r\n\r\n if (_callback !== undefined) {\r\n values[i].callback(_data, _element);\r\n }\r\n }\r\n break;\r\n case 'dropdown':\r\n if (_data !== null) {\r\n switch (_datatype) {\r\n case 'text':\r\n $(_element).selectpicker('val', _data.toUpperCase());\r\n break;\r\n case 'number':\r\n $(_element).selectpicker('val', _data);\r\n break;\r\n\r\n default:\r\n\r\n break;\r\n }\r\n }\r\n break;\r\n case 'checkbox':\r\n if (_data !== null) {\r\n\r\n _element.prop('checked', _data);\r\n\r\n }\r\n break;\r\n case 'radiobutton':\r\n if (_data !== null) {\r\n\r\n\r\n\r\n\r\n \r\n }\r\n break;\r\n default:\r\n if (_data !== null) {\r\n switch (_datatype) {\r\n case 'currency':\r\n _data = formatToCurrency(_data)\r\n break;\r\n case 'number':\r\n _data = formatToNumber(_data)\r\n break;\r\n case 'date':\r\n _data = convertDateMMDDYYYY(_data)\r\n break;\r\n default:\r\n _data = _data;\r\n break;\r\n }\r\n _element.val(_data);\r\n _element.prop('readonly', true);\r\n }\r\n break;\r\n }\r\n } else {\r\n console.log('element not found');\r\n }\r\n }\r\n}\r\n\r\nfunction fillupformbyname(params = {\r\n data: null,\r\n container: null,\r\n dateFields: null,\r\n currencyFields: null,\r\n timefields: null,\r\n selectFields: null,\r\n numberFields: null,\r\n placeholder: 'Not Specified'\r\n}) {\r\n\r\n //fillupformbyname({\r\n // data: '{}',\r\n // container: modal,\r\n // dateFields: {},\r\n // currencyFields: {},\r\n // timefields: {},\r\n // selectFields: {},\r\n // numberFields: {},\r\n //});\r\n\r\n const keys = Object.keys(params.data);\r\n const values = Object.values(params.data);\r\n const container = params.container;\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n let elInput = container.find(\"[name='\" + keys[i] + \"']\");\r\n let dataValue = values[i];\r\n let dataKey = keys[i];\r\n if (elInput.is('textarea')) {\r\n elInput.val(dataValue);\r\n } else if(elInput.is(':checkbox')) {\r\n elInput.prop('checked', dataValue);\r\n } else if (elInput.is(':radio')) {\r\n container.find(\"[name='\" + dataKey + \"'][value='\" + dataValue + \"']\").prop('checked', true);\r\n } else if (elInput.tagName === \"DIV\") {\r\n if (dataValue === '' || dataValue === undefined || dataValue === null) {\r\n elInput.html(params.placeholder);\r\n } else {\r\n elInput.html(dataValue);\r\n }\r\n } else {\r\n elInput.val(dataValue);\r\n }\r\n\r\n for (let sKey in params.dateFields) {\r\n if (sKey === dataKey) {\r\n if (elInput.is('div')) {\r\n elInput.html(convertDateMMDDYYYY(dataValue));\r\n } else {\r\n if (dataValue !== null && dataValue !== undefined) {\r\n elInput.val(convertDateMMDDYYYY(dataValue));\r\n elInput.datepicker('update');\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let sKey in params.currencyFields) {\r\n if (sKey === dataKey) {\r\n if (elInput.is('div')) {\r\n elInput.html(formatToCurrency(dataValue));\r\n } else {\r\n if (dataValue !== null && dataValue !== undefined) {\r\n elInput.val(formatToCurrency(dataValue));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (params.numberFields !== null && params.numberFields !== undefined) {\r\n params.numberFields.forEach(function (key) {\r\n if (key === dataKey) {\r\n if (elInput.tagName = \"DIV\") {\r\n elInput.html(formatToNumber(dataValue));\r\n } else {\r\n if (dataValue !== null && dataValue !== undefined) {\r\n elInput.val(formatToNumber(dataValue));\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let sKey in params.selectFields) {\r\n if (sKey === dataKey) {\r\n let elInput = container.find(\"[name='\" + params.selectFields[sKey] + \"']\");\r\n if (dataValue !== null && dataValue !== undefined) {\r\n elInput.selectpicker('val', dataValue).selectpicker('refresh');\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction fillUpForm(data, container, dateFields = {}, currencyFields = {}, timefields = {}, selectFields = {}, numberFields = {}) {\r\n const keys = Object.keys(data);\r\n const values = Object.values(data);\r\n \r\n for (let i = 0; i < keys.length; i++) {\r\n if (container.find(\"[name='\" + keys[i] + \"']\").is('textarea')) {\r\n container.find(\"textarea[name='\" + keys[i] + \"']\").val(values[i]);\r\n } else if (container.find(\"[name='\" + keys[i] + \"']\").is(':checkbox')) {\r\n container.find(\"input[name='\" + keys[i] + \"']\").prop('checked', values[i]);\r\n } else if (container.find(\"[name='\" + keys[i] + \"']\").is(':radio')) {\r\n container.find(\"input[name='\" + keys[i] + \"'][value='\" + values[i] + \"']\").prop('checked', true);\r\n } else {\r\n container.find(\"input[name='\" + keys[i] + \"']\").val(values[i]);\r\n }\r\n\r\n for (let key in dateFields) {\r\n if (key === keys[i]) {\r\n container.find('#' + dateFields[key]).val(convertDateMMDDYYYY(values[i]));\r\n container.find('#' + dateFields[key]).datepicker('update');\r\n break;\r\n }\r\n }\r\n\r\n for (let ckey in currencyFields) {\r\n if (ckey === keys[i]) {\r\n container.find('#' + currencyFields[ckey]).val(formatToCurrency(values[i]));\r\n break;\r\n }\r\n }\r\n\r\n for (let ckey in numberFields) {\r\n if (ckey === keys[i]) {\r\n container.find('#' + numberFields[ckey]).val(formatToNumber(values[i]));\r\n break;\r\n }\r\n }\r\n\r\n for (let sKey in selectFields) {\r\n if (sKey === keys[i]) {\r\n if (container.find('#' + selectFields[sKey]).attr(\"multiple\")) {\r\n switch (keys[i]) {\r\n case 'membertype':\r\n case 'roomcoverage':\r\n container.find('#' + selectFields[sKey]).selectpicker('val', values[i].split('')).selectpicker('refresh');\r\n break;\r\n case 'claimserviceindex':\r\n container.find('#' + selectFields[sKey]).selectpicker('val', values[i].split('_')).selectpicker('refresh');\r\n break;\r\n }\r\n } else {\r\n container.find('#' + selectFields[sKey]).selectpicker('val', values[i]).selectpicker('refresh');\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n"]}