//
// -------------------------------------------------------------------
function SSf_AntiFrames(){
// Bloquea la navegación bajo iframes
try{
v=top.location.href; // si esto provoca error es que está bajo otro dominio
} catch(err){
x=self.location; self.location="http:/"+"/nop"; top.location=x;
};
};;
// -------------------------------------------------------------------
function SSf_Favoritos(title,url) {
// Añadir a FAVORITOS. *REVISAR*
// CUIDADO CON LOS ELSE IF ... PARA QUE EL PROTECTOR NO GENERE ERRORES HAY QUE COLOCARLOS ASÍ
if(document.all){
window.external.AddFavorite(url, title); // Internet Explorer
}else if (window.sidebar.addPanel){
window.sidebar.addPanel(title, url, ""); // Firefox
}else if (window.opera && window.print) {
var elem = document.createElement('a'); // Opera
elem.setAttribute('href',url);
elem.setAttribute('title',title);
elem.setAttribute('rel','sidebar');
elem.click();
}else{
alert("Pulsa Ctrl + D para guardar esta web en Favoritos"); // Google Chrome y RESTO
}
};;
// -------------------------------------------------------------------
function SSf_ValidaFecha(txt){
// Devuelve true si es correcta o false si no lo es
if(typeof(txt)==SSv_Nd) {return false;}
var patt=/^\d{2}-\d{2}-\d{4}$/g;
if(!patt.test(txt)){alert("Formato de fecha no válido (dd-mm-aaaa)");return false;}
var dia = parseInt(txt.substring(0,2),10);
var mes = parseInt(txt.substring(3,5),10);
var anio = parseInt(txt.substring(6),10);
switch(mes){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
numDias=31; break;
case 4: case 6: case 9: case 11:
numDias=30; break;
case 2:
if(SSf_ValidaFechaBisiesto(anio)){numDias=29;} else { numDias=28;};
break;
default:
alert("Fecha introducida errónea"); return false;
}
if (dia>numDias || dia==0){alert("Fecha introducida errónea"); return false;}
return true;
};;
// -------------------------------------------------------------------
function SSf_ValidaFechaBisiesto(anio){
if ( ( anio % 100 != 0) && ((anio % 4 == 0) || (anio % 400 == 0))) {return true;}
return false;
};;
// -------------------------------------------------------------------
function SSf_CargaGets(){
// Evaluamos los parámetros GET convirtíendolos en variables javascript DE TEXTO
var f,fA,fA2,t;
if(location.search){
fA=location.search.substr(1).split("&");
for(f in fA){
fA2=fA[f].split("=");
fA2[1]=typeof(fA2[1])==SSv_Nd?"":fA2[1];
t= unescape(fA2[0]) + "='" + unescape(fA2[1]) + "';";
eval(t);
};
};
};;
// -------------------------------------------------------------------
function SSf_EsMovil(){
// Identifica inequívocamente que es un Móvil (o que no puede generar ventanas resizables)
// (debe llamarse durante un evento de pulsación onclick de botón o de enlace)
var em1,em2,em;
/* mediante chequeo del evento TOUCH */
em1=true;
try{document.createEvent("TouchEvent");}
catch(e){em1=false;}
/* mediante User Agent */
em2=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
/* ESTE DETECTOR NO FUNCIONA BIEN EN LOS DISPOSITIVOS MOVILES MODERNOS
try{
var ventana=window.open("","SS_MOVIL","resizable=yes,top=1,left=1,width=100,height=100");
var ancho1=ventana.outerWidth;
ventana.resizeBy(+1,+1);
var ancho2=ventana.outerWidth;
ventana.close();
em=(ancho1==ancho2);
}
catch(err) {
em=true;
}
*/
em=em1 && em2; // devolverá verdadero solo si pasó ambos tests, de lo contrario devolverá falso
return em;
}
// -------------------------------------------------------------------
function SSf_CookieCheck(){
// Para las sesiones, chequea si el navegador acepta cookies y retorna booleano
return (document.cookie!="");
}
// -------------------------------------------------------------------
function SSf_CookieSet(key,value,diascaduca){
// caducidad en días (si no, serán 365 días)
var expires = new Date();
var diascaduca=typeof(diascaduca)==SSv_Nd?365:diascaduca;
var sumatiempo=diascaduca * 24 * 60 * 60 * 1000;
expires.setTime(expires.getTime() + sumatiempo); // días x horas x minutos x segundos x 1000 milisegundos
document.cookie = key + '=' + value + ';path=/;expires=' + expires.toUTCString();
}
// -------------------------------------------------------------------
function SSf_CookieGet(key) {
var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
return keyValue ? keyValue[2] : null;
}
// -------------------------------------------------------------------
function SSf_Imprimir(wobj){
// IMPRIMIR() = boolean
// - Imprime la actual ventana. Retorna false si el explorador no admite la
// impresión automática. var WebBrowser,wobj;
if(typeof(wobj)==SSv_Nd){wobj=self;};
if(wobj.print){
wobj.print();
} else {
if(SSv_Nav_IE){
// para los EXPLORER 4.
WebBrowser = '';
wobj.document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
wobj.alert("Prepare la impresora y pulse aceptar para imprimir el documento");
wobj.document.WebBrowser1.ExecWB(6, 2);
wobj.document.WebBrowser1.outerHTML = "";
} else {
wobj.alert("Deberá imprimir este documento manualmente desde su navegador");
};
};
};;
// -------------------------------------------------------------------
function SSf_Correo(asunto,cuerpo,datos_sw){
// CORREO(asunto[txt],cuerpo[txt],datos_sw) = boolean
// - El parámetro datos_sw=puede ser true o false y determina si se solicitarán datos
// - Genera un mensaje de correo abriendo el programa cliente predeterminado.
// - Se usa \n como salto de línea standard
// - recordar escapar antes de construir el link (que resulte máx. 2048 caracteres)
var dominio="abacox.com";
var DOMINIO="ABACOX.COM";
datos_sw=typeof(datos_sw)==SSv_Nd?(typeof(cuerpo)==SSv_Nd?true:false):datos_sw; // con cuerpo no predeterminamos la plantilla (fácilmente excedería los 2018 caracteres)
asunto=typeof(asunto)==SSv_Nd?escape("Mensaje para WWW."+DOMINIO):escape(asunto);
cuerpo=typeof(cuerpo)==SSv_Nd?"\n\n\n":cuerpo;
var tpld =""; // plantilla para desktop
var tplm =""; // plantilla para movil
tplm+="WWW."+DOMINIO+" (recuerda indicar tu Cod.Postal)...%0A%0A";
if(datos_sw==true){
tpld+="PLANTILLA DE COMUNICACIÓN (rellene la información siguiente)\n";
tpld+="______________________________________________________\n";
tpld+="- Referencia (si hay)... \n";
tpld+="- Nombre/Empresa*....... \n";
tpld+="- Localidad*............ \n";
tpld+="- Código Postal......... \n";
tpld+="- Provincia*............ \n";
tpld+="- País*................. \n";
tpld+="- Teléfono/s............ \n";
tpld+="- Email de contacto*.... \n";
tpld+="______________________________________________________\n";
tpld+="- MENSAJE*...\n";
}
tpld+=cuerpo+"\n";
tpld+="______________________________________________________\n";
if(datos_sw==true){
tpld+=" ·Los nombres de campos con \' * \' son obligatorios de rellenar.\n";
tpld+=" ·En comunicaciones sobre un pedido/presupuesto, recuerde indicar la referencia.\n";
}
tpld+=" ·El remitente ACEPTA expresamente la política de privacidad que mostramos en la web.\n";
tpld+="______________________________________________________\n";
tpld+="Este correo electrónico y cualquier fichero que pudiera adjuntar, contiene información de carácter confidencial exclusivamente dirigida a sus destinatarios. Queda prohibida su divulgación, copia y/o distribución a terceros sin la previa autorización por escrito del remitente. Si usted no es el destinatario de este mensaje o lo ha recibido por error recuerde que esta totalmente prohibida cualquier divulgacion, distribucion o reproduccion de la misma. Rogamos nos lo notifique inmediatamente.\n";
var tpl=SSf_EsMovil()?tplm:tpld;
var cta,url; var nop='';
tpld=escape(tpld);
tpl=SSv_MovilSw=="1"?tplm:tpld;
cta="info"; url="mai"+"lto:"+nop; url+=cta+nop; url+=nop; url+="@"+nop; url+=dominio+nop+"?sub"+nop+"ject="+nop+asunto+nop+"&bo"+"dy="+nop+tpl;
window.location.href=url;
};;
// -------------------------------------------------------------------
function SSf_Whatsapp(){
// WHATSAPP(asunto[txt],cuerpo[txt]) = boolean
//- Genera un mensaje de correo abriendo el programa cliente predeterminado.
//- Se usa \n como salto de línea standard
//- recordar escapar antes de construir el link (que resulte máx. 2048 caracteres)
var url,win,tpl;
dominio="abacox.com";
DOMINIO="ABACOX.COM";
tpl="WWW."+DOMINIO+" (recuerda indicar tu Cod.Postal)... ";
// el subdominio de esta url dependerá de el ancho de la página ("api" hasta md y "web" si es mayor)
if(SSv_MovilSw=="1"){
url="https://API.whatsapp.com/send?phone=34635685631&text="+tpl;
} else {
url="https://WEB.whatsapp.com/send?phone=34635685631&text="+tpl;
}
win=open(url,"SS_WIN2");
};;
// -------------------------------------------------------------------
function SSf_Telefono(){
// TELEFONO() = boolean
//- Abre la aplicación de llamar por teléfono
var url,win,tpl;
dominio="abacox.com";
DOMINIO="ABACOX.COM";
tpl="WWW."+DOMINIO+" (recuerda indicar tu Cod.Postal)... ";
// el subdominio de esta url dependerá de el ancho de la página ("api" hasta md y "web" si es mayor)
if(SSv_MovilSw=="1"){
url="https://API.whatsapp.com/send?phone=34635685631&text="+tpl;
} else {
url="https://WEB.whatsapp.com/send?phone=34635685631&text="+tpl;
}
url="callto:0034635685631";
win=open(url,"SS_WIN2");
};;
// -------------------------------------------------------------------
function SSf_Sonido(n,forzarSw){
// emite el sonido correspondiente al número del parámetro
// SONIDOS: 0=beep, 1=tip, 2=tecleo máq. antígua, 3=chuik
forzarSw=(typeof(forzarSw)==SSv_Nd)?false:forzarSw;
if(forzarSw || SSv_SonidoSw) {snd[n].pause();snd[n].play();}
};;
// -------------------------------------------------------------------
function SSf_SonidoPausa(n,forzarSw){
// emite el sonido correspondiente al número del parámetro
// SONIDOS: 0=beep, 1=tip, 2=tecleo máq. antígua, 3=chuik
forzarSw=(typeof(forzarSw)==SSv_Nd)?false:forzarSw;
if(forzarSw || SSv_SonidoSw) {snd[n].pause();}
};;
//--------------------------------------------------------------------
function SSf_Beep(){
// emite sonido siempre (independientemente de la configuración
SSf_Sonido(0,true);
};;
//--------------------------------------------------------------------
function SSf_SonidoSw(sw){
// Activa o desactiva el sonido y su botón de la barra de navegación de la plantilla principal
if(!$("#SSi_headerNav1DespSound").length){return false;}
var altsw=(typeof(sw)==SSv_Nd); // alternar
var ssw=altsw?!SSv_SonidoSw:sw; // si no se indica, se niega el actual estado (swap)
if(ssw){
$("a").click(function(){SSf_Sonido(1);});
$("button").click(function(){SSf_Sonido(1);});
$("#SSi_headerNav1DespSound")[0].innerHTML=' Silencio';
} else {
$("a").unbind( "click" );
$("button").unbind( "click" );
$("#SSi_headerNav1DespSound")[0].innerHTML=' Sonidos';
}
SSv_SonidoSw=ssw;
if(altsw){
document.forms['SS_formUpdateSess'].Z_ENTORNO_sonidosw.value=(ssw?"1":"0");
SSf_UpdateSess();
}
return false;
};;
//--------------------------------------------------------------------
function SSf_Delay(milisegs){
// DELAY(milisegs[num]) = void
//- Genera una pausa en milisegundos.
var milisegs,then,now;
then=new Date().getTime();
now=then;
while((now-then)0;i--){
for(j=n;j>0;j--){self.moveBy(0,i); self.moveBy(i,0); self.moveBy(0,-i); self.moveBy(-i,0);};
};
};
};;
//--------------------------------------------------------------------
function SSf_MuestraVar(variable,o_mays){
// MUESTRAVAR(variable[var],mayúsculas[bool]) = void
// - Muestra el contenido de una variable general
var variable,o_mays;
if(typeof(variable)==SSv_Nd){return;};
o_mays=typeof(o_mays)!="boolean"?false:o_mays;
variable=o_mays?variable.toUpperCase():variable;
document.open();
document.write(variable);
document.close();
};;
//--------------------------------------------------------------------
function SSf_Trim(txt){
// TRIM(txt) = string
// - Hace un TRIM delantero y trasero de un texto (elimina espacios sobrantes)
var txt,result;
txt=typeof(txt)==SSv_Nd?"":txt;
result=txt.replace(/^\s*/,"");
result=result.replace(/\s*$/,"");
return result;
};;
//--------------------------------------------------------------------
function SSf_ChkInputInt(obj,o_warn){
// Chequea si un control INPUT (this) contiene un número entero
// Globales: SSv_Nd,SSv_Nav_IE
var obj,o_warn,ret,val;
if(typeof(obj)==SSv_Nd){return false;};
o_warn=typeof(o_warn)!="boolean"?false:o_warn;
val=obj.value;ret=true;
if(isNaN(val)){ret=false;};
if(val.indexOf(".")>=0){ret=false;};
if(!ret && o_warn){
alert("Debe indicar un número entero (sin decimales)");
if(SSv_Nav_IE){WINSELECT(obj);WINFOCUS(obj);} else {obj.value="";};
};
return ret;
};;
//--------------------------------------------------------------------
function SSf_ChkInputFloat(obj,o_warn){
// Chequea si un control INPUT (this) contiene un número flotante.
// Globales: SSv_Nd,SSv_Nav_IE
var obj,o_warn,ret,val;
if(typeof(obj)==SSv_Nd){return false;};
o_warn=typeof(o_warn)!="boolean"?false:o_warn;
val=obj.value;obj.value=val.replace(/,/,".");
val=obj.value;ret=true;
if(isNaN(val)){ret=false;};
if(!ret && o_warn){
alert("Debe indicar un número");
if(SSv_Nav_IE){WINSELECT(obj);WINFOCUS(obj);} else {obj.value="";};
};
return ret;
};;
//--------------------------------------------------------------------
function SSf_CheckMailServer(x){
// Chequea el servidor de una dirección email para comprobar si existe
var resultado;
$.ajax({
async: false,
type:"GET",
url : "/global/php/checkmail.php?e="+x,
error: function(data){alert("CHKMAIL_SERVER: ERROR");resultado=false;},
success: function(data){resultado=(data=="");}
});
return resultado;
};;
//--------------------------------------------------------------------
function SSf_CheckMailSyntax(x) {
// Chequea la sintaxis de una dirección email para comprobar si es correcta
var otro = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
var regex = /^([a-z0-9_.+-])+\@(([a-z0-9-])+\.)+([a-z]{2,4})+$/i;
return regex.test(x);
};;
//--------------------------------------------------------------------
function SSf_UpdateSess(destroySw,informoSw){
// ACTUALIZA LA SESIÓN MEDIANTE AJAX
// Usa librería jQuery v.3.2.1
// Postea el formulario "SS_formUpdateSess" mediante AJAX para asentar la sesión actual
// Si se incluye el parámetro recargaSw, después de actualizar recargará la página
// Si se incluye el parámetro destroySw como "true" entonces destruye la sesión.
// Si se incluye además, el parámetro informoSw, entonces notificará la destrucción.
// Forzamos la redirección a la página index (si destruimos en el carrito o pedidos genera errores)
var destroy=typeof(destroySw)==SSv_Nd?false:destroySw;
var informo=typeof(informoSw)==SSv_Nd?false:informoSw;
var dparam=destroy?"?DESTROY":"";
var formId="SS_formUpdateSess";
$.ajax({
async: false,
type:"POST",
url : "/global/php/updatesess.php"+dparam,
data: $("#"+formId).serialize(),
contentType: "application/x-www-form-urlencoded; charset=utf-8",
error: function(data){alert("SSf_UpdateSess [ERROR-01]\\n"+data);return false;},
success: function(data){
switch(data){
case "KO":
alert("SSf_UpdateSess [ERROR-02]\\n"+data);
break;
case "OK":
SSf_Beep();
if(destroy && informo){
$('#SSi_headerCartItems').html(''); // limpiamos el carrito
alert("TODOS SUS DATOS HAN SIDO ELIMINADOS");
}
location.href="/index.html"; // evita errores en la página del carrito y pedidos
break;
default:
SSf_Beep();
alert("SSf_UpdateSess [ERROR-03]\\n"+data)
}
}
});
};;
//--------------------------------------------------------------------
function SSf_UrlExists(url) {/* NOP
// Comprueba si un archivo url existe
// Globales: -
if(!url){return false;};
var req= new GETXMLHTTP(); // XMLHttpRequest object
try {
req.open("HEAD", url, false);
req.send(null);
return req.status== 200 ? true : false;
} catch(er){
return false;
};
*/};;
//--------------------------------------------------------------------
function ERRORJS(msj,url,linea){/* NOP
// Envía error por e-mail
// Globales: X_DOMINIO, ERRORJS_URI, ERRORJS_AJAX, ERRORJS_SW
ERRORJS_ANT=window.onerror; // guardamos el actual controlador de errores
var txt=escape(msj+"···"+url+"···"+linea+"···"+X_DOMINIO);
ERRORJS_AJAX.open("GET", ERRORJS_URI+"?id="+txt); //Enviamos el error
ERRORJS_AJAX.onreadystatechange = ERRORJS2;
ERRORJS_AJAX.send('');
return true;
*/};;
//--------------------------------------------------------------------
function ERRORJS2(){/* NOP
if(typeof(ERRORJS_AJAX)=="undefined"){return true;}; // si el evento se dispara fuera de ventana
if(ERRORJS_AJAX.readyState==4){
var txt=ERRORJS_AJAX.responseText;
if(txt!="" && ERRORJS_SW==true){alert(txt);};
};
window.onerror=ERRORJS_ANT; // recuperamos el anterior controlador de errores
*/};;
//--------------------------------------------------------------------
function SSf_AbreModal(idUri,fId,nMod,titTxt,pieTxt){
// Abre ventanas modal de forma secuencial sin necesidad de usar el data-toggle="modal"
// Si se especifica "nMod" (1-3) entonces abrirá la solicitada
// Parámetros: -idUri = Id del contenedor html a volcar o una URI para carga AJAX (si contiene "?" será petición GET, de lo contrario POST)
// -fId = Id del formulario (sólo obligatorio si es una petición POST)
// -nMod = número expreso de ventana modal (1-3) o false
// -tituloTxt = html de encabezamiento
// -pieTxt = html que sustituirá al botón cerrar
// IMPORTANTE: -Los contenedores principales de las modales (de destino) deben ubicarse antes que los accionadores y contenedores de origen pues al clonar el innerHTML se duplican los Ids (y eso genera errores de interpretación)
var m1sw,m2sw,m3sw,n;
if(typeof(idUri)==SSv_Nd) {alert("SSf_AbreModal: falta id");return false;}
nMod=typeof(nMod)==SSv_Nd?false:nMod;
pieTxt=typeof(pieTxt)==SSv_Nd?false:pieTxt;
m1sw=$('#SSi_modal1').hasClass('show');
m2sw=$('#SSi_modal2').hasClass('show');
m3sw=$('#SSi_modal3').hasClass('show');
if(m3sw){alert("SSf_AbreModal: no se pueden abrir más modales");return false;}
if(!nMod){
if(m2sw){ // si ya está abierta la 2, abriremos la 3
nMod=3;
} else if(m1sw) { // si solo está abierta la 1, abriremos la 2
nMod=2;
} else { // si no hay ninguna abierta, abrimos la 1
nMod=1;
}
}
if(!SSf_LlenaModal(idUri,fId,nMod,titTxt,pieTxt)){alert("SSf_AbreModal: error al llenar la modal");return false;} // cargamos la modal con la información
if(nMod>1){ // eventos necesarios para cuando cerramos las ventanas 2 y 3
$("#SSi_modal"+nMod).on('hidden.bs.modal', function (e) {
$("body").addClass("modal-open"); // recupera clase que oculta scroll
$("#SSi_modal"+nMod).css("overflow-y","auto"); // recupera scroll
$("#SSi_modal"+nMod).off('hidden.bs.modal'); // desactiva el evento
});
} else {// desactivamos el scroll de body antes de abrir la modal para mantener el foco en el sitio
$("#SSi_modal"+nMod).on('show.bs.modal',function(e){$("body").css("overflow-y","hidden");}); // apaga el scroll en body
$("#SSi_modal"+nMod).on('hidden.bs.modal',function(e){$("body").css("overflow-y","auto");}); // vuelvo a encender el scroll en body
}
// mostramos el contenido
$("#SSi_modal"+nMod).modal("show");
};;
//--------------------------------------------------------------------
function SSf_LlenaModal(idUri,fId,nMod,titTxt,pieTxt){
// Asigna el contenido del idUri (ID o de la URI) a la ventana modal
// Parámetros: -idUri = Id del contenedor html a volcar o una URI para carga AJAX (si contiene "?" será petición GET, de lo contrario POST)
// -fId = Id del formulario (sólo obligatorio si es una petición POST)
// -nMod = número de ventana modal (1-3)
// -tituloTxt = html de encabezamiento
// -pieTxt = html que sustituirá al botón cerrar
// IMPORTANTE: -Si se indica una URI y su contenido tiene ###etiquetasWTS### sin traducir las mostrará tal cual.
var titTxt=typeof(titTxt)==SSv_Nd?false:titTxt;
var pieTxt=typeof(pieTxt)==SSv_Nd?false:pieTxt;
if(typeof(idUri)==SSv_Nd) {alert("SSf_LlenaModal: falta idUri");return false;}
if(typeof(nMod)==SSv_Nd) {alert("SSf_LlenaModal: falta nMod");return false;}
// determinamos el tipo de ID/URI
if(idUri.indexOf("/")==-1){ // si es un Id HTML
var obj=document.getElementById(idUri);
var buffer=obj.innerHTML;
titTxt=titTxt?titTxt:obj.title;
document.getElementById("SSi_modalBody"+nMod).innerHTML=buffer;
} else { // si es una carga de una URL
var isget=idUri.indexOf("?")>-1; // determinamos el tipo de petición dependiendo si lleva un "?" al final de la url
if(typeof(fId)==SSv_Nd && !isget) {alert("SSf_LlenaModal: falta fId");return false;} // necesario para peticiones POST
var tipo=isget?"GET":"POST";
var datos=isget?"":($("#"+fId).serialize());
titTxt=titTxt?titTxt:idUri;
$.ajax({
async:false,
type:tipo,
url:idUri,
data: datos,
contentType: "application/x-www-form-urlencoded; charset=utf-8",
error: function(data){alert("SSf_LlenaModal [ERROR-01]\n"+data); return false;}, // OTROS ERRORES
success:function(data){
if(data.indexOf(" on line ")>=0){
alert("SSf_LlenaModal [ERROR-02]\n"+data); return false; // ERRORES PHP
} else {
document.getElementById("SSi_modalBody"+nMod).innerHTML=data;
SSf_Sonido(2);
}
}
});
}
// cargamos el contenido del título
if(titTxt) {document.getElementById("SSi_modalTitle"+nMod).innerHTML = titTxt;}
// colocamos el pie predeterminado o el pasado por parámetros
var pieTxtPred =' ';
pieTxt=pieTxt?pieTxt:pieTxtPred; document.getElementById("SSi_modalFooter"+nMod).innerHTML = pieTxt;
return true;
}
//--------------------------------------------------------------------
function XXXSSf_LlenaModalGET(url,botonCerrar,titulo){/* PARA ELIMINAR
// Asigna el contenido de un fichero cargado por GET a la ventana modal
var id,botonCerrar,titulo,bc,tt,buffer;
bc=typeof(botonCerrar)==SSv_Nd?true:botonCerrar;
tt=typeof(titulo)==SSv_Nd?false:titulo;
document.getElementById("SSi_modalFooter").style.display = (bc?"block":"none");
if(tt) document.getElementById("SSi_modalTitle").innerHTML=titulo;
$.ajax({
async:false,
type:"GET",
url:url,
error: function(data){alert("SSf_LlenaModalGET [ERROR-01]\n"+data);}, // OTROS ERRORES
success:function(data){
if(data.indexOf(" on line ")>=0){
alert("SSf_LlenaModalGET [ERROR-02]\n"+data); // ERRORES PHP
} else {
document.getElementById("SSi_modalBody").innerHTML=data;
}
}
});
*/};;
//--------------------------------------------------------------------
function XXXSSf_LlenaModalPOST(formId,url,botonCerrar,titulo){/* PARA ELIMINAR
// Asigna el contenido de un fichero cargado por POST a la ventana modal
var formId,botonCerrar,titulo,bc,tt,buffer;
bc=typeof(botonCerrar)==SSv_Nd?true:botonCerrar;
tt=typeof(titulo)==SSv_Nd?false:titulo;
document.getElementById("SSi_modalFooter").style.display = (bc?"block":"none");
if(tt) document.getElementById("SSi_modalTitle").innerHTML=titulo;
$.ajax({
async:false,
type:"POST",
url:url,
data: $("#"+formId).serialize(),
contentType: "application/x-www-form-urlencoded; charset=utf-8",
error: function(data){alert("SSf_LlenaModalPOST [ERROR-01]\n"+data);}, // OTROS ERRORES
success:function(data){
if(data.indexOf(" on line ")>=0){
alert("SSf_LlenaModalPOST [ERROR-02]\n"+data); // ERRORES PHP
} else {
document.getElementById("SSi_modalBody").innerHTML=data;
SSf_Sonido(2);
}
}
});
*/};;
//--------------------------------------------------------------------
function SSf_ModalAncha(){
// la ventana modal se mostrará en toda la anchura del display y se auto ejecutará el impresor
$(".modal-dialog").css("width","100%");
$(".modal-dialog").css("max-width","1200px");
$(".modal-dialog").css("margin","0px auto 0px auto");
// al cerrarse, las modales recuperarán la anchura standard
$('.modal').on('hidden.bs.modal',function (e){
$(".modal-dialog").css("width","");
$(".modal-dialog").css("max-width","");
$(".modal-dialog").css("margin","");
});
};;
//--------------------------------------------------------------------
function SSf_ModalPrint(){
$('.modal').on('shown.bs.modal',function (e){
$('#SSi_modal1').css("padding","1px");
//$("body").css("padding","0px");
SSf_Imprimir(self);
});
// al cerrarse, recupera el estado que tenía
$('.modal').on('hidden.bs.modal',function (e){
$('#SSi_modal1').css("padding","");
//$("body").css("padding","");
});
};;
//--------------------------------------------------------------------
function SSf_Mensaje(html,tipo){
// Muestra un mensaje de servicio (id SSi_msg) del tipo solicitado
// Si no incluye parámetros, entonces cierra (elimina) el mensaje existente
var tc,html,tipo;
html=typeof(html)==SSv_Nd?false:html;
if(!html){
$("#SSi_msgCont").alert('close'); // elimina el contenedor
} else {
tipo=typeof(tipo)==SSv_Nd?0:tipo;
switch(tipo){
case 2: tc="alert-secondary"; break;
case 3: tc="alert-success"; break;
case 4: tc="alert-info"; break;
case 5: tc="alert-warning"; break;
case 6: tc="alert-danger"; break;
case 7: tc="alert-light"; break;
case 7: tc="alert-dark"; break;
default: tc="alert-primary";
}
$("#SSi_msg").html('
'); // restaura el contenedor limpio
$("#SSi_msgHTML").html(html);
$("#SSi_msgCont").addClass(tc);
$("#SSi_msgCont").addClass("show");
}
};;
//--------------------------------------------------------------------
function SSf_ModalMensaje(html,tipo){
// Muestra un mensaje de servicio (id SSi_modalMsg) del tipo solicitado dentro una ventana modal
// Si no incluye parámetros, entonces cierra (elimina) el mensaje existente
var tc,html,tipo,cClick;
html=typeof(html)==SSv_Nd?false:html;
if(!html){
$("#SSi_modalMsgCont").alert('close'); // elimina el contenedor
} else {
tipo=typeof(tipo)==SSv_Nd?0:tipo;
switch(tipo){
case 2: tc="alert-secondary"; break;
case 3: tc="alert-success"; break;
case 4: tc="alert-info"; break;
case 5: tc="alert-warning"; break;
case 6: tc="alert-danger"; break;
case 7: tc="alert-light"; break;
case 7: tc="alert-dark"; break;
default: tc="alert-primary";
}
$("#SSi_modalMsg").html('
'); // restaura el contenedor limpio
$("#SSi_modalMsgHTML").html(html);
// que desaparezca con cualquier click (NO funciona para el mensaje de gracias por comprar)
// $("#SSi_modal1").on('click',function(e){return false;});
// $("#SSi_modal1").on('click',function(e){
// $("#SSi_modalMsgCont").alert('close');
// SSf_Sonido(1);
// $("#SSi_modal1").off('click');
// });
}
};;
//--------------------------------------------------------------------
function SSf_FormAplica(myform){
// APLICADOR DE FORMULARIOS
// Evita el problema de que los formularios HTML no seleccionan automáticamente los selects, radios ni
// checkboxes según los valores de entrada.
// Préviamente en los