try {
  var context = atob(JSON.parse(atob(WolkvoxChat)).context);
} catch (error) {
  console.error(error.message);
}

var base_url          = base_url;
var url               = avatar;
var avatarBot         = avatarBot;
var transparent       = transparent;
var agente_asignado   = "";
var agente            = "";
var session           = idsessionNew;
var session2          = idsessionNew;
var audio             = new Audio('sounds/new.wav');
var recibir           = '';
var write             = '';
var from_chat         = '';
var idmsg             = 0;
var title             = document.title;
var newTitle          = '';
var count             = 0;
var INDEX             = 0; 
var heightFrameWidget = "";
var widthFrameWidget  = "";
var chatCircleImgWidthSend  = chatCircleImgWidthSend;
var chatCircleImgHeightSend = chatCircleImgHeightSend;
var heightFrameChat   = "";
var widthFrameChat    = "";
var type_call         = "";
var chat_id           = 0;
var atstrt            = 0;
var startedChat       = 0;
var height_mobile     = height_mobile;

var iti;
var init_routing = 0;

switch(widget){
  case "l":
    heightFrameWidget = '71';
    widthFrameWidget  = '75';
    break;
  case "m":
    heightFrameWidget = '55';
    widthFrameWidget  = '60';
    break;
  case "s":
    heightFrameWidget = '45';
    widthFrameWidget  = '50';
    break;
}
switch(chat){
  case "l":
    heightFrameChat = '543';
    widthFrameChat  = '288';
    break;
  case "m":
    heightFrameChat = '455';
    widthFrameChat  = '288';
    break;
  case "s":
    heightFrameChat = '400';
    widthFrameChat  = '288';
    break;
  case "full":    
    heightFrameChat = '100%';
    widthFrameChat  = '100%';
    document.getElementById("chat-logs").style.height == "78% !importan"    
    break;
}
var device = getDeviceType();
if(device == "mobile")
{
  widthFrameChat  = '100%';
  heightFrameChat = height_mobile ?  height_mobile+'%' : '100%';
}
$id_config = id_config;
$skill_bd = skill;
$skill = $("#skill").val();
$text4 = '';
$prefA = '';
$routing='';
if(transparent == 1)
{
  heightFrameWidget = (parseInt(chatCircleImgHeightSend)+parseInt(20));
  widthFrameWidget  = (parseInt(chatCircleImgWidthSend)+parseInt(20));
}
function popUpAlert(text)
{
  document.getElementById("popUpChat_chat_micro_alert_txt").innerHTML = "<strong>"+text+"</strong>";
  document.getElementById("popUpChat_chat_micro_alert").classList.toggle("show");
}

function cargarDatosLocalStorage( event ){
  var s_value;
  try {
    
    if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text1'))){
       $("#text1").val(s_value);
       $("#textNombre").addClass("mdc-floating-label--float-above");
      //  $("#textNombre").css('background-color', '#fff');
      //  $("#textNombre").css('padding','0 4px;');
       
      }
      
      if( event == "closed"){
        
        if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text2'))){
          
          iti.setNumber(s_value);
          
        }
        
      }else{
        
        if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text2'))){
          
          $("#textPhone").addClass("mdc-floating-label--float-above");
          // $("#textPhone").css('background-color', '#fff');
          // $("#textPhone").css('padding','0 4px;');
        
        
      }
    }
  
    if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text3'))){
      $("#text3").val(s_value);
      $("#textEmail").addClass("mdc-floating-label--float-above");
      // $("#textEmail").css('background-color', '#fff');
      // $("#textEmail").css('padding','0 4px;');
      
    }
  
    if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text4'))){
      $("#text4").val(s_value);
      $("#textIdentification").addClass("mdc-floating-label--float-above");
      // $("#textIdentification").css('background-color', '#fff');
      // $("#textIdentification").css('padding','0 4px;');
      
    }
  
    if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text5'))){
      $("#text5").val(s_value);
      // $("#text5").addClass("mdc-floating-label--float-above");
      // $("#text5").css('background-color', '#fff');
      // $("#text5").css('padding','0 4px;');
      
    }
  
    if ((s_value = window.localStorage.getItem('chat.wolkvox.form.text6'))){
      $("#text6").val(s_value);
      // $("#text6").addClass("mdc-floating-label--float-above");
      // $("#text6").css('background-color', '#fff');
      // $("#text6").css('padding','0 4px;');
      
    }  
  } catch (error) {
  }
}
  function sleep(milliseconds)
  {
   var start = new Date().getTime();
   for (var i = 0; i < 1e7; i++)
   {
    if ((new Date().getTime() - start) > milliseconds)
    {
     break;
    }
   }
  }
var count = 3;
do {
  if (typeof mdc !== "undefined")
  {
    mdc.autoInit();
    count = 0;
  }
  else
  {
    sleep(2000);
    count--;
  }
} while (count != 0);
$( document ).ready(function() {


  cargarDatosLocalStorage("init");


  const isNumericInput = (event) => {
    const key = event.keyCode;
    return ((key >= 48 && key <= 57) || 
      (key >= 96 && key <= 105) 
      );
  };
  const isModifierKey = (event) => {
    const key = event.keyCode;
    return (event.shiftKey === true || key === 35 || key === 36) || 
    (key === 8 || key === 9 || key === 13 || key === 46) || 
    (key > 36 && key < 41) || 
    (
      (event.ctrlKey === true || event.metaKey === true) &&
      (key === 65 || key === 67 || key === 86 || key === 88 || key === 90)
      )
  };
  const enforceFormat = (event) => {
    if(!isNumericInput(event) && !isModifierKey(event)){
      event.preventDefault();
    }
  };
  const formatToPhone = (event) => {
    if(isModifierKey(event)) {return;}

    const target = event.target;
    const input = event.target.value.replace(/\D/g,'').substring(0,10); 
    const zip = input.substring(0,3);
    const middle = input.substring(3,6);
    const last = input.substring(6,10);
    if(input.length > 8){target.value = "("+zip+") "+middle+" - "+last;}
    else if(input.length = 8){target.value = "("+input.substring(0,1)+") "+input.substring(1,4)+" - "+input.substring(4,8);}
    else if(input.length > 3){target.value = "("+input.substring(0,1)+") "+input.substring(1,4);}
    else if(input.length > 0){target.value = "("+input.substring(0,1)+") ";}
  };
  const inputElement = document.getElementById('text2');
  inputElement.addEventListener('keydown',enforceFormat);
  inputElement.addEventListener('keyup',formatToPhone);
  //
  document.addEventListener('input', function(event) {
    // Verificar si el elemento que disparó el evento es un input
    if (event.target.tagName.toLowerCase() === 'input') {
      // Verificar si el input es de tipo "file"
      if (event.target.type.toLowerCase() === 'file') {
          // No hagas nada con inputs de tipo "file"
          return;
      }
      // Obtener el valor actual del input
      var valorInput = event.target.value;
      // Sanitizar el valor del input
      var valorSanitizado = DOMPurify.sanitize(valorInput);
      // Asignar el valor sanitizado de vuelta al input
      event.target.value = valorSanitizado;
    }
  });
  //
});


$('input[type="file"]').change(
  function(e){
    var file = e.target.files;
    var completeSize = 0;
    for (var i = 0; i <= file.length-1; i++) {
      completeSize = completeSize + file[i].size;
    }
    if(completeSize > 5242880)
    {
      popUpAlert("Max. 5Mb");
    }
    else
    {
      sendFileAttached(file);
    }
  }
  );
 function sendFileAttached(file){
    var formData = new FormData();
    for (var i = 0; i < file.length; i++) {
      formData.append(i, file[i]);
    }
    formData.append('ses', session);
    formData.append('operation', $("#idcliente").val());
    formData.append('skill', $("#skill").val());
    var uriAttach = "";
    $.ajax({
      url: "querys/sendAttach.php",
      data: formData,
      type: "POST",
      dataType: "json",
      processData: false,
      contentType: false,
      beforeSend: function() {
        document.getElementById("alerta").innerHTML = "<strong>Uploading...</strong>";
        document.getElementById("alerta").style.display = "";
      },
      success: (data) => {
        sendMsgType = data.sendMsgType;
   
        if (typeof data.error != "undefined")
        {
          popUpAlert(data.error);
          document.getElementById("alerta").innerHTML = "<strong>"+data.error+"</strong>";
        }
        else
        {
          for (var i = 0; i <= data.name.length-1; i++) {
            generate_message(data.name[i], 'self', " ", " ", data.data[i]);
          }
          document.getElementById("alerta").innerHTML = "<strong>Uploaded</strong>";
        }
        
        setTimeout(function(){ 
          document.getElementById("alerta").style.display = "none";
          document.getElementById("alerta").innerHTML = "";
        }, 1200);
        document.getElementById("chat_input_attach").value = "";
        uriAttach = data.ext+"|"+data.data;
        if (sendMsgType == 1 ) {//revisar
          
          $msg = uriAttach;
          $idcliente = $idcliente.replace(" ","");//revisar
          $skill = $skill.replace(" ","");//revisar

          chatbotmsg($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill,$msg,"");
          
        }
      },
      error:function(error){
        document.getElementById("alerta").innerHTML = "<strong>Error Uploading...</strong>";
        setTimeout(function(){ 
          document.getElementById("alerta").style.display = "none";
          document.getElementById("alerta").innerHTML = "";
        }, 1200);
        document.getElementById("chat_input_attach").value = "";
      }
    });
}
function iframeResize(height,width,bottom)
{
  parent.postMessage("resize::"+height+"||"+width+"||1%||"+bottom,"*");
}
function setInputFilter(textbox, inputFilter)
{
  ["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
    textbox.addEventListener(event, function() {
      if (inputFilter(this.value)) {
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      }
    });
  });
}
setInputFilter(document.getElementById("text2"), function(value){return /^\d*$/.test(value);});
$("#enviar_form_chat").on("click", validate);
$("#start_chat_options").on("click", submit_form);
$("#btn-audio").on("click", clicktocall_audio);
$("#btn-video").on("click", clicktocall_video);
$("#btn-callback").on("click", callback);
$('#record-submit').click(startRecording);
$('#stop-record-submit').click(stopRecording);
$('#cancel-record-submit').click(cancelRecording);

function validateEmail(email)
{
  var 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,}))$/;
  return re.test(email);
}
function clicktocall_audio()
{ 
  $operation = $("#idcliente").val();
  $pais_selected = document.getElementsByClassName("iti__selected-flag")[0].title.replace(/[^0-9]+/g, "");
  
  $text2 = $pais_selected;
  $text2 += $("#text2").val();
  
  document.getElementById("divLoad").style.display = "";
  type_call = "call-audio";
  $text1 = $("#text1").val();
  $text3 = $("#text3").val();
  $text4 = $text4 == '' && typeof $text4 !== 'undefined' ? $("#text4").val() : $text4;
  $text5 = $("#text5").val();
  $text6 = $("#text6").val();
  $text1 = typeof $text1 !== 'undefined' ? $text1.replace(/(<([^>]+)>)/ig,"") : '';
  $text2 = typeof $text2 !== 'undefined' ? $text2.replace(/(<([^>]+)>)/ig,"") : '';
  $text3 = typeof $text3 !== 'undefined' ? $text3.replace(/(<([^>]+)>)/ig,"") : '';
  $text4 = typeof $text4 !== 'undefined' ? $text4.replace(/(<([^>]+)>)/ig,"") : '';
  $text5 = typeof $text5 !== 'undefined' ? $text5.replace(/(<([^>]+)>)/ig,"") : '';
  $text6 = typeof $text6 !== 'undefined' ? $text6.replace(/(<([^>]+)>)/ig,"") : '';
  conexion_sipjs($text1,$text2,$text3,$text4,$text5,$text6, type_call);
}
function clicktocall_video()
{
  $operation = $("#idcliente").val();
  $pais_selected = document.getElementsByClassName("iti__selected-flag")[0].title.replace(/[^0-9]+/g, "");
  
    $text2 = $pais_selected;
    $text2 += $("#text2").val();
  
  document.getElementById("divLoad").style.display = "";  
  type_call = "call-audiovideo";
  $text1 = $("#text1").val();
  $text3 = $("#text3").val();
  $text4 = $text4 == '' && typeof $text4 !== 'undefined' ? $("#text4").val() : $text4;
  $text5 = $("#text5").val();
  $text6 = $("#text6").val();
  $text1 = typeof $text1 !== 'undefined' ? $text1.replace(/(<([^>]+)>)/ig,"") : '';
  $text2 = typeof $text2 !== 'undefined' ? $text2.replace(/(<([^>]+)>)/ig,"") : '';
  $text3 = typeof $text3 !== 'undefined' ? $text3.replace(/(<([^>]+)>)/ig,"") : '';
  $text4 = typeof $text4 !== 'undefined' ? $text4.replace(/(<([^>]+)>)/ig,"") : '';
  $text5 = typeof $text5 !== 'undefined' ? $text5.replace(/(<([^>]+)>)/ig,"") : '';
  $text6 = typeof $text6 !== 'undefined' ? $text6.replace(/(<([^>]+)>)/ig,"") : '';
  conexion_sipjs($text1,$text2,$text3,$text4,$text5,$text6, type_call);
}
function callback()
{ 
  // $pais_selected = document.getElementsByClassName("iti__selected-flag")[0].title.replace(/[^0-9]+/g, "");
  type_call = "callback";
  $text1 = $("#text1").val();
  $text2 = $("#text2").val();
  $text3 = $("#text3").val();
  $text4 = $text4 == '' && typeof $text4 !== 'undefined' ? $("#text4").val() : $text4;
  $text5 = $("#text5").val();
  $text6 = $("#text6").val();
  $text1 = typeof $text1 !== 'undefined' ? $text1.replace(/(<([^>]+)>)/ig,"") : '';
  $text2 = typeof $text2 !== 'undefined' ? $text2.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/ ]/gi,"") : '';
  $text3 = typeof $text3 !== 'undefined' ? $text3.replace(/(<([^>]+)>)/ig,"") : '';
  $text4 = typeof $text4 !== 'undefined' ? $text4.replace(/(<([^>]+)>)/ig,"") : '';
  $text5 = typeof $text5 !== 'undefined' ? $text5.replace(/(<([^>]+)>)/ig,"") : '';
  $text6 = typeof $text6 !== 'undefined' ? $text6.replace(/(<([^>]+)>)/ig,"") : '';
  callback_register($text1,$text2,$text3,$text4,$text5,$text6, type_call);
}
function validate()
{
  var email             = $("#text3").val();
  var tel               = $("#text2").val();
  var validatorTelefono = 0;
  var validatorEmail    = 0;
  var validator         = 0;
  var text1             = document.getElementById("text1");
  var text2             = document.getElementById("text2");
  var text3             = document.getElementById("text3");
  var text4             = document.getElementById("text4");
  var text5             = document.getElementById("text5");
  var text6             = document.getElementById("text6");
  var habeasData        = document.getElementById("habeasData");
  var habeasDataPass    = false;
  
  if (text1.value != "")
  {
    text1.style.border = "";
    validatorEmail = 1;
  } 
  else
  {
    text1.focus();
    text1.style.border = "rgba(255, 0, 0, 0.41) solid 1px";
    return false;
  }
  if($("#idcliente").val() == "konecta-electrolux-nola"){
    // Dar valor por defecto a tel y text2
    tel = "123456789";
    text2.value ="123456789";
  }
  
  if (tel.length >= 7)
  {
    text2.style.border = "";
    validatorTelefono = 1;
  }
  else
  {
    text2.focus();
    text2.style.border = "rgba(255, 0, 0, 0.41) solid 1px";
    validatorTelefono = 0;
    return false;
  }

  if (validateEmail(email))
  {
    text3.style.border = "";
    validatorEmail = 1;
  } 
  else
  {
    text3.focus();
    text3.style.border = "rgba(255, 0, 0, 0.41) solid 1px";
    validatorEmail = 0;
    return false;
  }
  if ($("#habeasData").length > 0)
  {
    if ($("#habeasData").prop("checked"))
    {
      habeasData.style.setProperty('--coloree', '2px solid rgb(85 85 85)');
      habeasData.style.setProperty('--shake', '');
      habeasDataPass = true;
    }
    else
    {
      habeasData.style.setProperty('--shake', '');
      habeasData.style.setProperty('--coloree', '2px solid rgb(255 0 0)');
      habeasData.style.setProperty('--shake', 'shake 0.5s');
    }
  }
  else
  {
    habeasDataPass = true;
  }
  if (validatorEmail == 1 && validatorTelefono == 1 && (habeasDataPass)) {
    document.getElementById("enviar_form_chat").disabled = true;
    if($("#container-options")[0].children.length < 2  || $("#container-options").attr("data-init")) /*No hay botones audio o video*/
    { 
      try {
        if (window.localStorage) {
  
            /* guardar formulario en localStorage */
            if (text1 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text1', text1.value);
            }
  
            if (text2 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text2', text2.value);
            }
  
            if (text3 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text3', text3.value);
            }
  
            if (text4 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text4', text4.value);
            }
  
            if (text5 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text5', text5.value);
            }
  
            if (text6 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text6', text6.value);
            }
            /* end guardar formulario en localStorage */
  
        }
      } catch (error) {
      }
      submit_form(); /*inicia chat*/
    }
    else
    {
      if(!($("#container-options").attr("data-init"))){
        try {    
          if (window.localStorage) {
  
            /* guardar formulario en localStorage */
            if (text1 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text1', text1.value);
            }
  
            if (text2 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text2', text2.value);
            }
  
            if (text3 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text3', text3.value);
            }
  
            if (text4 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text4', text4.value);
            }
  
            if (text5 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text5', text5.value);
            }
  
            if (text6 !== null) {
              window.localStorage.setItem('chat.wolkvox.form.text6', text6.value);
            }
            /* end guardar formulario en localStorage */
            
          }
        } catch (error) {
        }
        mostrarButtons(); /*muestra botones*/
      }
    }
  }
  return false;
}
function mostrarButtons()
{
  $("#container-options").attr("data-init",true);
  $("#container-options").show();
  $(".containerChatForm").hide();
}
function submit_form()
{ 
  
  $("#chat-input").prop('disabled', false);
  //se reciben los parametros desde el formulario del chat
  $text1 = $("#text1").val(); //name
  $text2 = $("#text2").val(); //telephone
  $text3 = $("#text3").val(); //email
  $text4 = $("#text4").val(); //extra
  $text5 = $("#text5").val(); //extra
  $text6 = $("#text6").val(); //comment
  
  $text1 = typeof $text1 !== 'undefined' ? $text1.replace(/(<([^>]+)>)/ig,"") : '';
  $text2 = typeof $text2 !== 'undefined' ? $text2.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/ ]/gi,"") : '';
  $text3 = typeof $text3 !== 'undefined' ? $text3.replace(/(<([^>]+)>)/ig,"") : '';
  $text4 = typeof $text4 !== 'undefined' && $text4 != null ? $text4.replace(/(<([^>]+)>)/ig,"") : '';
  $text5 = typeof $text5 !== 'undefined' && $text5 != null ? $text5.replace(/(<([^>]+)>)/ig,"") : '';
  $text6 = typeof $text6 !== 'undefined' ? $text6.replace(/(<([^>]+)>)/ig,"") : '';
  
  //información sensible
  $idsession = $("#idsession").val(); //id session chat
  $idcliente = $("#idcliente").val(); //operation
  $skill     = $("#skill").val(); //skill o routing
  var datos = {
      text1: $text1,
      text2: $text2,
      text3: $text3,
      text4: $text4,
      text5: $text5,
      text6: $text6,
      idsession: $idsession,
      idcliente: $idcliente,
      skill: $skill
  };

  if(($text1.length > 0) && ($text2.length > 0) && ($text3.length > 0) /*&& ($text4.length > 0) && ($text5.length > 0) && ($text6.length > 0) */){
    if($text2 === 'sin_value_requerido'){
      $text2 = '';
    }
    if($text3 === 'sin_value_requerido'){
      $text3 = '';
    }
    if($text4 === 'sin_value_requerido'){
      $text4 = '';
    }
    if($text5 === 'sin_value_requerido'){
      $text5 = '';
    }
    if($text6 === 'sin_value_requerido'){
      $text6 = '';
    }
    
    if (sendMsgType==1 ) { //routing 
      chatbot($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill);
      
    }else if (sendMsgType==2 ) { //skill
      
      document.getElementById("chat_input_attach").setAttribute("multiple","");
      enrutamiento($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill,$id_config,$prefA);
    }
  }
}
function enrutamiento($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill,$id_config,$prefA)
{ 
  var datos = new Object();
  datos.text1 = $text1;
  datos.text2 = $text2;
  datos.text3 = $text3;
  datos.text4 = $text4;
  datos.text5 = $text5;
  datos.idsession = $idsession;
  datos.idcliente = $idcliente;
  datos.skill = $skill;
  datos.id_config = $id_config;
  datos.pref = $prefA;
  datos.CI = chat_id;
  datos.operation = $("#idcliente").val();
  $text6 = $text6.replace(/\n/g,"\\n");
  datos.text6 = $text6;
  
  $.ajax({
    url: "querys/users.php",
    data: datos,
    type: "POST",
    dataType: 'json',
    error: function() 
    {
      document.getElementById("enviar_form_chat").disabled = false;
    },
    success: function(data) 
    {
      if(data.agente != ""){
        agente_asignado = data.agente;
        agente = data.agente;
        var msgSaludo = '';
        
        recibir = setInterval(function(){ recibir_msgs() }, 5000);
        $("#chat-input").prop('disabled', false);
        chat_id = data.ic;
        msgSaludo = data.msgDone+" "+agente_asignado;
        $("#chat-input").prop('disabled', false);
      }
      else
      {
        var msgSinAgent = data.msgFail;
        generate_messagebot(msgSinAgent);
        $("#chat-input").prop('disabled', true);
      }
      div1 = document.getElementById('containerChatLogs');
      div2 = document.getElementById('containerChatForm');
      remove = document.getElementById('close');
      div1.style.display = '';
      div2.style.display = 'none';
      if (remove !== null) {
        remove.style.display = '';
      }
      if(full == 0)
      {
        var minimizeChatElement = document.getElementById("minimizeChat");
        var closeElement = document.getElementById("close");
        var actionsHeaderElement = document.getElementById("actionsHeader");
        if(device == "mobile")
        {
          if (minimizeChatElement) {
            minimizeChatElement.classList.add("pl-2");
          }
          if (closeElement) {
            closeElement.classList.add("pl-3");
          }
        }
        else
        {
          if (actionsHeaderElement) {
            actionsHeaderElement.classList.add("d-inline-flex");
          }
          if (minimizeChatElement) {
            minimizeChatElement.classList.add("pl-2");
          }
          if (closeElement) {
            closeElement.classList.add("pl-2");
          }
        }
        var chatBoxToggle = document.getElementsByClassName('chat-box-toggle');
        if (chatBoxToggle.length > 0) {
          chatBoxToggle[0].removeAttribute("style");
        }
      }
    }
  });
}
function chatbot($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill,$msg)
{ 
  var datos       = new Object();
  $pais_selected = document.getElementsByClassName("iti__selected-flag")[0].title.replace(/[^0-9]+/g, "");
  datos.text1     = $text1;
  datos.text2     = $pais_selected+$text2;
  datos.text3     = $text3;
  datos.text4     = $text4;
  datos.text5     = $text5;
  datos.text6     = $text6;
  datos.idsession = $idsession;
  datos.idcliente = $idcliente;
  datos.skill     = $skill;
  datos.msg       = $msg;
  datos.urlOrigen = urlOrigen;
  datos.idConfig  = idConfig;
  datos.operation = $("#idcliente").val();
  

  $text6 = $text6.replace(/\n/g, "\\n");
  $.ajax({
    url: "querys/users_routing.php",
    data: datos,
    type: "POST",
    dataType: 'JSON',
    error: function() 
    {
      document.getElementById("enviar_form_chat").disabled = false;
    },
    success: function(data){
  
      div1   = document.getElementById('containerChatLogs');
      div2   = document.getElementById('containerChatForm');
      remove = document.getElementById('close');
      div1.style.display = '';
      div2.style.display = 'none';
      $("#container-options").hide();
      if (remove !== null) {
        remove.style.display = '';
      }
      if(chat != "full"){
        var minimizeChatElement = document.getElementById("minimizeChat");
        var closeElement = document.getElementById("close");
        var actionsHeaderElement = document.getElementById("actionsHeader");
        if(device == "mobile")
        {
          if (minimizeChatElement) {
            minimizeChatElement.classList.add("ml-4");
          }
          if (closeElement) {
            closeElement.classList.add("ml-3");
          }
        }
        else
        {
          if (actionsHeaderElement) {
            actionsHeaderElement.classList.add("d-inline-flex");
          }
        }
        var chatBoxToggle = document.getElementsByClassName('chat-box-toggle');
        if (chatBoxToggle.length > 0) {
          chatBoxToggle[0].removeAttribute("style");
        }
      }
      chat_id = data.id;      
      attending = data.attending;
      var mshSendBot = " ";

      
      if(attending == false){
        chatbotmsg($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill,mshSendBot,context);
      }else{
        recibir_msgs();
      }
    }
  });
}
function starDatos()
{
  if (txt1 != "")
  {
    $("#text1").val(atob(txt1));
    $("#text2").val(atob(txt2));
    $("#text3").val(atob(txt3));
    $("#text4").val(atob(txt4));
    $("#text5").val(atob(txt5));
    $("#text6").val(atob(txt6));
    $("#habeasData").prop("checked", true)
    atstrt = 1;
    if (desplegado == 1 || full == 1)
    {
      $('#enviar_form_chat').trigger("click");
    }
    else
    {
      if($("#container-options")[0].children.length < 2  || $("#container-options").attr("data-init")) /*No hay botones audio o video*/
      {
       document.getElementById('containerChatLogs').style.display = '';
       document.getElementById('containerChatForm').style.display = 'none';
       $("#container-options").hide();
       document.getElementById('close').style.display = '';
       if(chat != "full"){
        var minimizeChatElement = document.getElementById("minimizeChat");
        var closeElement = document.getElementById("close");
        var actionsHeaderElement = document.getElementById("actionsHeader");
        if(device == "mobile")
        {
          if (minimizeChatElement) {
            minimizeChatElement.classList.add("ml-4");
          }
          if (closeElement) {
            closeElement.classList.add("ml-3");
          }
        }
        else
        {
          if (actionsHeaderElement) {
            actionsHeaderElement.classList.add("d-inline-flex");
          }
        }
        var chatBoxToggle = document.getElementsByClassName('chat-box-toggle');
        if (chatBoxToggle.length > 0) {
          chatBoxToggle[0].removeAttribute("style");
        }
      }
    }
    else
    {
      if(!($("#container-options").attr("data-init"))){
        mostrarButtons(); /*muestra botones*/
      }
    }
  }
}
}
$("#chat-submit").click(function(e)
{
  e.preventDefault();
  var msg = $("#chat-input").val();
  msg = DOMPurify.sanitize(msg);
  
  if(msg.trim() === '')
  {
    return false;
  }
  generate_message(msg, 'self');
  var buttons = [
  {
    name: 'Existing User',
    value: 'existing'
  },
  {
    name: 'New User',
    value: 'new'
  }];
  var msg_min = msg.toLowerCase();
  var ln = window.navigator.language || navigator.browserLanguage;
});
var mensajeBack = '';
function recibir_msgs()
{ 
  
  var datos = new Object();
  datos.idmsg = idmsg;
  datos.ses = session;
  datos.idcliente = $("#idcliente").val();
  datos.ic = chat_id;
  datos.skill = $skill;
  datos.operation = $("#idcliente").val();

  $.ajax({
    dataType: 'json',
    url: "querys/recibir.php",
    data: datos,
    type: "POST",
    success: function(data) 
    {
      sendMsgType = data.sendMsgType;
      var mensaje = '';
            
      if(typeof data.SKILL !== "undefined"){
        //si la variable skill inicia en 6
        // if (data.s_first_char == '6'){//revisar
        if (sendMsgType==1){//revisar
          $skill = data.SKILL;
          $("#skill").val(data.SKILL);
          if ( $("#idcliente").val().indexOf("ipcom") !== -1 ) { // si el routing inicia automaticamente o debe ser reactivo en el primer mensaje (configurable)
          }else{
            $('#enviar_form_chat').trigger("click");
          }
        }
      }
      
      if (typeof data.SKILL_queue !== "undefined")
      {
        //si la variable SKILL_queue inicia en 4
        // if (data.sq_first_char == '4')
        if (sendMsgType==2)
        {
          $skill =  data.SKILL_queue;
          $("#skill").val(data.SKILL_queue);
        }
        
      }
      if(data.CHAT != null){        
        for(i=0;i<data.CHAT.length;i++)
        {    
          idmsg   = data.CHAT[i].id;//debe ir encriptado
          mensaje = data.CHAT[i].msg;
          auto    = data.CHAT[i].auto;
          agente  = data.CHAT[i].desde != "Survey" ? data.CHAT[i].desde : languages.web_nameSurvey;
          fecha   = data.CHAT[i].fecha;

          
          if(mensaje != "|fin|")
          {
            generate_message(mensaje, 'user', auto, agente,"");
            
            count++;
            newTitle = '(' + count + ') ';
            parent.postMessage("title"+newTitle,"*");
          }
          else
          {
            clearInterval(recibir);
            $("#chat-input").prop('disabled', true);
          }
          if (data.ROUTING != "" && data.ROUTING != 0)
          {
            $("#skill").val(data.ROUTING);
            $('#enviar_form_chat').trigger("click");
          }
        }
      }
    }
  });
}
var mesok=new Array(12);
mesok[0]=languages.web_mesok0;
mesok[1]=languages.web_mesok1;
mesok[2]=languages.web_mesok2;
mesok[3]=languages.web_mesok3;
mesok[4]=languages.web_mesok4;
mesok[5]=languages.web_mesok5;
mesok[6]=languages.web_mesok6;
mesok[7]=languages.web_mesok7;
mesok[8]=languages.web_mesok8;
mesok[9]=languages.web_mesok9;
mesok[10]=languages.web_mesok10;
mesok[11]=languages.web_mesok11;
function aplicarNegrita(str) {
  // Utilizamos una expresión regular para buscar palabras entre "**"
  var regex = /\*(.*?)\*/g;
  // Reemplazamos las coincidencias con la versión en negrita
  var resultado = str.replace(regex, '<strong>$1</strong>');
  return resultado;
}
function generate_message(msg, type, auto, agent, attach,fecha) {
  var datos = new Object();
  datos.msg = msg;
  datos.type = type;
  datos.auto = auto;
  datos.agent = agent;
  datos.attach = attach;
  datos.fecha = fecha;  
  

  // Aplicar negrita al mensaje
  msg = aplicarNegrita(msg);

  // Si se proporciona una fecha, usarla, de lo contrario, usar la fecha actual
  var d;
  if (typeof fecha !== 'undefined' && fecha !== "") {
    // Convertir la fecha de entrada a un objeto Date
    let fechaEntrada = new Date(fecha);

    // Obtener el GMT local en minutos
    let gmtLocal = -new Date().getTimezoneOffset();

    // Obtener el GMT de la fecha de entrada en minutos
    let gmtFechaEntrada = -fechaEntrada.getTimezoneOffset();

    // Si los GMT son diferentes, ajustar la fecha al GMT local
    if (gmtFechaEntrada !== gmtLocal) {
      // Calcular la diferencia en minutos
      let diferencia = gmtLocal - gmtFechaEntrada;

      // Ajustar la fecha sumando la diferencia en minutos
      fechaEntrada.setMinutes(fechaEntrada.getMinutes() + diferencia);
    }

    // Asignar la fecha ajustada a la variable d
    d = new Date(fechaEntrada.getTime());
  } else {
    // Si no hay fecha, usar la fecha y hora actuales
    d = new Date();
  }
  

  // Obtener minutos y segundos formateados
  var min = d.getMinutes();
  var mins = (min < 10) ? '0' + min : min;
  var seg = d.getSeconds();
  var segs = (seg < 10) ? '0' + seg : seg;

  INDEX++;
  var str="";
  str += "<div id='cm-msg-"+INDEX+"' class=\"chat-msg_chat_micro "+type+"\" style=\"margin-top: 18px;\">";
  str += "          <span class=\"msg-avatar\">";
  if (type == 'user') {
    if(hideMessageBubble){
    // str += "<div style=\"display: flex; flex-direction: column; align-items: flex-start; width: 100%;\">";
    str += "  <div style=\"display: flex; align-items: center; position: relative; width: 100%;\">";
    str += "    <img src=\""+imgAgent+"\" style=\"height: 50px; width: 50px; border-radius: 50%; flex-shrink: 0; margin-right: 10px;\">";
    str += "    <span style=\"font-weight: bold; font-size: 12px; margin-left: -6px; margin-top: -11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 60px); font-family: Custom-Condensed;\">"+nameAgent+"</span>";
    str += "  </div>";
    // str += "  <div style=\" ; background: transparent; border: none; box-shadow: none; width: 100%; word-wrap: break-word; padding: 0; margin: 0;\">";
    }else{
      str += "          <span class=\"msg-avatar\">";
      str += "            <img src=\""+avatar+"\">";
      str += "          <\/span>";
    }
  }
  str += "          <\/span>";
  if (type == 'user') {
    try
    {
      audio.play();
    }
    catch(excep)
    {

    }
    str += hideMessageBubble
    ? ' <div class="cm-msg-text_chat_micro border-cm-msg-text_chat_micro-agent" id="cm-msg-text_chat_micro" style="left: 35px; top: -30px; background: transparent; border: none; box-shadow: none; position: relative;margin-left: -42px; left: 82px; font-family: Custom-Condensed;">'
    : ' <div class="cm-msg-text_chat_micro border-cm-msg-text_chat_micro-agent" id="cm-msg-text_chat_micro" style="font-family: Custom-Condensed;">';
    
    if( 
      (msg.indexOf('http')!= -1 || msg.indexOf('www')!= -1 || msg.indexOf('.com')!= -1)  //Verifica si el mensaje contiene un link (http, www o .com)
      && 
      (msg.indexOf('</a>') == -1)  //Verifica que el mensaje no tenga ya un link HTML (<a>)
      &&
      (msg.indexOf('storage.googleapis.com/wvx-chat-attachment') == -1) //Excluye los links de archivos adjuntos almacenados en Google Cloud Storage
    ){

      msg = linkify(msg); //Convierte texto con URLs en enlaces HTML clickeables

      if(msg.indexOf(agent) === -1){
        if(auto == "a"){
          str += msg;
          clearInterval(recibir);
          $("#chat-input").prop('disabled', true);
        }else if(auto == "t"){
          str += msg;
        }
        else{
          str += agent+": "+msg;
        }

      }else{
        str += msg;
      }

    }else if (msg.indexOf('http')=== -1 || msg.indexOf('www')=== -1 || msg.indexOf('.com')=== -1 || msg.indexOf('</a>') !== -1){
      if(msg.indexOf(agent) === -1){
        if(auto == "a"){
          str += msg;
          clearInterval(recibir);
          $("#chat-input").prop('disabled', true);
        }else if(auto == "t"){
          str += msg;
        }
        else{
          str += agent+": "+msg;
        }
      }else{
        str += msg;
      }
    }
    str += "          <br/>";
    str += hideMessageBubble ? "" : "        <span style='opacity: 0.4; font-size:10px; position: relative;'>"+d.getDate()+" "+mesok[d.getMonth()]+" "+d.getHours()+":"+mins+":"+segs+"<\/span>";
    str += "          <\/div>";
    str += "        <\/div>";

    // str = str.replace(/<[^>]+>|(\b(?:onerror|onload|onclick|onmouseover|onmouseout|onfocus|onblur|onkeyup|onkeydown|onkeypress)\s*=\s*['"]?[^'"]*['"]?)/gi, '');

    $(".chat-logs").append(str);
    $("#cm-msg-"+INDEX).hide().fadeIn(300);
    $(".chat-logs").stop().animate({ scrollTop: $(".chat-logs")[0].scrollHeight}, 1000);
    
    // Verificar si el mensaje contiene una etiqueta <a> con id='autoRedirectSurvey' y hacer click automático
    if (msg.indexOf("<a") !== -1 && msg.indexOf("id='autoRedirectSurvey'") !== -1) {
      setTimeout(function() {
        var autoRedirectLink = document.getElementById('autoRedirectSurvey');
        if (autoRedirectLink && autoRedirectLink.tagName.toLowerCase() === 'a') {
          autoRedirectLink.click();
        }
      }, 500); // Esperar 500ms para asegurar que el elemento esté en el DOM
    }
  }else if(type == 'self'){
    if(msg.indexOf('</audio>') !== -1){
      msg= msg.replace(/(<([^>]+)>)/ig,"");
    }
    str += hideMessageBubble ? 
    `<div style="margin-top: 18px; display: flex; align-items: center;">
        <span class="msg-avatar" style="margin-right: 10px; font-family: Custom-Condensed; position: relative; width: 50px;">
            <img src="${imgUser}" style="vertical-align: middle; width: 50px; height: 50px; border-radius: 45%;">
            <span style="font-weight: bold; position: absolute; top: 11px; left: 52px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 150px;">${nameCustomer}</span>
        </span>
        <div style="flex: 1; margin-top: 20px; margin-left: -7px; position:relative; font-family: Custom-Condensed;">` : 
    '<div class=\"cm-msg-text_chat_micro border-cm-msg-text_chat_micro-customer\" id=\"cm-msg-text_chat_micro\" style=\"font-family: Custom-Condensed;\">';
    if(attach != null && attach != "")
    {
      str += "<embed src='"+attach+"' style='width: 100%'>";
      str += '<span style="font-size: 80%;">'+msg.toLowerCase()+"</span>";
    }
    else
    {
    str += msg;
    }
    str += "          <br/>";
    if(!hideDateTime && !hideMessageBubble){
        str += "        <span style='opacity: 0.4; font-size:10px; position: relative; bottom: -3%;'>"+d.getDate()+" "+mesok[d.getMonth()]+" "+d.getHours()+":"+mins+":"+segs+"<\/span>";
    } else {
        str += "        <span style='opacity: 0.4; font-size:10px; position: relative; bottom: -3%;'><\/span>";
    }
    str += "          <\/div>";
    str += "        <\/div>";
    $(".chat-logs").append(str);
    $("#cm-msg-"+INDEX).hide().fadeIn(300);
    $("#chat-input").val(''); 
    $(".chat-logs").stop().animate({ scrollTop: $(".chat-logs")[0].scrollHeight}, 1000);
  }
}
  var msgrec = '';
  $("#chat-circle").ready(function(){
    var gmt = -new Date().getTimezoneOffset() / 60;
    var session = session2;
    operacion = $("#idcliente").val();
    $.ajax({
      dataType: 'json',
      url: "querys/session.php",
      data: {session : session, operation: operacion,gmt:gmt},
      type: "POST",
      success: function(data) 
      {
        if(Object.keys(data).length > 1)
        {
          sendMsgType = data.sendMsgType
          if(sendMsgType == 2)
          {
            document.getElementById('skill').value = data[1].SKILL;
          }
          $skill = $("#skill").val();
          $idsession = $("#idsession").val();
          $idcliente = $("#idcliente").val();
          $("#text1").val(data[1].TEXT1);
          $("#text2").val(data[1].TEXT2);
          $("#text3").val(data[1].TEXT3);
          $("#text4").val(data[1].TEXT4);
          $("#text5").val(data[1].TEXT5);
          $("#text6").val(data[1].TEXT6);
          $text1 = $("#text1").val();
          $text2 = $("#text2").val();
          $text3 = $("#text3").val();
          $text4 = $text4 == '' && typeof $text4 !== 'undefined' ? $("#text4").val() : $text4;
          $text5 = $("#text5").val();
          $text6 = $("#text6").val();
          $text1 = typeof $text1 !== 'undefined' ? $text1.replace(/(<([^>]+)>)/ig,"") : '';
          $text2 = typeof $text2 !== 'undefined' ? $text2.replace(/(<([^>]+)>)/ig,"") : '';
          $text3 = typeof $text3 !== 'undefined' ? $text3.replace(/(<([^>]+)>)/ig,"") : '';
          $text4 = typeof $text4 !== 'undefined' ? $text4.replace(/(<([^>]+)>)/ig,"") : '';
          $text5 = typeof $text5 !== 'undefined' && $text5 != null ? $text5.replace(/(<([^>]+)>)/ig,"") : '';
          $text6 = typeof $text6 !== 'undefined' && $text6 != null ? $text6.replace(/(<([^>]+)>)/ig,"") : '';
          chat_id = data[0].IC;
          agente_asignado = data[0].AGENT;
          agente = data[0].AGENT;
          var lasAgent = "";
          
          
          for(i=1;i<Object.keys(data).length-1;i++)
          {            
            tipo_dato = data[i].TYPE;
            from_chat = data[i].FROM_CHAT;
            from      = data[i].FROM;
            if (tipo_dato=='CHAT')
            {
              idmsg = data[i].ID;
              mensaje = data[i].MSG;
              
              if (from_chat=='AGENT')
              {
                if (from == "chat_bot")
                {
                  generate_messagebot(mensaje,"","",data[i].FECHA);
                }
                else
                {
                  generate_message(mensaje, "user", 0, agente,"", data[i].FECHA); 
                }
                lasAgent = from;
              }
              else
              {
                generate_message(mensaje, "self","","","",data[i].FECHA);
              }
            }
          }
          iframeResize(heightFrameChat,widthFrameChat,"0");
          $('#enviar_form_chat').trigger("click");
          if(lasAgent != "chat_bot")
          { 
            recibir = setInterval(function(){ recibir_msgs() }, 5000);
          }
          $("#containerChatForm").css("display", "none");
          $("#containerChatLogs").css("display", "");
          if($( ".chat-box" ).is( ":visible" )){ 
          }else{
            $("#chat-circle").toggle('scale');
            $(".chat-box").toggle('scale');
          }
          if(device == "mobile")
          {
            var minimizeChatElement = document.getElementById("minimizeChat");
            if (minimizeChatElement) {
              minimizeChatElement.classList.add("ml-4");
            }
          }
          else
          {
            var actionsHeaderElement = document.getElementById("actionsHeader");
            if (actionsHeaderElement) {
              actionsHeaderElement.classList.add("d-inline-flex");
            }
          }
          $(".chat-logs").stop().animate({ scrollTop: $(".chat-logs")[0].scrollHeight}, 2200);
          remove = document.getElementById('close');
          if (remove !== null) {
            remove.style.display = '';
          }
          if(full == 0){
            var chatBoxToggle = document.getElementsByClassName('chat-box-toggle');
            if (chatBoxToggle.length > 0) {
              chatBoxToggle[0].removeAttribute("style");
            }
          }
          if (txt1 != "")
          {
            atstrt = 1;
          }
        }
        else
        {
          starDatos(); 
        }
      }
    });
  })
  function cargarPais(init){
    /* consultar azure maps */
    var input       = document.querySelector("#text2");
    var inputsChat  = document.querySelector("#inputsFormChat");
    var flag_select = document.getElementsByClassName("iti__selected-flag");
    var country_code_localStorage;
    var user_ip_localStorage;
    var text2_localStorage;
    if( flag_select.length == 0){
      
      iti = window.intlTelInput(input, {
        dropdownContainer: inputsChat,   initialCountry: "auto",
        geoIpLookup: function(success, failure) {
          
        },
      });
      
      try {
        /* ingresa al input el telefono guardado en localstorage */
        if ((text2_localStorage = window.localStorage.getItem('chat.wolkvox.form.text2'))){
  
          iti.setNumber(text2_localStorage);
          
        }
  
        /* validar que hay datos del pais en localStorage */
        if( window.localStorage.getItem('chat.wolkvox.countryCode') !== undefined && window.localStorage.getItem('chat.wolkvox.countryCode') )
        {        
          country_code_localStorage = window.localStorage.getItem('chat.wolkvox.countryCode');
        }
        
        /* validar que hay datos de la ip en localStorage */
        if ( window.localStorage.getItem('chat.wolkvox.user_ip') !== undefined && window.localStorage.getItem('chat.wolkvox.user_ip') ) {        
          user_ip_localStorage = window.localStorage.getItem('chat.wolkvox.user_ip');
        }
        
        /* si la ip actual es igual al localStorage */
        if (user_ip == user_ip_localStorage)
        {
          iti.setCountry(country_code_localStorage);
        }
        else
        {
  
          // Se envia el init en true cuando se despliegue automaticamente el chat, y se envia false cuando se despliega por el boton
          $.ajax({
            url: '../chat/gp.php',
            type: 'POST',
            dataType: 'json',
            data: {
                'attr': btoa(user_ip) + "|" + btoa(base_url),
                'operation': $("#idcliente").val(),
                'init': init
            }
          }).done(function (result) {
  
  
            if (result.error == true) {
              
            }else{
  
              var country_code_bd = result.countryRegion.isoCode;
    
              /* registra en localStorage */
              if (window.localStorage) {
    
                window.localStorage.setItem('chat.wolkvox.countryCode', country_code_bd);
                window.localStorage.setItem('chat.wolkvox.user_ip', user_ip);
              }
              
              iti.setCountry(country_code_bd);
            }
  
          });
  
        }
      } catch (error) {
  
      }
    }
    /* fin consultar azure maps */
  }
  if (desplegado == 1 || full == 1)
  {
    cargarPais(true);
  } 
  
  $("#chat-circle").click(function() {    
    iframeResize(heightFrameChat,widthFrameChat,"0");
    $("#chat-circle").hide();
    $(".chat-box").toggle('fast',function(){
    });
    if ((desplegado == 0 && atstrt == 1) && startedChat == 0)
    {
      startedChat = 1;
      submit_form();
    }
    cargarPais(false);
  })
  $(".chat-box-toggle").click(function() {
    $("#chat-circle").toggle('scale');
    $(".chat-box").toggle('fast',function(){
      iframeResize(heightFrameWidget,widthFrameWidget,"1%");
    });
  })
  $(".chat-box-close").click(function() {
    var popup = document.getElementById("popUpChat_chat_micro_finalizar");
    popup.classList.toggle("show");
  })
  $("#noFinalizarChat").click(function() {
    var popup = document.getElementById("popUpChat_chat_micro_finalizar");
    popup.classList.toggle("show");
  })
  $("#finalizarChat").click(function() {
    
    $session = session;
    $.ajax({
      url: "querys/close.php",
      data: {
        ci: chat_id,
        // ci: '123456789',
        operation: $("#idcliente").val(),
        skill: $skill_bd,
      },
      type: "POST",
      dataType: "json",
      complete: function(data) 
      {
        cargarDatosLocalStorage("closed");
        if (!$("#rememberme").prop("checked")) {
          localStorage.clear();
        }        
      }
    });
    sendMsgType = 1;
    if (atstrt == 1)
    {
      $("#text1").val('');
      $("#text2").val('');
      $("#text3").val('');
      $("#text4").val('');
      $("#text5").val('');
      $("#text6").val('');
      document.getElementById('skill').value = $skill_bd;
      document.getElementById('chat-logs').innerHTML = '';
      document.getElementById("enviar_form_chat").disabled = false;
      var div3 = document.getElementById('containerChatLogs');
      var div4 = document.getElementById('containerChatForm');
      div3.style.display = 'none';
      div4.style.display = '';
      remove = document.getElementById('close');
      if (remove !== null) {
        remove.style.display = 'none';
      }
      if(full == 0)
      {
        var chatBoxToggle = document.getElementsByClassName('chat-box-toggle');
        if (chatBoxToggle.length > 0) {
          chatBoxToggle[0].setAttribute("style", "margin-right: 6px;");
        }
      }
      var popup = document.getElementById("popUpChat_chat_micro_finalizar");
      popup.classList.toggle("show");
      var survey = document.getElementById('surveyipdial');
      var input = document.getElementById('inputchatview');
      input.style.display = '';
      if ($("#formulario_chat_ipdialbox").css("visibility") == "hidden")
      {
        $("#formulario_chat_ipdialbox").css("visibility","visible");
      }
      clearInterval(recibir);
      $("#container-options").removeAttr("data-init");
      if(count > 0){
        count=0;
        newTitle = "";
        parent.postMessage("title"+newTitle,"*");
      }  
    }
    else
    {      
      // localStorage.clear();
      // sessionStorage.clear();
      
      $("#text1").val('');
      $("#text2").val('');
      $("#text3").val('');
      $("#text4").val('');
      $("#text5").val('');
      $("#text6").val('');
      document.getElementById('skill').value = $skill_bd;
      document.getElementById('chat-logs').innerHTML = '';
      document.getElementById("enviar_form_chat").disabled = false;
      var div3 = document.getElementById('containerChatLogs');
      var div4 = document.getElementById('containerChatForm');
      div3.style.display = 'none';
      div4.style.display = '';
      remove = document.getElementById('close');
      if (remove !== null) {
        remove.style.display = 'none';
      }
      if(full == 0)
      {
        var chatBoxToggle = document.getElementsByClassName('chat-box-toggle');
        if (chatBoxToggle.length > 0) {
          chatBoxToggle[0].setAttribute("style", "margin-right: 6px;");
        }
      }
      var popup = document.getElementById("popUpChat_chat_micro_finalizar");
      popup.classList.toggle("show");
      var survey = document.getElementById('surveyipdial');
      var input = document.getElementById('inputchatview');
      input.style.display = '';
      if ($("#formulario_chat_ipdialbox").css("visibility") == "hidden")
      {
        $("#formulario_chat_ipdialbox").css("visibility","visible");
      }
      clearInterval(recibir);
      $("#container-options").removeAttr("data-init");
      if(count > 0){
        count=0;
        newTitle = "";
        parent.postMessage("title"+newTitle,"*");
      }  
    }
    if(full == 0)
    {
      $("#chat-circle").toggle('scale');
      $(".chat-box").toggle('fast',function(){
        iframeResize(heightFrameWidget,widthFrameWidget,"1%");
      });
    }
  });
  $("#okAlertPopup").click(function() {
    document.getElementById("popUpChat_chat_micro_alert").classList.toggle("show");
    document.getElementById("popUpChat_chat_micro_alert_txt").innerHTML = "";
    colgar();
  })
  $("#chat-input").click(function(){
    if(count > 0){
      count=0;
      newTitle = "";
      parent.postMessage("title"+newTitle,"*");
    }
  })
/*})*/
function chatbotmsg(text1,text2,text3,text4,text5,text6,idsession,idcliente,skill,msg,context,chat_id){
  
  msg = DOMPurify.sanitize(msg);
  // Verificar si el selector de país existe antes de usarlo
  var paisElement = document.getElementsByClassName("iti__selected-flag")[0];
  $pais_selected = paisElement ? paisElement.title.replace(/[^0-9]+/g, "") : "";
  var datos       = new Object();
  datos.text1     = text1;
  datos.text2     = $pais_selected+$text2;
  datos.text3     = text3;
  datos.text4     = text4;
  datos.text5     = text5;
  datos.text6     = text6;
  datos.idsession = idsession;
  datos.idcliente = idcliente;
  datos.skill     = skill;
  datos.msg = msg;
  datos.context   = context;
  datos.operation = $("#idcliente").val();
  datos.ic        = chat_id;
  

  text6 = text6.replace(/\n/g, "\\n");
  $.ajax({
    url: "querys/msgbot.php",
    cache: false,
    data: datos,
    type: "POST",
    dataType: 'json',
    success: function(data){
      sendMsgType = data.sendMsgType;
      in_queue = data.paso_agente;
      if (in_queue == "yes" && sendMsgType !== 2)
      { 
        clearInterval(recibir);
        recibir = setInterval(function(){ recibir_msgs() }, 5000);
      }
      if(typeof data.IDCUST !== "undefined"){
        if(data.IDCUST != ''){
          $text4 = data.IDCUST;
        }
      }
      
      if(typeof data.maxid !== "undefined"){
        if(data.maxid != ''){
          idmsg = data.maxid;
        }
      }
      
      if(typeof data.PREF !== "undefined"){
        if(data.PREF != ''){
          $prefA = data.PREF;
        }
      }

      if(typeof data.cust_name !== "undefined"){
        if(data.cust_name != ''){
          nameCustomer = data.cust_name;
        } else {
          nameCustomer = "Usuario";
        }
      }
      
      if (typeof data.SKILL !== "undefined" ) {
        $skill =  data.SKILL;
        $("#skill").val($skill);
        $('#enviar_form_chat').trigger("click");
      }else{
        if(data.REPLY != '' || (data.REPLY == '' && typeof data.ATTACH  != "undefined" && data.ATTACH != '')){
          var replyBot   = typeof data.REPLY   != "undefined" ? data.REPLY   : "";
          var attachBot  = typeof data.ATTACH  != "undefined" ? data.ATTACH  : "";
          var buttonsBot = typeof data.BUTTONS != "undefined" ? data.BUTTONS : "";
          
          // OPCIÓN HÍBRIDA: Procesar mensajes continue_chatbot que vienen de msgbot.php
          if(typeof data.CONTINUE_MSGS !== "undefined" && data.CONTINUE_MSGS.length > 0){
            // Mostrar mensajes continue_chatbot PRIMERO
            data.CONTINUE_MSGS.forEach(function(msg, index) {
              generate_messagebot(msg.msg, "", "");
            });
            
            // Mostrar respuesta principal DESPUÉS de los continue_chatbot
            generate_messagebot(replyBot, attachBot, buttonsBot);
          } else {
            // Si no hay continue_chatbot, mostrar respuesta principal inmediatamente
            generate_messagebot(replyBot, attachBot, buttonsBot);
          }
        }
      }
    },
  });
}
var mesok=new Array(12);
mesok[0]=languages.web_mesok0;
mesok[1]=languages.web_mesok1;
mesok[2]=languages.web_mesok2;
mesok[3]=languages.web_mesok3;
mesok[4]=languages.web_mesok4;
mesok[5]=languages.web_mesok5;
mesok[6]=languages.web_mesok6;
mesok[7]=languages.web_mesok7;
mesok[8]=languages.web_mesok8;
mesok[9]=languages.web_mesok9;
mesok[10]=languages.web_mesok10;
mesok[11]=languages.web_mesok11;
function generate_messagebot(msg = null, attach = null, buttons = null, fecha) {
  msg = DOMPurify.sanitize(msg);
  agente = "";

  // Aplicar negrita si msg no es null
  msg = msg != null ? aplicarNegrita(msg) : null;

  // Reemplazar saltos de línea por espacios para evitar el problema
  msg = msg.replace(/\r?\n/g, '<br>'); 
  msg = linkify(msg);
  // Si no se proporciona una fecha, usamos la fecha actual
  var d;
  if (typeof fecha !== 'undefined' && fecha !== "") {
    d = new Date(fecha);
    const offsetGMTNavegador = new Date().getTimezoneOffset();
    const offsetGMTFecha = d.getTimezoneOffset();

    if (offsetGMTFecha !== offsetGMTNavegador) {
      d.setMinutes(d.getMinutes() - (offsetGMTFecha - offsetGMTNavegador));
    }
  } else {
    d = new Date();
  }

  var min = d.getMinutes();
  var mins = (min < 10) ? '0' + min : min;
  var seg = d.getSeconds();
  var segs = (seg < 10) ? '0' + seg : seg;

  var divBlockMessage = "cm-msg-" + INDEX;
  if (document.getElementById(divBlockMessage)) {
    var elemDiv = document.getElementById(divBlockMessage);
    elemDiv.style.pointerEvents = 'none';
    if (elemDiv.children[1].children[0].tagName == "AUDIO") {
      elemDiv.style.pointerEvents = 'auto';
    }
  }

  INDEX++;
  var str = "";
  str += "<div id='cm-msg-" + INDEX + "' class=\"chat-msg_chat_micro user\" style=\"margin-top: 28px; font-family: Custom-Condensed !important;\">";
  str += "  <span class=\"msg-avatar\" style=\"display: flex; align-items: center; margin-top: -5px;\">";
  str += hideMessageBubble ? 
    `    <img src=\"${imgAgent}" style=\"height: 50px; width: 50px;\">
    <span style=\"font-weight: bold; position: relative; top: -3px; margin-left: 3px;\">${nameAgent}</span>` : 
    "";
  str += "  </span>";

  try {
    audio.play();
  } catch (excep) {}

  str += hideMessageBubble ? 
    `<div style="position: relative; top: -16px; left: 55px; max-width: calc(100% - 70px); word-wrap: break-word;">` : 
    `<div class="cm-msg-text_chat_micro border-cm-msg-text_chat_micro-agent" id="cm-msg-text_chat_micro">`;
  
  if (attach == "" || attach == null) { 
    str += "";
  } else if (validateExtensionAudio(attach) || validateBase64Audio(attach)) {
    str += "<audio controls src='" + attach + "' style='width: 100%'></audio>";
  } else {
    str += "<embed src='" + attach + "' style='width: 100%'>";
  }

  str += msg; // Se inserta el mensaje limpio sin saltos de línea innecesarios

  if (buttons == "" || buttons == null) {
    // No buttons
  } else {
    str += "<br><br>";
    buttons.split(",").forEach((btns) => {
      str += "<button class='interactive_button_wolkvox'>" + btns + "</button>";
    });
  }
  if(!hideDateTime){
    str += "  <span style='opacity: 0.4; font-size:10px; position: relative;'>" + d.getDate() + " " + mesok[d.getMonth()] + " " + d.getHours() + ":" + mins + ":" + segs + "<\/span>";
  }else{
    str += "  <span style='opacity: 0.4; font-size:10px; position: relative;'><\/span>";
  }
  str += "  </div>";
  str += "</div>";

  $(".chat-logs").append(str);
  $("#cm-msg-" + INDEX).hide().fadeIn(300);
  $(".chat-logs").stop().animate({ scrollTop: $(".chat-logs")[0].scrollHeight }, 1000);

  // Verificar si el mensaje contiene una etiqueta <a> con id='autoRedirectSurvey' y hacer click automático
  if (msg && msg.indexOf("<a") !== -1 && msg.indexOf("id='autoRedirectSurvey'") !== -1) {
    setTimeout(function() {
      var autoRedirectLink = document.getElementById('autoRedirectSurvey');
      if (autoRedirectLink && autoRedirectLink.tagName.toLowerCase() === 'a') {
        autoRedirectLink.click();
      }
    }, 500); // Esperar 500ms para asegurar que el elemento esté en el DOM
  }

  if (buttons != "") {
    $(".interactive_button_wolkvox").click(function () {
      // Reset all buttons to default state
      $(".interactive_button_wolkvox").css("background-color", "transparent").css("color", "rgb(var(--codigocolor))");
      // Set selected button to use the database color
      $(this).css("background-color", "rgb(var(--codigocolor))").css("color", "rgb(var(--colortexto))");                     
      $("#chat-input").val(this.innerHTML);
      sendMsg();
      generate_message(this.innerHTML, "self");
      $("#chat-input").val("");
    });
  }
}


function linkify(inputText) {
  var replacedText, replacePattern1, replacePattern2, replacePattern3, inputText = inputText;
  replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
  replacedText = inputText.toString().replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
  replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
  replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');
  replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim;
  replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
  return replacedText;
}
function NOW() {
  var date = new Date();
  var aaaa = date.getFullYear();
  var gg = date.getDate();
  var mm = (date.getMonth() + 1);
  if (gg < 10)
    gg = "0" + gg;
  if (mm < 10)
    mm = "0" + mm;
  var cur_day = aaaa + "-" + mm + "-" + gg;
  var hours = date.getHours()
  var minutes = date.getMinutes()
  var seconds = date.getSeconds();
  if (hours < 10)
    hours = "0" + hours;
  if (minutes < 10)
    minutes = "0" + minutes;
  if (seconds < 10)
    seconds = "0" + seconds;
  return cur_day + " " + hours + ":" + minutes + ":" + seconds;
}
var startTime;
var timerInterval;
var animationId;
function startRecording() {
  navigator.mediaDevices.getUserMedia({ audio: true })
    .then(function(stream) {
      mediaRecorder = new MediaRecorder(stream);
      mediaRecorder.start();
      startTime = new Date();
      // Evento que se dispara cada vez que se graba un fragmento de audio
      mediaRecorder.addEventListener('dataavailable', function(e) {
        chunks.push(e.data);
      });
      $('#divWaveAudio').css('display', 'inline-block');
      resetAnimation();
      var AudioContext = (window.AudioContext || window.webkitAudioContext)
      var audioContent = new AudioContext();
      var streamSource = audioContent.createMediaStreamSource(stream);
      obj.analyser = audioContent.createAnalyser();
      streamSource.connect(obj.analyser);
      obj.analyser.fftSize = 512;
      obj.frequencyArray = new Float32Array(obj.analyser.fftSize);
      init() 
      loop()
      timerInterval = setInterval(updateTimer, 1000);
      updateTimer();
      
    })
    .catch(function(err) {
     
      $('#record-submit').show()
      $('#stop-record-submit').hide()
      $('#cancel-record-submit').hide()
      $('#divWaveAudio').hide()
      $('#custom-file-upload').show()
      $('#divInputChat').show()
    });
  // Actualizar la visualización de los botones
  $('#record-submit').hide()
  $('#custom-file-upload').hide()
  $('#divInputChat').hide()
  $('#stop-record-submit').css('display', 'inline-block');
  $('#cancel-record-submit').css('display', 'inline-block');
}
function stopRecording() {
  mediaRecorder.stop();
  // Actualizar la visualización de los botones
  
  $('#record-submit').show()
  $('#stop-record-submit').hide()
  $('#cancel-record-submit').hide()
  $('#divWaveAudio').hide()
  $('#custom-file-upload').show()
  $('#divInputChat').show()
  resetAnimation();
  // Crear el archivo WAV con los fragmentos grabados
  mediaRecorder.addEventListener('stop', function() {
    const blob = new Blob(chunks, { type: 'audio/wav' });
    const audioUrl = URL.createObjectURL(blob);
    const audio = new Audio(audioUrl);
    blobToBase64(blob)
    $("#record-submit").fadeOut(1, function () {
      $("#loading-record").fadeIn(1);
    });
    audio.controls = true;
    document.body.appendChild(audio);
  });
  // Reiniciar las variables
  chunks = [];
  mediaRecorder = null;
  clearInterval(timerInterval);
}
function cancelRecording(){
  mediaRecorder.stop()
  chunks = [];
  mediaRecorder = null;
  clearInterval(timerInterval);
  $('#record-submit').show()
  $('#stop-record-submit').hide()
  $('#cancel-record-submit').hide()
  $('#divWaveAudio').hide()
  $('#custom-file-upload').show()
  $('#divInputChat').show()
  resetAnimation();
}
function blobToBase64(blob) {
  var reader = new FileReader();
  reader.readAsDataURL(blob); 
  reader.onloadend = function() {
    var base64 = reader.result;
    var replaceBase64 = reader.result;
    base64 = base64.substr(base64.indexOf(',')+1)
    sendAudio(base64, replaceBase64)    
  }
}
function sendAudio(replaceBase64, base64) {
  var idsession_ = $("#idsession").val();
  var operation_ = $("#idcliente").val();
  var skill_ = $("#skill").val();
  var formData1 = new FormData();
  formData1.append("audio", replaceBase64);
  formData1.append("idsession", idsession_);
  formData1.append("operation", operation_);
  formData1.append("skill", skill_);
  $.ajax({
    url: "querys/enviarAudio.php",
    data: formData1,
    type: "POST",
    dataType: "json",
    processData: false,
    contentType: false,
    success: function (response) {
      sendMsgType = response.sendMsgType;
      $("#loading-record").fadeOut(1, function () {
        $("#record-submit").fadeIn(1);
      });
      if(response.etiqueta){
        generate_message(response.etiqueta, "self");
        if (response.sendMsgType == 1 ) {
          
          $msg = response.bucketUrl;
          $idcliente = $idcliente.replace(" ","");
          $skill = $skill.replace(" ","");
  
          chatbotmsg($text1,$text2,$text3,$text4,$text5,$text6,$idsession,$idcliente,$skill,$msg,"","");
        }
      }
    },
    error: function (xhr) {
      $("#loading-record").fadeOut(1, function () {
        $("#record-submit").fadeIn(1);
      });
    },
  });
}
function validateExtensionAudio(url) {
  var extension = url.split('.').pop().toLowerCase();
  var extensions = ['mp3', 'wav', 'ogg']; // Lista de extensiones válidas
  
  if (extensions.includes(extension)) {
    return true;
  } else {
    return false;
  }
}
function validateBase64Audio(url) {
  // Obtener el tipo de contenido desde la URL base64
  var contentType = url.split(';')[0].split(':')[1];
  // Lista de tipos de contenido de audio válidos
  var validAudioTypes = ['audio/mp3', 'audio/wav', 'audio/ogg'];
  // Verificar si el tipo de contenido está en la lista de tipos de audio válidos
  if (validAudioTypes.includes(contentType)) {
    return true;
  } else {
    return false;
  }
}
function updateTimer() {
  var currentTime = new Date();
  var elapsedTime = Math.floor((currentTime - startTime) / 1000); // Tiempo transcurrido en segundos
  if (elapsedTime >= 60) {
    stopRecording(); // Pausar la grabación si se alcanza el minuto
  }
  // Actualizar el contador en tu interfaz (por ejemplo, en un elemento con el id "timer")
  document.getElementById('div-timer-record').textContent = formatTime(elapsedTime);
}
function formatTime(seconds) {
  var minutes = Math.floor(seconds / 60);
  var remainingSeconds = seconds % 60;
  // Agregar ceros iniciales si es necesario
  var formattedMinutes = minutes < 10 ? '0' + minutes : minutes;
  var formattedSeconds = remainingSeconds < 10 ? '0' + remainingSeconds : remainingSeconds;
  return formattedMinutes + ':' + formattedSeconds;
}
obj = {}
function init () {
  obj.canvas = document.getElementById('canvasWave');
  let container = document.getElementById('divWaveAudio');
  obj.ctx = obj.canvas.getContext('2d');
  obj.width = container.clientWidth;
  obj.height = container.clientHeight * 0.9;
  obj.canvas.width = obj.width * window.devicePixelRatio;
  obj.canvas.height = obj.height * window.devicePixelRatio;
  obj.canvas.style.width = obj.width + 'px';
  obj.canvas.style.height = obj.height + 'px';
  obj.ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
}
function randomInteger(max = 256){
  return Math.floor(Math.random()*max);
}
let timeOffset = 100;
let now = parseInt(performance.now()) / timeOffset;
function loop () {
  obj.ctx.clearRect(0, 0, obj.canvas.width, obj.canvas.height);
  let max = 0;
  
  if (parseInt(performance.now()/ timeOffset)  > now) {
      now = parseInt(performance.now() / timeOffset);
      obj.analyser.getFloatTimeDomainData(obj.frequencyArray)
      for (var i = 0; i< obj.frequencyArray.length;  i++) {
        if(obj.frequencyArray[i] > max) {
          max = obj.frequencyArray[i];
        } 
      }
    
      var freq = Math.floor(max * 650);
    
    
      obj.bars.push({
        x: obj.width,
        y: (obj.height / 2) - (freq / 2),
        height: (freq == 0) ? 3:freq+3,
        width: 3
      });
  }
  draw();
  animationId = requestAnimationFrame(loop);
}
obj.bars = [];
function draw() {
  for (i=0; i< obj.bars.length ; i++) {
    const bar = obj.bars[i];
    obj.ctx.fillRect(bar.x,bar.y,bar.width,bar.height);
    bar.x = bar.x - 1;
    
    if (bar.x < 1) {
        obj.bars.splice(i,1)
    }
    
  }
}
function resetAnimation() {
  cancelAnimationFrame(animationId);
  obj.bars = [];
  now = parseInt(performance.now()) / timeOffset;
}
/*console.clear();*/