function UnikID() {return "Uid"+Date.now()+Math.floor(Math.random() * 100);}
function Printdiv(title,tableID){
var divContents = tableID.html();
var printWindow = window.open('', '', 'height=400,width=800');
printWindow.document.write('
'+title+'');
printWindow.document.write('');
printWindow.document.write(divContents);
printWindow.document.write('');
printWindow.document.close();
printWindow.print();
}
function exportTableToExcel(tableID, filename = ''){
var downloadLink;
var dataType = 'application/vnd.ms-excel';
var tableSelect = document.getElementById(tableID);
var tableHTML = tableSelect.outerHTML.replace(/ /g, '%20');
// Specify file name
filename = filename?filename+'.xls':'excel_data.xls';
// Create download link element
downloadLink = document.createElement("a");
document.body.appendChild(downloadLink);
if(navigator.msSaveOrOpenBlob){
var blob = new Blob(['ufeff', tableHTML], {
type: dataType
});
navigator.msSaveOrOpenBlob( blob, filename);
}else{
// Create a link to the file
downloadLink.href = 'data:' + dataType + ', ' + tableHTML;
// Setting the file name
downloadLink.download = filename;
//triggering the function
downloadLink.click();
}
}
function addOrUpdateUrlParam(name, value) {
var href = window.location.href;
var regex = new RegExp("[&\\?]" + name + "=");
if (regex.test(href)) {
regex = new RegExp("([&\\?])" + name + "=[^&]+");
window.location.href = href.replace(regex, "$1" + name + "=" + encodeURIComponent(value));
} else {
if (href.indexOf("?") > -1) {
window.location.href = href + "&" + name + "=" + encodeURIComponent(value);
} else {
// Agregar el nuevo parámetro al final de la URL
window.location.href = href + (href.indexOf("?") > -1 ? "&" : "?") + name + "=" + encodeURIComponent(value);
}
}
}
//function addOrUpdateUrlParam(name, value)
//{
// var href = window.location.href;
// var regex = new RegExp("[&\\?]" + name + "=");
// if(regex.test(href))
// {
// regex = new RegExp("([&\\?])" + name + "=\\d+");
// alert(regex);
// window.location.href = href.replace(regex, "$1" + name + "=" + value);
// }
// else
// {
// if(href.indexOf("?") > -1)
// window.location.href = href + "&" + name + "=" + value;
// else
// window.location.href = href + "?" + name + "=" + value;
// }
//}
function traducirConGoogleNotAsync(texto, idiomaOrigen, idiomaDestino) {
const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=${idiomaOrigen}&tl=${idiomaDestino}&dt=t&q=${encodeURIComponent(texto)}`;
//const url = "https://translate.google.es/?hl="+idiomaOrigen+"&sl="+idiomaOrigen+"&tl="+idiomaDestino+"&text="+texto+"&op=translate";
text="";
$.ajaxSetup({async: false});
$.ajax({
url: url,
type: 'GET',
success: function (data) {
if (data && data[0] && data[0][0] && data[0][0][0]) {
text="";
for (var indice in data[0]) {
text=text+data[0][indice][0];
}
} else {
alert("Error al traducir");
}
},
error: function (xhr, status, error) {
console.error("Error de solicitud:", status);
alert("Error al traducir");
}
});
$.ajaxSetup({async: true});
return text;
}
function traducirConGoogle(texto, idiomaOrigen, idiomaDestino, callback) {
const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=${idiomaOrigen}&tl=${idiomaDestino}&dt=t&q=${encodeURIComponent(texto)}`;
//const url = "https://translate.google.es/?hl="+idiomaOrigen+"&sl="+idiomaOrigen+"&tl="+idiomaDestino+"&text="+texto+"&op=translate";
$.ajax({
url: url,
type: 'GET',
success: function (data) {
if (data && data[0] && data[0][0] && data[0][0][0]) {
text="";
for (var indice in data[0]) {
text=text+data[0][indice][0];
}
callback(text);
} else {
callback("Error al traducir");
}
},
error: function (xhr, status, error) {
console.error("Error de solicitud:", status);
callback("Error al traducir");
}
});
}
//const textoAEspecificar = "Hola, ¿cómo estás? Esto es una prueba.";
//
//traducirTexto(textoAEspecificar);
function loadindiv(indiv,page,sdata){
if (typeof sdata=="undefined") sdata=null;
var loader=UnikID();
$(indiv).html("");
$("#"+loader).jqxLoader({ isModal: true, width: 100, height: 60, imagePosition: 'top' });
$("#"+loader).jqxLoader('open');
$.ajax({
type: 'POST',
data: sdata,
url: page,
success: function(data) {
$("#"+loader).jqxLoader('close');
$(indiv).html(data);
},
error: function(xhr, textStatus, error){
$("#"+loader).jqxLoader('close');
$("body").html("Post error:"+xhr.responseText.replace(/
/g,"\n")+" "+textStatus.replace(/
/g,"\n")+" "+error.replace(/
/g,"\n")+"")
//alert("Post error:"+xhr.responseText+" "+textStatus+" "+error);
}
});
}
function appendindiv(indiv,page,sdata){
$.ajax({
type: 'POST',
data: sdata,
url: page,
success: function(data) {
$(indiv).append(data);
},
error: function(xhr, textStatus, error){
$("body").html("Post error:"+xhr.responseText.replace(/
/g,"\n")+" "+textStatus.replace(/
/g,"\n")+" "+error.replace(/
/g,"\n")+"")
//alert("Post error:"+xhr.responseText+" "+textStatus+" "+error);
}
});
}
function ajax_json(page,params,async=false, callback){
$.ajaxSetup({async: async});
adata={};
adata["ajaxerror"]=true;
$.post(page,params,function(data, status){
$.ajaxSetup({async: true});
//alert(data);
adata=$.parseJSON(data);
adata["ajaxerror"]=false;
if (callback && typeof callback === "function") {
callback(adata);
}
});
$.ajaxSetup({async: true});
return adata;
}
function ajax(page, params, callback) {
$.ajaxSetup({ async: false });
var adata = "";
$.post(page, params, function (data, status) {
$.ajaxSetup({ async: true });
adata = data;
if (callback && typeof callback === "function") {
callback(adata);
}
});
$.ajaxSetup({ async: true });
return adata;
}
function var_dump() {
// discuss at: http://phpjs.org/functions/var_dump/
// original by: Brett Zamir (http://brett-zamir.me)
// improved by: Zahlii
// improved by: Brett Zamir (http://brett-zamir.me)
// depends on: echo
// note: For returning a string, use var_export() with the second argument set to true
// test: skip
// example 1: var_dump(1);
// returns 1: 'int(1)'
var output = '',
pad_char = ' ',
pad_val = 4,
lgth = 0,
i = 0;
var _getFuncName = function (fn) {
var name = (/\W*function\s+([\w\$]+)\s*\(/)
.exec(fn);
if (!name) {
return '(Anonymous)';
}
return name[1];
};
var _repeat_char = function (len, pad_char) {
var str = '';
for (var i = 0; i < len; i++) {
str += pad_char;
}
return str;
};
var _getInnerVal = function (val, thick_pad) {
var ret = '';
if (val === null) {
ret = 'NULL';
} else if (typeof val === 'boolean') {
ret = 'bool(' + val + ')';
} else if (typeof val === 'string') {
ret = 'string(' + val.length + ') "' + val + '"';
} else if (typeof val === 'number') {
if (parseFloat(val) == parseInt(val, 10)) {
ret = 'int(' + val + ')';
} else {
ret = 'float(' + val + ')';
}
}
// The remaining are not PHP behavior because these values only exist in this exact form in JavaScript
else if (typeof val === 'undefined') {
ret = 'undefined';
} else if (typeof val === 'function') {
var funcLines = val.toString()
.split('\n');
ret = '';
for (var i = 0, fll = funcLines.length; i < fll; i++) {
ret += (i !== 0 ? '\n' + thick_pad : '') + funcLines[i];
}
} else if (val instanceof Date) {
ret = 'Date(' + val + ')';
} else if (val instanceof RegExp) {
ret = 'RegExp(' + val + ')';
} else if (val.nodeName) {
// Different than PHP's DOMElement
switch (val.nodeType) {
case 1:
if (typeof val.namespaceURI === 'undefined' || val.namespaceURI === 'http://www.w3.org/1999/xhtml') {
// Undefined namespace could be plain XML, but namespaceURI not widely supported
ret = 'HTMLElement("' + val.nodeName + '")';
} else {
ret = 'XML Element("' + val.nodeName + '")';
}
break;
case 2:
ret = 'ATTRIBUTE_NODE(' + val.nodeName + ')';
break;
case 3:
ret = 'TEXT_NODE(' + val.nodeValue + ')';
break;
case 4:
ret = 'CDATA_SECTION_NODE(' + val.nodeValue + ')';
break;
case 5:
ret = 'ENTITY_REFERENCE_NODE';
break;
case 6:
ret = 'ENTITY_NODE';
break;
case 7:
ret = 'PROCESSING_INSTRUCTION_NODE(' + val.nodeName + ':' + val.nodeValue + ')';
break;
case 8:
ret = 'COMMENT_NODE(' + val.nodeValue + ')';
break;
case 9:
ret = 'DOCUMENT_NODE';
break;
case 10:
ret = 'DOCUMENT_TYPE_NODE';
break;
case 11:
ret = 'DOCUMENT_FRAGMENT_NODE';
break;
case 12:
ret = 'NOTATION_NODE';
break;
}
}
return ret;
};
var _formatArray = function (obj, cur_depth, pad_val, pad_char) {
var someProp = '';
if (cur_depth > 0) {
cur_depth++;
}
var base_pad = _repeat_char(pad_val * (cur_depth - 1), pad_char);
var thick_pad = _repeat_char(pad_val * (cur_depth + 1), pad_char);
var str = '';
var val = '';
if (typeof obj === 'object' && obj !== null) {
if (obj.constructor && _getFuncName(obj.constructor) === 'PHPJS_Resource') {
return obj.var_dump();
}
lgth = 0;
for (someProp in obj) {
lgth++;
}
str += 'array(' + lgth + ') {\n';
for (var key in obj) {
var objVal = obj[key];
if (typeof objVal === 'object' && objVal !== null && !(objVal instanceof Date) && !(objVal instanceof RegExp) && !
objVal.nodeName) {
str += thick_pad + '[' + key + '] =>\n' + thick_pad + _formatArray(objVal, cur_depth + 1, pad_val,
pad_char);
} else {
val = _getInnerVal(objVal, thick_pad);
str += thick_pad + '[' + key + '] =>\n' + thick_pad + val + '\n';
}
}
str += base_pad + '}\n';
} else {
str = _getInnerVal(obj, thick_pad);
}
return str;
};
output = _formatArray(arguments[0], 0, pad_val, pad_char);
for (i = 1; i < arguments.length; i++) {
output += '\n' + _formatArray(arguments[i], 0, pad_val, pad_char);
}
return output;
}
function divideTextAndHtml(inputString) {
const resultArray = [];
let currentIndex = 0;
myindex=0;
while (currentIndex < inputString.length) {
const startTagIndex = inputString.indexOf('<', currentIndex);
if (startTagIndex !== -1) {
// Add text before the HTML tag
const textBeforeTag = inputString.substring(currentIndex, startTagIndex);
if (textBeforeTag.trim() !== '') {
resultArray.push({ type: 'text', content: textBeforeTag,spaces:getSpacesAtBeginningAndEnd(textBeforeTag),index:myindex++ });
}
// Find the end of the HTML tag
const endTagIndex = inputString.indexOf('>', startTagIndex + 1);
if (endTagIndex !== -1) {
// Add the HTML tag
const htmlTag = inputString.substring(startTagIndex, endTagIndex + 1);
resultArray.push({ type: 'html', content: htmlTag });
// Update the current index
currentIndex = endTagIndex + 1;
} else {
// No matching end tag found, treat the rest as text
const remainingText = inputString.substring(startTagIndex);
resultArray.push({ type: 'text', content: remainingText,spaces:getSpacesAtBeginningAndEnd(remainingText),index:myindex++ });
break;
}
} else {
// No more HTML tags, add the remaining text
const remainingText = inputString.substring(currentIndex);
if (remainingText.trim() !== '') {
resultArray.push({ type: 'text', content: remainingText,spaces:getSpacesAtBeginningAndEnd(remainingText),index:myindex++ });
}
break;
}
}
return resultArray;
}
function assembleHtmlFromArray(array) {
let resultHtml = '';
for (const item of array) {
if (item.type === 'text') {
resultHtml += item.content;
} else if (item.type === 'html') {
resultHtml += item.content;
}
}
return resultHtml;
}
//// Example usage:
//const inputString = 'This is bold and italic text.';
//const resultArray = divideTextAndHtml(inputString);
//console.log(resultArray);
//const assembledHtml = assembleHtmlFromArray(resultArray);
//console.log(assembledHtml);
function traducirConGoogleHtml(thtml,idiori,ididest){
resultArray = divideTextAndHtml(thtml);
traduccion="";
for (const item of resultArray) {
if (item.type === "text") {
Spaces=getSpacesAtBeginningAndEnd(item.content);
traduccion += Spaces[0]+traducirConGoogleNotAsync(item.content.trim(), idiori,ididest)+Spaces[1];
} else if (item.type === "html") {
traduccion += item.content;
}
}
return (traduccion);
}
function traducirConGoogleHtmlv2(thtml,idiori,ididest){
resultArray = divideTextAndHtml(thtml);
traduccion="";
totraducir="";
for (const item of resultArray) {
if (item.type === "text") {
//item.spaces[0]
//item.spaces[1]
totraducir+=item.content+"|";
//Spaces=getSpacesAtBeginningAndEnd(item.content);
}
}
traduccion = traducirConGoogleNotAsync(totraducir, idiori,ididest);
resultado=traduccion.split("|");
traduccion ="";
for (const item of resultArray) {
if (item.type === "text") {
traduccion +=item.spaces[0]+resultado[item.index]+item.spaces[1];
} else if (item.type === "html") {
traduccion += item.content;
}
}
return (traduccion);
}
function getSpacesAtBeginningAndEnd(inputString) {
const originalLength = inputString.length;
const trimmedString = inputString.trim();
const leadingSpacesCount = originalLength - trimmedString.length;
const trailingSpacesCount = trimmedString.length > 0 ? originalLength - trimmedString.lastIndexOf(trimmedString[trimmedString.length - 1]) - 1 : 0;
return { 0:" ".repeat(leadingSpacesCount), 1:" ".repeat(trailingSpacesCount) };
}
async function getBingMapsInfo(lat, lon) {
var apiKey = atob('QXJfMWpnM1VJWHhhVXVnb0JHS2NmRDg1MGpOVGdVSlBJeVJXYlZrSGQ5a2JuYUxYeVVzZWRmU1hkQ0UzWFNFSQ==');
const url = `https://dev.virtualearth.net/REST/v1/Locations/${lat},${lon}?o=json&key=${apiKey}`;
//https://dev.virtualearth.net/REST/v1/Locations/39.99693328139786,3.995864204142623?o=json&key=Ar_1jg3UIXxaUugoBGKcfD850jNTgUJPIyRWbVkHd9kbnaLXyUsedfSXdCE3XSEI
//{"authenticationResultCode":"ValidCredentials","brandLogoUri":"https:\/\/dev.virtualearth.net\/Branding\/logo_powered_by.png","copyright":"Copyright © 2024 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.","resourceSets":[{"estimatedTotal":1,"resources":[{"__type":"Location:http:\/\/schemas.microsoft.com\/search\/local\/ws\/rest\/v1","bbox":[39.993070265827761,3.9891416088638372,40.000795700969114,4.0025866969528128],"name":"07750, Balearic Islands, Spain","point":{"type":"Point","coordinates":[39.99693298,3.99586415]},"address":{"adminDistrict":"Balearic Islands","adminDistrict2":"Baleares","countryRegion":"Spain","formattedAddress":"07750, Balearic Islands, Spain","locality":"Ferrerías","postalCode":"07750"},"confidence":"Medium","entityType":"Postcode1","geocodePoints":[{"type":"Point","coordinates":[39.99693298,3.99586415],"calculationMethod":"Rooftop","usageTypes":["Display"]}],"matchCodes":["Good","UpHierarchy"]}]}],"statusCode":200,"statusDescription":"OK","traceId":"a05ab8c2093a474cb2b475250ecfe06c|DU00003059|0.0.0.1"}
try {
const response = await fetch(url);
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching Bing Maps info:', error);
return null;
}
}
async function getOpenStreetMapInfo(lat, lon) {
const url = `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}`;
//{"place_id":45088041,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"way","osm_id":164630255,"lat":"39.992425196107654","lon":"3.992772441538776","class":"highway","type":"primary","place_rank":26,"importance":0.10000999999999993,"addresstype":"road","name":"Me-1","display_name":"Me-1, Ferrerías, Menorca, Islas Baleares, 07750, España","address":{"road":"Me-1","town":"Ferrerías","county":"Menorca","archipelago":"Islas Baleares","ISO3166-2-lvl6":"ES-PM","state":"Islas Baleares","ISO3166-2-lvl4":"ES-IB","postcode":"07750","country":"España","country_code":"es"},"boundingbox":["39.9856814","39.9965142","3.9868396","4.0053080"]}
try {
const response = await fetch(url);
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching OpenStreetMap info:', error);
return null;
}
}
function openGoogleMapsFromCoordinates(latitude, longitude) {
if (typeof longitude === 'undefined') {
var coordinates = latitude;
} else {
var coordinates = latitude + "," + longitude;
}
var mapsUrl = "https://www.google.com/maps/search/?api=1&query=" + coordinates;
window.open(mapsUrl, "_blank");
}
function updateCharCount(textareaId, spanId, maxLength) {
maxLength = maxLength || 250; // Default maxLength to 100 if not provided
var text = $('#' + textareaId).val();
var textLength = text.length;
var charsLeft = maxLength - textLength;
var $charCount = $('#' + spanId);
if (charsLeft <= 0) {
$charCount.html('Te quedan ' + charsLeft + ' caracteres.');
$charCount.css('color', 'red');
} else {
$charCount.html('Te quedan: ' + charsLeft + ' caracteres ');
$charCount.css('color', 'green');
}
}