PageSourceSearch

https://www.stych.fr/js/chat.js?v=0.77

js stych.fr collected 2026-10-09 22:42:01 UTC 28,526 bytes, 1,088 lines download raw bytes

1var socket = null;
2var my_name = null;
3var my_avatar = null;
4var is_writing = false;
5var misc = null;
6var id_ccm = null;
7var socketOpt = {
8   error: function(){
9		write_page_contact();
10   }
11};
12
13var Chat = {
14
15   toggleWindow : function(bool){
16      var elChat         = $('#chat-window');
17      var elChatButton = $('button.chat_btn');
18      $('#my_message').val('');
19
20      if (bool === true)
21      {
22         elChatButton.addClass('opened');
23         elChat.toggle(true);
24         $('body').addClass('noscroll');
25      }
26      else if (bool === false)
27      {
28         elChatButton.removeClass('opened');
29         elChat.toggle(false);
30         $('body').removeClass('noscroll');
31      }
32      else
33      {
34         elChatButton.toggleClass('opened');
35         elChat.toggle();
36         // if (!socket || socket.readyState == socket.CLOSED)
37         clear_conversation();
38         elChatButton.blur();
39         if (!$('body').hasClass('webp'))
40            $('body').toggleClass('noscroll');
41      }
42   },
43
44   toggleVue: function (vue, id_ccm, id_msg_sujet, misc)
45   {
46      $('#chat-window [class^="tab_"]').hide();
47      clear_conversation();
48      check_message_non_lu();
49      // if (vue != 'tchat')
50      // 	close_websocket();
51
52      if (vue == 'tchat')
53      {
54         create_websocket();
55      }
56      else if (vue == 'bot')
57      {
58         $('.tab_tchat').show();
59         $('.footer_content').hide();
60      }
61      else if (vue == 'error')
62      {
63         if (!$('#chat-window [class^="tab_"]:visible').length)
64            $('.tab_error').show();
65      }
66      else if (vue == 'whatsapp')
67      {
68         $('#modal-desc-mobile').removeClass('d-none');
69         $('#modal-desc-desktop').addClass('d-none');
70         $('#whatsapp-qr').remove();
71         $('.faq_body').html($('.modal-whatsapp').html());
72         $('.faq_body').addClass('modal-whatsapp');
73         $('.tab_faq').show();
74
75         Chat.toggleWindow(true);
76      }
77      else if (vue == 'faq')
78      {
79         if (!$('.chat_btn').hasClass('tchat-faq'))
80         {
81            create_websocket();
82            return;
83         }
84
85         if (socket && socket.readyState != socket.CLOSED)
86            $('.tab_tchat').show();
87         else
88         {
89
90				var url = '/elearning/messagerie/on-room'
91            $.pjson(
92               url,
93               {}
94            )
95            .done(function(data) {
96               if (data.statut == 'KO')
97               {
98                  get_faq(id_ccm);
99               }
100               else
101               {
102                  create_websocket();
103               }
104            })
105            .fail(function() {
106               $('.tab_faq').show();
107               get_faq(id_ccm);
108            });
109         }
110      }
111      else if (vue == 'page_white')
112      {
113         $('.tab_page_white').show();
114         Chat.toggleWindow(true);
115      }
116      else if (vue == 'messagerie')
117      {
118         if (id_msg_sujet)
119            pjson = get_messagerie_info(id_msg_sujet);
120         else
121            pjson = get_messagerie_list();
122
123         if (pjson)
124            pjson.then(function(){
125               $('.tab_page_white').show();
126            });
127      }
128      else if (vue == 'page_blue')
129      {
130         $('.tab_page_blue').show();
131         Chat.toggleWindow(true);
132      }
133		else if (vue == 'contact_rappel')
134		{
135			$('.tab_page_blue').show();
136         Chat.toggleWindow(true);
137			return get_contact_rappel(misc, id_ccm);
138		}
139      else if (vue == 'contact_messagerie')
140      {
141         $('.tab_page_blue').show();
142         Chat.toggleWindow(true);
143         get_contact_messagerie(id_ccm);
144      }
145      else
146      {
147         create_websocket();
148      }
149   }
150};
151
152
153$(document).ready(function() {
154	create_button_chat();
155	create_window_chat();
156	get_message_non_lu();
157
158	$('.chat_btn, .tchat-faq, .tchat-rappel').on('click', function() {
159		var vue = 'tchat';
160		if ($(this).hasClass('tchat-faq'))
161         vue = 'faq';
162		if ($(this).hasClass('tchat-rappel-whatsapp'))
163         return write_page_contact()
164		if ($(this).hasClass('tchat-rappel'))
165         vue = 'contact_rappel';
166
167		if ($('#chat-window').is(':not(:visible)'))
168			Chat.toggleVue(vue);
169		else if(!close_websocket())
170		   return false;
171
172      if (!$(this).hasClass('tchat-rappel'))
173         Chat.toggleWindow();
174	});
175
176	$(document).on('click', '.window_close', function() {
177		if (!close_websocket())
178		   return false;
179		if ($('#chat-window').is(':visible'))
180         Chat.toggleWindow();
181		if ($(this).attr('data-reload-url')) {
182			document.location.href = $(this).attr('data-reload-url');
183		}
184      $('body').removeClass('noscroll');
185	});
186
187	$(document).on('click', '.switch-tchat-faq', function() {
188		if (isOnPlateforme())
189			Chat.toggleVue('faq');
190		else
191			window.location.href = '/messagerie';
192	});
193
194	$(document).on('click', '.btn-info_ccm_more', function() {
195	   $('.info_ccm').addClass('opened-full');
196	   scrollBottom();
197	});
198
199	$(document).on('click', '.restart_faq', function() {
200		if ($('.restart_faq[data-target]').length <= 1)
201      {
202         clear_conversation();
203         if ($('.chat_btn').hasClass('tchat-faq'))
204            Chat.toggleVue('faq');
205         else
206            Chat.toggleWindow(false);
207      }
208		else
209      {
210         var target = $(this).data('target');
211         $('.'+target).remove();
212         $(this).parent().remove();
213      }
214	});
215
216	$('.faq_body').on('click', '.messages', function(e){
217      if ($(e.target).hasClass('messages'))
218         $(this).find('p.link_faq')[0].click();
219   });
220
221   $(document).on('click', '.link_faq', function() {
222	   var curBtn = $(this);
223		var is_retour = $(this).hasClass('retour');
224		var id_ccm    = $(this).data('id_ccm');
225		var no_intro  = false;
226
227		if (is_retour)
228		{
229			var index = $(this).index('.retour')-1;
230			id_ccm = (index < 0) ? null : $($('.retour').get(index)).data('id_ccm');
231			no_intro = true;
232		}
233
234      curBtn.button('loading');
235
236		$(this).closest('.base_sent').prev().nextAll().remove();
237		get_faq(id_ccm, is_retour, no_intro);
238	});
239
240	$(document).on('click', '.link_page_contact', function() {
241		write_page_contact();
242	});
243
244	$(document).on('click', '.contact_m', function() {
245	   var curBtn = $(this);
246      curBtn.button('loading');
247		get_contact_messagerie().done(function(){
248         curBtn.button('reset');
249      }).fail(function(){
250         curBtn.button('reset');
251      });
252	});
253
254	$(document).on('click', '.contact_r', function() {
255	   var curBtn = $(this);
256      curBtn.button('loading');
257		Chat.toggleVue('page_blue');
258		get_contact_rappel(misc, id_ccm).done(function(){
259         curBtn.button('loading');
260      }).fail(function(){
261         curBtn.button('loading');
262      });
263	});
264
265	$('button.btn-chat-send').on('click', function() {
266		send_message();
267		stop_writing();
268	});
269
270	$(document).on('click', '.btn_messagerie', function() {
271		Chat.toggleVue('messagerie');
272	});
273
274	$(document).on('click', '.btn_faq', function() {
275		clear_conversation();
276		Chat.toggleVue('faq');
277	});
278
279	$(document).on('click', '.link_info_message', function() {
280		var id_msg_sujet = $(this).data('id_msg_sujet');
281		var id_tchat = $(this).data('id_tchat');
282		var curBtn = $(this);
283
284      curBtn.button('loading');
285
286		if (id_msg_sujet)
287		   pjson = get_messagerie_info(id_msg_sujet);
288		if (id_tchat)
289		   pjson = get_tchat_info(id_tchat);
290
291		if (pjson)
292         pjson.then(function () {
293            curBtn.button('reset');
294            Chat.toggleVue('page_white');
295         });
296	});
297
298	$('#my_message').on('keypress', function(e) {
299		if (e.which == 13 && !e.shiftKey)
300		{
301			e.preventDefault();
302			send_message();
303			stop_writing();
304		}
305	});
306
307	$('#my_message').on('input', function(e) {
308		var text = $(this).val();
309
310		if ((typeof socket === 'undefined' || socket.readyState === WebSocket.CLOSED))
311			return false;
312
313		if (text.length > 0 && !is_writing)
314			start_writing();
315
316		if (text.length == 0 && is_writing)
317			stop_writing();
318	});
319});
320
321function param(name) {
322	return (location.search.split(name + '=')[1] || '').split('&')[0];
323}
324
325
326
327function send_message()
328{
329	var message = $('#my_message').val();
330
331	if (message.length)
332	{
333		var obj = {message: message, action: 'send_message'};
334		socket.send(JSON.stringify(obj));
335		write_message_sent(obj);
336	}
337	$('#my_message').val('');
338	$('#my_message').focus();
339}
340
341function start_writing()
342{
343	var obj = {action: 'start_writing'};
344	socket.send(JSON.stringify(obj));
345	is_writing = true;
346}
347
348function stop_writing()
349{
350	var obj = {action: 'stop_writing'};
351	socket.send(JSON.stringify(obj));
352	is_writing = false;
353}
354
355function close_websocket()
356{
357
358	if (socket !== null && socket.readyState === WebSocket.OPEN)
359	{
360      if (confirm('Êtes-vous sûre de vouloir quitter cette conversation ?') === false)
361         return false;
362
363		var url = '/elearning/messagerie/on-room';
364      $.pjson(
365         url,
366         {toClose:1}
367      )
368      .done(function(data) {
369      })
370      .fail(function() {
371      });
372
373		stop_writing();
374		socket.close();
375	}
376
377	return true;
378}
379
380function create_websocket(objSocket)
381{
382   if (!objSocket)
383      objSocket = socketOpt;
384
385   $('.footer_content').show();
386	var guid = getCookie('chat_guid');
387   if (socket && socket.readyState != socket.CLOSED)
388      return false;
389
390	socket = new WebSocket(window.websocket_server_uri+'index.php?user_hashed='+window.user_hashed+'&guid='+guid);
391
392	socket.onopen = function(e) {
393		var obj = {action: 'connect', id_ccm: id_ccm};
394		this.send(JSON.stringify(obj));
395      Chat.toggleWindow(true);
396	};
397
398	socket.onmessage = function(e) {
399		var obj = JSON.parse(e.data);
400
401      if (obj.action == 'no_one')
402      {
403         objSocket.error();
404
405         // Tracker Chat conseillers indispo
406         tracker_chat(guid, 'no_one');
407         return;
408      }
409      else
410      {
411         $('.tab_tchat').show();
412      }
413
414      if (obj.action == 'send_guid')
415		{
416			document.cookie = "chat_guid="+obj.message;
417
418			// Tracker Chat 'Dans une room'
419			tracker_chat(obj.message, 'in_room');
420		}
421		else if (obj.action == 'disconnect')
422		{
423			$('.footer_content').hide();
424			$('#chat-window div.writing').hide();
425			write_message_received(obj);
426		}
427		else if (obj.action == 'send_conversation')
428		{
429			write_conversation(obj);
430			mark_conversation_as_read();
431		}
432		else if (obj.action == 'start_writing')
433		{
434			$('#chat-window div.writing').show();
435		}
436		else if (obj.action == 'stop_writing')
437		{
438			$('#chat-window div.writing').hide();
439		}
440		else
441			write_message_received(obj);
442
443	};
444
445	socket.onerror = function(e) {
446      tracker_chat(guid, 'error'); // Tracker Chat 'Système indispo'
447
448      if (socket.readyState === WebSocket.CLOSED)
449         return;
450
451      objSocket.error();
452	};
453
454	socket.onclose = function(e) {
455	};
456
457	return socket;
458}
459
460function isOnPlateforme()
461{
462	if (window.location.pathname.indexOf('elearning') !== -1 || window.location.pathname.indexOf('messagerie') !== -1)
463		return true;
464	return false;
465}
466
467function get_message_indispo()
468{
469	return "Il n'y a actuellement aucun conseiller de disponible<br/>\
470				<div class='align-center'>\
471					<a href='/inscription-rappel' class='white btn-cta'>Demander à être rappelé</a>\
472					<a href='/inscription-chat' class='white btn-cta'> Envoyer un message</a>\
473				</div>";
474}
475
476function getCookie(name)
477{
478	match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
479	if (match)
480		return match[2];
481}
482
483function tracker_chat(guid, action)
484{
485	var url = "/elearning/messagerie/tracker-chat";
486	var data = {guid:guid, action:action};
487
488	$.pjson(
489	   url,
490      data
491	)
492	.done(function(data) {
493	})
494	.fail(function() {
495	   Chat.toggleVue('error');
496	});
497}
498
499function get_message_non_lu()
500{
501	var guid = getCookie('chat_guid');
502	var url = "/elearning/messagerie/get-message-chat-non-lu";
503
504	$.pjson(
505      url,
506	   {guid:guid}
507	)
508	.done(function(data) {
509      if (data.alert)
510         alert(data.alert);
511      else if(data.nb_message)
512         $('button.chat_btn').append("<span class='chat_badge badge alert'>"+data.nb_message+"</span>");
513	})
514	.fail(function() {
515      Chat.toggleVue('error');
516	});
517}
518
519function get_contact_rappel(misc, id_ccm_forced = 0)
520{
521   id_ccm = id_ccm_forced;
522	if (misc === undefined)
523		misc = "";
524
525	var url = "/elearning/messagerie/get-tchatbot-vue/contact-rappel";
526	return $.pjson(
527      url,
528	   {id_ccm: id_ccm,
529			misc: misc}
530	)
531	.done(function(data) {
532      if (data.alert)
533         alert(data.alert);
534      else
535      {
536         $('.tab_page_blue').html(data.content);
537      }
538	})
539	.fail(function() {
540      Chat.toggleVue('error');
541   });
542}
543
544function get_messagerie_list()
545{
546	var url = "/elearning/messagerie/list-message";
547
548	return $.pjson(
549	   url,
550	   {}
551	)
552	.done(function(data) {
553      if (data.alert)
554         alert(data.alert);
555      else
556      {
557         if (data.nbNotifReaded)
558         {
559            var currentUnread = $('.notif .badge').text();
560            currentUnread = currentUnread - data.nbNotifReaded;
561            if (currentUnread <= 0)
562               $('.notif .badge, .profile-dropdown.badge').remove();
563            else
564               $('.notif .badge, .profile-dropdown.badge').html(currentUnread);
565         }
566         $('.tab_page_white').html(data.content);
567         Chat.toggleWindow(true);
568      }
569	})
570	.fail(function() {
571	   Chat.toggleVue('error');
572	});
573}
574
575function get_messagerie_info(id_msg_sujet)
576{
577	var url = "/elearning/messagerie/info-message/"+id_msg_sujet;
578
579	return $.pjson(
580	   url,
581	   {}
582	)
583	.done(function(data) {
584      if (data.alert)
585         alert(data.alert);
586      else
587      {
588         $('.tab_page_white').html(data.content);
589         var scrollX = $('.date_messagerie').eq(-2).offset().top - $('.page_white_body').offset().top ;
590         $('.page_white_body').scrollTop(scrollX);
591         Chat.toggleWindow(true);
592      }
593	})
594	.fail(function() {
595      Chat.toggleVue('error');
596   });
597}
598
599function get_tchat_info(id_tchat)
600{
601	var url = "/elearning/messagerie/info-tchat/"+id_tchat;
602
603	$.pjson(
604	   url,
605	   {}
606	)
607	.done(function(data) {
608      if (data.alert)
609         alert(data.alert);
610      else
611      {
612         $('.tab_page_white').html(data.content);
613      }
614	})
615	.fail(function() {
616      Chat.toggleVue('error');
617   });
618}
619
620function get_faq(id_ccm, is_retour, no_intro)
621{
622	var url = "/elearning/messagerie/ccm-search";
623
624	$.pjson(
625	   url,
626      {id_ccm:id_ccm}
627	)
628	.done(function(data) {
629      if (data.alert)
630         alert(data.alert);
631      else
632      {
633         if (id_ccm == null)
634            clear_conversation();
635         $('.tab_faq').show();
636         clear_other_messages();
637         if (!is_retour)
638            write_ccm_retour(data.ccm_retour);
639         if (!no_intro || id_ccm == null)
640            write_intro_ccm(data.intro);
641         Chat.toggleWindow(true);
642         write_rows_ccm(data.rows_ccm);
643         write_info_ccm(data.info_ccm);
644      }
645	})
646	.fail(function() {
647      Chat.toggleVue('error');
648   });
649}
650
651function get_contact_messagerie(id_ccm_forced = 0)
652{
653   id_ccm = id_ccm_forced
654	var url = "/elearning/messagerie/get-tchatbot-vue/contact-messagerie";
655	return $.pjson(
656      url,
657	   {}
658	)
659	.done(function(data) {
660      if (data.alert)
661         alert(data.alert);
662      else
663      {
664         Chat.toggleVue('page_blue');
665         $('.tab_page_blue').html(data.content);
666      }
667	})
668	.fail(function() {
669      Chat.toggleVue('error');
670	});
671}
672
673function write_page_contact()
674{
675	var url = "/elearning/messagerie/get-tchatbot-vue/contact";
676
677	return $.pjson(url,{})
678	.done(function(data) {
679      if (data.alert)
680         alert(data.alert);
681		else if (data.visiteur)
682			write_message_indispo();
683      else
684      {
685         Chat.toggleVue('page_blue');
686         $('.tab_page_blue').html(data.content);
687      }
688	})
689	.fail(function() {
690      Chat.toggleVue('error');
691   });
692}
693
694function check_message_non_lu()
695{
696	setTimeout(function(){
697		var url = "/elearning/messagerie/check-message-non-lu";
698		$.post(url, {}, function(data) {
699			if (data.nb_message_non_lu > 0)
700				$('.window_header > .btn_messagerie').find('i.fa-envelope').addClass('fabadge');
701			else
702				$('.window_header > .btn_messagerie').find('i.fa-envelope').removeClass('fabadge');
703		}, 'JSON');
704	}, 500);
705}
706
707// ==================== MESSENGER ==================== //
708function mark_conversation_as_read()
709{
710	$('button.chat_btn span.chat_badge').remove();
711	var obj = {action: 'mark_as_read'};
712	socket.send(JSON.stringify(obj));
713}
714
715function write_conversation(data)
716{
717	my_name = data.client_name;
718	my_avatar = data.client_avatar;
719
720	for (var i = 0; i < data.message.length; i++)
721	{
722		var is_conseille = parseInt(data.message[i]['is_conseille']);
723		var avatar = data.message[i]['avatar'];
724		var name = data.message[i]['name'];
725		var message = data.message[i]['message'];
726
727      $('.tchat_title').html('<span class="img-wrapper"><img class="img-responsive" src="'+avatar+'" style="max-height:100%;"></span><b>'+name+'</b>');
728
729		if (is_conseille)
730		{
731			var content = '<div class="msg_container base_receive">\
732								<div class="messages msg_receive">\
733									<p>'+message+'</p>\
734								</div>\
735							</div>';
736		}
737		else
738		{
739			var content = '<div class="msg_container base_sent">\
740									<div class="messages msg_sent">\
741										<p>'+message+'</p>\
742									</div>\
743								</div>';
744		}
745		$('.tchat_body').append(content);
746		scrollBottom();
747	}
748}
749
750function write_message_received(data, isNb2bBr=true)
751{
752	var avatar = data.avatar;
753	if (!isNb2bBr)
754		var msg = data.message
755	else
756		var msg = data.message.replace(/\n/g, "<br />");
757	var name = data.name;
758
759	my_name = data.client_name;
760	my_avatar = data.client_avatar;
761   $('.tchat_title').html('<span class="img-wrapper"><img class="img-responsive" src="'+avatar+'" style="max-height:100%;"></span><b>'+name+'</b>');
762
763	var content = '<div class="msg_container base_receive">\
764						<div class="messages msg_receive">\
765							<p>'+msg+'</p>\
766						</div>\
767					</div>';
768	$('.tchat_body').append(content);
769	scrollBottom();
770}
771
772function write_message_sent(data)
773{
774	var msg = data.message.replace(/\n/g, "<br />");
775	var content = '<div class="msg_container base_sent">\
776							<div class="messages msg_sent">\
777								<p>'+msg+'</p>\
778							</div>\
779						</div>';
780	$('.tchat_body').append(content);
781	scrollBottom();
782}
783
784function write_message_indispo()
785{
786   $('.tab_tchat').show();
787   var message_indispo = get_message_indispo();
788   var obj = {
789      'avatar': '/img/stych_assistant.png',
790      'message': message_indispo,
791      'name': 'Stych.fr'
792   };
793
794   write_message_received(obj);
795   $('.footer_content').hide();
796   $('#chat-window div.writing').hide();
797}
798// ==================== ========= ==================== //
799
800// ==================== F.A.Q ==================== //
801function write_intro_ccm(intro)
802{
803	if (typeof intro === "undefined")
804		return false;
805
806	var content = '<div class="msg_container base_receive">\
807						<div class="messages msg_receive">\
808							<p>'+intro+'</p>\
809						</div>\
810					</div>';
811	$('.faq_body').append(content);
812	$('.zone_intro').closest('.msg_receive').removeClass('msg_receive messages');
813}
814
815function write_rows_ccm(rows_ccm)
816{
817	if (typeof rows_ccm === "undefined")
818		return false;
819
820	$.each(rows_ccm, function(index, el) {
821		var content = '<div class="msg_container base_receive">\
822							<div class="messages msg_receive">\
823								<p data-id_ccm_parent="'+el.id_ccm_parent+'" data-id_ccm="'+el.id_ccm+'" 
823class="link_faq">'+el.intitule+'</p>\
824							</div>\
825						</div>';
826		$('.faq_body').append(content);
827	});
828}
829
830function write_info_ccm(info_ccm)
831{
832	if (typeof info_ccm === "undefined" || info_ccm.length == 0)
833		return false;
834
835	id_ccm = info_ccm.id_ccm;
836	var satisfaction = '<hr style="width:100%">\
837		<div class="zone_satisfaction">\
838				<b>Avons-nous répondu à ta question ?</b>\
839				<div class="msg_container base_receive">\
840					<span onclick="recordSatisfaitAnswer(this)" data-id_ccm="'+info_ccm.id_ccm+'" data-value="1"\
841						class="btn btn_tchat_choice"><i class="fa fa-thumbs-up"></i> Oui</span>\
842					<span onclick="recordSatisfaitAnswer(this)" data-id_ccm="'+info_ccm.id_ccm+'" data-value="0"\
843						class="btn btn_tchat_choice"><i class="fa fa-thumbs-down"></i> Non</span>\
844				</div>\
845			</div>\
846			<div class="zone_restart_faq" style="display:none;">\
847				<b>Merci de ta réponse.</b><br>\
848				<i><a href="javascript:void(0)" class="restart_faq">Poser une autre question</a></i>\
849			</div>';
850
851	var content = '<div class="msg_container base_receive">\
852							<div class="info_ccm">\
853								<p>'+info_ccm.contenu+'</p>\
854							   '+satisfaction+'\
855							</div>\
856							<a class="btn btn_tchat_choice btn-info_ccm_more d-none" href="javascript:void(0);">\
857							   <i class="fas fa-long-arrow-alt-down"></i> Continuer <i class="fas fa-long-arrow-alt-down"></i>\
858                     </a>\
859						</div>';
860	$('.faq_body').append(content);
861	var elCcm = $(".info_ccm");
862   if (elCcm.prop('scrollHeight') > elCcm.height() ) {
863      $('.btn-info_ccm_more').removeClass('d-none');
864   }
865}
866
867function write_ccm_retour(ccm_retour)
868{
869	if (typeof ccm_retour === "undefined" || ccm_retour.length == 0)
870		return false;
871
872	var content = '<div class="msg_container base_sent">\
873							<div class="messages msg_sent">\
874								<div class="rounded-icon x40 bg-dark-primary">\
875									<i class="icon-arrow-back"></i>\
876								</div>\
877								<p data-id_ccm="'+ccm_retour.id_ccm+'" class="link_faq retour">'+ccm_retour.intitule+'</p>\
878							</div>\
879						</div>';
880	$('.faq_body').append(content);
881
882	$('.faq_body').animate({
883		scrollTop: $('.faq_body').scrollTop() + $('.link_faq').last().parent().parent().position().top - $('.faq_body').position().top
884	}, 'slow');
885}
886
887function clear_other_messages()
888{
889	$('#chat-window .msg_receive').each(function (index, el) {
890		$(el).parent().remove();
891	});
892}
893// ==================== ===== ==================== //
894
895// ==================== MESSAGERIE ==================== //
896// ==================== ========== ==================== //
897
898function scrollBottom() {
899	if ($('.tchat_body').is(':visible'))
900		div = $('.tchat_body');
901	else if ($('.faq_body').is(':visible'))
902		div = $('.faq_body');
903	else if ($('.page_blue_body').is(':visible'))
904		div = $('.page_blue_body');
905	else if ($('.page_white_body').is(':visible'))
906		div = $('.page_white_body');
907	else
908		div = $('.tchat_body');
909
910	div.scrollTop(div.get(0).scrollHeight);
911}
912
913function scrollTopChat() {
914   if ($('.tchat_body').is(':visible'))
915      div = $('.tchat_body');
916   else if ($('.faq_body').is(':visible'))
917      div = $('.faq_body');
918   else if ($('.page_blue_body').is(':visible'))
919      div = $('.page_blue_body');
920   else if ($('.page_white_body').is(':visible'))
921      div = $('.page_white_body');
922
923   div.scrollTop(0);
924}
925
926
927function create_button_chat() {
928	var ua = window.navigator.userAgent;
929	var msie = ua.indexOf("MSIE ");
930	var edge = ua.indexOf("Edge");
931
932	if (msie > 0 || edge > 0)
933		return false;
934
935	if (!window.tplChatButton)
936      window.tplChatButton = '<button class="chat_btn tchat-faq"><i class="icon-close"></i><i class="icon-messagerie"></i></button>';
937	$('body').append(window.tplChatButton);
938}
939
940
941function create_window_chat() {
942	var chat = "<div id='chat-window' class='stych panel panel-default' style='display:none;'>\
943						<div class='tab_tchat' style='height:100%;'>\
944							<div class='panel-heading window_header'>\
945								<p class='h3 panel-title tchat_title'></p>\
946								<span class='window_close'><i class='icon-close'></i></span>\
947							</div>\
948							<div class='panel-body tchat_body'>\
949							</div>\
950							<div class='writing ml-4' style='display:none; position:absolute; bottom:10%;'><i>
950Le conseiller est en train d'écrire <span>.</span><span>.</span><span>.</span></i></div>\
951							<div class='panel-footer tchat_footer'>\
952								<div class='footer_content'>\
953									<div class='row tchat_composer'>\
954										<textarea class='column' id='my_message' placeholder='Ecris ton message ici ...'></textarea>\
955										<button class='button btn_send btn-chat-send'><i></i></button>\
956									</div>\
957								</div>\
958							</div>\
959						</div>\
960						\
961						<div class='tab_faq' style='height:100%;display:none;'>\
962							<div class='panel-heading window_header'>\
963								<a class='btn_messagerie' href='javascript:void(0);'>\
964									<i class='fa fa-envelope fabadge'></i>\
965								</a>\
966								<p class='h3 panel-title'>Aide & Assistance</p>\
967								<span class='window_close'><i class='icon-close'></i></span>\
968							</div>\
969							<div class='panel-body faq_body'>\
970							</div>\
971						</div>\
972						\
973						<div class='tab_page_blue' style='height:100%;display:none;'>\
974						</div>\
975						\
976						<div class='tab_page_white' style='height:100%;display:none;'>\
977						</div>\	\
978						<div class='tab_error' style='height:100%;display:none;'>\
979                     <div class='panel-heading window_header'>\
980                        <p class='h3 panel-title'>Une erreur est survenue !!!</p>\
981                        <span class='window_close'><i class='icon-close'></i></span>\
982                     </div>\
983                     <div class='panel-body' style='height: calc(100% - 100px); text-align: center;'>\
984                        <br>\
985                        <a href='javascript:void(0);' class='window_close'><img src='/img/error.svg' alt='' width='50px'></a>\
986                        <br>\
987                        <br>\
988                        Veuillez vérifier votre connexion à internet\
989                        <br>\
990						      <a href='javascript:void(0);' class='window_close'>Fermer.</a>\
991                     </div>\
992						</div>\
993					</div>";
994	$('body').append(chat);
995}
996
997function recordSatisfaitAnswer(obj)
998{
999   var curBtn = $(obj);
1000	id_ccm    = curBtn.data('id_ccm');
1001	var datas = {'id_ccm' : curBtn.data('id_ccm'),
1002					 'statut' : curBtn.data('value')};
1003	var url   = '/elearning/messagerie/nouveau-message/recordAnswerFound';
1004
1005   curBtn.button('loading');
1006	// console.log($(obj).parents('.panel-body'));
1007   // var elMsg = show_waiting($(obj).parents('.panel-body'));
1008
1009   $.pjson(
1010      url,
1011      datas
1012   )
1013   .done(function(data) {
1014      curBtn.button('reset');
1015      if (data.alert)
1016         alert(data.alert);
1017
1018      if (data.statut == 'OK')
1019      {
1020         if (datas.statut == 1)
1021         {
1022            $('.zone_satisfaction').hide();
1023            $('.zone_restart_faq').show();
1024         }
1025         else
1026         {
1027            Chat.toggleVue('tchat');
1028         }
1029      }
1030   })
1031   .fail(function() {
1032      curBtn.button('reset');
1033   });
1034}
1035
1036function clear_conversation()
1037{
1038	$('.tchat_body').html('');
1039	$('.faq_body').html('');
1040	$('.page_blue_body').html('');
1041}
1042
1043function updateCCMContacter(obj)
1044{
1045	if ($(obj).closest('#chat-window').length)
1046	{
1047		Chat.toggleVue('page_blue');
1048		get_contact_messagerie()
1049	}
1050	else
1051	{
1052		if ($(obj).hasClass('selected'))
1053			return;
1054
1055		$('.btn-ccm-contacter').removeClass('selected');
1056		$(obj).addClass('selected');
1057
1058		if ($(obj).data('value') == '1')
1059		{
1060			$('#zone-ask-continue').hide();
1061			$('#zone-poser-question').show();
1062		}
1063		else
1064		{
1065			$('#zone-ask-continue').hide('slow');
1066		}
1067	}
1068}
1069
1070function show_msg(message)
1071{
1072   var content = $('<div class="msg_container base_receive">\
1073                     <span class="zone_intro">'+message+'</span>\
1074                  </div>');
1075   $('.page_blue_body').append(content);
1076   return content;
1077}
1078
1079function show_waiting(elCurrentPanelBody)
1080{
1081   var content = '<div class="msg_container base_receive">\
1082                     <span class="loading"><i class="dot"></i><i class="dot"></i><i class="dot"></i></span>\
1083                  </div>';
1084   elCurrentPanelBody.append(content);
1085   return content;
1086}
1087
1088

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.