PageSourceSearch

https://img.free-scores.com/javascripts/interaction_commentaire_uk.js

js free-scores.com collected 2026-10-01 11:36:21 UTC 61,503 bytes, 1,461 lines download raw bytes

1function creation_message_prive(inscrit = 2) {
2
3        //alert(document.location.host);
4        raison = '';
5        message = '';
6        erreur = 0;
7        Titre = encodeURIComponent($('Titre_0').value.replace(reg, ":;:;:"));
8        Message = encodeURIComponent($('Message_0').value.replace(reg, ":;:;:"));
9
10        Params = new Hash();
11
12//	console.log("test ");
13	var url = '//www.free-scores.com/ajax/message_prive_ajax_en.php';
14
15                var reg = new RegExp("(\n)", "g");
16
17                Params.set('type', 1);
18
19                Params.set('pseudocible', $('pseudocible').value);
20                Params.set('titre', Titre);
21                Params.set('message', Message);
22
23                var myAjax = new Ajax.Request(
24                        url,
25                        {
26                                method: 'POST',
27                                evalScripts: false,
28                                parameters: Params,
29                                onLoading: function (xhr) { // Après appel méthode open
30
31				$('newmessagesubmit').disabled = true;
32				$('chargement_comment_0').innerHTML = '<img src="https://img.free-scores.com/IMAGES/ajax-loader.gif" width=15 />';
33
34                                },
35                                onFailure: function (xhr) { // Réponse HTTP != 2xx
36				if (xhr.status === 500) {
37                                $('MP').innerHTML = '<div class="orange">Server error (500) : please come back later.</div>';
38                                } else {
39                                $('MP').innerHTML = '<div class="orange">Error ' + xhr.status + ' : message not sent.</div>';
40                                }
41
42                                },
43                                onSuccess: function (xhr) {
44
45				try {
46                                var Reponse = JSON.parse(xhr.responseText);
47
48                                if (Reponse.ERR == 0) {
49                                        $('MP').innerHTML = Reponse.OUTPUT;
50//                                      $('MP').innerHTML = '<div class=vert>Message envoy&eacute;</div>';
51                                        }
52                                        else
53                                        {
54                                        $('MP').innerHTML = '<div class=orange>Erreur : message not sent</div>';
55                                        }
56                                } catch (e) {
57                                    $('MP').innerHTML = '<div class="orange">Invalid server response.</div>';
58                                }
59
60                                },
61                                onComplete: function (xhr, json) {
62				$('chargement_comment_0').innerHTML = '';
63                                $('newmessagesubmit').disabled = false;
64                                }
65                        }
66                );
67
68}
69var comment_ajax = 1;
70/*
71function ajout_commentaire_partition(Pere_ID, inscrit = 2) {
72        raison = '';
73        message = '';
74        erreur = 0;
75        Contenu = encodeURIComponent($('reponse_' + Pere_ID).value.replace(reg, ":;:;:"));
76
77        Params = new Hash();
78
79        if (inscrit == 0) {
80                if ($('pseudo2').value) {
81                        Params.set('pseudo', $('pseudo2').value);
82                }
83                else {
84                        raison += "- The pseudo isn't correct\n";
85                        erreur++;
86                }
87
88                if ($('mail').value) {
89                        Params.set('mail', $('mail').value);
90                }
91                else {
92                        raison += "- The email isn't correct\n";
93                        erreur++;
94                }
95
96                if (!$('condition1').checked) {
97                        raison += "- Please accept conditions and terms\n";
98                        erreur++;
99                }
100
101                if ($('code').value) {
102                        Params.set('code', $('code').value);
103                }
104                else {
105                        raison += "- Please retype code confirmation correctly\n";
106                        erreur++;
107                }
108
109        }
110        else if (inscrit == 1) {
111
112                if ($('pseudo1').value) {
113                        Params.set('pseudo', $('pseudo1').value);
114                }
115                else {
116                        raison += "- The pseudo isn't correct\n";
117                        erreur++;
118                }
119
120                if ($('passe1').value) {
121                        Params.set('passe', $('passe1').value);
122                }
123                else {
124                        raison += "- The email isn't correct\n";
125                        erreur++;
126                }
127        }
128
129        if (Contenu == '') {
130                raison += '- The comment is empty\n';
131                erreur++;
132        }
133
134        if (raison != '') {
135
136                message = 'Please check this error before going forward :\n';
137
138                message = message + raison;
139                alert(message);
140
141        }
142
143        if (erreur == 0) {
144                if (document.location.host == 'm.free-scores.com') {
145                        var url = '//m.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
146                }
147                else {
148                        var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
149                }
150
151                var reg = new RegExp("(\n)", "g");
152
153                Params.set('comment_ajax', comment_ajax);
154                Params.set('inscrit', inscrit);
155                Params.set('type', 1);
156
157                if (Pere_ID == 0) {
158                        if ($('suivi_' + Pere_ID).checked) Params.set('suivi', 1);
159                        else
160                                Params.set('suivi', 0);
161                }
162
163                Params.set('Pere_ID', Pere_ID);
164                Params.set('pdf', $('clef_part_' + Pere_ID).value);
165                Params.set('comment', Contenu);
166
167
168                var myAjax = new Ajax.Request(
169                        url,
170                        {
171                                method: 'POST',
172                                evalScripts: false,
173                                parameters: Params,
174                                onLoading: function (xhr) { // Après appel méthode open
175                                        if (inscrit == 0) {
176                                                $('Inscr_simp2').disabled = true;
177                                                $('affierr2').innerHTML = '<img src="https://img.free-scores.com/IMAGES/ajax-loader.gif" width=15 />';
178                                                $('panneau2').setOpacity(0.5);
179                                        }
180                                        else if (inscrit == 1) {
181                                                $('Inscr_simp1').disabled = true;
182                                                $('affierr1').innerHTML = '<img src="https://img.free-scores.com/IMAGES/ajax-loader.gif" width=15 />';
183                                                $('panneau1').setOpacity(0.5);
184                                        }
185                                        else if (inscrit == 2) {
186                                                if (Pere_ID) {
187                                                        $('input_' + Pere_ID).disabled = true;
188                                                        $('chargement_comment_' + Pere_ID).innerHTML = '<img src="https://img.free-scores.com/IMAGES/ajax-loader.gif" width=15 />';
189                                                }
190                                                else {
191                                                        $('input_0').disabled = true;
192                                                        $('chargement_comment_0').innerHTML = '<img src="https://img.free-scores.com/IMAGES/ajax-loader.gif" width=15 />';
193                                                }
194                                        }
195
196                                },
197                                onFailure: function (xhr) { // Réponse HTTP != 2xx
198
199                                },
200                                onSuccess: function (xhr) {
201
202                                        if (Pere_ID) {
203                                                Add = xhr.responseText;
204                                                $('chargement_comment_' + Pere_ID).innerHTML = '';
205                                                $('Append_' + Pere_ID).insert({ bottom: Add });
206                                                $('div_reponse_' + Pere_ID).hide();
207                                                $('comment_' + comment_ajax).appear({ 'duration': 2 });
208                                                $('reponse_' + Pere_ID).value = '';
209                                                comment_ajax++;
210                                        }
211                                        else {
212                                                if (inscrit == 2) $('chargement_comment_0').innerHTML = '';
213                                                Add = xhr.responseText;
214
215                                                var Reponse = eval("(" + Add + ")");
216
217
218                                                if (Reponse.ERR == 0) {
219                                                        $('reponse_0').value = '';
220                                                        gestionClic_comment(0, 'new');
221                                                        $('message_0').hide();
222                                                        $('message_0').appear({ 'duration': 2 });
223
224                                                        if (inscrit == 2 && $('ajout_comment_apres')) {
225                                                                $('ajout_comment_apres').show();
226                                                                $('ajout_comment_apres').highlight({ startcolor: '#99CC99', endcolor: '#F
226FFBEA', restorecolor: '#FFFBEA', duration: 1 });
227
228                                                                //$('ajout_comment').hide();
229                                                        }
230
231                                                        if (Reponse.CONNEXION == 1 || Reponse.CONNEXION == 2) {
232                                                                $('Inscr_simp1').disabled = true;
233                                                                $('Inscr_simp2').disabled = true;
234
235                                                                if (Reponse.CONNEXION == 2) {
236                                                                        message = '<div class=vert>new member connected<br />comment sent</div>';
237                                                                        //$('panneau_inscription').innerHTML=message;
238                                                                        $('panneau_inscription').fade({ duration: 1, from: 0, to: 1 });
239                                                                        $('panneau_inscription').innerHTML = message + "<div align=center><input type='button' value='Send' id='input_0' onClick='ajout_commentaire_partition(0, 2);' align=absmiddle  /><span id='chargement_comment_0' style='display: none;'></span></div>";
240                                                                        $('panneau_inscription').show();
241                                                                }
242                                                                else if (Reponse.CONNEXION == 1) {
243                                                                        message = '<div class=vert>successful connection<br />comment sent</div>';
244                                                                        //$('panneau_inscription').innerHTML=message;
245                                                                        $('panneau_inscription').fade({ duration: 1, from: 0, to: 1 });
246                                                                        $('panneau_inscription').innerHTML = message + "<div align=center><input type='button' value='Send' id='input_0' onClick='ajout_commentaire_partition(0, 2);' align=absmiddle  /><span id='chargement_comment_0' style='display: none;'></span></div>";
247                                                                        $('panneau_inscription').show();
248                                                                }
249                                                        }
250                                                        comment_ajax++;
251                                                }
252                                                else {
253                                                        if (inscrit == 1) {
254                                                                if (Reponse.ERR == 1 || Reponse.ERR == 3 || Reponse.ERR == 4) {
255                                                                        message = '<div class=rouge>Incorrect pseudo or password<br><a href=//www.free-scores.com/espace-membres-uk/pdf_recuppass.php class=noir target=_blank><font size=1>Forgotten your password, click here</font></a></div>';
256                                                                }
257                                                                else if (Reponse.ERR == 11) {
258                                                                        message = '<div class=rouge>pseudo not filled</div>';
259                                                                }
260                                                                else if (Reponse.ERR == 12) {
261                                                                        message = '<div class=rouge>password not filled</div>';
262                                                                }
263                                                                else if (Reponse.ERR == 17) {
264                                                                        message = '<div class=rouge>Comment not filled</div>';
265                                                                }
266                                                                $('affierr1').innerHTML = '';
267                                                        }
268                                                        else if (inscrit == 0) {
269                                                                if (Reponse.ERR == 13) {
270                                                                        message = '<div class=rouge>Mail not filled</div>';
271                                                                }
272                                                                else if (Reponse.ERR == 14) {
273                                                                        message = '<div class=rouge>Incorrect mail</div>';
274                                                                }
275                                                                else if (Reponse.ERR == 15) {
276                                                                        message = '<div class=rouge>Incorrect pseudo</div>';
277                                                                }
278                                                                else if (Reponse.ERR == 17) {
279                                                                        message = '<div class=rouge>message not filled</div>';
280                                                                }
281                                                                else if (Reponse.ERR == 18) {
282                                                                        message = '<div class=rouge>The code isn\'t correctly typed </div>';
283                                                                }
284                                                                $('affierr2').innerHTML = '';
285                                                        }
286                                                }
287
288                                        }
289
290                                },
291                                onComplete: function (xhr, json) {
292                                        if (inscrit == 0) {
293                                                if ($('panneau2')) {
294                                                        $('panneau2').setOpacity(1);
295                                                        $('affierr2').innerHTML = message;
296                                                }
297                                                if ($('Inscr_simp2')) {
298                                                        $('Inscr_simp2').disabled = false;
299                                                }
300                                        }
301                                        else if (inscrit == 1) {
302                                                if ($('panneau1')) {
303                                                        $('panneau1').setOpacity(1);
304                                                        $('affierr1').innerHTML = message;
305                                                }
306                                                if ($('Inscr_simp1')) {
307                                                        $('Inscr_simp1').disabled = false;
308                                                }
309                                        }
310                                        else if (inscrit == 2) {
311                                                if (('input_' + Pere_ID)) {
312                                                        $('input_' + Pere_ID).disabled = false;
313                                                }
314                                                // Requête totalement terminée
315                                        }
316
317                                }
318                        }
319                );
320
321        }
322
323}
324*/
325
326
327function update_commentaire_partition(ID) {
328        raison = '';
329        erreur = 0;
330
331        if (raison != '') {
332
333                message = 'Please correct the following point to continue :\n';
334
335                message = message + raison;
336                alert(message);
337
338        }
339
340        if (erreur == 0) {
341                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
342
343                Params = new Hash();
344
345 //               var reg = new RegExp("(\n)", "g");
346
347                Params.set('comment_ajax', comment_ajax);
348                Params.set('type', 5);
349                Params.set('ID', ID);
350                Params.set('pdf', $('pdf').value);
351                Params.set('comment', encodeURIComponent($('textarea_' + ID).value));
352
353                var myAjax = new Ajax.Request(
354                        url,
355                        {
356                                method: 'POST',
357                                evalScripts: false,
358                                parameters: Params,
359                                onLoading: function (xhr) { // Après appel méthode open
360
361                                },
362                                onFailure: function (xhr) { // Réponse HTTP != 2xx
363                                },
364                                onSuccess: function (xhr) {
365                                        Update = xhr.responseText;
366                                        if (ID) {
367                                                $('message_contenu_' + ID).innerHTML = Update;
368                                        }
369
370                                }
371
372                        }
373                );
374
375        }
376
377}
378
379function suivi_discussion(Message_ID, etat) {
380                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
381
382        Params = new Hash();
383
384        if (etat) {
385                etat = 1;
386                inv = 0;
387                Params.set('type', 7);
388        }
389        else {
390                etat = 0;
391                inv = 1;
392                Params.set('type', 6);
393        }
394        Params.set('ID', Message_ID);
395
396        cache = $('suivi_disc_' + Message_ID + '_' + inv).innerHTML;
397
398        var myAjax = new Ajax.Request(
399                url,
400                {
401                        method: 'POST',
402                        evalScripts: false,
403                        parameters: Params,
404                        onLoading: function (xhr) {
405                                $('suivi_disc_' + Message_ID + '_' + inv).innerHTML = "<img src='https://img.free-scores.com/IMAGES/ajax-loader.gif' width='15' />";
406                        },
407                        onFailure: function (xhr) { // Réponse HTTP != 2xx
408                        },
409                        onSuccess: function (xhr) {
410                                res = xhr.responseText;
411                                if (res == 'ok') {
412                                        if (etat) {
413                                                $('suivi_disc_' + Message_ID + '_' + inv).innerHTML = cache;
414                                                $('suivi_disc_' + Message_ID + '_1').show();
415                                                $('suivi_disc_' + Message_ID + '_0').hide();
416                                                //$('suivi_disc_' + Message_ID + '_' + etat).fade({ 'duration' : 1 });
417                                        }
418                                        else {
419                                                $('suivi_disc_' + Message_ID + '_' + inv).innerHTML = cache;
420                                                $('suivi_disc_' + Message_ID + '_1').hide();
421                                                $('suivi_disc_' + Message_ID + '_0').show();
422                                                //$('neplussuivre_' +  Message_ID).fade({ 'duration' : 1 });
423                                        }
424
425                                        UnTip();
426                                }
427
428                        }
429
430                }
431        );
432}
433
434function suivi_membrediscussion(Membre_ID, etat) {
435                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
436
437        Params = new Hash();
438
439        if (etat) {
440                etat = 1;
441                inv = 0;
442                Params.set('type', 11);
443        }
444        else {
445                etat = 0;
446                inv = 1;
447                Params.set('type', 10);
448        }
449        Params.set('Membre_ID_PC', Membre_ID);
450
451        cache = $('suivi_memdisc_' + Membre_ID + '_' + inv).innerHTML;
452
453        var myAjax = new Ajax.Request(
454                url,
455                {
456                        method: 'POST',
457                        evalScripts: false,
458                        parameters: Params,
459                        onLoading: function (xhr) {
460                                $('suivi_memdisc_' + Membre_ID + '_' + inv).innerHTML = "<img src='https://img.free-scores.com/IMAGES/ajax-loader.gif' width='15' />";
461                        },
462                        onFailure: function (xhr) { // Réponse HTTP != 2xx
463                        },
464                        onSuccess: function (xhr) {
465                                res = xhr.responseText;
466                                if (res == 'ok') {
467                                        if (etat) {
468                                                $('suivi_memdisc_' + Membre_ID + '_' + inv).innerHTML = cache;
469                                                $('suivi_memdisc_' + Membre_ID + '_1').show();
470                                                $('suivi_memdisc_' + Membre_ID + '_0').hide();
471                                        }
472                                        else {
473                                                $('suivi_memdisc_' + Membre_ID + '_' + inv).innerHTML = cache;
474                                                $('suivi_memdisc_' + Membre_ID + '_1').hide();
475                                                $('suivi_memdisc_' + Membre_ID + '_0').show();
476                                        }
477
478                                        UnTip();
479                                }
480
481                        }
482
483                }
484        );
485}
486
487function suivi_partition_discussion(Partition_ID, etat) {
488                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
489
490        Params = new Hash();
491
492        if (etat) {
493                etat = 1;
494                inv = 0;
495                Params.set('type', 9);
496        }
497        else {
498                etat = 0;
499                inv = 1;
500                Params.set('type', 8);
501        }
502        Params.set('ID', Partition_ID);
503
504        cache = $('suivi_partdisc_' + Partition_ID + '_' + inv).innerHTML;
505
506        var myAjax = new Ajax.Request(
507                url,
508                {
509                        method: 'POST',
510                        evalScripts: false,
511                        parameters: Params,
512                        onLoading: function (xhr) {
513                                $('suivi_partdisc_' + Partition_ID + '_' + inv).innerHTML = "<img src='https://img.free-scores.com/IMAGES/ajax-loader.gif' width='15' />";
514                        },
515                        onFailure: function (xhr) { // Réponse HTTP != 2xx
516                        },
517                        onSuccess: function (xhr) {
518                                res = xhr.responseText;
519                                if (res == 'ok') {
520                                        if (etat) {
521                                                $('suivi_partdisc_' + Partition_ID + '_' + inv).innerHTML = cac
521he;
522                                                $('suivi_partdisc_' + Partition_ID + '_1').show();
523                                                $('suivi_partdisc_' + Partition_ID + '_0').hide();
524                                        }
525                                        else {
526                                                $('suivi_partdisc_' + Partition_ID + '_' + inv).innerHTML = cache;
527                                                $('suivi_partdisc_' + Partition_ID + '_1').hide();
528                                                $('suivi_partdisc_' + Partition_ID + '_0').show();
529                                        }
530
531                                        UnTip();
532                                }
533
534                        }
535
536                }
537        );
538}
539
540function gestionClic_comment(start, ordrepar) {
541        var compteurRequetesEnCours = 0;
542                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
543
544        Params = new Hash();
545
546        if ($('pdf')) {
547                Params.set('pdf', $('pdf').value);
548        }
549
550        if ($('langue_site')) {
551                Params.set('langue_site', $('langue_site').value);
552        }
553
554        if ($('verbose')) {
555                Params.set('verbose', $('verbose').value);
556        }
557
558        if ($('nombre_avis')) {
559                Params.set('nombre_avis', $('nombre_avis').value);
560        }
561
562        Params.set('start', start);
563        Params.set('ordrepar', ordrepar);
564
565        var myAjax = new Ajax.Request(
566                url,
567                {
568                        parameters: Params,
569                        evalScripts: false,
570                        method: 'post',
571                        onLoading: function (xhr) {
572                                Element.show('chargement_comment');
573                                compteurRequetesEnCours++;
574                        },
575                        onSuccess: function (xhr) {
576                                Add = xhr.responseText;
577                                if (start) {
578                                        $('resultat_comment').insert({ bottom: Add });
579                                }
580                                else {
581                                        $('resultat_comment').innerHTML = Add;
582                                }
583
584                                if (Add) {
585
586                                }
587                                else {
588                                        $('more_comment').innerHTML = "";
589                                }
590
591                        },
592
593                        onComplete: function () {
594                                if (!--compteurRequetesEnCours) {
595                                        Element.hide('chargement_comment');
596                                }
597
598                        }
599                });
600}
601
602/*
603var modifier_commentaire = function (ID) {
604
605        if (!$('textarea_' + ID)) {
606                Params = new Hash();
607
608                Params.set('ID', ID);
609                Params.set('type', 2);
610
611                cache = $('message_contenu_' + ID).innerHTML;
612
613                //Params.set('comment', encodeURIComponent($('textarea_' + ID).value.replace(reg,":;:;:")));
614                var reg = new RegExp("(<br>)", "g");
615                var reg2 = /<span itemprop="description">(.*)<\/span>/g;
616
617                $('message_contenu_' + ID).innerHTML = "<textarea cols=40 rows=4 id='textarea_" + ID + "'>" + cache.replace(reg2, "$1").replace(reg, "\n") + "</textarea><br /><input type=button name='change' value='change' onClick=\"update_commentaire_partition(" + ID + " );return false;\" /> or <a href='#' onClick=\"$('message_contenu_' + " + ID + ").innerHTML=decodeURIComponent('" + encodeURIComponent(cache).replace(/'/g, "%27") + "');return false;\">Cancel</a> ";
618
619        }
620
621}
622*/
623
624var supprimer_commentaire_partition = function (ID) {
625
626        if (confirm('Are you sure to delete this comment ?')) {
627                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
628
629                Params = new Hash();
630
631                Params.set('type', 3);
632                Params.set('ID', ID);
633                Params.set('pdf', $('pdf').value);
634
635                var myAjax = new Ajax.Request(
636                        url,
637                        {
638                                method: 'POST',
639                                evalScripts: false,
640                                parameters: Params,
641                                onLoading: function (xhr) { // Après appel méthode open
642
643                                },
644                                onFailure: function (xhr) { // Réponse HTTP != 2xx
645
646                                },
647                                onSuccess: function (xhr) {
648                                        Resultat = xhr.responseText;
649                                        if (Resultat == 'ok') {
650                                                if ($('entete_' + ID)) {
651                                                        $('entete_' + ID).fade({ 'duration': 2 });
652                                                }
653                                                $('message_' + ID).fade({ 'duration': 2 });
654                                        }
655                                        else {
656
657                                        }
658
659                                },
660                                onComplete: function (xhr, json) {
661
662                                }
663                        }
664                );
665
666        }
667
668}
669
670var valider_commentaire_partition = function (ID) {
671
672                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
673
674        Params = new Hash();
675
676        Params.set('type', 4);
677        Params.set('ID', ID);
678        Params.set('pdf', $('pdf').value);
679
680        var myAjax = new Ajax.Request(
681                url,
682                {
683                        method: 'POST',
684                        evalScripts: false,
685                        parameters: Params,
686                        onLoading: function (xhr) { // Après appel méthode open
687                                //	$('chargement_comment_' + Pere_ID).show();
688
689                        },
690                        onFailure: function (xhr) { // Réponse HTTP != 2xx
691                                //		$('Etat_MJ').innerHTML = '<img src=\"//img.dailyfriends.com/point_rouge.png\" />';
692
693                        },
694                        onSuccess: function (xhr) {
695                                Resultat = xhr.responseText;
696                                if (Resultat == 'ok') {
697                                        $('nouveau_' + ID).innerHTML = ' <span style="color:#339933;">validated</span> ';
698                                        $('nouveau_' + ID).fade({ 'duration': 2 });
699                                        $('message_contenu_' + ID).style.backgroundColor = '#FFF';
700                                        UnTip();
701                                }
702
703                        }
704
705                }
706        );
707
708}
709
710function popup_signin(event) {
711
712        a = event.memo.identity.split('_');
713
714        if (document.location.host == 'm.free-scores.com') {
715                var url = '//m.free-scores.com/espace-membres-uk/index.php?modal=1';
716        }
717        else {
718                var url = '//www.free-scores.com/espace-membres-uk/index.php?modal=1';
719        }
720
721        if (a[0] == 'difficulty' || a[0] == 'starrating') {
722                if (a[3]) {
723                        url = url + '&url=' + encodeURIComponent('https://www.free-scores.com/sheetmusic?p=' + a[3]);
724                }
725                else {
726                        url = url + '&url=' + encodeURIComponent('https://www.free-scores.com/download-sheet-music.php?pdf=' + a[2]);
727                }
728        }
729
730        //	alert(url);
731        return hs.htmlExpand(this, { src: url, objectType: 'iframe', width: 900, height: 490, anchor: 'left', align: 'center', headingText: 'Please login or sign up' });
732
733}
734
735function starboxRatedText(event) {
736        var indicator = this.down('.indicator');
737        var url = '//www.free-scores.com/ajax/starrating_ajax_uk.php';
738
739        var myAjax = new Ajax.Request(url, {
740                parameters: event.memo,
741                onComplete: function () { $('bcs').show(); },
742                onFailure: function () { },
743                onLoading: function () { }
744        });
745
746
747        this.starboxResetText = 'Thank for rating!';
748}
749
750function starboxRatedText2(event) {     // sur include_haut_fr_jaune.php
751        var indicator = this.down('.indicator');
752        var url = '//www.free-scores.com/ajax/starrating_ajax_uk.php';
753
754        var myAjax = new Ajax.Request(url, {
755                parameters: event.memo,
756                onSuccess: function (xhr) {
757                        var res = event.memo.identity.split("_");
758                        Add = xhr.responseText;
759
760                        if (!Add) {
761                                $(event.memo.identity).starboxResetText = 'Thank you for your contribution!';
762                                $(event.memo.identity).down('.indicator').update('Thank you for your contribution!');
763                        }
764                        else if (Add == 1) {
765                                var request_uri = location.pathname + location.search;
766                                $(event.memo.identity).starboxResetText = '<a href="https://www.free-scores.com/espace-membres-uk/?starrating=' + res[2] + '&rated=' + event.memo.rated + '&url=https://www.free-scores.com' + request_uri + '" class="dp">Login to contribute!</a>';
767                                        $(event.memo.identity).down('.indicator').update('<a href="https://www.free-scores.com/espace-membres-uk/?starrating=' + res[2] + '&rated=' + event.memo.rated + '&url=https://www.free-scores.com' + request_uri + '" class="dp">Login to contribute!</a>');
768
769
770                        }
771                        else if (Add == 2) {
772                                $(event.memo.identity).starboxResetText = 'Unable to rate your own scores!';
773                                $(event.memo.identity).down('.indicator').update('Unable to rate your own scores!');
774                        }
775                },
776                onComplete: function () { $('bcs').show(); },
777                onFailure: function () { },
778                onLoading: function () { }
779        });
780
781        //this.starboxResetText = 'Merci pour votre contribution!';
782
783}
784
785function starboxLeftText() {
786        this.down('.indicator').update(this.starboxResetText || '');
787}
788
789function diffboxRatedText(event) {
790        var indicator = this.down('.indicator');
791        //  this.starboxResetText = indicator.innerHTML;
792        var url = '//www.free-scores.com/ajax/difficulty_ajax_uk.php';
793
794        var myAjax = new Ajax.Request(url, {
795                parameters: event.memo,
796                onComplete: function () { $('bcd').show(); },
797                onFailure: function () { },
798                onLoading: function () { }
799        });
800
801
802        this.starboxResetText = 'Thank for rating!';
803}
804// here we restore the indicator on mouseout, if needed
805function starboxLeftText() {
806        this.down('.indicator').update(this.starboxResetText || '');
807}
808
809function starboxChangedText(event) {
810        var indicator = this.down('.indicator'),
811                pick = (event.memo.rating || 0).round() - 1,
812                indicator = this.down('.indicator');
813
814        // for restoring, store the indicator text on the star if it was not set before.
815        this.starboxResetText = this.starboxResetText || indicator.innerHTML;
816
817        this.down('.indicator').update([
818                'Poor',
819                'Nothing special',
820                'Worth watching',
821                'Pretty cool',
822                'Awesome!'
823        ][pick]);
824}
825
826function diffboxChangedText(event) {
827        var indicator = this.down('.indicator'),
828                pick = (event.memo.rating || 0).round() - 1,
829                indicator = this.down('.indicator');
830
831        // for restoring, store the indicator text on the star if it was not set before.
832        this.starboxResetText = this.starboxResetText || indicator.innerHTML;
833
834        this.down('.indicator').update([
835                'Very easy',
836                'easy',
837                'medium',
838                'Hard',
839                'Very hard'
840        ][pick]);
841}
842
843function commentaire_rapide(Partition_ID, Message_ID, Contenu) {
844
845        if ($('CR_IHM').innerHTML == '') {
846                Temp = '<div style="text-align:left;padding:8px;">';
847
848                Temp += '<b>';
849                Temp += 'Write a comment on this sheet music';
850                Temp += '</b>';
851
852                Temp += '</div>';
853
854                Temp += '<div  style="text-align:center;">';
855
856                Temp += '<textarea id="RR_Message" style="resize:vertical; max-height:400px; min-height:150px;min-width:350px;"></textarea>';
857                Temp += '</div>';
858                Temp += '<input id="suivi" type="checkbox" value=1 checked />\n';
859
860                Temp += '<label for="suivi"><font class=dp>follow this topic</font></label>\n';
861                Temp += '<br />';
862                Temp += '<div id="choix" style="text-align:center;">';
863                Temp += '<input type="button" id="newmessagesubmit" ';
864                Temp += 'value="Send"';
865                Temp += ' onClick="validation_RRJ();" /> ';
866                Temp += 'or';
867                Temp += ' <a href="#" onClick="RR_fermer_fenetre();return false;">';
868                Temp += 'cancel';
869                Temp += '</a>';
870                Temp += '<span id="wait">';
871                Temp += '</span>';
872                Temp += '';
873                Temp += '</div>';
874
875
876                $('CR_IHM').innerHTML = Temp;
877        }
878
879        if ($('CR_IHM').visible()) {
880                RR_fermer_fenetre();
881        }
882        else {
883                $('CR_IHM').show();
884        }
885
886}
887
888function RR_fermer_fenetre() {
889        $('CR_IHM').innerHTML = '';
890        $('CR_IHM').hide();
891}
892
893function validation_RRJ() {
894        raison = '';
895        erreur = 0;
896
897        check_message($('RR_Message'));
898
899        if (raison != '') {
900
901                message = 'Please correct the following point to continue :\n';
902
903                message = message + raison;
904                alert(message);
905
906        }
907
908        if (erreur == 0) {
909                var url = '//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php';
910
911                Params = new Hash();
912
913//                var reg = new RegExp("(\n)", "g");
914                Contenu = encodeURIComponent($('RR_Message').value);
915
916                Params.set('comment_ajax', comment_ajax);
917                Params.set('inscrit', 2);
918                Params.set('type', 1);
919                if ($('suivi').checked) Params.set('suivi', 1);
920                else
921                        Params.set('suivi', 0);
922                Params.set('Pere_ID', 0);
923                Params.set('pdf', $('clef_part').value);
924                Params.set('comment', Contenu);
925
926                var myAjax = new Ajax.Request(url,
927                        {
928                                method: 'POST',
929                                evalScripts: false,
930                                parameters: Params,
931                                onLoading: function (xhr) { // Après appel méthode open
932                                        $('newmessagesubmit').disabled = true;
933                                        $('wait').innerHTML = '<img src="https://img.free-scores.com/IMAGES/ajax-loader.gif" width=15 />';
934                                        $('choix').setOpacity(0.5);
935                                },
936                                onFailure: function (xhr) { // Réponse HTTP != 2xx
937                                        //              $('Etat_MJ').innerHTML = '<img src=\"<? echo $CONFIG['base_url_IMG'];?>/point_rouge.png\" />';
938                                        $('CR_IHM').innerHTML = '<div class="rouge">Bug : your comment hasn\'t be added</div>';
939                                        $('CR_IHM').fade({ duration: 2, from: 1, to: 0 });
940
941                                },
942                                onSuccess: function (xhr) {
943                                        $('CR_IHM').innerHTML = '<div class="vert">Your comment has been added</div>';
944                                        $('CR_IHM').fade({ duration: 2, from: 1, to: 0 });
945                                },
946                                onComplete: function (xhr, json) { // Requête totalement terminée
947                                        $('newmessagesubmit').disabled = false;
948                                        $('wait').innerHTML = '';
949                                        $('choix').setOpacity(1);
950
951                                }
952                        }
953                );
954
955        }
956
957}
958
959function check_message(box_Message) {
960
961        if (box_Message.value == '') {
962                raison = raison + " - Your message is empty !\n";
963                box_Message.className = 'form_en_rouge';
964                erreur++;
965        }
966        else {
967                box_Message.className = '';
968        }
969}
970
971function check_titre(box_Message) {
972
973        if (box_Message.value == '') {
974                raison = raison + " - Your title is empty !\n";
975                box_Message.className += ' form_en_rouge';
976                erreur++;
977        }
978        else {
979                box_Message.className = '';
980        }
981}
982
983var ResizingTextArea = Class.create();
984
985ResizingTextArea.prototype = {
986        defaultRows: 1,
987
988        initialize: function (field) {
989                this.defaultRows = Math.max(field.rows, 1);
990                this.resizeNeeded = this.resizeNeeded.bindAsEventListener(this);
991                Event.observe(field, "click", this.resizeNeeded);
992                Event.observe(field, "keyup", this.resizeNeeded);
993        },
994
995        resizeNeeded: function (event) {
996                var t = Event.element(event);
997                var lines = t.value.split('\n');
998                var newRows = lines.length + 1;
999                var oldRows = t.rows;
1000                for (var i = 0; i < lines.length; i++) {
1001                        var line = lines[i];
1002                        if (line.length >= t.cols) newRows += Math.floor(line.length / t.cols);
1003                }
1004                if (newRows > t.rows) t.rows = newRows;
1005                if (newRows < t.rows) t.rows = Math.max(this.defaultRows, newRows);
1006        }
1007}
1008
1009function validation_MP(Avectitre) {
1010        raison = '';
1011        erreur = 0;
1012        //      alert(document.forms.formulaire_newmessage.Message.value);
1013        if (Avectitre) check_titre(document.forms.formulaire_newmessage.Titre);
1014        check_message(document.forms.formulaire_newmessage.Message);
1015
1016        if (raison != '' && erreur > 0) {
1017                message = 'Please check these verifications in order to continue :\n';
1018
1019                message = message + raison;
1020                alert(message);
1021
1022        }
1023
1024        if (erreur == 0) {
1025                $('newmessagesubmit').disabled = true;
1026                $('newmessagesubmit').value = 'Sending in progress...';
1027                $('newmessagesubmit').pulsate();
1028                document.forms.formulaire_newmessage.submit();
1029        }
1030
1031}
1032
1033function CheckAllINBOX() {
1034
1035        IN = document.FormMsgsINBOX.check_all.checked;
1036
1037        for (var i = 0; i < document.FormMsgsINBOX.elements.length; i++) {
1038                if (document.FormMsgsINBOX.elements[i].value == 1) {
1039                        document.FormMsgsINBOX.elements[i].checked = IN;
1040                        new Effect.Highlight(document.FormMsgsINBOX.elements[i].parentNode, { startcolor: '#ffff99', endcolor: '#F5F5F5' });
1041                }
1042        }
1043
1044}
1045
1046function ouvrirModalCommentaire() {
1047    var modal = document.getElementById('modal-commentaire');
1048    if (!modal) return;
1049//    document.getElementById('modal-reponse-0').value = '';
1050    document.getElementById('modal-char-count').textContent = '0 character';
1051    document.getElementById('modal-erreur').style.display = 'none';
1052    modal.style.display = 'flex';
1053    setTimeout(function() {
1054        document.getElementById('modal-reponse-0').focus();
1055    }, 80);
1056    document.addEventListener('keydown', modalKeyHandler);
1057}
1058
1059function fermerModalCommentaire() {
1060    var modal = document.getElementById('modal-commentaire');
1061    if (modal) modal.style.display = 'none';
1062    document.removeEventListener('keydown', modalKeyHandler);
1063}
1064
1065function modalKeyHandler(e) {
1066    if (e.key === 'Escape') fermerModalCommentaire();
1067}
1068
1069function modalUpdateCount(ta) {
1070    var n = ta.value.length;
1071    var el = document.getElementById('modal-char-count');
1072    if (el) el.textContent = n + (n > 1 ? ' characters' : ' character');
1073}
1074
1075
1076function modalSoumettreCommentaire() {
1077    var ta       = document.getElementById('modal-reponse-0');
1078    var errEl    = document.getElementById('modal-erreur');
1079    var btn      = document.getElementById('modal-submit-btn');
1080    var loader   = document.getElementById('modal-loader');
1081    var label    = document.getElementById('modal-submit-label');
1082
1083    errEl.style.display = 'none';
1084
1085    if (!ta.value.trim()) {
1086        errEl.textContent = 'Votre commentaire est vide.';
1087        errEl.style.display = 'block';
1088        ta.focus();
1089        return;
1090    }
1091
1092    var clefPart = document.getElementById('modal-clef-part')
1093                || document.getElementById('clef_part_0');
1094    if (!clefPart || !clefPart.value) {
1095        errEl.textContent = 'Error : Sheet music not found.';
1096        errEl.style.display = 'block';
1097        return;
1098    }
1099
1100    var suivi = document.getElementById('modal-suivi-0');
1101
1102    btn.disabled = true;
1103    label.textContent = 'In progress…';
1104    loader.style.display = 'inline';
1105
1106//  var reg = new RegExp("(\n)", "g");
1107    var contenu = encodeURIComponent(ta.value);
1108
1109    var Params = new Hash();
1110    Params.set('comment_ajax', comment_ajax);
1111    Params.set('type', 1);
1112    Params.set('suivi', (suivi && suivi.checked) ? 1 : 0);
1113    Params.set('Pere_ID', 0);
1114    Params.set('pdf', clefPart.value);
1115    Params.set('comment', contenu);
1116
1117    new Ajax.Request('//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php', {
1118        method: 'POST',
1119        evalScripts: false,
1120        parameters: Params,
1121
1122        onSuccess: function(xhr) {
1123            try {
1124                var Reponse = JSON.parse(xhr.responseText);
1125                if (Reponse.ERR == 0) {
1126                    // Vider le textarea et fermer
1127                    ta.value = '';
1128                    document.getElementById('modal-char-count').textContent = '0 character';
1129                    fermerModalCommentaire();
1130
1131                    // Rafraîchir la liste des commentaires
1132                    gestionClic_comment(0, 'new');
1133
1134                    // Afficher le bandeau de confirmation si présent
1135                    var apres = $('ajout_comment_apres');
1136                    if (apres) {
1137                        apres.show();
1138                        if (apres.highlight) {
1139                            apres.highlight({
1140                                startcolor: '#99CC99',
1141                                endcolor:   '#FFFBEA',
1142                                restorecolor: '#FFFBEA',
1143                                duration: 1
1144                            });
1145                        }
1146                    }
1147
1148                    comment_ajax++;
1149                } else {
1150                    errEl.textContent = 'Error : comment not sent.';
1151                    errEl.style.display = 'block';
1152                }
1153
1154} catch(e) {
1155                errEl.textContent = 'Invalid server response.';
1156                errEl.style.display = 'block';
1157            }
1158        },
1159
1160        onFailure: function(xhr) {
1161            errEl.textContent = 'Network error (' + xhr.status + '). Please try again.';
1162            errEl.style.display = 'block';
1163        },
1164
1165        onComplete: function() {
1166            btn.disabled = false;
1167            label.textContent = 'Poster';
1168            loader.style.display = 'none';
1169        }
1170    });
1171}
1172
1173// Fermer le modal en cliquant sur l'overlay
1174document.addEventListener('DOMContentLoaded', function() {
1175    var modal = document.getElementById('modal-commentaire');
1176    if (modal) {
1177        modal.addEventListener('click', function(e) {
1178            if (e.target === modal) fermerModalCommentaire();
1179        });
1180    }
1181});
1182
1183
1184function ouvrirModalReponse(pereId, pseudoCible) {
1185    var modal = document.getElementById('modal-reponse');
1186    if (!modal) return;
1187
1188    // Mémoriser le Pere_ID
1189    document.getElementById('modal-reponse-pere-id').value = pereId;
1190
1191    // Afficher le destinataire dans le titre
1192    var dest = document.getElementById('modal-reponse-destinataire');
1193    if (dest) dest.textContent = pseudoCible || '';
1194
1195    // Chercher le texte du commentaire parent pour la citation
1196    var citation = document.getElementById('modal-reponse-citation');
1197    var contenuParent = document.getElementById('message_contenu_' + pereId);
1198    if (citation && contenuParent) {
1199        var html = contenuParent.innerHTML
1200        .replace(/<br\s*\/?>/gi, '\n')   // <br> → saut de ligne réel
1201        .replace(/<[^>]+>/g, '')          // strip toutes les autres balises
1202        .trim();
1203
1204    if (html) {
1205        // Réinjecter avec de vrais <br> pour l'affichage
1206        var htmlAvecBr = html
1207            .substring(0, 200)
1208            .replace(/\n/g, '<br>')
1209            + (html.length > 200 ? '…' : '');
1210
1211        citation.innerHTML = htmlAvecBr;
1212        citation.style.display = 'block';
1213    } else {
1214        citation.style.display = 'none';
1215    }
1216
1217    }
1218    // Reset
1219    document.getElementById('modal-reponse-textarea').value = '';
1220    document.getElementById('modal-reponse-char-count').textContent = '0 character';
1221    document.getElementById('modal-reponse-erreur').style.display = 'none';
1222
1223    modal.style.display = 'flex';
1224    setTimeout(function() {
1225        document.getElementById('modal-reponse-textarea').focus();
1226    }, 80);
1227    document.addEventListener('keydown', modalReponseKeyHandler);
1228}
1229
1230function fermerModalReponse() {
1231    var modal = document.getElementById('modal-reponse');
1232    if (modal) modal.style.display = 'none';
1233    document.removeEventListener('keydown', modalReponseKeyHandler);
1234}
1235
1236function modalReponseKeyHandler(e) {
1237    if (e.key === 'Escape') fermerModalReponse();
1238}
1239
1240function modalReponseUpdateCount(ta) {
1241    var n = ta.value.length;
1242    var el = document.getElementById('modal-reponse-char-count');
1243    if (el) el.textContent = n + (n > 1 ? ' characters' : ' character');
1244}
1245
1246function modalSoumettreReponse() {
1247    var ta      = document.getElementById('modal-reponse-textarea');
1248    var errEl   = document.getElementById('modal-reponse-erreur');
1249    var btn     = document.getElementById('modal-reponse-submit-btn');
1250    var loader  = document.getElementById('modal-reponse-loader');
1251    var label   = document.getElementById('modal-reponse-submit-label');
1252    var pereId  = document.getElementById('modal-reponse-pere-id').value;
1253    var clefPart= document.getElementById('modal-reponse-clef-part').value
1254                || (document.getElementById('clef_part_0') && document.getElementById('clef_part_0').value)
1255                || (document.getElementById('pdf') && document.getElementById('pdf').value);
1256
1257    errEl.style.display = 'none';
1258
1259    if (!ta.value.trim()) {
1260        errEl.textContent = 'Your answer is empty.';
1261        errEl.style.display = 'block';
1262        ta.focus();
1263        return;
1264    }
1265    if (!pereId || !clefPart) {
1266        errEl.textContent = 'Error: missing data.';
1267        errEl.style.display = 'block';
1268        return;
1269    }
1270
1271    btn.disabled = true;
1272    label.textContent = 'In progress…';
1273    loader.style.display = 'inline';
1274
1275//    var reg = new RegExp("(\n)", "g");
1276    var contenu = encodeURIComponent(ta.value);
1277
1278    var Params = new Hash();
1279    Params.set('comment_ajax', comment_ajax);
1280    Params.set('type', 1);
1281    Params.set('Pere_ID', pereId);
1282    Params.set('pdf', clefPart);
1283    Params.set('comment', contenu);
1284
1285    new Ajax.Request('//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php', {
1286        method: 'POST',
1287        evalScripts: false,
1288        parameters: Params,
1289
1290        onSuccess: function(xhr) {
1291            // La réponse est du HTML brut (pas JSON) quand Pere_ID > 0
1292            var html = xhr.responseText;
1293            if (html) {
1294                // Rafraîchir la liste des commentaires
1295                    gestionClic_comment(0, 'new');
1296                ta.value = '';
1297                fermerModalReponse();
1298            } else {
1299                errEl.textContent = 'Error: Response not sent.';
1300                errEl.style.display = 'block';
1301            }
1302        },
1303
1304onFailure: function(xhr) {
1305            errEl.textContent = 'Network error(' + xhr.status + '). Please try again.';
1306            errEl.style.display = 'block';
1307        },
1308
1309        onComplete: function() {
1310            btn.disabled = false;
1311            label.textContent = 'Resply';
1312            loader.style.display = 'none';
1313        }
1314    });
1315}
1316
1317// Ouvrir le modal de modification
1318function ouvrirModalModification(ID) {
1319    var modal = document.getElementById('modal-modification');
1320
1321    // Récupérer le contenu actuel du commentaire
1322    var contenuEl = document.getElementById('message_contenu_' + ID);
1323    if (!contenuEl) return;
1324
1325    // Convertir les <br> en sauts de ligne pour le textarea
1326    var html = contenuEl.innerHTML;
1327    var texte = html
1328        .replace(/<[^>]+>/g, '')   // strip les autres balises éventuelles
1329        .trim();
1330//        .replace(/<br\s*\/?>/gi, '\n')
1331
1332    document.getElementById('modal-modification-textarea').value = texte;
1333    document.getElementById('modal-modification-id').value = ID;
1334    document.getElementById('modal-modification-char-count').textContent = texte.length + (texte.length > 1 ? ' characters' : ' character');
1335    document.getElementById('modal-modification-erreur').style.display = 'none';
1336
1337    modal.style.display = 'flex';
1338    setTimeout(function() {
1339        var ta = document.getElementById('modal-modification-textarea');
1340        ta.focus();
1341        ta.setSelectionRange(ta.value.length, ta.value.length);
1342    }, 80);
1343    document.addEventListener('keydown', modalModificationKeyHandler);
1344}
1345
1346function fermerModalModification() {
1347    var modal = document.getElementById('modal-modification');
1348    if (modal) modal.style.display = 'none';
1349    document.removeEventListener('keydown', modalModificationKeyHandler);
1350}
1351
1352function modalModificationKeyHandler(e) {
1353    if (e.key === 'Escape') fermerModalModification();
1354}
1355
1356function modalModificationUpdateCount(ta) {
1357    var n = ta.value.length;
1358    var el = document.getElementById('modal-modification-char-count');
1359    if (el) el.textContent = n + (n > 1 ? ' characters' : ' character');
1360}
1361
1362function modalSoumettreModification() {
1363    var ta     = document.getElementById('modal-modification-textarea');
1364    var errEl  = document.getElementById('modal-modification-erreur');
1365    var btn    = document.getElementById('modal-modification-submit-btn');
1366    var loader = document.getElementById('modal-modification-loader');
1367    var label  = document.getElementById('modal-modification-submit-label');
1368    var ID     = document.getElementById('modal-modification-id').value;
1369    var clefPart = (document.getElementById('pdf') && document.getElementById('pdf').value)
1370                || (document.getElementById('clef_part_0') && document.getElementById('clef_part_0').value);
1371
1372    errEl.style.display = 'none';
1373
1374    if (!ta.value.trim()) {
1375        errEl.textContent = 'The comment cannot be empty.';
1376        errEl.style.display = 'block';
1377        ta.focus();
1378        return;
1379    }
1380    if (!ID || !clefPart) {
1381        errEl.textContent = 'Error: missing data.';
1382        errEl.style.display = 'block';
1383        return;
1384    }
1385
1386    btn.disabled = true;
1387    label.textContent = 'In progress…';
1388    loader.style.display = 'inline';
1389
1390//    var reg = new RegExp("(\n)", "g");
1391//  var contenu = encodeURIComponent(ta.value.replace(reg, ":;:;:"));
1392    var contenu = encodeURIComponent(ta.value);
1393
1394    var Params = new Hash();
1395    Params.set('type', 5);
1396    Params.set('ID', ID);
1397    Params.set('pdf', clefPart);
1398    Params.set('comment', contenu);
1399
1400    new Ajax.Request('//www.free-scores.com/ajax/commentaire_partitions_ajax_uk.php', {
1401        method: 'POST',
1402        evalScripts: false,
1403        parameters: Params,
1404
1405        onSuccess: function(xhr) {
1406            var html = xhr.responseText;
1407            if (html !== null && html !== undefined) {
1408                // Mettre à jour le contenu affiché sans rechargement
1409                var contenuEl = document.getElementById('message_contenu_' + ID);
1410                if (contenuEl) {
1411                    contenuEl.innerHTML = '<span class="d">' + html + '</span>';
1412
1413                    // Flash visuel pour signaler la modification
1414                    if (typeof Effect !== 'undefined') {
1415                        new Effect.Highlight('message_contenu_' + ID, {
1416                            startcolor: '#fffbcc',
1417                            endcolor:   '#ffffff',
1418                            duration:   1.2
1419                        });
1420                    }
1421                }
1422                fermerModalModification();
1423            } else {
1424                errEl.textContent = 'Error: change not saved.';
1425                errEl.style.display = 'block';
1426            }
1427        },
1428
1429        onFailure: function(xhr) {
1430            errEl.textContent = 'Network error (' + xhr.status + '). Please try again.';
1431            errEl.style.display = 'block';
1432        },
1433
1434onComplete: function() {
1435            btn.disabled = false;
1436            label.textContent = 'Save';
1437            loader.style.display = 'none';
1438        }
1439    });
1440}
1441
1442// Fermer en cliquant sur l'overlay
1443document.addEventListener('DOMContentLoaded', function() {
1444    var modal = document.getElementById('modal-modification');
1445    if (modal) {
1446        modal.addEventListener('click', function(e) {
1447            if (e.target === modal) fermerModalModification();
1448        });
1449    }
1450});
1451
1452// Fermer en cliquant sur l'overlay
1453document.addEventListener('DOMContentLoaded', function() {
1454    var modal = document.getElementById('modal-reponse');
1455    if (modal) {
1456        modal.addEventListener('click', function(e) {
1457            if (e.target === modal) fermerModalReponse();
1458        });
1459    }
1460});
1461

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.