Subversion Repositories eFlore/Applications.cel

Rev

Rev 1987 | Rev 2006 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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