function exe_ajax(pdata,presult='result',psuccess='',pwait=false)
{
     var xurl,xempr;
     
     xempr = document.getElementById('empr').innerHTML ;
     if(pdata.get('empr')){xempr=pdata.get('empr');}
     pdata.append('empr',xempr);
//      console.log("Empresa : " + xempr);
     
     _urlinker='/linker3.php';     
     xurl=_urlinker;
//      console.log(xurl);
     
     var oscreen=0;
     if(screen.width<screen.height){oscreen=1;}
//      pdata.append('oscreen',oscreen);
     
     if(!document.getElementById(presult))
     {
          var newDiv = document.createElement("div");
          var newContent = document.createTextNode("");
          var currentDiv = document.getElementById("main1");
          newDiv.appendChild(newContent); //añade texto al div creado.
          newDiv.setAttribute("id",presult);
          document.body.insertBefore(newDiv, currentDiv);   
     }
     
// 	console.log('Exe A1: '+Date());
     if(document.getElementById('lastTime'))
     {document.getElementById("lastTime").innerHTML='Running... '+Date();}
     
//      console.log("DATA : ");
//      for (var pair of pdata.entries()){console.log(pair[0]+ ' => ' + pair[1]);}     
// return;     
	var rdata;
     $.ajax({
          cache:false,
          url:xurl,
          async:!pwait,
          type:'POST',
          data:pdata,
          contentType:false,
          datatype:"text",
          processData:false,
          beforeSend: function(jqXHR, textStatus)
          {
//                 $("#loader").show();
//                if(pwait)
//                if(document.getElementById('loader'))
//                {document.getElementById('loader').style.display='block';}
               
               if(pwait){document.body.style.cursor = 'wait';}
          }, 
          success:function(dato, textStatus, jqXHR)
          {
               if(document.getElementById('lastTime'))
               {document.getElementById('lastTime').innerHTML=time_now(3);}
               
               document.body.style.cursor = 'default';	
//                console.log('Success: '+Date());
               dato=dato.trim();
//                console.log('================ DATO ==================== ');
//                console.log(dato);
//                console.log('================ DATO ==================== ');
               ///alert(dato);
               
               if(dato.toLowerCase().indexOf('warning')>=0){console.log(dato);}
               if(dato.toLowerCase().indexOf('error')>=0){console.log(dato);}
               
               result=$(dato).find("result").html();
               icon=$(dato).find("icon").html();
               codigo=$(dato).find("codigo").html();
               options=$(dato).find("options").html();
               msgswal=$(dato).find("msgswal");
               msgalert=$(dato).find("msgalert").text();
               msgerror=$(dato).find("msgerror").text();
               msgsys=$(dato).find("msgsys").text();
               consolelog=$(dato).find("consolelog").html();
               
//                console.log(consolelog);
//                alert(codigo);
     
               if(result && document.getElementById(presult))
               {
                    document.getElementById(presult).value=result.trim();
                    document.getElementById(presult).innerHTML=result.trim();
                    
                    if(document.getElementById(presult).value===''){document.getElementById(presult).value=pdata.get('codigo');}
                    if(document.getElementById(presult).innerHTML===''){document.getElementById(presult).innerHTML=pdata.get('codigo');}
               }

               if($(dato).find("numero").html())  
               {set_idvalue('numero',$(dato).find("numero").html());}
               
               if($(dato).find("enti").html())
               {
                    // validar solo enti, no vndd
                    if($(dato).find("enti_codigo").html())
                    if($(dato).find("enti_codigo").html().substr(0,4)!='')
                    if($(dato).find("enti_codigo").html().substr(0,4)!='9999')
                    {
                         set_idvalue('enti',$(dato).find("enti_codigo").html());
                         set_idvalue('nombre',$(dato).find("enti_descri").html());
                         set_idvalue('fechanac',$(dato).find("enti_fechanac").html());
                         set_idvalue('sexo',$(dato).find("enti_sexo").html());
                         set_idvalue('direccion',$(dato).find("enti_direccion").html());
                         set_idvalue('email',$(dato).find("enti_email").html());
                         set_idvalue('wsapp',$(dato).find("enti_wsapp").html());
                         set_idvalue('lpre',$(dato).find("enti_lpre").html());
                         set_idvalue('adrs',$(dato).find("enti_adrs").html());

                         set_idvalue('dladrs',$(dato).find("dladrs").html());
                    }
               }
               
               if($(dato).find("ppdd").html())
               {
                    // validar solo enti, no vndd
                    if($(dato).find("ppdd_codigo").html().substr(0,4)!='9999')
                    {
                         set_idvalue('nombre',$(dato).find("ppdd_descri").html());
                         set_idvalue('facturar',$(dato).find("ppdd_factura").html());
                         set_idvalue('direccion',$(dato).find("ppdd_direccion").html());
//                          set_idvalue('email',$(dato).find("enti_email").html());
                         set_idvalue('wsapp',$(dato).find("ppdd_wsapp").html());
                         set_idvalue('wsapp1',$(dato).find("ppdd_wsapp1").html());
                         set_idvalue('wsapp2',$(dato).find("ppdd_wsapp2").html());
                         set_idvalue('wsappr1',$(dato).find("ppdd_wsappr1").html());
                         set_idvalue('wsappr2',$(dato).find("ppdd_wsappr2").html());
//                          set_idvalue('lpre',$(dato).find("enti_lpre").html());
//                          set_idvalue('adrs',$(dato).find("enti_adrs").html());

//                          set_idvalue('dladrs',$(dato).find("dladrs").html());
                    }
               }
               
               if($(dato).find("item").html())
               {
                    set_idvalue('producto',$(dato).find("item_descri").html());
                    set_idvalue('puni',$(dato).find("item_puni1").html());
//                     set_idvalue('puni',$(dato).find("item_ppro1").html());
                    set_idvalue('iva',$(dato).find("item_iva").html());
                    set_idvalue('irbp',$(dato).find("item_irbp").html());
                    
                    set_idvalue('dlpuni',$(dato).find("dlpuni").html());
                    set_idvalue('dlpvp',$(dato).find("dlpvp").html());
                    set_idvalue('dldcto',$(dato).find("dldcto").html());
               }
               
               if($(dato).find("plvh").html())
               {
                    set_idvalue('vinn',$(dato).find("plvh_vinn").html());
                    
                    set_idvalue('mrca',$(dato).find("plvh_mrca").html());
                    set_idvalue('mdvh',$(dato).find("plvh_mdvh").html());
                    set_idvalue('anio',$(dato).find("plvh_anio").html());
                    
                    set_idvalue('codt',$(dato).find("plvh_enti").html());
                    set_idvalue('iser',$(dato).find("plvh_item").html());
                    
                    set_idvalue('clor',$(dato).find("plvh_clor").html());
                    set_idvalue('propietario',$(dato).find("plvh_propietario").html());
//                     set_idvalue('enti',$(dato).find("plvh_enti").html());
               }
               
               if($(dato).find("mdvh").html())
               {
                         set_idvalue('mrca',$(dato).find("mdvh_mrca").html());
                         set_idvalue('modelo',$(dato).find("mdvh_modelo").html());
                         set_idvalue('anio',$(dato).find("mdvh_anio").html());
               }
               
               if($(dato).find("vinn").html())
               {
                         set_idvalue('mrca',$(dato).find("vinn_mrca").html());
                         set_idvalue('modelo',$(dato).find("vinn_modelo").html());
                         set_idvalue('anio',$(dato).find("vinn_anio").html());
                         set_idvalue('plvh',$(dato).find("vinn_plvh").html());
               }
               
               
               
               
               if(msgswal){swal_fire(msgswal);}
               if(msgalert){alert(msgalert);}
               if(msgsys){console.log('MSG SYS => '+msgsys);}
               if(icon!='error')
               {if(psuccess){eval(psuccess);}}

               if(pdata.get('refresh')=='refresh'){location.reload();}
//                     alert(psuccess);
//                alert(pdata.get('script'));
               
//                var ltime=new Date();
               
               
          },
          error:function(jqXHR,textStatus,errorThrown )
          {
               if(document.getElementById('lastTime'))
               {document.getElementById('lastTime').innerHTML='E:'+time_now(3);}
               console.log('****** ERROR ******');
               console.log(jqXHR.status);
               if(document.getElementById(presult))
               {
                    if (jqXHR.status === 0)  {document.getElementById(presult).innerHTML='Not connect: Verify Network.';}
                    else if (jqXHR.status == 404){document.getElementById(presult).innerHTML='Requested page not found [404]';}
                    else if (jqXHR.status == 500){document.getElementById(presult).innerHTML='Internal Server Error [500].';} 
                    else if (exception === 'parsererror'){document.getElementById(presult).innerHTML='Requested JSON parse failed.';} 
                    else if (exception === 'timeout'){document.getElementById(presult).innerHTML='Server Not Responding';} 
                    else if (exception === 'abort'){document.getElementById(presult).innerHTML='Ajax request aborted.';} 
                    else{document.getElementById(presult).innerHTML='Uncaught Error: ' + jqXHR.responseText;}
               }
          }, 
          complete:function(jqXHR, textStatus)
          {
//                 $("#loader").hide();
//                if(pwait)
//                if(document.getElementById('loader'))
//                {document.getElementById('loader').style.display='none';}

               if(document.getElementById('lastTime'))
               {document.getElementById('lastTime').innerHTML=time_now(3);}
//                if(document.getElementById(presult))
//                {document.getElementById(presult).innerHTML='';}
               document.body.style.cursor = 'default';
               if(textStatus==='success'){}
          },
          timeout:60000
     });

//      console.log('EXE AJAX RESULT');
//      if(document.getElementById(result))
//      {document.getElementById(result).innerHTML=Date();}
     return rdata;
}


function set_idvalue(id,value)
{
//      console.log('************');
//      console.log(id);
//      console.log(value);
     
     var xvalue,fvalue;
     if(!value){if(id=='numero'){return;}}
     
     xvalue=parseFloat(value);
     fvalue=value;

     if(isNumber(xvalue))     
     {
          if(id!='enti' && id!='codt' && id!='vndd' && id!='rcdd'  && id!='codigo'  && id!='ptoe'  && id!='toptoe')
          {value=xvalue.toString();}
     }
     
     if(document.getElementById(id))
     {
          if(document.getElementById(id).tagName=='INPUT')
          {document.getElementById(id).value='';}
          if(document.getElementById(id).tagName=='DATALIST')
          {document.getElementById(id).innerHTML='';}
     }
     
     if(!value){return;}
     if(document.getElementById(id))
     {
          if(document.getElementById(id).tagName=='INPUT')
          {
               if(document.getElementById(id).type=='date')
               {document.getElementById(id).value=fvalue;}
               else
               {document.getElementById(id).value=value;}
               
          }
          if(document.getElementById(id).tagName=='SELECT')
          {document.getElementById(id).value=value;}
          if(document.getElementById(id).tagName=='DATALIST')
          {document.getElementById(id).innerHTML=value;}
     }
}


function vali_maes(tabla,codigo='')
{
  if(codigo===undefined){return;}
     
  if(codigo=='++')
  {window.open("?scri=regi_maes3&modu="+tabla);}
     
  if(tabla=='enti' && codigo.trim().length!=10 && codigo.trim().length!=13){return;}   
  if(tabla=='item' && codigo.trim().length!=8 && codigo.trim().length!=13){return;}   
//   if(tabla=='vhcl' && codigo.trim().length<5 && codigo.trim().length>8){return;}   
  if(tabla=='plvh' && codigo.trim().length<5 && codigo.trim().length>8){return;}   
  if(tabla=='cntn' && codigo.trim().length!=11){return;}   
     
  var data = new FormData();
  var script='vali_maes.php';
  var ruc_exist,ced_exist;
     
  if(tabla=='enti')
  {
       if(codigo.trim().length==10)
       {
            xurl='https://srienlinea.sri.gob.ec/sri-registro-civil-servicio-internet/rest/DatosRegistroCivil/existeNumeroIdentificacion?numeroIdentificacion='+codigo;
       }
       if(codigo.trim().length==13)
       {
            xurl='https://srienlinea.sri.gob.ec/sri-catastro-sujeto-servicio-internet/rest/ConsolidadoContribuyente/existePorNumeroRuc?numeroRuc='+codigo;
       }
  }
     
  data.append('script',script);
  data.append('tabla',tabla);
  data.append('codigo',codigo);
  exe_ajax(data);
}

function data_maes(tabla,codigo,column,desti,exact=0)
{
  var data = new FormData();
  var script='data_maes.php';
  var xcodigo_open=codigo;
  var xopen=0;
  if(desti=='' || desti===undefined){desti=tabla;}

if(document.getElementById(desti).getAttribute('open'))
{xopen=document.getElementById(desti).getAttribute('open');}
     
  if(codigo.substr(0,1)=='.')
  {
       codigo=codigo.substr(1,100);
       document.getElementById(desti).value=codigo;
  }
     
  if(column.substr(-6,6)=='codigo')
  {document.getElementById(desti).value=codigo.toUpperCase();}
     
  data.append('script',script);
  data.append('tabla',tabla);
  data.append('codigo',codigo);
  data.append('column',column);
  data.append('exact',exact);
  exe_ajax(data,desti);
     
//   if(xopen==1)
  if(tabla=='enti')
  {
//        if(document.getElementById(desti).value=='')
//        {document.getElementById(desti).value=xcodigo_open;}
  }
    
}

function save_data(event,id)
{
     var data=new FormData();
     var script='save_data';
     var xvalue;
     var xblank=1;
     xvalue=document.getElementById(id).value;
     
     if(document.getElementById(id).getAttribute('blank'))
     {xblank=document.getElementById(id).getAttribute('blank');}
    
     if(xvalue==='')
     {
          if(xblank==0)
          {
               Swal.fire({
                 title: 'Error!',
                 text: 'Espacio en Blanco  *** NO Permitido ***',
                 icon: 'error',
                 confirmButtonColor:'darkred',
                 timer:5000
               })
          }
          return;
     }
     
     if(document.getElementById(id).type=='checkbox')
     {
          xvalue=document.getElementById(id).checked;
          if(xvalue){xvalue=1;}else{xvalue=0;}
     }
     
     data.append('script',script);
     data.append('tabla',document.getElementById(id).getAttribute('savet'));

     if(document.getElementById(id).getAttribute('savec'))
     {data.append('codigo',document.getElementById(id).getAttribute('savec'));}

     if(document.getElementById(id).getAttribute('savei'))
     {data.append('idnum',document.getElementById(id).getAttribute('savei'));}
     
     if(document.getElementById(id).getAttribute('saved'))
     {data.append('iddet',document.getElementById(id).getAttribute('saved'));}
     
     data.append('field',document.getElementById(id).getAttribute('savef'));
     data.append('valor',xvalue);
     
for (const [key, value] of data.entries()) {
    console.log(`${key}: ${value}`);
}     
     
     exe_ajax(data);

}


function exe_script(pscript,pdest='',pwait=0)
{
   if(pscript==undefined){return;}
   if(pwait==undefined){pwait=0;}
   if(pscript.indexOf('.php')<0){pscript=pscript+'.php';}
   
   var params = window.location.search.substr(1).split("&");

   $get = {};
   data = new FormData();	
   data.append('script',pscript);
   for (var idx=0; idx<params.length; idx++)
   {
      parat = params[idx].split("=");
      $get[decodeURIComponent(parat[0])] = decodeURIComponent(parat[1]);
      data.append(decodeURIComponent(parat[0]),decodeURIComponent(parat[1]));
   }
   rdata=exe_ajax(data,pdest,pwait);
}

// function exe_func(phpfunc,pdest='',pwait=0)
function exe_phpf(phpfunc,pdest='',pwait=0)
{
	console.log('PHP F1 => '+phpfunc+' : '+Date());
	var msgalert='',pant1='',res1='',xdato;
     if(phpfunc==undefined){return;}
     if(pwait===undefined){pwait=0;}
	if(pdest===undefined){pdest='';}

     var data = new FormData();
	var rdata;
	data.append('script',phpfunc);
	rdata=exe_ajax(data,pdest,pwait)

// 	if(document.getElementById(pdest))
// 	{document.getElementById(pdest).innerHTML=rdata;}
	console.log('PHP F2 => '+phpfunc+' : '+Date());
  
	return rdata;
	
}

// function upld_fdoc(tabla,codigo,idfile)
function upld_filedocu(docu,idnum,iddet,idfile)
{
     var color1=document.getElementById('color1').innerHTML;
     var color2=document.getElementById('color2').innerHTML;
     
     var xfile=document.getElementById(idfile)
     if(xfile.files.length==0)
     {
          document.getElementById(idfile).click();
          return;
     }
          
     Swal.fire({
       title: 'Subir Archivos ?',
       text: document.getElementById(idfile).files.length+' Archivos',
       icon: 'warning',
       focusCancel: true,
       showCancelButton: true,
       confirmButtonColor: color1,
       cancelButtonColor: 'darkred',
       confirmButtonText: 'SI, Subir!'
     }).then((result) =>
     {
          if (result.isConfirmed){
               var data;
               for(var idx=0; idx<xfile.files.length; idx++)
               {
                    data=new FormData();
                    data.append('script','upld_filedocu');
                    data.append('tabla','fdoc');
                    data.append('docu',docu);
                    data.append('idnum',idnum);
                    data.append('iddet',iddet);
                    data.append('xfile',xfile.files[idx]);
                    exe_ajax(data,'','',false);
//                     console.log('*/*/*/*');
//                     console.log(idx);
//                     console.log(xfile.files[idx]);
               }
//                location.reload();
          }
     })
     
}

function dele_filedocu(tabla, codigo)
{
     var color1=document.getElementById('color1').innerHTML;
     var color2=document.getElementById('color2').innerHTML;
          
     Swal.fire({
       imageUrl: document.getElementById('img_'+codigo).src,
       imageHeight: Math.floor(screen.height/3.5),
       title: 'Eliminar Archivo ?',
       text: "Esta operación NO es reversible",
       icon: 'warning',
       focusCancel: true,
       showCancelButton: true,
       confirmButtonColor: color1,
       cancelButtonColor: 'darkred',
       confirmButtonText: 'SI, Eliminar!'
     }).then((result) =>
     {
          if (result.isConfirmed){
          var data=new FormData();
          data.append('script','dele_filedocu');
          data.append('tabla',tabla);
          data.append('codigo',codigo);
          exe_ajax(data);
          document.getElementById('td'+codigo).style.display='none';
          }
     })
     
     
}