var checkUrlExists = function (url) { var req = new XMLHttpRequest(); req.open('HEAD', url, false); req.send(); if (req.status == "404") return false; return true; } var redirect = function (url) { if (window.parent != null) { window.parent.location = url; } else { window.location = url; } } var asyncAjax = async function (url, data, contentType) { if (contentType == null) contentType = "json"; var parms = data; if (contentType == "json") parms = JSON.stringify(data); var params = { method: 'POST', body: parms, headers: { } }; if (contentType != "?") params.headers["Content-Type"] = 'application/' + contentType; try { const response = await fetch(url, params); if (response.redirected) { redirect(response.url); return; } const data = await response.text(); var jdata; if (typeof (data) == "string") { if (data.startsWith("error:")) { throw data; } else try { jdata = JSON.parse(data); if (typeof (jdata) == "string") { //repetimos asignacion en caso de que vengan dobles comillas al principio jdata = JSON.parse(jdata); } } catch { jdata = data; } } else jdata = data; if (response.status == 500) { throw "El servidor ha retornado un error Codigo 500"; } else if(response.status == 404) { throw response.statusText; } else if (response.status == 401 || response.status == 301) { redirect('/login.html'); return; } if (jdata) { if (jdata.error) { throw jdata.error; } else if (jdata.redirect) { redirect(jdata.redirect); return; } else return (jdata); } else return null; } catch (error) { throw error; } } var doAjax = function (url, json, onsuccess, onerror) { $.ajax(url, { type: "POST", dataType: 'text', // type of response data timeout: 30000, // timeout milliseconds data: JSON.stringify(json), success: function (data, status, xhr) { if (data.startsWith("error:")) { onerror(data); } else if (data != "") { jdata = JSON.parse(data); if (jdata.error) onerror(jdata.error) else onsuccess(jdata); } else onsuccess(data); }, error: function (jqXhr, textStatus, errorMessage) { onerror(errorMessage); } }); } var download = async function (url, json) { var options = { method: 'POST', body: JSON.stringify(json), headers: { 'Content-Type': 'application/json' } } const response = await fetch(url, options); blob = await response.blob(); var file = window.URL.createObjectURL(blob); window.location.assign(file); } var download = async function (url, json) { var options = { method: 'POST', body: JSON.stringify(json), headers: { 'Content-Type': 'application/json' } } const response = await fetch(url, options); blob = await response.blob(); var file = window.URL.createObjectURL(blob); var a = document.createElement("a"); document.body.appendChild(a); a.href = url; a.download = "export.zip"; a.click(); window.URL.revokeObjectURL(file); } var download = async function (url, json) { var a = document.createElement("a"); document.body.appendChild(a); a.href = url + "?json=" + escape(JSON.stringify(json));; //a.download = "export.zip"; a.click(); } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function stringtoHex(str) { var arr1 = []; for (var n = 0, l = str.length; n < l; n++) { var hex = Number(str.charCodeAt(n)).toString(16); arr1.push(hex); } return arr1.join(''); } function hextoString(str1) { var hex = str1.toString(); var str = ''; for (var n = 0; n < hex.length; n += 2) { str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); } return str; } function getParameter(key) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == key) { return pair[1]; } } return null; } function getHeaders() { var req = new XMLHttpRequest(); req.open('GET', document.location, false); req.send(null); // associate array to store all values var data = new Object(); // get all headers in one call and parse each item var headers = req.getAllResponseHeaders().toLowerCase(); var aHeaders = headers.split('\n'); var i = 0; for (i = 0; i < aHeaders.length; i++) { var thisItem = aHeaders[i]; var key = thisItem.substring(0, thisItem.indexOf(':')); var value = thisItem.substring(thisItem.indexOf(':') + 1); data[key] = value; } // get referer var referer = document.referrer; data["Referer"] = referer; //get useragent var useragent = navigator.userAgent; data["UserAgent"] = useragent; //extra code to display the values in html var display = ""; for (var key in data) { if (key != "") display += "" + key + " : " + data[key] + "
"; } return display; } function hasValue(value) { if (value != null && typeof value != "undefined" && value.toString() != "") { return true; } return false; } function toStr(value) { if (hasValue(value)) { return value.toString(); } return ""; } function toNumber(value) { if (hasValue(value)) { return Number(value); } return 0; } function formatNumber(value, digits) { if (!value) return null; var d = (digits ? digits : 2); return value.toLocaleString(undefined, {maximumFractionDigits: d, minimumFractionDigits: 0}); } var locale = window.navigator.userLanguage || window.navigator.language; function dateSeparator() { return (new Date().toLocaleString().indexOf("-") > 0 ? "-" : "/"); } function dateDiff(date1, date2, interval) { var second = 1000, minute = second * 60, hour = minute * 60, day = hour * 24, week = day * 7; date1 = new Date(date1); date2 = new Date(date2); var timediff = date2 - date1; if (isNaN(timediff)) return NaN; switch (interval) { case "years": return date2.getFullYear() - date1.getFullYear(); case "months": return ( (date2.getFullYear() * 12 + date2.getMonth()) - (date1.getFullYear() * 12 + date1.getMonth()) ); case "weeks": return Math.floor(timediff / week); case "days": return Math.floor(timediff / day); case "hours": return Math.floor(timediff / hour); case "minutes": return Math.floor(timediff / minute); case "seconds": return Math.floor(timediff / second); default: return undefined; } } function ddmmyyyy(value) { if (!value) return null; var d = value; if (!(Object.prototype.toString.call(value) === "[object Date]")) d = new Date(value); var dd = d.getDate(); var mm = d.getMonth() + 1; var yyyy = d.getFullYear(); if (dd < 10) { dd = '0' + dd; } if (mm < 10) { mm = '0' + mm; } var sep = dateSeparator(); return dd + sep + mm + sep + yyyy; } function yyyymmdd(value) { var d = value; if (!Object.prototype.toString.call(value) === "[object Date]") d = new Date(value); var dd = d.getDate(); var mm = d.getMonth() + 1; var yyyy = d.getFullYear(); if (dd < 10) { dd = '0' + dd; } if (mm < 10) { mm = '0' + mm; } var sep = dateSeparator(); return yyyy + sep + mm + sep + dd; } function yearOfDate(d) { var s = d.toISOString(); return s.substring(0, 4); } function monthOfDate(d) { var s = d.toISOString(); return s.substring(5, 7); } function dayOfDate(d) { var s = d.toISOString(); return s.substring(8, 10); } function getDateFormatString() { const formatObj = new Intl.DateTimeFormat(locale).formatToParts(new Date()); return formatObj .map(obj => { switch (obj.type) { case "day": return "DD"; case "month": return "MM"; case "year": return "YYYY"; default: return obj.value; } }) .join(""); } function toDate(value, format) { if (!format) format = getDateFormatString(); var normalized = value.replace(/[^a-zA-Z0-9]/g, '-'); var normalizedFormat = format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-'); var formatItems = normalizedFormat.split('-'); var dateItems = normalized.split('-'); var monthIndex = formatItems.indexOf("mm"); var dayIndex = formatItems.indexOf("dd"); var yearIndex = formatItems.indexOf("yyyy"); var hourIndex = formatItems.indexOf("hh"); var minutesIndex = formatItems.indexOf("ii"); var secondsIndex = formatItems.indexOf("ss"); var today = new Date(); var year = yearIndex > -1 ? dateItems[yearIndex] : today.getFullYear(); var month = monthIndex > -1 ? dateItems[monthIndex] - 1 : today.getMonth() - 1; var day = dayIndex > -1 ? dateItems[dayIndex] : today.getDate(); var hour = hourIndex > -1 ? dateItems[hourIndex] : today.getHours(); var minute = minutesIndex > -1 ? dateItems[minutesIndex] : today.getMinutes(); var second = secondsIndex > -1 ? dateItems[secondsIndex] : today.getSeconds(); return new Date(year, month, day, hour, minute, second); } function dateWithoutOffset(value) { let d = new Date(value); var userTimezoneOffset = d.getTimezoneOffset() * 60000; return new Date(d.getTime() - userTimezoneOffset); } function dateWithoutTime(value) { return new Date(value).setHours(0,0,0,0); } function Encode64(value) { //return Base64.encode(value); return btoa(value); } function Decode64(value) { return atoa(value); } function isJsonArray(obj) { return Object.prototype.toString.call(obj) === '[object Array]' } function jsonHasFields(obj) { var result = false; for(item in obj) { result = true; } return result; } function resetJsonObject(obj) { for (item in obj) { if (isJsonArray(item)) obj[item] = []; else obj[item] = null; } } function copyJsonFields(obj1, obj2) { for (field in obj1) { if (obj2.hasOwnProperty(field)) obj2[field] = obj1[field]; } } function copyAllJsonFields(obj1, obj2) { for (field in obj1) { obj2[field] = obj1[field]; } } function array_max_value(arr, column) { var value = 0; for (i = 0; i < arr.length; i++) { value = Math.max(value, arr[i][column]); } return value; } function array_item_delete(arr, index) { return arr.splice(index, 1) } function array_item_find(arr,column,value) { for(i = 0;i < arr.length;i++) { if(arr[i][column] == value) { return arr[i]; } } return null; } function array_item_index(arr,column,value) { for(i = 0;i < arr.length;i++) { if(arr[i][column] == value) { return i; } } return -1; } function isNullOrEmpty(value) { let str = JSON.stringify(value); if (str == 'null' || str == '""' || str == '{}') return true; return false; } function isMobile() { //return true; return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); }