PageSourceSearch

https://fullintel.com/wp-content/plugins/wpbot-pro-master/addons/live-chat-addon/js/wbca-ajax.js?ver=3.2.2

js fullintel.com collected 2026-10-02 14:34:51 UTC 36,153 bytes, 1,002 lines download raw bytes

1function formatDate(d) {
2  if (!d) return '';
3  var dateObj = (d instanceof Date) ? d : new Date(d);
4  if (isNaN(dateObj.getTime())) {
5    if (typeof d === 'string') {
6      var t = d.split(/[- :]/);
7      if (t.length >= 6) {
8        dateObj = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
9      }
10    }
11  }
12  if (isNaN(dateObj.getTime())) return d;
13  
14  var day = String(dateObj.getDate()).padStart(2, '0');
15  var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
16  var month = months[dateObj.getMonth()];
17  var year = dateObj.getFullYear();
18  
19  var hours = dateObj.getHours();
20  var ampm = hours >= 12 ? 'PM' : 'AM';
21  hours = hours % 12;
22  hours = hours ? hours : 12;
23  var minutes = String(dateObj.getMinutes()).padStart(2, '0');
24  
25  return day + ' ' + month + ' ' + year + ', ' + hours + ':' + minutes + ' ' + ampm;
26}
27
28(function ($) {
29  $(document).ready(function () {
30    // Always attach botsessionid to all AJAX requests
31    $(document).ajaxSend(function (event, jqxhr, settings) {
32      try {
33        const key = wbca_conf.botSessionKey || 'botsessionid';
34        const botSessionId = localStorage.getItem(key);
35
36        if (botSessionId) {
37          if (typeof settings.data === 'string') {
38            // Append to existing data
39            settings.data += '&botsessionid=' + encodeURIComponent(botSessionId);
40          } else if (typeof settings.data === 'object') {
41            // For FormData or object-style data
42            settings.data = settings.data || {};
43            settings.data.botsessionid = botSessionId;
44          }
45        }
46		  const email = sessionStorage.getItem('wbca_user_email');
47  		  const name  = sessionStorage.getItem('wbca_user_name');
48			if (email && name) {
49				if (typeof settings.data === 'string') {
50				settings.data += '&wbca_signup_email=' + encodeURIComponent(email);
51				settings.data += '&wbca_signup_fullname=' + encodeURIComponent(name);
52				}
53			}
54      } catch (e) {
55        console.warn('Could not attach botsessionid:', e);
56      }
57    });
58  });
59})(jQuery);
60jQuery(document).ready(function($) {
61  const userId = $('#input_wbca_editor').data('clientid'); // already set in your markup
62
63
64
65  function appendAgentMessage(chat) {
66    const chatBody = $('#wbca_chat_body');
67    const messageHtml = `
68      <div class="wbca_client_message_row wbca_message_row wbca-clear">
69        <div class="wbca_image leftImage">
70          <img src="${chat.avatar}" alt="${chat.operatorname}" />
71        </div>
72        <div class="wbcaMessage leftMessage">
73          <div class="wbcaContent">${chat.message}</div>
74          <div class="ui list right aligned">
75            <span>${chat.chat_time}</span>
76          </div>
77        </div>
78      </div>
79    `;
80
81    chatBody.append(messageHtml);
82    chatBody.scrollTop(chatBody.prop("scrollHeight"));
83  }
84
85  // Start polling when page loads
86
87});
88
89(function ($) {
90	
91	$(document).ready(function () {
92		var ClientChatStored = [];
93		var ChatIdStored = [];
94		var NotifyUserID = [];
95		var ChatCached = "";
96		var RequestState1 = true;
97		var RequestState2 = true;
98		var notifyInterval, showNotifyInterval, chatRefresh;
99		var lastLoadedMessageId = 0;
100		var AjaxChat = {
101			
102			wbcaInit: function () {
103				var self = $(this);
104				this.LoadChatWindow();
105				this.eventHandler();
106				this.submitMessage();
107				this.submitFile();
108				this.notificationAtTitle();	
109				this.resizewindow();
110			},
111						
112			registerNewUser: function () {
113				var error = false,
114					fullName = $('#wbca_signup_fullname').val(),
115					selected_department = $('.livechat-select-department').val(),		
116					email = $('#wbca_signup_email').val();
117					
118				if(!fullName){
119					$('#wbca_signup_fulnlame').css('border-color','#ff0000');
120					error = true;
121				}
122				if(!email){
123					$('#wbca_signup_email').css('border-color','#ff0000');
124					error = true;
125				}
126				var e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
127				if(!e.test(email)){
128					$('#wbca_signup_email').css('border-color','#ff0000');
129					error = true;
130				}
131				if(!error){
132				//	$('#wbca_signup_submit').append('<i class="wbca_spinnerx16 wbca_btn_spin"></i>');
133					$('#wbca_signup_submit').prop('disabled', true);
134				
135					$.ajax({
136						url: wbca_conf.ajaxURL,
137						type: "POST",
138						dataType: "JSON",
139						data:{
140							action : wbca_conf.ajaxActions.wbca_register_user.action,
141							nonce : wbca_conf.ajaxNonce,
142							wbca_signup_email : email,
143							wbca_signup_fullname : fullName,
144							selected_department: selected_department,
145						},
146						success: function(data) {
147							var chatbox = $(data.wbca_chatbox),
148								ClientID = data.wbca_userid;
149							    if (data.session_data) {
150									
151									sessionStorage.setItem('wbca_user_id', data.session_data.user_id
151);
152									sessionStorage.setItem('wbca_user_email', data.session_data.email);
153									sessionStorage.setItem('wbca_user_name', data.session_data.name);
154
155									//console.log('User session saved:', data.session_data);
156								}
157							if($.inArray(ClientID, ClientChatStored) == -1){
158								ClientChatStored.push(ClientID);
159								AjaxChat.setActiveChat(ClientID);
160							}
161							/*$('.wbcaTitle span:first-child').after('<span class="chatCloseIcon" data-clientid="'+ClientID+'" data-event="close-chat-window">&times;</span>');*/	
162							
163
164							var maincontainerheight = (jQuery('.'+wbca_conf.mainContainer).height() - 30);
165
166							chatbox.find('.wbcaBody').css( "height", maincontainerheight+"px" );
167							chatbox.find('#wbca_chat_body').css( "height", (maincontainerheight-63)+"px" );
168							
169							
170							$('.wbcaBody').html(chatbox.html())
171							.delay(500, "steps")
172							.queue("steps", function(next) {
173								$('#wbca_chat_body').prepend('<div id="wbca_type_suggest"><p>'+wbca_conf.chatType+'</p></div>');
174								$('#wbca_type_suggest').slideToggle('slow');
175								next();
176							})
177							.delay(50000, "steps")
178							.queue("steps", function(next) {
179								$('#wbca_type_suggest').slideToggle('slow');
180								next();
181							})
182							.dequeue( "steps" ); 
183
184						},
185						complete: function() {
186						}
187					});
188				}
189			},
190			
191			offlineMessage: function () {
192				var error = false,
193					name = $('#wbca_message_fullname').val(),
194					email = $('#wbca_message_email').val(),
195					message = $('#wbca_message').val();
196				
197				if(!name){
198					$('#wbca_message_fullname').css('border-color','#ff0000');
199					error = true;
200				}
201				if(!email){
202					$('#wbca_message_email').css('border-color','#ff0000');
203					error = true;
204				}
205				var e=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
206				if(!e.test(email)){
207					$('#wbca_message_email').css('border-color','#ff0000');
208					error = true;
209				}
210				if(!message){
211					$('#wbca_message').css('border-color','#ff0000');
212					error = true;
213				}
214				if(!error){
215					$('#wbca_message_submit').append('<i class="wbca_spinnerx16 wbca_btn_spin"></i>');
216					$('#wbca_message_submit').prop('disabled', true);
217					$.ajax({
218						url: wbca_conf.ajaxURL,
219						type: "POST",
220						dataType: "JSON",
221						data:{
222							action : wbca_conf.ajaxActions.wbca_offline_message.action,
223							nonce : wbca_conf.ajaxNonce,
224							wbca_message_fullname : name,
225							wbca_message_email : email,
226							wbca_message : message
227						},
228						success: function(data) {
229							var msg = data.wbca_msg;
230							if(data.error == false){
231								$('#wbca_message_fullname').val('');
232								$('#wbca_message_email').val('');
233								$('#wbca_message').val('');
234							}	
235							$('#wbca_msg_notify').html(msg).slideToggle('slow')
236							.delay(4000, "steps")
237							.queue("steps", function(next) {
238								$('#wbca_msg_notify').slideToggle('slow');
239								next();
240							})
241							.dequeue( "steps" ); 
242							
243							$('#wbca_message_submit i').remove();
244							$('#wbca_message_submit').prop('disabled', false);
245						},
246						complete: function() {
247							
248						}
249					});
250				}
251			},
252			
253			LoadChatWindow: function () {
254				$.ajax({
255					url: wbca_conf.ajaxURL,
256					type: "POST",
257					dataType: "JSON",
258					data: { 
259						action : wbca_conf.ajaxActions.wbca_load_wbca_window.action,
260						nonce : wbca_conf.ajaxNonce
261					 },
262					success: function(data) {
263						//alert('I am here');
264						var bodydata = $(data.wbca_window),
265							session = data.wbca_session;
266						var title = data.title;
267						var maincontainerheight = (jQuery('.'+wbca_conf.mainContainer).height() - 30);
268						//bodydata.find('#wbca_chat_body').css( "height", maincontainerheight+"px" );
269						bodydata.find('.wbcaBody').css( "height", maincontainerheight+"px" );
270						bodydata.find('#wbca_chat_body').css( "height", (maincontainerheight-63)+"px" );
271						$("."+wbca_conf.mainContainer).append(bodydata.html());
272						//$("#wpbot-live-chat-header").append(' - '+title);
273						if(session == 1){
274							AjaxChat.initializeActiveChats();
275						}
276					},
277					complete: function() {
278						chatRefresh = setTimeout(AjaxChat.loadChatRow, wbca_conf.chatRate);
279						RequestState1 = true;
280						
281					}
282				});
283				
284			},
285						
286			eventHandler: function () {
287
288				$(document).on("submit",'#wbca_signup_form', function (e) {
289					e.preventDefault();
290					AjaxChat.registerNewUser();
291					return false;
292				})
293
294				$("body").on("click", "button[data-event]", function (event){
295					//event.preventDefault();				
296					var Event = $(this).attr("data-event");
297					
298					switch(Event) {						
299						case "close-chat-window":
300							var clientID = $('#wbca_chat_body').attr("data-clientid");
301							ClientChatStored.remove(clientID);	
302							$("#wbca_chat_body").html('');					
303							$.ajax({
304								url: wbca_conf.ajaxURL,						
305								type: "POST",
306								dataType: "JSON",
307								data: { 
308									cr_clientid: clientID, 
309									action : wbca_conf.ajaxActions.wbca_remove_active_chat.action,
310									nonce : wbca_conf.ajaxNonce
311								 },
312								success: function(data) { }
313							});
314						break;
315												
316						case "open-chat-window":
317							if(wbca_conf.chatStyle == 'style_1'){
318								var holder = $("#wbcaChatWindow").attr("data-window-state");
319								if(holder=="0"){
320									$("#wbcaChatWindow").slideDown("slow");
321									$(".listOpenIcon").html("&or;");
322									$("#wbcaChatWindow").attr("data-window-state", "1");
323									$(".wbcaBodyHolder").attr("data-window-state", "1");
324								}else{
325									$("#wbcaChatWindow").slideUp("slow");
326									$(".listOpenIcon").html("&and;");
327									$("#wbcaChatWindow").attr("data-window-state", "0");
328									$(".wbcaBodyHolder").attr("data-window-state", "0");
329								}
330							}else{
331								if($(window).width() < 768){
332									var holder = $("#wbcaChatWindow").attr("data-window-state");
333									if(holder=="0"){
334										$("#wbcaChatWindow").slideDown("slow");
335										$(".listOpenIcon").html("&or;");
336										$("#wbcaChatWindow").attr("data-window-state", "1");
337										$(".wbcaBodyHolder").attr("data-window-state", "1");
338									}else{
339										$("#wbcaChatWindow").slideUp("slow");
340										$(".listOpenIcon").html("&and;");
341										$("#wbcaChatWindow").attr("data-window-state", "0");
342										$(".wbcaBodyHolder").attr("data-window-state", "0");
343									}
344								}else{
345									var holder = $(".wbcaBodyHolder").attr("data-window-state");
346									if(holder=="0"){
347										$(".wbcaBodyHolder").slideDown("slow");
348										$(".listOpenIcon").html("&or;");
349										$("#wbcaChatWindow").attr("data-window-state", "1");
350										$(".wbcaBodyHolder").attr("data-window-state", "1");
351									}else{
352										$(".wbcaBodyHolder").slideUp("slow");
353										$(".listOpenIcon").html("&and;");
354										$("#wbcaChatWindow").attr("data-window-state", "0");
355										$(".wbcaBodyHolder").attr("data-window-state", "0");
356									}
357								}
358								
359							}							
360						break;
361						
362						case "open-mobile-chat-window":
363							var holder = $("#wbcaChatWindow").attr("data-window-state");
364							if(holder=="0"){
365								$("#wbcaChatWindow").slideDown("slow");
366								$(".listOpenIcon").html("&or;");
367								$("#wbcaChatWindow").attr("data-window-state", "1");
368								$(".wbcaBodyHolder").attr("data-window-state", "1");
369							}else{
370								$("#wbcaChatWindow").slideUp("slow");
371								$(".listOpenIcon").html("&and;");
372								$("#wbcaChatWindow").attr("data-window-state", "0");
373								$(".wbcaBodyHolder").attr("data-window-state", "0");
374							}
375							
376						break;
377						
378						case "offline-message":
379							AjaxChat.offlineMessage();
380						break;
381												
382					}
383				});
384				
385			},
386			
387			setActiveChat: function(ClientID){
388				var nVer = navigator.appVersion;
389				var nAgt = navigator.userAgent;
390				var browserName  = navigator.appName;
391				var nameOffset,verOffset,ix;
392				// In Opera, the true version is after "Opera" or after "Version"
393				if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
394				browserName = "Opera";
395				fullVersion = nAgt.substring(verOffset+6);
396				if ((verOffset=nAgt.indexOf("Version"))!=-1) 
397				fullVersion = nAgt.substring(verOffset+8);
398				}
399				// In MSIE, the true version is after "MSIE" in userAgent
400				else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
401				browserName = "Microsoft Internet Explorer";
402				fullVersion = nAgt.substring(verOffset+5);
403				}
404				// In Chrome, the true version is after "Chrome" 
405				else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
406				browserName = "Chrome";
407				fullVersion = nAgt.substring(verOffset+7);
408				}
409				// In Safari, the true version is after "Safari" or after "Version" 
410				else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
411				browserName = "Safari";
412				fullVersion = nAgt.substring(verOffset+7);
413				if ((verOffset=nAgt.indexOf("Version"))!=-1) 
414				fullVersion = nAgt.substring(verOffset+8);
415				}
416				// In Firefox, the true version is after "Firefox" 
417				else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
418				browserName = "Firefox";
419				fullVersion = nAgt.substring(verOffset+8);
420				}
421				// In most other browsers, "name/version" is at the end of userAgent 
422				else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
423						(verOffset=nAgt.lastIndexOf('/')) ) 
424				{
425				browserName = nAgt.substring(nameOffset,verOffset);
426				fullVersion = nAgt.substring(verOffset+1);
427				if (browserName.toLowerCase()==browserName.toUpperCase()) {
428				browserName = navigator.appName;
429				}
430				}
431				
432			
433				{
434				var OSName = "Unknown OS";
435				if (navigator.userAgent.indexOf("Win") != -1) OSName = "Windows";
436				if (navigator.userAgent.indexOf("Mac") != -1) OSName = "Macintosh";
437				if (navigator.userAgent.indexOf("Linux") != -1) OSName = "Linux";
438				if (navigator.userAgent.indexOf("Android") != -1) OSName = "Android";
439				if (navigator.userAgent.indexOf("like Mac") != -1) OSName = "iOS";
440				}
441				$.ajax({
442					url: wbca_conf.ajaxURL,						
443					type: "POST",
444					dataType: "JSON",
445					data: { 
446						cw_clientid: ClientID, 
447						tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
448						OSName: OSName,
449						browserName: browserName,
450						location: window.location.href,
451						userAgent: navigator.userAgent,
452						screen_resolution : window.screen.width * window.devicePixelRatio + ' : ' + window.screen.height * window.devicePixelRatio,
453						action : wbca_conf.ajaxActions.wbca_set_active_chat.action,
454						nonce : wbca_conf.ajaxNonce
455					 },
456					success: function(data) { },
457					complete: function() {
458						RequestState5 = true;
459					}
460				});
461			},
462			
463// 🔵 Global variable to track last loaded message ID
464
465
466loadChatRow: function () {
467    let inactivityTimerFire = 0;
468    let chat_idle_time = 1;
469
470    if (RequestState1 === true) {
471        RequestState1 = false;
472
473        let ClientID = $("#wbca_chat_body").attr("data-clientid");
474        let CurrentSessionID = $("#wbca_chat_body").attr("data-sessionid");
475
476        $.ajax({
477            url: wbca_conf.ajaxURL,
478            type: "POST",
479            dataType: "json",
480            data: {
481                action: wbca_conf.ajaxActions.wbca_load_client_chat.action,
482                nonce: wbca_conf.ajaxNonce,
483                wbca_clientID: ClientID,
484                botsessionid: CurrentSessionID
485            },
486
487            success: function (data) {
488                if (!data || !data.wbca_client_chat) {
489                    console.warn("No chat data returned.");
490                    return;
491                }
492
493                const chatdata = data.wbca_client_chat;
494                chat_idle_time = data.chat_idle_time || 1;
495
496                // 🟢 Loop through ALL messages from server
497                (Array.isArray(chatdata) ? chatdata : Object.values(chatdata)).forEach(function (msg) {
498
499                    // Convert ID properly
500                    const msgID = parseInt(msg.id || 0);
501
502                    // Skip if ID is invalid
503                    if (!msgID) return;
504
505                    // Skip duplicate or old messages
506                    if (msgID <= lastLoadedMessageId) {
507                        return;
508                    }
509
510                    // Skip other session messages
511                    if (msg.session_id !== CurrentSessionID) {
512                        return;
513                    }
514
515                    // Append NEW message
516                    AjaxChat.appendMessageRow(msg);
517
518                    // Update max ID
519                    if (msgID > lastLoadedMessageId) {
520                        lastLoadedMessageId = msgID;
521                    }
522                });
523
524                // Auto scroll after inserting new messages
525                const container = $("#wbca_chat_body");
526                container.scrollTop(container.prop("scrollHeight"));
527
528                // Play sound
529                const audio = document.getElementById("wbca_alert");
530                if (audio) audio.play();
531
532                // Update operator online status logic (unchanged)
533                if ($('#wp-chatbot-board-container').hasClass('active-chat-board')) {
534                    if (data.is_operator_online !== undefined &&
535                        data.is_operator_online !== globalwpw.settings.obj.is_operator_online) {
536
537                        globalwpw.settings.obj.is_operator_online = data.is_operator_online;
538
539                        if (data.is_operator_online !== 1) {
540                            $('.qcld-chatbot-custom-intent, .wpbo_live_chat').hide();
541                            wpwKits.updateGlobalMenu();
542                        } else {
543                            $('.qcld-chatbot-custom-intent, .wpbo_live_chat').show();
544                            wpwKits.updateGlobalMenu();
545                        }
546                    }
547                }
548            },
549
550            complete: function () {
551                // Idle timeout logic (unchanged)
552                if (chat_idle_time > 1199) {
553                    inactivityTimerFire = 1;
554
555                    $("#wbca_chat_body").removeAttr("data-clientid");
556                    $("#input_wbca_editor")
557                        .addClass("bg-light-gray")
558                        .attr("disabled", "disabled");
559
560                    $("#wbca_chat_body").append(`
561                        <div class="chat-closed-text">
562                            <p><b>Chat was disconnected due to inactivity or no reply.</b></p>
563                            <p class="qcld-livechat-reload"><i class="fa fa-refresh" aria-hidden="true"></i> Reload the page to start again.</p>
564                        </div>
565                    `);
566
567                    let container = $("#wbca_chat_body");
568                    container.scrollTop(container.prop("scrollHeight"));
569                }
570
571                if (inactivityTimerFire === 0) {
572                    chatRefresh = setTimeout(AjaxChat.loadChatRow, wbca_conf.chatRate);
573                    RequestState1 = true;
574                } else {
575                    setTimeout(AjaxChat.checkUserIdThenProcess, 5000);
576                }
577            },
578
579            error: function (xhr, status, error) {
580                console.error("Chat AJAX error:", status, error);
581                RequestState1 = true;
582                setTimeout(AjaxChat.loadChatRow, 5000);
583            }
584        });
585    }
586},
587
588
589
590
591// ✅ Reusable helper to append a message to chat UI
592appendMessageRow: function (object) {
593    if (!object || !object.message) return;
594
595    const operatorID = object.operatorid || 0;
596    const operatorName = object.operatorname || "Agent";
597    const clientID = object.clientid || "";
598    const message = object.message;
599    const chatTime = formatDate(object.chat_time) || "";
600    const avatar = object.avatar || "https://www.gravatar.com/avatar/?d=mp&s=40";
601
602    const Container = $("#wbca_chat_body");
603    const CurrentHeight = $(Container).prop("scrollHeight");
604
605    const chatContent = `
606        <div class="wbca_admin_message_row wbca_message_row wbca-clear" 
607             data-operatorname="${operatorName}" 
608             data-operatorid="${operatorID}">
609            <div class="wbca_image leftImage">
610                <img src="${avatar}" />
611            </div>
612            <div class="wbcaMessage leftMessage ui floating violet message">
613                <div class="wbcaContent">${message}</div>
614                <div class="ui list right aligned"><span>${chatTime}</span></div>
615            </div>
616        </div>
617    `;
618
619    $(Container).append(chatContent);
620
621    // Auto-scroll
622    $(Container).scrollTop($(Container).prop("scrollHeight"));
623
624    // ✅ Play alert sound if available
625    const audioplayer = document.getElementById("wbca_alert");
626    if (audioplayer) {
627        try { audioplayer.play(); } catch (e) {}
628    }
629},
630
631			//New function to check for active user for chat.
632			checkUserIdThenProcess: function(){
633
634				var ClientID = $("#wbca_chat_body").attr("data-clientid");
635
636				if( typeof ClientID == 'undefined' ){
637					//console.log('Checking for active Chat.');
638					setTimeout(AjaxChat.checkUserIdThenProcess, 5000);
639				}
640				else{
641					//console.log('User is now active in the chat.');
642					chatRefresh = setTimeout(AjaxChat.loadChatRow, wbca_conf.chatRate);
643					RequestState1 = true;
644				}
645
646				
647			}, //New function ends. 19-04-2024
648
649			submitMessage: function () {
650				
651				$("body").on("keyup", "[data-event=\"submit-client-chat\"]", function (e) {
652
653					if((e.keyCode == 13) ) {
654						var userImage = wbca_conf.avatar;
655						var d = new Date();
656						var n = d.getTime();
657						var Message = $.trim($(this).val());
658						var ClientID = $('#wbca_chat_body').attr("data-clientid");
659						let sessionId = localStorage.getItem('botsessionid');
660        				if (sessionId) {
661							$('#wbca_chat_body').attr('data-sessionid', sessionId);
662						}
663						//Print Client ID to Console
664						//console.log(sessionId)
665						//Print Client ID to Console
666						//console.log(ClientID)
667
668						var operatorID = 'none';
669						var department_id = 0;
670						var dateTime = formatDate(d);
671						
672						var Container = $("#wbca_chat_body");
673						if($("#wbca_chat_body div.wbca_admin_message_row").length > 0){
674							operatorID = $("#wbca_chat_body div.wbca_admin_message_row:last").attr("data-operatorid");
675						}
676						//if( operatorID != 'none'){
677							department_id = $('#wbca_chat_body').attr("data-departmet");
678						//}
679						var user_icon_src = wbca_conf.wbcaUrl +'/images/client.png';
680						
681						var MessageStripped = Message.replace(/<(https?:\/\/[^>]+)>/gi, '$1');
682						var escapedMessage = $('<div/>').text(MessageStripped).html();
683						var msg = '<div class="wbca_client_message_row wbca_message_row wbca-clear"><div class="wbca_image rightImage"><img src="'+user_icon_src+'" /></div><div class="wbcaMessage rightMessage "><div class="wbcaContent">'+escapedMessage+'</div><div class="ui list right aligned"><span>'+ dateTime +'</span></div></div></div>';
684						//var msg = '<div class="wbca_admin_message_row wbca_message_row wbca-clear"><div class="wbcaMessage rightMessage ui floating message"><div data-chatid="'+chatID+'" class="wbcaContent">'+Message+'</div></div></div><div class="date-user">'+ dateTime +'</div>';
685						if(Message.length > 0) {
686
687							$(Container).append(msg);
688							$(Container).scrollTop($(Container).prop("scrollHeight"));
689
690							$.ajax({
691								url: wbca_conf.ajaxURL,						
692								type: "POST",
693								dataType: "JSON",
694								data: { 
695									messageContent: Message, 
696									receiverUserId: operatorID,
697									departmentId: department_id,
698									senderUserId: ClientID,
699									action : wbca_conf.ajaxActions.wbca_submit_client_message.action,
700									nonce : wbca_conf.ajaxNonce
701								},
702								success: function(data) {
703									if(data.is_submit == 1 && $(".wbca_admin_message_row").length == 0){
704										var operator = data.operator_info;
705										if(operator && data.opid == 'none'){
706											var operatorID = operator.operatorid;
707											var operatorName = operator.operatorname;
708											var operatorBio = operator.operatorbio;
709											var message = wbca_conf.welcome+' '+operatorName+'. ';
710											var avatar = operator.avatar;
711											
712											if(operatorID==0){
713												message = wbca_conf.no_operator;
714												operatorBio = '';
715											}
716											
717											var chatContent = '<div class="wbca_admin_message_row wbca_message_row wbca-clear" data-operatorname="'+operatorName+'" data-operatorid="'+operatorID+'"><div class="wbca_image leftImage">'+avatar+'</div><div class="wbcaMessage leftMessage ui floating violet message"><div class="wbcaContent">'+message+operatorBio+'</div></div></div>';
718											$("#wbca_chat_body").append(chatContent);
719										}
720										$("#wbca_chat_body").append('<div class="wbca_admin_message_row wbca_message_row wbca-hide" data-operatorid="'+data.operator_id+'">&nbsp;</div>');
721										var Container = $("#wbca_chat_body");
722										var ScrollTop = $(Container).scrollTop();
723										var CurrentHeight = $(Container).prop("scrollHeight");
724									}
725									if(RequestState1 == true && data.is_submit == 1){
726										if($.inArray(ClientID, ClientChatStored) == -1){
727											ClientChatStored.push(ClientID);
728											AjaxChat.setActiveChat(ClientID);
729										}
730										AjaxChat.loadChatRow();
731									}
732								}
733							});
734						}
735						$(this).val("");
736					}
737				});
738				$("body").on("click", ".wbca_float_right_footer", function (e) {
739						
740						var userImage = wbca_conf.avatar;
741						var d = new Date();
742						var n = d.getTime();
743						var Message = $.trim($("[data-event=\"submit-client-chat\"]").val());
744						var ClientID = $('#wbca_chat_body').attr("data-clientid");
745						//console.log(ClientID)
746						var operatorID = 'none';
747						var department_id = 0;
748						var dateTime = formatDate(d);
749						
750						var Container = $("#wbca_chat_body");
751						if($("#wbca_chat_body div.wbca_admin_message_row").length > 0){
752							operatorID = $("#wbca_chat_body div.wbca_admin_message_row:last").attr("data-operatorid");
753						}
754						
755						if( operatorID != 'none'){
756							department_id = $('#wbca_chat_body').attr("data-departmet");
757						}
758						var user_icon_src = wbca_conf.wbcaUrl +'/images/client.png';
759					
760						var MessageStripped = Message.replace(/<(https?:\/\/[^>]+)>/gi, '$1');
761						var escapedMessage = $('<div/>').text(MessageStripped).html();
762						var msg = '<div class="wbca_client_message_row wbca_message_row wbca-clear"><div class="wbca_image rightImage"><img src="'+user_icon_src+'" /></div><div class="wbcaMessage rightMessage "><div class="wbcaContent">'+escapedMessage+'</div><div class="ui list right aligned"><span>'+ dateTime +'</span></div></div></div>';
763						//var msg = '<div class="wbca_admin_message_row wbca_message_row wbca-clear"><div class="wbcaMessage rightMessage ui floating message"><div data-chatid="'+chatID+'" class="wbcaContent">'+Message+'</div></div></div><div class="date-user">'+ dateTime +'</div>';
764						
765						if(Message.length > 0) {
766							$(Container).append(msg);
767							$(Container).scrollTop($(Container).prop("scrollHeight"));
768							$.ajax({
769								url: wbca_conf.ajaxURL,						
770								type: "POST",
771								dataType: "JSON",
772								data: { 
773									messageContent: Message, 
774									receiverUserId: operatorID,
775									departmentId: department_id,
776									senderUserId: ClientID,
777									action : wbca_conf.ajaxActions.wbca_submit_client_message.action,
778									nonce : wbca_conf.ajaxNonce
779								},
780								success: function(data) {
781									if(data.is_submit == 1 && $(".wbca_admin_message_row").length == 0){
782										var operator = data.operator_info;
783										if(operator && data.opid == 'none'){
784											var operatorID = operator.operatorid;
785											var operatorName = operator.operatorname;
786											var operatorBio = operator.operatorbio;
787											var message = wbca_conf.welcome+' '+operatorName+'. ';
788											var avatar = operator.avatar;
789											
790											if(operatorID==0){
791												message = wbca_conf.no_operator;
792												operatorBio = '';
793											}
794											
795											var chatContent = '<div class="wbca_admin_message_row wbca_message_row wbca-clear" data-operatorname="'+operatorName+'" data-operatorid="'+operatorID+'"><div class="wbca_image leftImage">'+avatar+'</div><div class="wbcaMessage leftMessage ui floating violet message"><div class="wbcaContent">'+message+operatorBio+'</div></div></div>';
796											$("#wbca_chat_body").append(chatContent);
797										}
798										$("#wbca_chat_body").append('<div class="wbca_admin_message_row wbca_message_row wbca-hide" data-operatorid="'+data.operator_id+'">&nbsp;</div>');
799										var Container = $("#wbca_chat_body");
800										var ScrollTop = $(Container).scrollTop();
801										var CurrentHeight = $(Container).prop("scrollHeight");
802									}
803									if(RequestState1 == true && data.is_submit == 1){
804										if($.inArray(ClientID, ClientChatStored) == -1){
805											ClientChatStored.push(ClientID);
806											AjaxChat.setActiveChat(ClientID);
807										}
808										AjaxChat.loadChatRow();
809									}
810								}
811							});
812						}
813						$("[data-event=\"submit-client-chat\"]").val("");
814					
815				});
816				
817			},
818			submitFile: function(){
819				$("body").on('change', '#qclivechat_file', function (e) {
820					var ClientID = $('#wbca_chat_body').attr("data-clientid");
821					var operatorID = 'none';
822					var department_id = 0;
823					//var dateTime = d.getFullYear()+'-'+( d.getMonth() + 1)+'-'+d.getDate()+' '+ d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
824					var Container = $("#wbca_chat_body");
825					if($("#wbca_chat_body div.wbca_admin_message_row").length > 0){
826						operatorID = $("#wbca_chat_body div.wbca_admin_message_row:last").attr("data-operatorid");
827					}
828					$this = $(this);
829					file_data = $(this).prop('files')[0];
830        			form_data = new FormData();
831        			form_data.append('file', file_data);
832					form_data.append('receiverUserId', operatorID);
833					form_data.append('senderUserId', ClientID);
834					form_data.append('action',  wbca_conf.ajaxActions.wbca_livechatfile_upload.action);
835					form_data.append('nonce', wbca_conf.ajaxNonce);
836					var Container = $("#wbca_chat_body");
837					var uploading = '<div class="qcld_fileuploading">File uploading....</div>';
838					Container.append('<div class="wbcaMessage">'+ uploading +'</div>');
839					$.ajax({
840						url: wbca_conf.ajaxURL,
841						type: 'POST',
842						contentType: false,
843						processData: false,
844						data: form_data,
845						success: function (data) {
846							function isJsonString(str) {
847								try {
848									JSON.parse(str);
849								} catch (e) {
850									return false;
851								}
852								return true;
853							}
854							var Container = $("#wbca_chat_body");
855							var ScrollTop = $(Container).scrollTop();
856							var CurrentHeight = $(Container).prop("scrollHeight");
857							var user_icon_src = wbca_conf.wbcaUrl +'/images/client.png';
858							if(isJsonString(data)){
859								datas = JSON.parse(data);
860							}else{
861								datas = data;
862							}
863							if(datas.message == 'file not supported'){
864								Container.append('<div class="wbcaMessage"> ' + datas.message + '</div>');
865							}else{
866								Container.append('<div class="wbca_client_message_row wbca_message_row wbca-clear"><div class="wbca_image rightImage"><img src="'+user_icon_src+'" /></div><div class="wbcaMessage rightMessage"><div>' + data.message + '</div><div class="ui list right aligned"><span class="item">' + formatDate(datas.date) + '</span></div></div></div>');
867								Container.scrollTop($(Container).prop("scrollHeight"));
868								
869								if(RequestState1 == true && data.is_submit == 1){
870									if($.inArray(ClientID, ClientChatStored) == -1){
871										ClientChatStored.push(ClientID);
872										AjaxChat.setActiveChat(ClientID);
873									}
874									AjaxChat.loadChatRow();
875								}
876							}
877						}
878					});
879				});
880			},
881			
882			initializeActiveChats: function () {
883				$.ajax({
884					url: wbca_conf.ajaxURL,						
885					type: "POST",
886					dataType: "JSON",
887					data: { 
888						action : wbca_conf.ajaxActions.wbca_load_active_chat.action,
889						nonce : wbca_conf.ajaxNonce
890					 },
891					success: function(data) {
892						var data = data.ClientChatStored;
893						$.each(data, function(i, object) {
894							var ClientID = data[i].CLIENTID;
895							
896							$.ajax({
897								url: wbca_conf.ajaxURL,						
898								type: "POST",
899								dataType: "JSON",
900								data: { 
901									cc_clientid: ClientID,
902									action : wbca_conf.ajaxActions.wbca_load_allchat.action,
903									nonce : wbca_conf.ajaxNonce
904								 },
905								success: function(data) {
906									var data = data.allmessages;
907									$.each(data, function(i, object) {
908										var WindowId = i;
909										var chatContent = object;
910										var Container = $("#wbca_chat_body");
911																				
912										$(Container).prepend(chatContent);
913										$(Container).scrollTop($(Container).prop("scrollHeight"));
914									});
915								}
916								
917							});
918						});
919					}
920				});
921			},
922						
923			notificationAtTitle : function(){
924				var timer=0, newtitle = [], oldtitle = document.title;
925				newtitle.push(oldtitle);
926				var vis = (function(){
927					var stateKey, eventKey, keys = {
928						hidden: "visibilitychange",
929						webkitHidden: "webkitvisibilitychange",
930						mozHidden: "mozvisibilitychange",
931						msHidden: "msvisibilitychange"
932					};
933					for (stateKey in keys) {
934						if (stateKey in document) {
935							eventKey = keys[stateKey];
936							break;
937						}
938					}
939					return function(c) {
940						if (c) document.addEventListener(eventKey, c);
941						return !document[stateKey];
942					}
943				})();
944				vis(function(){
945					var boxname = [], chatno = {};
946					var audioplayer = document.getElementById("wbca_alert");
947					var id = $("#wbca_chat_body").attr('data-clientid');
948					chatno[id] = $("#wbca_chat_body").find('.wbca_message_row').length;
949					
950					if(!vis()){
951						notifyInterval = setInterval(function(){ 
952							var nchatno = {}, ntitle;							
953							var nid = $("#wbca_chat_body").attr('data-clientid'),
954								ntitle =  'New message from '+$("#wbca_chat_body").find('.wbca_admin_message_row:last-child').attr('data-operatorname');
955								
956							nchatno[nid] = $("#wbca_chat_body").find('.wbca_message_row').length;
957							
958							if(nchatno[nid] > chatno[nid] && $.inArray(ntitle, newtitle) == -1){
959								newtitle.push(ntitle);
960							}
961						}, 2000);
962						
963						showNotifyInterval = setInterval(function(){ 
964							if(newtitle.length > 1){
965								document.title = newtitle[timer];
966								timer++
967								if (timer >= newtitle.length){
968									timer=0;
969								}
970								if(audioplayer == "null"){
971									audioplayer.play();
972								}
973							}
974						}, 3000);
975						
976					}else{
977						clearInterval(notifyInterval);
978						clearInterval(showNotifyInterval);
979						document.title = oldtitle;
980						newtitle = [];
981						newtitle.push(oldtitle);
982					//	audioplayer.pause();
983					}
984					
985				});
986				
987			},
988			
989			resizewindow: function(){
990				if(wbca_conf.fullHeight && $(window).width() < 768){
991					$(window).resize(function(e) {
992                        $('#wbcaChatWindow').css('height',$(window).height()+'px');
993						$('#wbca_chat_body').css('height',$(window).height()-68.5+'px');
994                    });
995				}
996			}
997		}
998		
999		AjaxChat.wbcaInit();
1000		
1001	});
1002}(jQuery));

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.