Subversion Repositories eFlore/Applications.cel

Rev

Rev 1562 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1537 jpm 1
//+---------------------------------------------------------------------------------------------------------+
2
// GÉNÉRAL
3
$(document).ready(function() {
4
	if (DEBUG == false) {
5
		$(window).on('beforeunload', function(event) {
6
			return 'Êtes vous sûr de vouloir quiter la page?\nLes observations saisies mais non transmises seront perdues.';
7
		});
8
	}
9
});
10
//+----------------------------------------------------------------------------------------------------------+
11
// FONCTIONS GÉNÉRIQUES
12
/**
13
 * Stope l'évènement courrant quand on clique sur un lien.
14
 * Utile pour Chrome, Safari...
15
 * @param evenement
16
 * @return
17
 */
18
function arreter(evenement) {
19
	if (evenement.stopPropagation) {
20
		evenement.stopPropagation();
21
	}
22
	if (evenement.preventDefault) {
23
		evenement.preventDefault();
24
	}
25
	return false;
26
}
27
 
28
function extraireEnteteDebug(jqXHR) {
29
	var msgDebug = '';
30
	if (jqXHR.getResponseHeader('X-DebugJrest-Data') != '') {
31
		var debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader('X-DebugJrest-Data'));
32
		if (debugInfos != null) {
33
			$.each(debugInfos, function (cle, valeur) {
34
				msgDebug += valeur + "\n";
35
			});
36
		}
37
	}
38
	return msgDebug;
39
}
40
 
41
function afficherPanneau(selecteur) {
42
	$(selecteur).fadeIn('slow').delay(DUREE_MESSAGE).fadeOut('slow');
43
}
44
 
45
//+----------------------------------------------------------------------------------------------------------+
1562 jpm 46
//FORM IDENTITE : gestion de l'observateur
47
 
1537 jpm 48
$(document).ready(function() {
1562 jpm 49
	$('#courriel').on('blur', requeterIdentite);
50
	$('#courriel').on('keypress', testerLancementRequeteIdentite);
1537 jpm 51
});
52
 
1562 jpm 53
function testerLancementRequeteIdentite(event) {
54
	if (event.which == 13) {
55
		requeterIdentite();
56
		event.preventDefault();
57
		event.stopPropagation();
58
	}
1537 jpm 59
}
60
 
1562 jpm 61
function requeterIdentite() {
62
	var courriel = $('#courriel').val();
63
	//TODO: mettre ceci en paramètre de config
64
	var urlAnnuaire = SERVICE_ANNUAIRE_ID_URL + courriel;
65
	$.ajax({
66
		url: urlAnnuaire,
67
		type: 'GET',
68
		success: function(data, textStatus, jqXHR) {
69
			console.log('SUCCESS:'+textStatus);
70
			if (data != undefined && data[courriel] != undefined) {
71
				var infos = data[courriel];
72
				$('#id_utilisateur').val(infos.id);
73
				$('#prenom').val(infos.prenom);
74
				$('#nom').val(infos.nom);
75
				$('#courriel_confirmation').val(courriel);
76
				$('#prenom, #nom, #courriel_confirmation').attr('disabled', 'disabled');
77
				$('#date').focus();
78
			} else {
79
				surErreurCompletionCourriel();
80
			}
81
		},
82
		error: function(jqXHR, textStatus, errorThrown) {
83
			console.log('ERREUR :'+textStatus);
84
			surErreurCompletionCourriel();
85
		},
86
		complete: function(jqXHR, textStatus) {
87
			console.log('COMPLETE :'+textStatus);
88
			$('#zone-prenom-nom').removeClass('hidden');
89
			$('#zone-courriel-confirmation').removeClass('hidden');
90
		}
91
	});
1537 jpm 92
}
93
 
1562 jpm 94
function surErreurCompletionCourriel() {
95
	$('#prenom, #nom, #courriel_confirmation').val('');
96
	$('#prenom, #nom, #courriel_confirmation').removeAttr('disabled');
97
	afficherPanneau('#dialogue-courriel-introuvable');
1537 jpm 98
}
99
 
1562 jpm 100
function formaterNom() {
101
	$(this).val($(this).val().toUpperCase());
1537 jpm 102
}
103
 
1562 jpm 104
function formaterPrenom() {
105
	var prenom = new Array(),
106
		mots = $(this).val().split(' ');
107
	for (var i = 0; i < mots.length; i++) {
108
		var mot = mots[i];
109
		if (mot.indexOf('-') >= 0) {
110
			var prenomCompose = new Array(),
111
				motsComposes = mot.split('-');
112
			for (var j = 0; j < motsComposes.length; j++) {
113
				var motSimple = motsComposes[j],
114
					motMajuscule = motSimple.charAt(0).toUpperCase() + motSimple.slice(1);
115
				prenomCompose.push(motMajuscule);
116
			}
117
			prenom.push(prenomCompose.join('-'));
118
		} else {
119
			var motMajuscule = mot.charAt(0).toUpperCase() + mot.slice(1);
120
			prenom.push(motMajuscule);
121
		}
122
	}
123
	$(this).val(prenom.join(' '));
124
}
125
 
1537 jpm 126
//+----------------------------------------------------------------------------------------------------------+
127
// GOOGLE MAP
1562 jpm 128
 
1540 jpm 129
var map,
130
	marker,
131
	latLng,
132
	geocoder;
1537 jpm 133
 
134
$(document).ready(function() {
135
	initialiserGoogleMap();
136
 
137
	// Autocompletion du champ adresse
1540 jpm 138
	$('#carte-recherche').on('focus', function() {
1537 jpm 139
		$(this).select();
140
	});
1540 jpm 141
	$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...
1537 jpm 142
		event.preventDefault();
143
	});
144
 
1540 jpm 145
	$('#carte-recherche').keypress(function(e) {
1537 jpm 146
		if (e.which == 13) {
147
			e.preventDefault();
148
		}
149
	});
150
 
1540 jpm 151
	$('#carte-recherche').autocomplete({
1537 jpm 152
		//Cette partie utilise geocoder pour extraire des valeurs d'adresse
153
		source: function(request, response) {
154
 
155
			geocoder.geocode( {'address': request.term+', France', 'region' : 'fr' }, function(results, status) {
156
				if (status == google.maps.GeocoderStatus.OK) {
157
					response($.map(results, function(item) {
158
						var retour = {
159
							label: item.formatted_address,
160
							value: item.formatted_address,
161
							latitude: item.geometry.location.lat(),
162
							longitude: item.geometry.location.lng()
163
						};
164
						return retour;
165
					}));
166
				} else {
167
					afficherErreurGoogleMap(status);
168
				}
169
			});
170
		},
171
		// Cette partie est executee a la selection d'une adresse
172
		select: function(event, ui) {
173
			var latLng = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
174
			deplacerMarker(latLng);
175
		}
176
	});
177
 
1540 jpm 178
	$('#geolocaliser').on('click', geolocaliser);
1537 jpm 179
 
1562 jpm 180
	//google.maps.event.addListener(marker, 'dragend', surDeplacementMarker);
1537 jpm 181
 
1562 jpm 182
	//google.maps.event.addListener(map, 'click', surClickDansCarte);
1537 jpm 183
});
184
 
185
function initialiserGoogleMap(){
186
	// Carte
1540 jpm 187
	var latLng = new google.maps.LatLng(46.30871, 2.54395),// Centre de la France
188
		zoomDefaut = 5;
189
		options = {
190
			zoom: zoomDefaut,
191
			center: latLng,
192
			mapTypeId: google.maps.MapTypeId.HYBRID,
193
			mapTypeControlOptions: {
194
				mapTypeIds: ['OSM',
195
					google.maps.MapTypeId.ROADMAP,
196
					google.maps.MapTypeId.HYBRID,
197
					google.maps.MapTypeId.SATELLITE,
198
					google.maps.MapTypeId.TERRAIN]}
199
		};
1562 jpm 200
 
1537 jpm 201
	// Ajout de la couche OSM à la carte
202
	osmMapType = new google.maps.ImageMapType({
203
		getTileUrl: function(coord, zoom) {
1540 jpm 204
			return 'http://tile.openstreetmap.org/' + zoom + '/' + coord.x + '/' + coord.y + '.png';
1537 jpm 205
		},
206
		tileSize: new google.maps.Size(256, 256),
207
		isPng: true,
208
		alt: 'OpenStreetMap',
209
		name: 'OSM',
210
		maxZoom: 19
211
	});
212
 
213
	// Création de la carte Google
214
	map = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvas
215
	map.mapTypes.set('OSM', osmMapType);
216
 
217
	// Création du Geocoder
218
	geocoder = new google.maps.Geocoder();
219
 
220
	// Marqueur google draggable
221
	marker = new google.maps.Marker({
222
		map: map,
223
		draggable: true,
224
		title: 'Ma station',
225
		icon: GOOGLE_MAP_MARQUEUR_URL,
226
		position: latLng
227
	});
228
 
229
	initialiserMarker(latLng);
230
 
231
	// Tentative de geocalisation
1540 jpm 232
 
1537 jpm 233
	if (navigator.geolocation) {
234
		navigator.geolocation.getCurrentPosition(function(position) {
1540 jpm 235
			var latitude = position.coords.latitude,
236
				longitude = position.coords.longitude;
1537 jpm 237
			latLng = new google.maps.LatLng(latitude, longitude);
1540 jpm 238
 
1537 jpm 239
			deplacerMarker(latLng);
240
		});
241
	}
242
}
243
 
244
function surDeplacementMarker() {
245
	trouverCommune(marker.getPosition());
246
	mettreAJourMarkerPosition(marker.getPosition());
247
}
248
 
249
function surClickDansCarte(event) {
250
	deplacerMarker(event.latLng);
251
}
252
 
1540 jpm 253
function geolocaliser(event) {
254
	var latitude = $('#latitude').val(),
255
		longitude = $('#longitude').val();
1537 jpm 256
	latLng = new google.maps.LatLng(latitude, longitude);
257
	deplacerMarker(latLng);
1540 jpm 258
	arreter(event);
1537 jpm 259
}
260
 
261
function initialiserMarker(latLng) {
262
	if (marker != undefined) {
263
		marker.setPosition(latLng);
264
		map.setCenter(latLng);
1540 jpm 265
		mettreAJourMarkerPosition(latLng);
266
		trouverCommune(latLng);
1537 jpm 267
	}
268
}
269
 
270
function deplacerMarker(latLng) {
271
	if (marker != undefined) {
272
		marker.setPosition(latLng);
273
		map.setCenter(latLng);
274
		mettreAJourMarkerPosition(latLng);
275
		trouverCommune(latLng);
276
	}
277
}
278
 
279
function mettreAJourMarkerPosition(latLng) {
1540 jpm 280
	var lat = latLng.lat().toFixed(5),
281
		lng = latLng.lng().toFixed(5);
1537 jpm 282
	remplirChampLatitude(lat);
283
	remplirChampLongitude(lng);
284
}
285
 
286
function remplirChampLatitude(latDecimale) {
287
	var lat = Math.round(latDecimale * 100000) / 100000;
288
	$('#latitude').val(lat);
289
}
290
 
291
function remplirChampLongitude(lngDecimale) {
292
	var lng = Math.round(lngDecimale * 100000) / 100000;
293
	$('#longitude').val(lng);
294
}
295
 
296
function trouverCommune(pos) {
297
	$(function() {
1540 jpm 298
		var url_service = SERVICE_NOM_COMMUNE_URL,
299
			urlNomCommuneFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());
1537 jpm 300
		$.ajax({
1540 jpm 301
			url: urlNomCommuneFormatee,
302
			type: 'GET',
303
			dataType: 'jsonp',
304
			beforeSend: function() {
305
				$('.commune-info').empty();
306
				$('#dialogue-erreur .alert-txt').empty();
1537 jpm 307
			},
1540 jpm 308
			success: function(data, textStatus, jqXHR) {
309
				$('.commune-info').empty();
310
				$('#commune-nom').append(data.nom);
311
				$('#commune-code-insee').append(data.codeINSEE);
312
				$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});
1537 jpm 313
			},
1540 jpm 314
			statusCode: {
315
				500: function(jqXHR, textStatus, errorThrown) {
1537 jpm 316
					if (DEBUG) {
1540 jpm 317
						$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissante le nom des communes.</p>');
1537 jpm 318
						reponse = jQuery.parseJSON(jqXHR.responseText);
319
						var erreurMsg = "";
320
						if (reponse != null) {
321
							$.each(reponse, function (cle, valeur) {
1540 jpm 322
								erreurMsg += valeur + '<br />';
1537 jpm 323
							});
324
						}
325
 
1540 jpm 326
						$('#dialogue-erreur .alert-txt').append(
327
							'<p class="msg-erreur">Erreur 500 : '+errorThrown+'<br />'+erreurMsg+'</p>');
1537 jpm 328
					}
1540 jpm 329
				}
1537 jpm 330
			},
1540 jpm 331
			error: function(jqXHR, textStatus, errorThrown) {
1537 jpm 332
				if (DEBUG) {
1540 jpm 333
					$('#dialogue-erreur .alert-txt').append(
334
						'<p class="msg">Une erreur Ajax est survenue lors de la transmission de vos observations.</p>');
1537 jpm 335
					reponse = jQuery.parseJSON(jqXHR.responseText);
1540 jpm 336
					var erreurMsg = '';
1537 jpm 337
					if (reponse != null) {
338
						$.each(reponse, function (cle, valeur) {
1540 jpm 339
							erreurMsg += valeur + '<br />';
1537 jpm 340
						});
341
					}
342
 
1540 jpm 343
					$('#dialogue-erreur .alert-txt').append(
344
						'<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
1537 jpm 345
				}
346
			},
1540 jpm 347
			complete: function(jqXHR, textStatus) {
1537 jpm 348
				var debugMsg = extraireEnteteDebug(jqXHR);
349
				if (debugMsg != '') {
350
					if (DEBUG) {
351
						$("#dialogue-erreur .alert-txt").append('<pre class="msg-debug msg">Débogage : '+debugMsg+'</pre>');
352
					}
353
				}
354
				if ($("#dialogue-erreur .msg").length > 0) {
355
					$("#dialogue-erreur").show();
356
				}
357
			}
358
		});
359
	});
360
}
1562 jpm 361
 
362
 
1537 jpm 363
//+---------------------------------------------------------------------------------------------------------+
1562 jpm 364
//AUTO-COMPLÉTION Noms Scientifiques
1537 jpm 365
 
1562 jpm 366
function ajouterAutocompletionNoms() {
367
	$('#taxon').autocomplete({
368
		source: function(requete, add){
369
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
370
 
371
			var url = getUrlAutocompletionNomsSci();
372
			$.getJSON(url, function(data) {
373
				console.log(data);
374
				var suggestions = traiterRetourNomsSci(data);
375
				add(suggestions);
376
			});
377
		},
378
		html: true
379
	});
380
 
381
	$('#taxon').bind('autocompleteselect', function(event, ui) {
382
		$('#taxon').data(ui.item);
383
		if (ui.item.retenu == true) {
384
			$('#taxon').addClass('ns-retenu');
385
		} else {
386
			$('#taxon').removeClass('ns-retenu');
387
		}
388
	});
389
}
390
 
391
function getUrlAutocompletionNomsSci() {
392
	var mots = $('#taxon').val(),
393
		url = SERVICE_AUTOCOMPLETION_NOM_SCI_URL_TPL.replace('{referentiel}',NOM_SCI_PROJET);
394
	url = url.replace('{masque}', mots);
395
	return url;
396
}
397
 
398
function traiterRetourNomsSci(data) {
399
	var suggestions = [];
400
	if (data.resultat != undefined) {
401
		$.each(data.resultat, function(i, val) {
402
			val.nn = i;
403
			var nom = {label: '', value: '', nt: '', nomSel: '', nomSelComplet: '', numNomSel: '',
404
				nomRet: '', numNomRet: '', famille: '', retenu: false
405
			};
406
			if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
407
				nom.label = '...';
408
				nom.value = $('#taxon').val();
409
				suggestions.push(nom);
410
				return false;
411
			} else {
412
				nom.label = val.nom_sci_complet;
413
				nom.value = val.nom_sci_complet;
414
				nom.nt = val.num_taxonomique;
415
				nom.nomSel = val.nom_sci;
416
				nom.nomSelComplet = val.nom_sci_complet;
417
				nom.numNomSel = val.nn;
418
				nom.nomRet = val.nom_retenu_complet;
419
				nom.numNomRet = val['nom_retenu.id'];
420
				nom.famille = val.famille;
421
				nom.retenu = (val.retenu == 'false') ? false : true;
422
 
423
				suggestions.push(nom);
424
			}
425
		});
1537 jpm 426
	}
1562 jpm 427
	return suggestions;
1537 jpm 428
}
429
 
1562 jpm 430
/*
431
* jQuery UI Autocomplete HTML Extension
432
*
433
* Copyright 2010, Scott González (http://scottgonzalez.com)
434
* Dual licensed under the MIT or GPL Version 2 licenses.
435
*
436
* http://github.com/scottgonzalez/jquery-ui-extensions
437
*
438
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
439
*/
440
(function($) {
441
	var proto = $.ui.autocomplete.prototype,
442
		initSource = proto._initSource;
443
 
444
	function filter(array, term) {
445
		var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');
446
		return $.grep(array, function(value) {
447
			return matcher.test($('<div>').html(value.label || value.value || value).text());
448
		});
449
	}
450
 
451
	$.extend(proto, {
452
		_initSource: function() {
453
			if (this.options.html && $.isArray(this.options.source)) {
454
				this.source = function( request, response ) {
455
					response(filter(this.options.source, request.term));
456
				};
1537 jpm 457
			} else {
1562 jpm 458
				initSource.call(this);
1537 jpm 459
			}
460
		},
1562 jpm 461
		_renderItem: function(ul, item) {
462
			if (item.retenu == true) {
463
				item.label = '<strong>'+item.label+'</strong>';
464
			}
465
 
466
			return $('<li></li>')
467
				.data('item.autocomplete', item)
468
				.append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
469
				.appendTo(ul);
1537 jpm 470
		}
471
	});
1562 jpm 472
})(jQuery);
473
 
474
//+----------------------------------------------------------------------------------------------------------+
475
//UPLOAD PHOTO : Traitement de l'image
476
$(document).ready(function() {
477
	$('body').on('click', '.effacer-miniature', function(event) {
478
		supprimerMiniature($(this));
479
	});
480
 
481
	$('#photo-placeholder').click(function(event) {
482
		$('#fichier').click();
483
	});
484
 
485
	$('#fichier').bind('change', function (e) {
486
		arreter(e);
487
		var options = {
488
			success: afficherMiniature, // post-submit callback
489
			dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
490
			resetForm: true // reset the form after successful submit
491
		};
492
		$('#miniature').append(
493
			'<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
494
		$('#ajouter-obs').attr('disabled', 'disabled');
495
		if (verifierFormat($('#fichier').val())) {
496
			$('#form-upload').ajaxSubmit(options);
497
		} else {
498
			window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+	$('#fichier').attr('accept'));
499
		}
500
		return false;
501
	});
502
 
503
	$('.effacer-miniature').on('click', function() {
504
		$(this).parent().remove();
505
	});
506
});
507
 
508
function verifierFormat(nom) {
509
	var parts = nom.split('.');
510
	extension = parts[parts.length - 1];
511
	return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
1537 jpm 512
}
513
 
1562 jpm 514
function afficherMiniature(reponse) {
515
	if (DEBUG) {
516
		var debogage = $('debogage', reponse).text();
517
		console.log('Débogage upload : ' + debogage);
518
	}
519
	var message = $('message', reponse).text();
520
	if (message != '') {
521
		$('#miniature-msg').append(message);
522
	} else {
523
		$('#miniatures').append(creerWidgetMiniature(reponse));
524
	}
525
	$('#ajouter-obs').removeAttr('disabled');
1537 jpm 526
}
1562 jpm 527
 
528
function creerWidgetMiniature(reponse) {
529
	var miniatureUrl = $('miniature-url', reponse).text(),
530
		imgNom = $('image-nom', reponse).text(),
531
		html =
532
			'<div class="miniature">'+
533
				'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
534
				'<button class="btn effacer-miniature" type="button">Effacer</button>'+
535
			'</div>'
536
	return html;
537
}
538
 
539
function supprimerMiniature(miniature) {
540
	miniature.parents('.miniature').remove();
541
}
542
 
543
function supprimerMiniatures() {
544
	$('#miniatures').empty();
545
	$('#miniature-msg').empty();
546
}
547
 
548
 
1537 jpm 549
//+---------------------------------------------------------------------------------------------------------+
1562 jpm 550
// FORMULAIRE : traitements génériques
1537 jpm 551
 
552
$(document).ready(function() {
553
	// Sliders
554
	transformerEnSlider('#presence-zone-vegetalise');
555
	transformerEnSlider('#hauteur-batiment-avoisinant');
556
	transformerEnSlider('#periodicite-traitement-phyto');
557
	transformerEnSlider('#resistance-traitement-phyto');
558
	transformerEnSlider('#vitesse-croissance');
559
 
1540 jpm 560
	// Afficher/Cacher champs cachés par défaut
1537 jpm 561
	$('#periodicite-traitement-phyto').on('change', function() {
562
		if ($(this).val() === 'jamais') {
563
			$('#datp-zone').removeClass('hidden');
564
		} else {
1540 jpm 565
			$('#datp-zone').addClass('hidden');
1537 jpm 566
		}
567
	});
568
	$('#taxon-liste').on('change', function() {
569
		if ($(this).val() === '?') {
570
			$('#taxon-input-groupe').removeClass('hidden');
571
		} else {
1540 jpm 572
			$('#taxon-input-groupe').addClass('hidden');
1537 jpm 573
		}
574
	});
575
 
576
	$('.alert .close').on('click', fermerPanneauAlert);
577
 
578
	$('[rel=tooltip]').tooltip('enable');
579
	$('#btn-aide').on('click', basculerAffichageAide);
580
 
581
	$('#prenom').on('change', formaterPrenom);
582
	$('#nom').on('change', formaterNom);
583
 
584
	configurerDatePicker('#date');
585
	configurerDatePicker('#date-arret-traitement-phyto');
1540 jpm 586
 
1537 jpm 587
	ajouterAutocompletionNoms();
1540 jpm 588
 
1537 jpm 589
	configurerFormValidator();
590
	definirReglesFormValidator();
1562 jpm 591
 
592
	$('.dropdown-menu input, .dropdown-menu label').on('click', function(event) {
593
		event.stopPropagation();
594
	});
595
	$('.cb-milieux').on('click', function(event) {
596
		$(this).valid();
597
		event.stopPropagation();
598
	});
599
 
600
	$('input#hauteur-plante').on('blur', function() {
601
		// if there's a bad value
602
		var valeur = $(this).val();
603
		console.log(valeur);
604
		if (! valeur.match(/^[0-9]+$/)) {
605
			// replace it with nothing
606
			var nouvelleValeur = valeur.replace(/[^0-9]/g, '');
607
			$(this).val(nouvelleValeur);
608
		}
609
	});
610
 
1537 jpm 611
	$('#courriel_confirmation').on('paste', bloquerCopierCollerCourriel);
612
 
613
	$('a.afficher-coord').on('click', basculerAffichageCoord);
614
 
615
	$('#ajouter-obs').on('click', ajouterObs);
616
 
617
	$('.obs-nbre').on('changement', surChangementNbreObs);
618
 
619
	$('body').on('click', '.supprimer-obs', supprimerObs);
620
 
621
	$('#transmettre-obs').on('click', transmettreObs);
622
 
1562 jpm 623
	$('body').on('click', '.defilement-control-zone', function(event) {
1537 jpm 624
		defilerMiniatures($(this));
625
	});
1562 jpm 626
	$('body').on('mouseover', '.defilement-control-zone', function(event) {
627
		$('.defilement-control', this).removeClass('hidden');
1537 jpm 628
	});
1562 jpm 629
	$('body').on('mouseout', '.defilement-control-zone', function(event) {
630
		$('.defilement-control', this).addClass('hidden');
1540 jpm 631
	});
632
 
1537 jpm 633
});
634
 
635
function transformerEnSlider(selector) {
636
	$(selector).each(function(index, el) {
637
		// hide the element
638
		$(el).addClass('slider-on');
639
 
640
		// add the slider to each element
641
		var slider = $( '<div class="slider-holder"><div class="horizontal-slider"></div></div>' ).
1560 jpm 642
			insertBefore( el ).find('.horizontal-slider').slider({
1537 jpm 643
				min: 1,
644
				max: el.options.length,
645
				range: 'min',
646
				value: el.selectedIndex + 1,
1562 jpm 647
				slide: function(event, ui) {
1537 jpm 648
					el.selectedIndex = ui.value - 1;
649
					slider.find('a').text(el.options[el.selectedIndex].text);
1562 jpm 650
 
651
					$(selector + ' option[selected="selected"]').removeAttr('selected');
652
					$(selector + ' :nth-child('+ui.value+')').attr('selected', 'selected')
653
					$(selector).valid();
1537 jpm 654
				},
655
				stop: function() {
656
					$(el).change();
657
				}
658
			});
659
 
660
		slider.find('a').text(el.options[el.selectedIndex].text);
661
 
662
		// Create a legend under the slider so we can see the options
663
		var options = [];
664
		for (var option in $(el).children()) {
665
			if (!isNaN(parseInt(option))) {
666
				options.push(el.options[option].text);
667
			}
668
		}
669
		// the width of each legend/option
670
		var width = (slider.width() / (options.length - 1));
671
 
672
		// Add the legend. Half the width of the first and last options for display consistency.
673
		slider.after('<div class="slider-legend"><p style="width:' + (width / 2) + 'px;text-align:left;">' +
674
			options.join('</p><p style="width:' + width + 'px;">') +'</p></div>')
675
			.parent().find('.slider-legend p:last-child').css('width', width / 2)
676
			.css('text-align', 'right');
677
 
678
		// if there are too many options so that the text is wider than the width, then hide the text
679
		var lastChild = slider.parent().find('.slider-legend p:last-child');
680
		if (lastChild[0].clientWidth < lastChild[0].scrollWidth) {
1560 jpm 681
			slider.parent().find('.slider-legend p');//.css('text-indent', '200%');
1537 jpm 682
		}
683
	});
684
}
685
 
1562 jpm 686
function configurerDatePicker(selector) {
687
	$.datepicker.setDefaults($.datepicker.regional['fr']);
688
	$(selector).datepicker({
689
		dateFormat: 'dd/mm/yy',
690
		showOn: 'button',
691
		buttonImageOnly: true,
692
		buttonImage: CALENDRIER_ICONE_URL,
693
		buttonText: 'Afficher le calendrier pour saisir la date.',
694
		showButtonPanel: true,
695
		onSelect: function(date) {
696
			$(this).valid();
697
        }
698
	});
699
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
700
}
701
 
1537 jpm 702
function configurerFormValidator() {
703
	$.validator.addMethod(
704
		'dateCel',
705
		function (value, element) {
706
			return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));
707
		},
708
		'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
709
 
710
	$.extend($.validator.defaults, {
1562 jpm 711
		ignore: [],// Forcer Jquery Validate à examiner les éléments avec en display:none;
1540 jpm 712
		highlight: function(element) {
713
			$(element).closest('.control-group').removeClass('success').addClass('error');
1537 jpm 714
		},
1540 jpm 715
		success: function(element) {
1560 jpm 716
			element.text('OK!').addClass('valid');
717
			element.closest('.control-group').removeClass('error').addClass('success');
718
 
1540 jpm 719
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
720
				// Si le taxon n'est pas lié au référentiel, on vide le data associé
721
				if ($('#taxon').data('value') != $('#taxon').val()) {
722
					$('#taxon').data('numNomSel', '');
723
					$('#taxon').data('nomRet', '');
724
					$('#taxon').data('numNomRet', '');
725
					$('#taxon').data('nt', '');
726
					$('#taxon').data('famille', '');
1537 jpm 727
				}
728
			}
729
		}
730
	});
731
}
732
 
733
function definirReglesFormValidator() {
734
	$('#form-observateur').validate({
735
		rules: {
736
			courriel: {
737
				required: true,
738
				email: true},
739
			courriel_confirmation: {
740
				required: true,
1560 jpm 741
				equalTo: '#courriel'},
742
			prenom: {
743
				required: true},
744
			nom: {
745
				required: true},
746
			personneStructure: {
747
				required: true},
748
			personneService: {
749
				required: true}
1537 jpm 750
		}
751
	});
1560 jpm 752
	$('#form-site').validate({
1537 jpm 753
		rules: {
1560 jpm 754
			station: {
755
				required: true},
1537 jpm 756
			latitude : {
1560 jpm 757
				required: true,
1537 jpm 758
				range: [-90, 90]},
1540 jpm 759
			longitude: {
1560 jpm 760
				required: true,
761
				range: [-180, 180]},
762
			typoUrbaine: {
763
				required: true},
764
			revetementSol: {
765
				required: true},
766
			intensiteGestion: {
767
				required: true},
768
			periodiciteTraitementPhyto: {
769
				required: true},
770
			itineraireGestion: {
771
				required: true}
1537 jpm 772
		}
773
	});
1560 jpm 774
	$('#form-date').validate({
775
		rules: {
776
			date: {
777
				required: true,
778
				'dateCel' : true},
779
			dateDerniereIntervention: {
780
				required: true}
1562 jpm 781
		},
782
		errorPlacement: function(error, element) {
783
	        if (element.attr('name') == 'date') {
784
		        element.parent('.input-prepend').after(error);
785
	        } else {
786
	        	error.insertAfter(element);
787
	        }
788
	    }
1560 jpm 789
	});
1537 jpm 790
	$('#form-obs').validate({
791
		rules: {
1560 jpm 792
			'taxon-liste': {
793
				required: true},
1562 jpm 794
			'milieux[]': {
795
				required: true,
796
				minlength: 1},
1560 jpm 797
			hauteurPlante: {
798
				required: true,
799
				digits: true},
800
			resistanceTraitementPhyto: {
801
				required: true}
1562 jpm 802
		},
803
		errorPlacement: function(error, element) {
804
	        if (element.attr('name') == 'milieux[]') {
805
		        error.insertAfter('#milieux-controls');
806
	        } else {
807
	        	error.insertAfter(element);
808
	        }
809
	    }
1537 jpm 810
	});
811
}
812
 
1562 jpm 813
function validerFormulaire() {
814
	var observateur = $('#form-observateur').valid(),
815
		station = $('#form-site').valid(),
816
		date = $('#form-date').valid(),
817
		obs = $('#form-obs').valid();
818
	return (observateur == true && station == true && obs == true && date == true) ? true : false;
1537 jpm 819
}
820
 
1562 jpm 821
 
1537 jpm 822
function fermerPanneauAlert() {
823
	$(this).parentsUntil('.zone-alerte', '.alert').hide();
824
}
825
 
1560 jpm 826
function basculerAffichageAide() {
1537 jpm 827
	if ($(this).hasClass('btn-warning')) {
828
		$('[rel=tooltip]').tooltip('enable');
829
		$(this).removeClass('btn-warning').addClass('btn-success');
1540 jpm 830
		$('#btn-aide-txt', this).text("Désactiver l'aide");
1537 jpm 831
	} else {
832
		$('[rel=tooltip]').tooltip('disable');
833
		$(this).removeClass('btn-success').addClass('btn-warning');
834
		$('#btn-aide-txt', this).text("Activer l'aide");
835
	}
836
}
837
 
838
function bloquerCopierCollerCourriel() {
839
	afficherPanneau('#dialogue-bloquer-copier-coller');
840
	return false;
841
}
842
 
843
function basculerAffichageCoord() {
1540 jpm 844
	$('.afficher-coord-action').toggle();
1537 jpm 845
	$('#coordonnees-geo').toggle('slow');
846
	//valeur false pour que le lien ne soit pas suivi
847
	return false;
848
}
849
 
1562 jpm 850
 
851
//+----------------------------------------------------------------------------------------------------------+
852
// CRÉER OBS : Gestion des obs
853
 
854
var obsNbre = 0;
855
 
1537 jpm 856
function ajouterObs() {
857
	if (validerFormulaire() == true) {
858
		obsNbre = obsNbre + 1;
859
		$('.obs-nbre').text(obsNbre);
860
		$('.obs-nbre').triggerHandler('changement');
861
		afficherObs();
862
		stockerObsData();
863
		supprimerMiniatures();
1540 jpm 864
		$('#taxon').val('').data('numNomSel', undefined).removeClass('ns-retenu');
1537 jpm 865
	} else {
866
		afficherPanneau('#dialogue-form-invalide');
867
	}
868
}
869
 
870
function afficherObs() {
1540 jpm 871
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
872
		taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : taxons[numNomSel]['nom_sel'],
873
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
874
		commune = $('#commune-nom').text(),
875
		codeInsee = $('#commune-code-insee').text(),
876
		lat = $('input[name="latitude"]').val(),
877
		lng = $('input[name="longitude"]').val(),
878
		date = $('#date').val(),
879
		site = $('#station').val(),
880
		milieux = getMilieux(),
881
		notes = $('#notes').val();
882
 
1537 jpm 883
	$('#liste-obs').prepend(
884
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">'+
885
			'<div class="span12">'+
886
				'<div class="well">'+
887
					'<div class="obs-action pull-right" rel="tooltip" data-placement="bottom" '+
888
						'title="Supprimer cette observation de la liste à transmettre">'+
889
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">'+
890
							'<i class="icon-trash icon-white"></i>'+
891
						'</button>'+
892
					'</div> '+
893
					'<div class="row-fluid">'+
1562 jpm 894
						'<div class="span2 obs-miniatures">'+
1537 jpm 895
							ajouterImgMiniatureAuTransfert()+
896
						'</div>'+
1562 jpm 897
						'<div class="span8">'+
1537 jpm 898
							'<ul class="unstyled">'+
899
								'<li>'+
1540 jpm 900
									'<span class="nom-sci">' + taxon + '</span> ' +
901
									formaterNumNomSel(numNomSel)+
902
									'<span class="referentiel-obs">' + referentiel + '</span>' +
903
									' observé à ' +
904
									'<span class="commune">' + commune + '</span> ' +
905
									'(' + codeInsee + ') [' + lat +' / ' + lng + ']' +
906
									' le ' +
907
									'<span class="date">' + date + '</span>' +
908
								'</li>' +
909
								'<li>' +
1562 jpm 910
									'<span>Site :</span> ' + site + ' ' +  ' ; ' +
1540 jpm 911
									'<span>Milieu :</span> ' + milieux + ' ' +
912
								'</li>' +
913
								'<li>' +
914
									'Commentaires : <span class="discretion">' + notes + '</span>'+
1537 jpm 915
								'</li>'+
916
							'</ul>'+
917
						'</div>'+
918
					'</div>'+
919
				'</div>'+
920
			'</div>'+
921
		'</div>');
922
}
923
 
1540 jpm 924
function getMilieux() {
925
	var milieuxStr = '',
926
		milieux = [];
1562 jpm 927
	$('input:checkbox[name="milieux[]"]:checked').each(function() {
1540 jpm 928
		milieux.push($(this).val());
929
	});
930
 
931
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
932
	return milieuxStr;
933
}
934
 
935
function ajouterImgMiniatureAuTransfert() {
936
	var html = '',
937
		miniatures = '',
1562 jpm 938
		indicateurs = '',
939
		premiere = true,
940
		numero = 1;
941
	if ($('#miniatures img').length == 0) {
942
		html = '<img class="miniature" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';
943
	} else if ($('#miniatures img').length >= 1) {
1540 jpm 944
		$('#miniatures img').each(function() {
945
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
946
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
947
				src = $(this).attr('src'),
948
				alt = $(this).attr('alt');
1562 jpm 949
 
950
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
951
			miniatures += miniature;
952
 
953
			var indicateurActif = premiere ? 'active' : '';
954
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
955
			indicateurs += indicateur;
956
 
1540 jpm 957
			premiere = false;
958
		});
1562 jpm 959
 
960
		if ($('#miniatures img').length == 1) {
961
			html = miniatures;
962
		} else {
963
			html =
964
				'<div class="defilement">' +
965
					miniatures +
966
					'<a class="defilement-control-zone gauche">' +
967
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
968
					'</a>' +
969
					'<a class="defilement-control-zone droite">' +
970
					'	<span class="defilement-control droite hidden">&#62;</span>' +
971
					'</a>' +
972
					'<ol class="defilement-indicateurs">' + indicateurs + '</ol>' +
973
				'</div>';
974
		}
1540 jpm 975
	}
976
	return html;
977
}
978
 
1562 jpm 979
function defilerMiniatures(element) {
980
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
981
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
982
	var miniatureAffichee = miniatureSelectionne;
983
 
984
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
985
	console.log(indicateurActif)
986
	indicateurActif.removeClass('active');
987
 
988
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
989
		if (miniatureSelectionne.prev('.miniature').length != 0) {
990
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
991
			indicateurActif.prev().addClass('active');
992
		} else {
993
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').last();
994
			indicateurActif.siblings().last().addClass('active');
995
		}
996
	} else {
997
		if (miniatureSelectionne.next('.miniature').length != 0) {
998
			miniatureAffichee = miniatureSelectionne.next('.miniature');
999
			indicateurActif.next().addClass('active');
1000
		} else {
1001
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').first();
1002
			indicateurActif.siblings().first().addClass('active');
1003
		}
1004
	}
1005
	miniatureAffichee.addClass('miniature-selectionnee').removeClass('miniature-cachee');
1006
}
1007
 
1540 jpm 1008
function formaterNumNomSel(numNomSel) {
1009
	var nn = '';
1010
	if (numNomSel == undefined) {
1011
		nn = '<span class="alert-error">[non lié au référentiel]</span>';
1012
	} else {
1013
		nn = '<span class="nn">[nn'+numNomSel+']</span>';
1014
	}
1015
	return nn;
1016
}
1017
 
1537 jpm 1018
function stockerObsData() {
1019
	$('#liste-obs').data('obsId'+obsNbre, {
1020
		'date' : $('#date').val(),
1021
		'notes' : $('#notes').val(),
1022
 
1023
		'nom_sel' : $('#taxon').val(),
1024
		'num_nom_sel' : $('#taxon').data('numNomSel'),
1025
		'nom_ret' : $('#taxon').data('nomRet'),
1026
		'num_nom_ret' : $('#taxon').data('numNomRet'),
1027
		'num_taxon' : $('#taxon').data('nt'),
1028
		'famille' : $('#taxon').data('famille'),
1029
		'referentiel' : ($('#taxon').data('numNomSel') == undefined ? '' : NOM_SCI_REFERENTIEL),
1030
 
1031
		'latitude' : $('#latitude').val(),
1032
		'longitude' : $('#longitude').val(),
1033
		'commune_nom' : $('#commune-nom').text(),
1034
		'commune_code_insee' : $('#commune-code-insee').text(),
1035
		'lieudit' : $('#lieudit').val(),
1036
		'station' : $('#station').val(),
1037
		'milieu' : $('#milieu').val(),
1038
 
1039
		//Ajout des champs images
1040
		'image_nom' : getNomsImgsOriginales(),
1041
		'image_b64' : getB64ImgsOriginales()
1042
	});
1560 jpm 1043
	console.log($('#liste-obs').data('obsId'+obsNbre));
1537 jpm 1044
}
1045
 
1046
function surChangementReferentiel() {
1047
	NOM_SCI_PROJET = $('#referentiel').val();
1048
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1049
	$('#taxon').val('');
1050
}
1051
 
1052
function surChangementNbreObs() {
1053
	if (obsNbre == 0) {
1054
		$('#transmettre-obs').attr('disabled', 'disabled');
1055
		$('#ajouter-obs').removeAttr('disabled');
1564 jpm 1056
		$('#zone-liste-obs').addClass('hidden');
1057
	} else {
1058
		$('#zone-liste-obs').removeClass('hidden');
1059
 
1060
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1061
			$('#transmettre-obs').removeAttr('disabled');
1062
			$('#ajouter-obs').removeAttr('disabled');
1063
		} else if (obsNbre >= OBS_MAX_NBRE) {
1064
			$('#ajouter-obs').attr('disabled', 'disabled');
1065
			afficherPanneau('#dialogue-bloquer-creer-obs');
1066
		}
1537 jpm 1067
	}
1068
}
1069
 
1562 jpm 1070
function supprimerObs() {
1071
	var obsId = $(this).val();
1072
	// Problème avec IE 6 et 7
1073
	if (obsId == 'Supprimer') {
1074
		obsId = $(this).attr('title');
1075
	}
1076
	obsNbre = obsNbre - 1;
1077
	$('.obs-nbre').text(obsNbre);
1078
	$('.obs-nbre').triggerHandler('changement');
1079
 
1080
	$('.obs'+obsId).remove();
1081
	$('#liste-obs').removeData('obsId' + obsId);
1082
}
1083
 
1084
function initialiserObs() {
1085
	obsNbre = 0;
1086
	$('.obs-nbre').text(obsNbre);
1087
	$('.obs-nbre').triggerHandler('changement');
1088
	$('#liste-obs').removeData();
1089
	$('.obs').remove();
1090
	$('#dialogue-bloquer-creer-obs').hide();
1091
}
1092
 
1093
function getNomsImgsOriginales() {
1094
	var noms = new Array();
1095
	$('.miniature-img').each(function() {
1096
		noms.push($(this).attr('alt'));
1097
	});
1098
	return noms;
1099
}
1100
 
1101
function getB64ImgsOriginales() {
1102
	var b64 = new Array();
1103
	$('.miniature-img').each(function() {
1104
		if ($(this).hasClass('b64')) {
1105
			b64.push($(this).attr('src'));
1106
		} else if ($(this).hasClass('b64-canvas')) {
1107
			b64.push($(this).data('b64'));
1108
		}
1109
	});
1110
	return b64;
1111
}
1112
 
1113
//+----------------------------------------------------------------------------------------------------------+
1114
// TRANSFERER OBS : envoie des obs au CEL
1115
 
1537 jpm 1116
function transmettreObs() {
1117
	var observations = $('#liste-obs').data();
1118
	console.log(observations);
1119
 
1120
	if (observations == undefined || jQuery.isEmptyObject(observations)) {
1121
		afficherPanneau('#dialogue-zero-obs');
1122
	} else {
1123
		observations['projet'] = TAG_PROJET;
1124
		observations['tag-obs'] = TAG_OBS;
1125
		observations['tag-img'] = TAG_IMG;
1126
 
1127
		var utilisateur = new Object();
1128
		utilisateur.id_utilisateur = $('#id_utilisateur').val();
1129
		utilisateur.prenom = $('#prenom').val();
1130
		utilisateur.nom = $('#nom').val();
1131
		utilisateur.courriel = $('#courriel').val();
1132
		observations['utilisateur'] = utilisateur;
1133
		envoyerObsAuCel(observations);
1134
	}
1135
	return false;
1136
}
1137
 
1138
function envoyerObsAuCel(observations) {
1139
	var erreurMsg = '';
1140
	$.ajax({
1540 jpm 1141
		url: SERVICE_SAISIE_URL,
1142
		type: 'POST',
1143
		data: observations,
1144
		dataType: 'json',
1145
		beforeSend: function() {
1537 jpm 1146
			$('#dialogue-obs-transaction-ko').hide();
1147
			$('#dialogue-obs-transaction-ok').hide();
1148
			$('.alert-txt .msg').remove();
1149
			$('.alert-txt .msg-erreur').remove();
1150
			$('.alert-txt .msg-debug').remove();
1151
			$('#chargement').show();
1152
		},
1540 jpm 1153
		success: function(data, textStatus, jqXHR) {
1537 jpm 1154
			$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1155
			supprimerMiniatures();
1156
		},
1540 jpm 1157
		statusCode: {
1158
			500: function(jqXHR, textStatus, errorThrown) {
1537 jpm 1159
				erreurMsg += "Erreur 500 :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1540 jpm 1160
			}
1537 jpm 1161
		},
1540 jpm 1162
		error: function(jqXHR, textStatus, errorThrown) {
1537 jpm 1163
			erreurMsg += "Erreur Ajax :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1164
			try {
1165
				reponse = jQuery.parseJSON(jqXHR.responseText);
1166
				if (reponse != null) {
1167
					$.each(reponse, function (cle, valeur) {
1168
						erreurMsg += valeur + "\n";
1169
					});
1170
				}
1171
			} catch(e) {
1172
				erreurMsg += "L'erreur n'était pas en JSON.";
1173
			}
1174
		},
1540 jpm 1175
		complete: function(jqXHR, textStatus) {
1537 jpm 1176
			$('#chargement').hide();
1177
			var debugMsg = extraireEnteteDebug(jqXHR);
1178
 
1179
			if (erreurMsg != '') {
1180
				if (DEBUG) {
1181
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1182
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + '</pre>');
1183
				}
1540 jpm 1184
				var hrefCourriel = 'mailto:cel@tela-botanica.org?' +
1185
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET +
1186
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg;
1537 jpm 1187
 
1188
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1189
					.find('.courriel-erreur')
1190
					.attr('href', hrefCourriel)
1191
					.end()
1192
					.html());
1193
				$('#dialogue-obs-transaction-ko').show();
1194
			} else {
1195
				if (DEBUG) {
1196
					$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + '</pre>');
1197
				}
1198
				$('#dialogue-obs-transaction-ok').show();
1199
			}
1200
			initialiserObs();
1201
		}
1202
	});
1562 jpm 1203
}