PageSourceSearch

https://website.thatsbiz.com/wp-content/plugins/listbuildingbot/public/js/ajaxbased-chat-custom.js?ver=641567

js thatsbiz.com collected 2026-10-04 12:41:02 UTC 66,893 bytes, 1,317 lines download raw bytes

1var notification_admin_id;
2var current_url = jQuery(location).attr('href');
3var session_html = '';
4
5
6function scrollToBottomLive() {
7	if(jQuery('#chat-messages').length){
8	    var chatBox = document.getElementById("chat-messages");
9	    chatBox.scrollTop = chatBox.scrollHeight;
10    }
11}
12
13jQuery(document).ready(function ($) {
14
15	if (jQuery('body').hasClass('wp-admin') && siteConfig.is_have_any_live_chat){
16		setInterval(() => {
17			lbbLoadChat();
18		}, 10000);
19	}
20
21	jQuery(window).on('storage', lbb_message_receive);
22	jQuery(window).on('storage', lbb_admin_message_receive);
23
24	jQuery("#lbb-chat-main-wrapper.lbb-template-wrapper .lbb-conversation").on('scroll', function() {
25	    if (jQuery(this).scrollTop() + jQuery(this).innerHeight() + 2 >= jQuery(this)[0].scrollHeight) {
26	    	jQuery('#lbb-chat-main-wrapper').removeClass('lbb-new-message-found');
27	    }
28	});
29
30	
31	jQuery(document).on('keyup','.lbb-live-mode .lbb_input_message', function(key){
32		if (key.keyCode == 13) {
33			if (jQuery('#lbb-app').hasClass('lbb-live-mode')) {
34				SendMessage();
35				jQuery('.lbb-live-mode .lbb_input_message').val('');
36			}
37		}
38	});
39
40	jQuery(document).on('click', '.lbb-live-mode  .lbb-send-icon', function(e){
41		if (jQuery('#lbb-app').hasClass('lbb-live-mode')) {
42			SendMessage();
43			jQuery('.lbb-live-mode .lbb_input_message').val('');
44		}
45	});
46
47if (typeof chat_id !== 'undefined') {
48	var conversation_chat_cookie_key = 'lbbcf_'+chat_id+'_conversation_chat_id';
49	var conversation_chat_cookie_val = '';
50	if (getCookie(conversation_chat_cookie_key)){
51		conversation_chat_cookie_val = getCookie(conversation_chat_cookie_key);
52		jQuery('#current_role_id').val(conversation_chat_cookie_val);
53	}
54}
55
56
57
58var current_admin_id = jQuery("#current_admin_id").val();
59
60
61jQuery('.form-bottom-submit-with-checkbox  button').on('click', function(e){
62
63	
64	var admin_send_msg  = jQuery('#message-to-send').val();
65
66	jQuery('.user-admin-list-left-side.active-chat .status').text(admin_send_msg);
67	jQuery('.user-admin-list-left-side.active-chat').removeClass('chat-new-msg');
68
69	LBBMoveLiToFirst('.user-admin-list-left-side.active-chat');
70	lbbAdminChatHTML('','','A');
71
72
73	jQuery('#message-to-send').val('');
74	lbbAdminscrollToBottom();
75	e.preventDefault();
76});
77
78
79jQuery('.lbb-chat-user-info-nice-form').on('submit', function(e){
80	e.preventDefault();
81	var fname = jQuery('#lbb-chat-user-info-full-name').val();
82	var email = jQuery('#lbb-chat-user-info-email').val();
83
84	if(jQuery('#lbb-app').hasClass('lbb-trained_ai-mode')){
85
86		submitTrainedAIContact(fname,email);
87
88	}else{
89
90		jQuery('.lbb-contact-form-error').hide();
91		var req_privacy =  jQuery('#lbb-chat-user-privacy').val();
92		var show_privacy =  jQuery('#lbb-chat-user-req-privacy').val();
93		var phone =  jQuery('#lbb-chat-user-info-phone').val();
94		
95		var req_phone =  jQuery('#lbb-chat-user-phone-req').val();
96		var is_valid = true;
97		
98		if(fname == ''){
99			jQuery('.lbb-contact-form-error-fullname').show();
100			is_valid = false;
101		}else if (email == '') {
102			jQuery('.lbb-contact-form-error-email').show();
103			is_valid = false;
104		}else if(req_phone == 'yes' && phone == ''){
105			jQuery('.lbb-contact-form-error-phone').show();
106			is_valid = false;
107		}else if(show_privacy == 'yes' && req_privacy == 'yes' && !jQuery('#chat-privacy').is(':checked')){
108			jQuery('.lbb-contact-form-error-term').show();
109			is_valid = false;
110		}else{
111			//alert('Please enter email address');
112		}
113
114		if(is_valid){
115			
116			get_current_user_data(fname, email,phone);
117		}
118	}
119});
120
121
122/*Notification*/
123	jQuery(document).on('DOMContentLoaded', function () {
124    // Request desktop notifications permission on page load
125
126    
127  });
128
129	/*if (jQuery('#lbb-livechat-video-player').length) {
130	    jQuery('#lbb-livechat-video-player')[0].play();
131	}
132
133	if (jQuery('#lbb-bg-video-tag').length) {
134	    jQuery('#lbb-bg-video-tag')[0].play();
135	}
136
137	if (jQuery('#lbb-bg-video-tag-common').length) {
138	    jQuery('#lbb-bg-video-tag-common')[0].play();
139	}
140
141	if (jQuery('#lbb-bg-video-tag-common-btn').length) {
142	    jQuery('#lbb-bg-video-tag-common-btn')[0].play();
143	}*/
144		
145	
146});
147
148
149
150jQuery(window).on("load", function(){
151	if (siteConfig.is_wp_admin) {
152	    if (!Notification) {
153	      console.log('Desktop notifications are not available in your browser.');
154	      return;
155	    }
156
157	    /*if (Notification.permission !== 'granted') {
158	      Notification.requestPermission();
159	    }*/
160	}
161
162});
163
164
165function lbbConversationMotificationsFrontend(){
166
167	var conversation_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_id';
168	var conversation_id = '';
169	if (getCookie(conversation_cookie_key)){
170		conversation_id = getCookie(conversation_cookie_key);
171	}
172	
173	jQuery.ajax({
174		type: 'post',
175		url: siteConfig.ajaxurl,
176		data: {
177			'conversation_id': conversation_id,
178			'timezone' : Intl.DateTimeFormat().resolvedOptions().timeZone,
179			'action': 'lbb_user_notification_heartbeat',
180		},
181		success: function (response) {
182			response = JSON.parse(response);
183			var unread_current_user = (response.unread_current_user);
184			var message_ids = [];
185
186			if (unread_current_user != undefined) {
187				jQuery.each(unread_current_user, function(key, value) {
188					var msg_data = value.message_text;
189					var sent_time = value.sent_time;
190					//var conversation_id = value.conversation_id;
191					msg_data = msg_data.replace(/\\/g, '');
192					message_ids.push(value.message_id);
193
194					SendMessage(sent_time, msg_data,'A');
195					
196				});
197
198				//lbbUpdateMessageInDb(message_ids, conversation_id, sender_type = 'U');
199				
200			}
201		}
202	});
203}
204function showNotification(last_msg = '', firebase_user_id = '') {
205
206	const dynamic_key = last_msg+'-'+firebase_user_id;
207	const notificationKey = 'notificationDisplayed_'+dynamic_key;
208
209    if (Notification.permission !== 'granted') {
210      Notification.requestPermission();
211    } else {
212    	if (last_msg == ''){
213    		last_msg = 'You have received a new message';
214    	}
215      const options = {
216        body: last_msg,
217        tag : notificationKey,
218        dir: 'ltr',
219       /* image: 'image.jpg'*/
220      };
221      const notification = new Notification('New Message', options);
222
223      notification.onshow = () => {
224         if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){
225			//lbb_notification_ding();
226        }
227         
228     };
229
230      if (firebase_user_id != ''){
231		notification.onclick = function () {
232	        window.open(siteConfig.conversationurl+'&mode=L&firebase_id='+firebase_user_id);
233		}
234      }
235      
236    }
237  }
238
239  function lbb_send_event(){
240	/*jQuery('.lbb-live-mode .lbb_input_message').keyup(function (key) {
241		if (key.keyCode == 13) {
242			SendMessage();
243			jQuery(this).val('');
244		}
245	});
246
247	jQuery('.lbb-live-mode  .lbb-send-icon').click(function (key) {
248		SendMessage();
249		jQuery(this).val('');
250	});*/
251
252}
253
254function lbbConnectingAgent(){
255
256	var conversation_chat_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_chat_id';
257	var conversation_chat_cookie_val = '';
258	if (getCookie(conversation_chat_cookie_key)){
259		conversation_chat_cookie_val = getCookie(conversation_chat_cookie_key);
260	}
261
262	var conversation_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_id';
263	var conversation_cookie_val = '';
264	if (getCookie(conversation_cookie_key)){
265		conversation_cookie_val = getCookie(conversation_cookie_key);
266	}
267
268	jQuery.ajax({
269		url: siteConfig.ajaxurl,
270			type: "POST",
271			dataType: "JSON",
272			data: {
273				action: "lbb_check_agent_status",
274				lbb_chatflow_id: chatflow_id,
275				conversation_chat_cookie_val: conversation_chat_cookie_val,
276				conversation_cookie_val: conversation_cookie_val
277			},
278			success: function(response) {
279
280				var response_data = (response);
281
282				if(response_data.available == 1){
283					jQuery('.connecting-agent').remove();
284					lbbCustomReponse('Admin has joined chat','lbb-special-messages-old');
285					store_messsage_in_db('Admin has joined chat', conversation_cookie_val, 1, 1, 1);
286
287					var welcome_message = response_data.welcome_message;
288					if (welcome_message == ''){
289						welcome_message = siteConfig.welcome_message;
290					}
291
292					jQuery('.lbb-admin-response .lbb-avatar-outer img').attr('src',lbb_live_agent_image);
293					jQuery('.lbb-avatar-image img').attr('src',lbb_live_agent_image);
294
295					jQuery('.lbb-admin-info-wrapper .lbb-header').html(lbbAdminLiveName);
296
297
298					setTimeout(function() {
299						store_messsage_in_db(welcome_message, conversation_cookie_val, 1, 1);
300						lbbConversationMotificationsFrontend();
301					}, 500);
302					setTimeout(function() {
303						sendMessageFromAdmin(current_role_id, welcome_message);
304						lbbConversationMotificationsFrontend();
305						lbb_send_event();
306					}, 2000);
307
308				}else{
309					jQuery('.connecting-agent').remove();
310					lbbCustomReponse('Agent is not available at momment','lbb-special-messages-old');
311				}
312
313				lbbConversationMotificationsFrontend();
314			}
315		});
316}
317function get_current_user_data(fname = '', email = '',phone = '') {
318	lbb_chatflow_id = jQuery('#lbb_chatflow_id').val();
319
320	let conversation_chat_cookie_key = 'lbbcf_'+lbb_chatflow_id+'_conversation_chat_id';
321	var conversation_chat_cookie_val = '';
322	if (getCookie(conversation_chat_cookie_key)){
323		conversation_chat_cookie_val = getCookie(conversation_chat_cookie_key);
324	}
325
326	var conversation_cookie_key = 'lbbcf_'+lbb_chatflow_id+'_conversation_id';
327	var conversation_cookie_val = '';
328	if (getCookie(conversation_cookie_key)){
329		conversation_cookie_val = getCookie(conversation_cookie_key);
330	}
331
332	var orgval = jQuery('.lbb-chat-user-info-button').html();
333	jQuery('.lbb-chat-user-info-button').html('Please wait..');
334	jQuery('.lbb-chat-user-info-button').attr('disabled', 'true');
335
336	jQuery.ajax({
337		url: siteConfig.ajaxurl,
338			type: "POST",
339			dataType: "JSON",
340			data: {
341				action: "lbb_check_current_user",
342				type: "GET",
343				lbb_chatflow_id: lbb_chatflow_id,
344				fname: fname,
345				email: email,
346				phone: phone,
347				conversation_chat_cookie_val: conversation_chat_cookie_val,
348				conversation_cookie_val: conversation_cookie_val
349			},
350			success: function(response) {
351				var newItems = false;
352				var response_data = JSON.parse(response.data);
353				jQuery('.lbb-chat-user-info-button').removeAttr('disabled');
354				jQuery('.lbb-chat-user-info-button').html(orgval);
355				if( response_data.key !== "" ) {
356					//user is logged in
357
358					if (conversation_chat_cookie_val == ''){
359						setCookie(conversation_chat_cookie_key, response_data.key, 365);
360					}
361
362
363					jQuery("#current_role_id").val(response_data.key);
364
365					var current_id_new = response_data.id;
366					if (current_id_new == '1'){
367						current_id_new = 0;
368					}
369					jQuery("#current_id").val(current_id_new);
370
371					current_role_id = response_data.key;
372
373					/*var chat_id = siteConfig.chat_id;
374					var email = siteConfig.email;*/
375
376					
377					//setCookie('lbb_firstname', fname, 365);
378					//setCookie('lbb_email', email, 365);
379
380
381					
382						//var chat_token = response_data.token;
383						//var conversation_chat_cookie_key = 'lbbcf_'+chatflow_id+'_conversation_chat_token';
384						//setCookie(conversation_chat_cookie_key, chat_token, 365);
385
386
387						lbb_chatflow_id = jQuery('#lbb_chatflow_id').val();
388						
389						if (!response_data.is_existing_user) {
390
391							jQuery('#lbb-chat-main-wrapper').removeClass('lbb-chat-user-input');
392							lbbCustomReponse('Connecting to agent...','connecting-agent');
393							lbbConnectingAgent();
394							lbbConversationMotificationsFrontend();
395							/*var welcome_message = response_data.welcome_message;
396							if (welcome_message == ''){
397								welcome_message = siteConfig.welcome_message;
398							}
399
400							store_messsage_in_db(welcome_message, conversation_cookie_val, 1, 1);
401							setTimeout(function() {
402							    sendMessageFromAdmin(current_role_id, welcome_message);
403								lbb_send_event();
404						  }, 2000);*/	
405						}else{
406							isAdminBusy = false;
407							//jQuery('.lbb-typing').addClass('lbb-user-input-hide');
408							lbb_reset_timer();
409							lbb_chat_activity_timer()
410							jQuery('.lbb-agent-typing').hide();
411							lbb_send_event();
412						}
413						jQuery('.lbb-typing').removeClass('lbb-user-input-hide');
414					
415					
416
417
418				}
419
420				jQuery('#lbb-chat-main-wrapper').removeClass('lbb-chat-user-input');
421
422				
423			}
424	})
425}
426
427
428function load_user_message_for_admin(firebase_dynamic_id = ''){
429	var newItemsAdmin = false;
430
431
432
433}
434
435function load_new_admin_child(snapshot) {
436
437	alert('load_new_admin_child');
438	return;
439
440	chat_key_data = snapshot.key;
441	chat_val_data = snapshot.val();
442	var admin_user = 1;
443	var msg = chat_val_data.msg;
444	var sender_id = chat_val_data.sender_id;
445	var date = chat_val_data.date;
446	var msg_html = msg;
447	var time_format = moment(chat_val_data.date).format('HH:mm:ss');
448	var latest_chat_message = "";
449
450	//console.log(chat_val_data);
451	var inputDateTime = new Date(date);
452
453	// Extract hours and minutes from the Date object
454	var hours = inputDateTime.getHours();
455	var minutes = inputDateTime.getMinutes();
456
457	// Format the time as "HH:mm" (hours:minutes)
458	var formattedTime = (hours < 10 ? '0' : '') + hours + ':' + (minutes < 10 ? '0' : '') + minutes;
459
460	var user_avtar = jQuery('.user-admin-list-left-side.active-chat').attr('data-admin-img');
461
462	
463
464	if(admin_user !== parseInt(chat_val_data.user_id)) {
465		var user_avtar = jQuery('.user-admin-list-left-side.active-chat').attr('data-admin-img');
466		var user_name = jQuery('.user-admin-list-left-side.active-chat .about .name').text();
467		//chat message from user
468		latest_chat_message = `<li class="user-visitor-list chat-top-msg"  id="`+chat_key_data+`">
469	      <div class="message-box-img">
470	        <span class="chat-icon"><img src="`+user_avtar+`"></span>
471	      </div>
472	          <div class="message-box-data">
473	            <div class="message-data">
474	              <span class="message-data-name"> `+user_name+`</span>
475	              <span class="message-data-time">`+formattedTime+`</span>
476	            </div>
477	            <div class="message my-message">
478	              <div class="lbb-user-message">${msg_html}</div>
479	            </div>
480	          </div>
481	    </li>`;
482		
483
484	    var old_count = parseInt(jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"] ').find('.lbb-message-count').text());
485
486	    var final_count = 0;
487	    if (!isNaN(old_count)){
488	    	final_count = old_count;
489	    }
490
491	    var checkuser = jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').hasClass('active-chat');
492	    jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"] .status').text(msg_html);
493	    jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').find('.lbb-message-count').text(final_count + 1);
494		jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').addClass('chat-new-msg');
495
496
497		//jQuery('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]').prependTo('#people-list');
498
499		LBBMoveLiToFirst('.user-admin-list-left-side[data-firebaseid="' + sender_id + '"]');
500		
501
502		if (typeof siteConfig.notify_notification !== 'undefined' && siteConfig.notify_notification){
503	      showNotification(msg_html, sender_id);
504        }
505        if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio && siteConfig.notify_notification == false){
506			lbb_notification_ding();
507        }
508
509
510	} else {
511		//chat messahe from admin
512		//latest_chat_message = `<span id="`+chat_key_data+`" class="chat_msg_item chat_msg_item_admin"><span class="msg">${msg_html}</span><span class="time_status">${time_format}</span></span>`;
513		
514
515		
516
517	}
518
519	
520	
521
522	var scrollToBottom = LBBCheckScroll();
523
524	if (jQuery('#message-to-send-user-id').val() != '' && checkuser){	
525		jQuery('#chat-data-append').append(latest_chat_message);
526		if (scrollToBottom){
527			var chat_history_div = jQuery('#chat-history');
528    		chat_history_div.animate({ scrollTop: chat_history_div.prop('scrollHeight') }, 1000);
529		}
530
531	}
532
533	//console.log(snapshot.key);
534
535
536	if(admin_user !== parseInt(chat_val_data.user_id)) {
537		setTimeout(function() {
538			if (typeof checkFirebaseId === 'function') {
539				checkFirebaseId();
540			}
541		}, 1000);
542		
543	}
544}
545
546function LBBMoveLiToFirst(selector) {
547    var element = jQuery(selector);
548    element.prependTo(element.parent());
549}
550
551function LBBCheckScroll(scrolldiv = 'chat-history') {
552    var scrollableDiv = document.getElementById(scrolldiv);
553
554    if (!scrollableDiv) {
555        //console.error("Element with ID '" + scrolldiv + "' not found.");
556        return false;
557    }
558
559    // Check if the user has scrolled to the bottom
560    if (scrollableDiv.scrollTop + scrollableDiv.clientHeight + 10 >= scrollableDiv.scrollHeight) {
561      return true;
562      // You can perform additional actions here
563    } else {
564      return false;
565    }
566  }
567
568
569function getCurrentTime() {
570	const now = new Date();
571    const hours = now.getHours();
572    const minutes = now.getMinutes();
573
574    // Ensure hours and minutes are displayed with leading zero if needed
575    const formattedHours = String(hours).padStart(2, '0');
576    const formattedMinutes = String(minutes).padStart(2, '0');
577
578    // Combine the formatted time components
579    const formattedTime = `${formattedHours}:${formattedMinutes}`;
580
581    return formattedTime;
582}
583
584function load_new_child(snapshot) {
585
586	alert('load_new_child');
587	return;
588
589	chat_key_data = snapshot.key;
590	chat_val_data = snapshot.val();
591	var admin_user = 1;
592	var msg = chat_val_data.msg;
593	var msg_html = msg;
594	var time_format = moment(chat_val_data.date).format('HH:mm:ss');
595	var latest_chat_message = "";
596	
597	if(admin_user !== parseInt(chat_val_data.user_id)) {
598		//chat message from user
599		
600
601	} else {
602		//chat messahe from admin
603		//latest_chat_message = `<span id="`+chat_key_data+`" class="chat_msg_item chat_msg_item_admin"><span class="msg">${msg_html}</span><span class="time_status">${time_format}</span></span>`;
604
605		//latest_chat_message = `<span id="`+chat_key_data+`" class="chat_msg_item chat_msg_item_user"><span class="msg">${msg_html}</span></span>`;
606		//lbbHandleAdminResponse(latest_chat_message);
607		var scrollToBottomFrontend = LBBCheckScroll('chat-messages');
608
609		if (!jQuery('.lbb-dynamic-mode-set').is(':visible')) {
610			jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found');
611		}else{
612			var cthis = "#lbb-chat-main-wrapper.lbb-template-wrapper .lbb-conversation";
613			if (jQuery(cthis).scrollTop() + jQuery(cthis).innerHeight() + 2 >= jQuery(cthis)[0].scrollHeight) {
614			    jQuery('#lbb-chat-main-wrapper').removeClass('lbb-new-message-found');
615			}else{
616				jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found');
617			}
618		}
619
620		isAdminBusy = false;
621		lbb_reset_timer();
622		lbb_chat_activity_timer();
623
624		var cur_time = '';
625		latest_chat_message = `<div class="lbb-message lbb-admin-response"  id="`+chat_key_data+`">
626			<div class="lbb-avatar-outer">
627			    <img src="{{image}}" alt="" class="lbb-lazy-img-loaded">
628			</div>
629		    <div class="chat-user-info-wrapper">
630		        <div class="chat-user-name">Bot</div>
631		        <div class="lbb-anchors lbb-bot-response lbb-text"">${msg_html}</div>
632				<div class="chat-user-submit-time">`+getCurrentTime()+`</div>
633		    </div>
634		</div>`;
635		lbbHandleAdminResponse(latest_chat_message, false);
636
637		if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){
638			lbb_notification_ding();
639	    }
640
641	    
642	    if (scrollToBottomFrontend){
643			var chat_history_div = jQuery('#chat-messages');
644    		chat_history_div.animate({ scrollTop: chat_history_div.prop('scrollHeight') }, 1000);
645		}
646
647
648
649	}
650}
651
652
653function lbb_activate_chat_live_mode() {
654	jQuery('#lbb-app').removeClass('lbb-bot-mode');
655	jQuery('#lbb-app').addClass('lbb-live-mode');
656
657	jQuery('#lbb-app').removeClass('lbb-allow-bot-to-trained');
658
659	if(jQuery('#lbb-app').length > 0) {
660		setInterval(() => {
661			lbbConversationMotificationsFrontend();
662		}, 5000);
663		
664	}
665
666	var check_firebase_user = getCookie('lbbcf_'+chatflow_id+'_conversation_chat_id');
667	var lbb_firstname = getCookie('lbb_firstname');
668	var lbb_email = getCookie('lbb_email');
669	
670	if (check_firebase_user != null && check_firebase_user != undefined && check_firebase_user != '') {
671		return;
672	}
673
674	if ((lbb_firstname != null && lbb_firstname != undefined && lbb_firstname != '') && (lbb_email != null && lbb_email != undefined && lbb_email != '')) {
675		lbb_email = lbb_email.replace("@", "%40");
676		get_current_user_data(lbb_firstname, lbb_email);
677	}else if (check_firebase_user == null || check_firebase_user == undefined || check_firebase_user == '') {
678		jQuery('#lbb-chat-main-wrapper').addClass('lbb-chat-user-input')
679	}else{
680		get_current_user_data();
681	}
682	
683}
684
685
686function sendMessageFromAdmin(current_role_id, message_text) {
687
688	isAdminBusy = false;
689	//jQuery('.lbb-typing').addClass('lbb-user-input-hide');
690	lbb_reset_timer();
691	lbb_chat_activity_timer();
692	lbbAdminChatHTML('A');
693	jQuery('.lbb-agent-typing').hide();
694}
695
696
697function lbbAdminChatHTML(time = '', text = '', sendder_type = 'U' ) {
698   
699	var admin_avtar = jQuery('.user-admin-list-left-side.active-chat').attr('data-admin-img');
700	if (sendder_type == 'U'){
701
702	// Convert to Date object
703
704    // Format the date-time to "HH:mm"
705    var formattedTime = time;
706
707
708		latest_chat_message = `<li class="user-visitor-list chat-top-msg">
709          <div class="message-box-img">
710            <span class="chat-icon"></span>
711          </div>
712              <div class="message-box-data">
713                <div class="message-data">
714                  <span class="message-data-name"> Unknown Visitor</span>
715                  <span class="message-data-time">`+formattedTime+`</span></div>
716                <div class="message my-message">
717                  <div class="lbb-user-message">${text}</div>
718                </div>
719              </div>
720        </li>`;
721        var checkuser = 1;
722	    jQuery('#chat-data-append').append(latest_chat_message);
723
724	    lbb_chatflow_id = jQuery('#message-conversation-id').val();
725
726	    var jsonData = {
727		  "conversation_id": lbb_chatflow_id,
728		  "msg": latest_chat_message
729		};
730
731		var jsonString = JSON.stringify(jsonData);
732
733	    lbb_admin_message_broadcast({'command':'lbbsetadminsendmsg', 'lbb_admin_user_msg': jsonString});
734
735	}else{
736
737		var admin_send = 1;
738	    var is_conversation_id = 1;
739	    lbb_chatflow_id = jQuery('#message-conversation-id').val();
740	    isAdminBusy = false;
741
742
743			var currentDate = new Date();
744		    // Get the current hours and minutes
745		    var currentHours = currentDate.getHours();
746		    var currentMinutes = currentDate.getMinutes();
747
748		    // Format hours and minutes with leading zeros if needed
749		    currentHours = ('0' + currentHours).slice(-2);
750		    currentMinutes = ('0' + currentMinutes).slice(-2);
751
752			var formattedTime = currentHours + ":" + currentMinutes;
753			var text_message = jQuery('#message-to-send').val();
754	   
755	   		var admin_name = jQuery('#admin-name').val();
756
757		latest_chat_message = `<li class="user-admin-list">
758	      <div class="message-box-img">
759	        <span class="chat-icon"></span>
760	      </div>
761	          <div class="message-box-data">
762	            <div class="message-data">
763	              <span class="message-data-name"> Admin</span>
764	              <span class="message-data-time">`+formattedTime+`</span>
765	            </div>
766	            <div class="message my-message">
767	              <div class="lbb-user-message">${text_message}</div>
768	            </div>
769	          </div>
770	    </li>`;
771
772	    var checkuser = 1;
773	    if (jQuery('#chat-list-user-'+lbb_chatflow_id).hasClass('active-chat')){
774	    	jQuery('#chat-data-append').append(latest_chat_message);
775
776	    	var jsonData = {
777			  "conversation_id": lbb_chatflow_id,
778			  "msg": latest_chat_message
779			};
780
781
782			var jsonString = JSON.stringify(jsonData);
783
784	    	lbb_admin_message_broadcast({'command':'lbbsetadminunreadmsg', 'lbb_admin_user_msg': jsonString});
785	    }
786	    
787
788	    store_messsage_in_db(text_message, lbb_chatflow_id, admin_send, is_conversation_id)
789
790		scrollToBottomLive();
791	}
792
793    	
794
795
796}
797
798function lbb_message_broadcast(message)
799{
800    localStorage.setItem('lbb_user_msg',JSON.stringify(message));
801    localStorage.removeItem('lbb_user_msg');
802}
803
804
805// receive message
806//
807function lbb_message_receive(ev)
808{
809    if (ev.originalEvent.key!='lbb_user_msg') return; // ignore other keys
810    var message=JSON.parse(ev.originalEvent.newValue);
811    if (!message) return; // ignore empty msg or msg reset
812
813    // here you act on messages.
814    // you can send objects like { 'command': 'doit', 'data': 'abcd' }
815    if (message.command == 'lbbsetunreadmsg'){
816    	jQuery('.lbb-conversation.Messages_list').append(message.lbb_user_msg);
817    }
818
819    if (message.command == 'lbbsetsendmsg'){
820    	jQuery('.lbb-conversation.Messages_list').append(message.lbb_user_msg);
821    }
822
823    // etc.
824}
825
826function lbb_admin_message_broadcast(message)
827{
828    localStorage.setItem('lbb_admin_user_msg',JSON.stringify(message));
829    localStorage.removeItem('lbb_admin_user_msg');
830}
831
832
833// receive message
834//
835function lbb_admin_message_receive(ev)
836{
837    if (ev.originalEvent.key!='lbb_admin_user_msg') return; // ignore other keys
838    var message=JSON.parse(ev.originalEvent.newValue);
839    if (!message) return; // ignore empty msg or msg reset
840
841    var chatflow_brodcast_id = jQuery('.user-admin-list-left-side.active-chat').attr('data-id');
842
843
844    var jsonData = JSON.parse(message.lbb_admin_user_msg);
845
846	// Access values
847	var conversationId = jsonData.conversation_id;
848	var message_data = jsonData.msg;
849
850
851
852    // here you act on messages.
853    // you can send objects like { 'command': 'doit', 'data': 'abcd' }
854    if (message.command == 'lbbsetadminunreadmsg'){
855
856    	if (conversationId == chatflow_brodcast_id){
857    		jQuery('#chat-data-append').append(message_data);
858    	}
859    	
860    }
861
862    if (message.command == 'lbbsetadminsendmsg'){
863    	if (conversationId == chatflow_brodcast_id){
864    		jQuery('#chat-data-append').append(message_data);
865    	}
866    }
867
868    // etc.
869}
870
871
872
873function SendMessage(time = '', text = '', sender_type = 'U') {
874	
875	if (sender_type == 'U'){
876
877		var currentUserId = jQuery('#current_id').val();
878		var text_message = jQuery('.lbb_input_message').val();
879		
880		var admin_send = 0;
881		var is_conversation_id = 1;
882		//lbb_chatflow_id = jQuery('#lbb_chatflow_id').val();
883		lbb_chatflow_id = getConversationID();
884
885
886
887		latest_chat_message = `<span class="chat_msg_item chat_msg_item_user"><span class="msg">${text_message}</span></span>`;
888
889		latest_chat_message = latest_chat_message.replace('{{time}}',getCurrentTime());
890		var latest_chat_message_html = lbbHandleUserResponse(latest_chat_message, false);
891		lbb_message_broadcast({'command':'lbbsetsendmsg', 'lbb_user_msg': latest_chat_message_html});
892
893
894
895		isUserBusy = false;
896		lbb_reset_timer();
897		lbb_chat_activity_timer();
898		
899		
900		
901		store_messsage_in_db(text_message, lbb_chatflow_id, admin_send, is_conversation_id)
902		
903
904		scrollToBottomLive();
905
906	}else{
907		var scrollToBottomFrontend = LBBCheckScroll('chat-messages');
908
909		if (!jQuery('.lbb-dynamic-mode-set').is(':visible')) {
910			jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found');
911		}else{
912			var cthis = "#lbb-chat-main-wrapper.lbb-template-wrapper .lbb-conversation";
913			if (jQuery(cthis).scrollTop() + jQuery(cthis).innerHeight() + 2 >= jQuery(cthis)[0].scrollHeight) {
914			    jQuery('#lbb-chat-main-wrapper').removeClass('lbb-new-message-found');
915			}else{
916				jQuery('#lbb-chat-main-wrapper').addClass('lbb-new-message-found');
917			}
918		}
919
920		isAdminBusy = false;
921		lbb_reset_timer();
922		lbb_chat_activity_timer();
923
924	    var formattedTime = time;
925
926
927		var cur_time = '';
928		latest_chat_message = `<div class="lbb-message lbb-admin-response"">
929			<div class="lbb-avatar-outer">
930			    <img src="{{image}}" alt="" class="lbb-lazy-img-loaded">
931			</div>
932		    <div class="chat-user-info-wrapper">
933		        <div class="chat-user-name">Bot</div>
934		        <div class="lbb-anchors lbb-bot-response lbb-text"">${text}</div>
935				<div class="chat-user-submit-time">`+formattedTime+`</div>
936		    </div>
937		</div>`;
938		var latest_chat_message_html = lbbHandleAdminResponse(latest_chat_message, false);
939		lbb_message_broadcast({'command':'lbbsetunreadmsg', 'lbb_user_msg': latest_chat_message_html});
940
941		if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){
942			lbb_notification_ding();
943	    }
944
945	    
946	    if (scrollToBottomFrontend){
947			var chat_history_div = jQuery('#chat-messages');
948    		chat_history_div.animate({ scrollTop: chat_history_div.prop('scrollHeight') }, 1000);
949		}
950	}
951    
952	
953}
954
955
956function store_messsage_in_db(text_message, lbb_chatflow_id, admin_send, is_conversation_id = 0, default_is_read = 0){
957
958	jQuery.ajax({
959		url: siteConfig.ajaxurl,
960		type: "POST",
961		dataType: "JSON",
962		data: {
963			action: "lbb_add_message",
964			type: "GET",
965			lbb_chatflow_id: lbb_chatflow_id,
966			text_message: text_message,
967			admin_send: admin_send,
968			is_read: default_is_read,
969			is_conversation_id: is_conversation_id
970		},
971		success: function(response) {
972
973		}
974	});
975}
976
977
978
979/*const lbbAudioContext = new AudioContext();*/
980
981function LBBPlaySound() {
982  /*const oscillatorNode = lbbAudioContext.createOscillator();
983  const gainNode = lbbAudioContext.createGain();
984
985  oscillatorNode.type = 'sine';
986  oscillatorNode.frequency.setValueAtTime(150, lbbAudioContext.currentTime);
987  oscillatorNode.frequency.exponentialRampToValueAtTime(500, lbbAudioContext.currentTime + 0.5);
988
989  gainNode.gain.setValueAtTime(0.3, lbbAudioContext.currentTime);
990  gainNode.gain.exponentialRampToValueAtTime(0.01, lbbAudioContext.currentTime + 0.5);
991
992  oscillatorNode.connect(gainNode);
993  gainNode.connect(lbbAudioContext.destination);
994
995  oscillatorNode.start();
996  oscillatorNode.stop(lbbAudioContext.currentTime + 0.5);*/
997
998  if (jQuery('#lbb-bell-audio-admin').length){
999		setTimeout(function() {
1000			var bellAudio = document.getElementById('lbb-bell-audio-admin');
1001  			bellAudio.play();
1002
1003		}, 100);
1004	}
1005}
1006
1007function lbb_notification_ding() {
1008    
1009	if (jQuery('#lbb-bell-audio').length){
1010		setTimeout(function() {
1011			var bellAudio = document.getElementById('lbb-bell-audio');
1012  			bellAudio.play();
1013
1014		}, 100);
1015	}else{
1016		var sound = new  Audio("data:audio/mp3;base64,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3aouOes1ZYRoh2tt1bIG/Ds3ubWzEMTQZhToanns/TekyGTZPfpl+5G1yZoSkEVEsOCuP5TNSZQ2VGuU/zpLyZW38VWNWzL/f7arkemyet8uFD/h+hRRu+ZTLWZmXkT/+1LE5oAMdUMf54xrwWUYI/SCiTBZd8r5nk7U8SH4uQUl222222B1GXqtRJ29XotjFfKkKpZIwlbj5uDbO2Mv9MI5rerZHVWm2VGc9b/8he+e3jf/Hyv/07mrO/k0vWFfwdRBMd3z7M2t3+v/HPfMGHGsqgpHHJJHJGiQN7MgMiO5qe72rxFxmXUdVo7scyVGk8WqhhedkfbphkEnXWx1JbHUBrEfcxmZ2R4Mszzh1o5GeZqcpsc/17PP0ndL3W8eRdqhs6U+WTcX7p//Wb1yKf/7UsTmAAv05ynhmGuhWYzk/DGM4Ee0HXiLoODqAmwIJJbZW0QIQhCEIXqq/8bjdX2Y1XwqqupNqX1dS//USTM3V6rNV9nCszMfG1VVUtS9S9YbNw1UBAWqqX/+u3AxMKAoi6w11u1B0N/3eJRKs7g09QNVTEFNRTMuOTcgKGJldGEpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxOkATLGnH+MMbclKiiQ0UQzhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45NyAoYmV0YSlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE6oAMqVkfowxt2ViiovQRjXJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsTqg8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV");  
1017    
1018	    setTimeout(function() {
1019				sound.play();
1020		}, 100);
1021
1022	}
1023
1024    
1025}
1026
1027
1028function lbbUpdateMessageInDb(message_ids, conversation_id, sender_type = 'A'){
1029		
1030		if (message_ids != '' && conversation_id.length >= 1) {
1031			
1032			if (sender_type == 'A'){
1033				var ajax_admin_url = lbb_ajax.ajaxurl;
1034			}else{
1035				var ajax_admin_url = siteConfig.ajaxurl;
1036			}
1037			jQuery.ajax({
1038				type: 'post',
1039				url: ajax_admin_url,
1040				data: {
1041					'conversation_id': conversation_id,
1042					'message_ids' : message_ids,
1043					'action': 'lbb_messages_update',
1044				},
1045				success: function (response) {
1046					//response = JSON.parse(response);
1047				}
1048			});
1049		}else{
1050			
1051		}
1052		
1053
1054}
1055
1056
1057
1058function lbb_firebase_notifincation_init(){
1059
1060
1061	alert('attach_thread');
1062	return;
1063
1064	const chat_data_ref = firebase.database().ref("chat_data");
1065    chat_data_ref.on("child_changed", (snapshot, prevChildKey) => {
1066        var open_friend_id = jQuery('#message-to-send-user-id').val();
1067
1068       // const sender_id = snapshot.val().sender_id;
1069
1070        
1071
1072        
1073
1074        
1075        const messages = snapshot.val().message;
1076
1077	    // Get the keys (message IDs) of the messages
1078	    const messageKeys = Object.keys(messages);
1079
1080	    // Find the last message ID
1081	    const lastMessageKey = messageKeys[messageKeys.length - 1];
1082
1083	    // Get the last message object
1084	    const lastMessage = messages[lastMessageKey];
1085
1086	    // Retrieve the text of the last message
1087	    const lastMessageText = lastMessage.msg;
1088
1089
1090	    if(open_friend_id != lastMessage.sender_id){
1091	    	
1092	    	/*if (typeof siteConfig.notify_notification !== 'undefined' && siteConfig.notify_notification){
1093		        showNotification(lastMessageText, snapshot.keym);
1094	        }
1095	        if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio && siteConfig.notify_notification == false){
1096				lbb_notification_ding();
1097	        } */
1098        	
1099        }
1100
1101
1102
1103	    // Now, you have the last message text in the `lastMessageText` variable
1104	    //console.log("Last Message Text:", lastMessageText);
1105
1106	    /*const dynamic_key = lastMessageText+'-'+snapshot.key;
1107	    const notificationKey = 'notificationDisplayed_'+dynamic_key;*/
1108
1109
1110        
1111		
1112
1113       
1114    });
1115}
1116
1117function lbb_is_page_in_focus() {
1118    // Check if the Page Visibility API is supported
1119    if (typeof document.hidden !== "undefined") {
1120        return !document.hidden;
1121    } else if (typeof document.msHidden !== "undefined") {
1122        return !document.msHidden;
1123    } else if (typeof document.webkitHidden !== "undefined") {
1124        return !document.webkitHidden;
1125    }
1126    
1127    // If the Page Visibility API is not supported, assume the page is in focus
1128    return true;
1129}
1130
1131function lbb_check_last_message_from_firebase(user_type = 'user', idle_time = 500){
1132
1133
1134	alert('lbb_check_last_message_from_firebase');
1135	return;
1136	var friend_id = jQuery('#current_role_id').val();
1137	var response_return = false;
1138	var user_has_no_msg = true;
1139	var get_specific_user_message = friend_id;
1140
1141	if (user_type == 'admin'){
1142		var get_specific_user_message = jQuery('#current_admin_id').val();
1143
1144	}
1145
1146	var chatRef = firebase.database().ref('chat_data/' + friend_id + '/message');
1147	chatRef.orderByChild('sender_id').equalTo(get_specific_user_message).limitToLast(1).once('value', function(snapshot) {
1148	    snapshot.forEach(function(childSnapshot) {
1149	    	user_has_no_msg = false;
1150	    	
1151	        // This will give you the last message data
1152	        var lastMessageData = childSnapshot.val();
1153			
1154	        var sender_id = lastMessageData.sender_id;
1155	        console.log(lastMessageData);
1156
1157
1158
1159            var currentTime = new Date().getTime();
1160            var messageTime = new Date(lastMessageData.date).getTime();
1161            var timeDifferenceInSeconds = (currentTime - messageTime) / 1000; // in seconds
1162            //console.log(lastMessageData.date);
1163           // console.log(timeDifferenceInSeconds);
1164            // Check if the time difference is greater than 5 minutes
1165            if (timeDifferenceInSeconds >= idle_time) {
1166                response_return = true;
1167            }
1168	        
1169	    });
1170	});
1171
1172	if(user_type == 'user' && user_has_no_msg){
1173		return lbb_check_last_message_from_firebase('admin',idle_time);
1174	}
1175
1176	if (user_has_no_msg){
1177		return user_has_no_msg;
1178	}else{
1179		return response_return;
1180	}
1181	
1182}
1183
1184function lbb_get_last_message_from_user_firebase(){
1185
1186	alert('lbb_get_last_message_from_user_firebase');
1187	return;
1188
1189	var friend_id = jQuery('#current_role_id').val();
1190	var response_return = false;
1191	var get_specific_user_message = friend_id;
1192
1193	
1194	var sender_type = '';
1195	var chatRef = firebase.database().ref('chat_data/' + friend_id + '/message');
1196	chatRef.orderByKey().limitToLast(1).once('value', function(snapshot) {
1197	    snapshot.forEach(function(childSnapshot) {
1198	    	var lastMessageData = childSnapshot.val();
1199        	var sender_id = lastMessageData.sender_id;
1200        	if (friend_id == sender_id){
1201        		sender_type = 'user';
1202        	}else{
1203        		sender_type = 'admin';
1204        	}
1205        	return sender_type;
1206		});
1207	});
1208
1209	return sender_type;
1210
1211}
1212
1213function lbb_init_firebase(){
1214	jQuery('#lbb-chat-main-wrapper').removeClass('lbb-chat-user-input');
1215}
1216
1217function lbbLoadChat() {
1218
1219	/*var current_user_id = 0;
1220	if (jQuery('#message-to-send-user-id').val() != ''){
1221		current_user_id = jQuery('#message-to-send-user-id').val();
1222	}
1223	*/
1224	if (typeof siteConfig.notify_notification !== 'undefined' && siteConfig.notify_notification){
1225	    jQuery.ajax({
1226		url: siteConfig.ajaxurl,
1227			type: "POST",
1228			data: {
1229				action: "lbb_read_unseen_messages",
1230				/*lbb_user_id: current_user_id,*/
1231				browser_uniq_id: lbbGetMyBrowserUniqId(),
1232			},
1233			success: function(response) {
1234
1235				response = JSON.parse(response);
1236				var message_ids = [];
1237
1238				if (response != undefined && response.length != 0) {
1239					jQuery.each(response, function(key, value) {
1240						var msg_data = value.message_text;
1241						var sent_time = value.sent_time;
1242						var sender_id = value.conversation_id;
1243					
1244
1245					    jQuery('.user-admin-list-left-side[data-id="' + sender_id + '"] .status').text(msg_data);
1246						jQuery('.user-admin-list-left-side[data-id="' + sender_id + '"]').addClass('chat-new-msg');
1247
1248						LBBMoveLiToFirst('.user-admin-list-left-side[data-id="' + sender_id + '"]');
1249
1250
1251
1252
1253						showNotification(msg_data);
1254					});	
1255
1256					if (typeof siteConfig.notify_play_audio !== 'undefined' && siteConfig.notify_play_audio){
1257						//lbb_notification_ding();
1258						LBBPlaySound();
1259			        }			
1260				}
1261
1262		        
1263	        }
1264	    });
1265	}
1266}
1267
1268function lbbGetUTCTime(){
1269	var utcDate = new Date();
1270
1271// Get the UTC methods from the Date object
1272var utcFullYear = utcDate.getUTCFullYear();
1273var utcMonth = lbbAddLeadingZero(utcDate.getUTCMonth() + 1); // Months are zero-based, so add 1
1274var utcDay = lbbAddLeadingZero(utcDate.getUTCDate());
1275var utcHours = lbbAddLeadingZero(utcDate.getUTCHours());
1276var utcMinutes = lbbAddLeadingZero(utcDate.getUTCMinutes());
1277var utcSeconds = lbbAddLeadingZero(utcDate.getUTCSeconds());
1278
1279// Create a string representation of the UTC time
1280var utcTimeString =
1281  utcFullYear +
1282  '-' +
1283  utcMonth +
1284  '-' +
1285  utcDay +
1286  ' ' +
1287  utcHours +
1288  ':' +
1289  utcMinutes +
1290  ':' +
1291  utcSeconds;
1292
1293	return utcTimeString;
1294
1295}
1296
1297function lbbAddLeadingZero(number) {
1298  return number < 10 ? '0' + number : number;
1299}
1300
1301function lbbGetMyBrowserUniqId(){
1302	var current = window.localStorage.getItem("_DEVICEID_")
1303	if (current) return current;
1304	var id = lbbUUId();
1305	window.localStorage.setItem("_DEVICEID_",id);   
1306	return id;
1307}
1308
1309lbbUUId = function(){
1310	var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
1311	function(c) {
1312		var r = Math.random() * 16 | 0,
1313		v = c == 'x' ? r : (r & 0x3 | 0x8);
1314		return v.toString(16);
1315		});
1316	return u;
1317}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.