Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1964 Rev 1965
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
		showOn: 'button',
817
		showOn: 'button',
818
		buttonImageOnly: true,
818
		buttonImageOnly: true,
819
		buttonImage: CALENDRIER_ICONE_URL,
819
		buttonImage: CALENDRIER_ICONE_URL,
820
		buttonText: 'Afficher le calendrier pour saisir la date.',
820
		buttonText: 'Afficher le calendrier pour saisir la date.',
821
		showButtonPanel: true,
821
		showButtonPanel: true,
822
		onSelect: function(date) {
822
		onSelect: function(date) {
823
			$(this).valid();
823
			$(this).valid();
824
		}
824
		}
825
	});
825
	});
826
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
826
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
827
}
827
}
828
 
828
 
829
function fermerPanneauAlert() {
829
function fermerPanneauAlert() {
830
	$(this).parentsUntil('.zone-alerte', '.alert').hide();
830
	$(this).parentsUntil('.zone-alerte', '.alert').hide();
831
}
831
}
832
 
832
 
833
function basculerAffichageAide() {
833
function basculerAffichageAide() {
834
	if ($(this).hasClass('btn-warning')) {
834
	if ($(this).hasClass('btn-warning')) {
835
		$('.has-tooltip').tooltip('enable');
835
		$('.has-tooltip').tooltip('enable');
836
		$(this).removeClass('btn-warning').addClass('btn-success');
836
		$(this).removeClass('btn-warning').addClass('btn-success');
837
		$('#btn-aide-txt', this).text("Désactiver l'aide");
837
		$('#btn-aide-txt', this).text("Désactiver l'aide");
838
	} else {
838
	} else {
839
		$('.has-tooltip').tooltip('disable');
839
		$('.has-tooltip').tooltip('disable');
840
		$(this).removeClass('btn-success').addClass('btn-warning');
840
		$(this).removeClass('btn-success').addClass('btn-warning');
841
		$('#btn-aide-txt', this).text("Activer l'aide");
841
		$('#btn-aide-txt', this).text("Activer l'aide");
842
	}
842
	}
843
}
843
}
844
 
844
 
845
function basculerAffichageCoord() {
845
function basculerAffichageCoord() {
846
	$('.afficher-coord-action').toggle();
846
	$('.afficher-coord-action').toggle();
847
	$('#coordonnees-geo').toggle('slow');
847
	$('#coordonnees-geo').toggle('slow');
848
	//valeur false pour que le lien ne soit pas suivi
848
	//valeur false pour que le lien ne soit pas suivi
849
	return false;
849
	return false;
850
}
850
}
851
 
851
 
852
//+----------------------------------------------------------------------------------------------------------+
852
//+----------------------------------------------------------------------------------------------------------+
853
//CRÉER OBS : Gestion des obs => OK
853
//CRÉER OBS : Gestion des obs => OK
854
 
854
 
855
var obsNbre = 0;
855
var obsNbre = 0;
856
 
856
 
857
function ajouterObs() {
857
function ajouterObs() {
858
	if (validerFormulaire() == true) {
858
	if (validerFormulaire() == true) {
859
		obsNbre = obsNbre + 1;
859
		obsNbre = obsNbre + 1;
860
		$('.obs-nbre').text(obsNbre);
860
		$('.obs-nbre').text(obsNbre);
861
		$('.obs-nbre').triggerHandler('changement');
861
		$('.obs-nbre').triggerHandler('changement');
862
		afficherObs();
862
		afficherObs();
863
		stockerObsData();
863
		stockerObsData();
864
		supprimerMiniatures();
864
		supprimerMiniatures();
865
	} else {
865
	} else {
866
		// Affichage de tous les panneau cachés avec champ obligatoire
866
		// Affichage de tous les panneau cachés avec champ obligatoire
867
		var debRue = (latLngDeb == undefined || latLngDeb == latLngFin) ? false : true,
867
		var debRue = (latLngDeb == undefined || latLngDeb == latLngFin) ? false : true,
868
			finRue = (latLngFin == undefined || latLngDeb == latLngFin) ? false : true;
868
			finRue = (latLngFin == undefined || latLngDeb == latLngFin) ? false : true;
869
		if (debRue == false || finRue == false) {
869
		if (debRue == false || finRue == false) {
870
			afficherPanneau('#dialogue-form-invalide-rue');
870
			afficherPanneau('#dialogue-form-invalide-rue');
871
		} else {
871
		} else {
872
			afficherPanneau('#dialogue-form-invalide');
872
			afficherPanneau('#dialogue-form-invalide');
873
		}
873
		}
874
		montrerFormIdentite();
874
		montrerFormIdentite();
875
	}
875
	}
876
}
876
}
877
 
877
 
878
function afficherObs() {
878
function afficherObs() {
879
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
879
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
880
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
880
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
881
		taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
881
		taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
882
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
882
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
883
		commune = $('#commune-nom').text(),
883
		commune = $('#commune-nom').text(),
884
		codeInsee = $('#commune-code-insee').text(),
884
		codeInsee = $('#commune-code-insee').text(),
885
		station = $('input[name="adresse"]').val(),
885
		station = $('input[name="adresse"]').val(),
886
		lat = $('input[name="latitude"]').val(),
886
		lat = $('input[name="latitude"]').val(),
887
		lng = $('input[name="longitude"]').val(),
887
		lng = $('input[name="longitude"]').val(),
888
		date = $('#date').val(),
888
		date = $('#date').val(),
889
		milieux = getMilieux(),
889
		milieux = getMilieux(),
890
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
890
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
891
	
891
	
892
	$('#liste-obs').prepend(
892
	$('#liste-obs').prepend(
893
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">' +
893
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">' +
894
			'<div class="span12">' +
894
			'<div class="span12">' +
895
				'<div class="well">' +
895
				'<div class="well">' +
896
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" ' +
896
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" ' +
897
						'title="Supprimer cette observation de la liste à transmettre">' +
897
						'title="Supprimer cette observation de la liste à transmettre">' +
898
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">' +
898
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">' +
899
							'<i class="icon-trash icon-white"></i>' +
899
							'<i class="icon-trash icon-white"></i>' +
900
						'</button>' +
900
						'</button>' +
901
					'</div> ' +	
901
					'</div> ' +	
902
					'<div class="row-fluid">' +	
902
					'<div class="row-fluid">' +	
903
						'<div class="span2 obs-miniatures">' +
903
						'<div class="span2 obs-miniatures">' +
904
							ajouterImgMiniatureAuTransfert() +
904
							ajouterImgMiniatureAuTransfert() +
905
						'</div>'+
905
						'</div>'+
906
						'<div class="span7">' +
906
						'<div class="span7">' +
907
							'<ul class="unstyled">' +
907
							'<ul class="unstyled">' +
908
								'<li>'+
908
								'<li>'+
909
									'<span class="nom-sci">' + taxon + '</span> ' +
909
									'<span class="nom-sci">' + taxon + '</span> ' +
910
									formaterNumNomSel(numNomSel) +
910
									formaterNumNomSel(numNomSel) +
911
									' observé à <br />' +
911
									' observé à <br />' +
912
									'<span class="station">' + station + '</span><br /> ' +
912
									'<span class="station">' + station + '</span><br /> ' +
913
									'<span class="commune">' + commune + '</span> ' +
913
									'<span class="commune">' + commune + '</span> ' +
914
									'(' + codeInsee + ') ' +
914
									'(' + codeInsee + ') ' +
915
									' le ' +
915
									' le ' +
916
									'<span class="date">' + date + '</span>' +
916
									'<span class="date">' + date + '</span>' +
917
								'</li>' +
917
								'</li>' +
918
								'<li>' +
918
								'<li>' +
919
									'Milieux : ' + milieux + ' ' + ' ; ' +
919
									'Milieux : ' + milieux + ' ' + ' ; ' +
920
								'</li>' +
920
								'</li>' +
921
								'<li>' +
921
								'<li>' +
922
									'Notes : ' + notes + 
922
									'Notes : ' + notes + 
923
								'</li>' +
923
								'</li>' +
924
							'</ul>' +
924
							'</ul>' +
925
						'</div>' +
925
						'</div>' +
926
					'</div>' +
926
					'</div>' +
927
				'</div>' +
927
				'</div>' +
928
			'</div>'+
928
			'</div>'+
929
		'</div>');
929
		'</div>');
930
}
930
}
931
 
931
 
932
function getMilieux() {
932
function getMilieux() {
933
	var milieuxStr = '',
933
	var milieuxStr = '',
934
		milieux = [];
934
		milieux = [];
935
	$('.cb-milieux:checked').each(function() {
935
	$('.cb-milieux:checked').each(function() {
936
		milieux.push($(this).val());
936
		milieux.push($(this).val());
937
	});
937
	});
938
	
938
	
939
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
939
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
940
	return milieuxStr;
940
	return milieuxStr;
941
}
941
}
942
 
942
 
943
function ajouterImgMiniatureAuTransfert() {
943
function ajouterImgMiniatureAuTransfert() {
944
	var html = '',
944
	var html = '',
945
		miniatures = '',
945
		miniatures = '',
946
		indicateurs = '',
946
		indicateurs = '',
947
		premiere = true,
947
		premiere = true,
948
		numero = 1;
948
		numero = 1;
949
	if ($('#miniatures img').length == 0) {
949
	if ($('#miniatures img').length == 0) {
950
		html = '<img class="miniature" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';
950
		html = '<img class="miniature" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';
951
	} else if ($('#miniatures img').length >= 1) {
951
	} else if ($('#miniatures img').length >= 1) {
952
		$('#miniatures img').each(function() {
952
		$('#miniatures img').each(function() {
953
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
953
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
954
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
954
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
955
				src = $(this).attr('src'),
955
				src = $(this).attr('src'),
956
				alt = $(this).attr('alt');
956
				alt = $(this).attr('alt');
957
			
957
			
958
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
958
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
959
			miniatures += miniature;
959
			miniatures += miniature;
960
			
960
			
961
			var indicateurActif = premiere ? 'active' : '';
961
			var indicateurActif = premiere ? 'active' : '';
962
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
962
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
963
			indicateurs += indicateur;
963
			indicateurs += indicateur;
964
		
964
		
965
			premiere = false;
965
			premiere = false;
966
		});
966
		});
967
		
967
		
968
		if ($('#miniatures img').length == 1) {
968
		if ($('#miniatures img').length == 1) {
969
			html = miniatures;
969
			html = miniatures;
970
		} else {
970
		} else {
971
			html = 
971
			html = 
972
				'<div class="defilement">' +
972
				'<div class="defilement">' +
973
					miniatures +
973
					miniatures +
974
					'<a class="defilement-control-zone gauche">' +
974
					'<a class="defilement-control-zone gauche">' +
975
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
975
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
976
					'</a>' +
976
					'</a>' +
977
					'<a class="defilement-control-zone droite">' +
977
					'<a class="defilement-control-zone droite">' +
978
					'	<span class="defilement-control droite hidden">&#62;</span>' +
978
					'	<span class="defilement-control droite hidden">&#62;</span>' +
979
					'</a>' +
979
					'</a>' +
980
					'<ol class="defilement-indicateurs">' + indicateurs + '</ol>' +
980
					'<ol class="defilement-indicateurs">' + indicateurs + '</ol>' +
981
				'</div>';
981
				'</div>';
982
		}
982
		}
983
	}
983
	}
984
	return html;
984
	return html;
985
}
985
}
986
 
986
 
987
function defilerMiniatures(element) {
987
function defilerMiniatures(element) {
988
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
988
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
989
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
989
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
990
	var miniatureAffichee = miniatureSelectionne;
990
	var miniatureAffichee = miniatureSelectionne;
991
	
991
	
992
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
992
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
993
	indicateurActif.removeClass('active');
993
	indicateurActif.removeClass('active');
994
	
994
	
995
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
995
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
996
		if (miniatureSelectionne.prev('.miniature').length != 0) {
996
		if (miniatureSelectionne.prev('.miniature').length != 0) {
997
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
997
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
998
			indicateurActif.prev().addClass('active');
998
			indicateurActif.prev().addClass('active');
999
		} else {
999
		} else {
1000
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').last();
1000
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').last();
1001
			indicateurActif.siblings().last().addClass('active');
1001
			indicateurActif.siblings().last().addClass('active');
1002
		}
1002
		}
1003
	} else {
1003
	} else {
1004
		if (miniatureSelectionne.next('.miniature').length != 0) {
1004
		if (miniatureSelectionne.next('.miniature').length != 0) {
1005
			miniatureAffichee = miniatureSelectionne.next('.miniature');
1005
			miniatureAffichee = miniatureSelectionne.next('.miniature');
1006
			indicateurActif.next().addClass('active');
1006
			indicateurActif.next().addClass('active');
1007
		} else {
1007
		} else {
1008
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').first();
1008
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').first();
1009
			indicateurActif.siblings().first().addClass('active');
1009
			indicateurActif.siblings().first().addClass('active');
1010
		}
1010
		}
1011
	}
1011
	}
1012
	miniatureAffichee.addClass('miniature-selectionnee').removeClass('miniature-cachee');
1012
	miniatureAffichee.addClass('miniature-selectionnee').removeClass('miniature-cachee');
1013
}
1013
}
1014
 
1014
 
1015
function formaterNumNomSel(numNomSel) {
1015
function formaterNumNomSel(numNomSel) {
1016
	var nn = '';
1016
	var nn = '';
1017
	if (numNomSel == undefined) {
1017
	if (numNomSel == undefined) {
1018
		nn = '<span class="alert-error">[non lié au référentiel]</span>';
1018
		nn = '<span class="alert-error">[non lié au référentiel]</span>';
1019
	} else {
1019
	} else {
1020
		nn = '<span class="nn">[nn'+numNomSel+']</span>';
1020
		nn = '<span class="nn">[nn'+numNomSel+']</span>';
1021
	}
1021
	}
1022
	return nn;
1022
	return nn;
1023
}
1023
}
1024
 
1024
 
1025
function surChangementReferentiel() {
1025
function surChangementReferentiel() {
1026
	NOM_SCI_PROJET = $('#referentiel').val();
1026
	NOM_SCI_PROJET = $('#referentiel').val();
1027
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1027
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1028
	$('#taxon').val('');
1028
	$('#taxon').val('');
1029
}
1029
}
1030
 
1030
 
1031
function surChangementNbreObs() {
1031
function surChangementNbreObs() {
1032
	if (obsNbre == 0) {
1032
	if (obsNbre == 0) {
1033
		$('#transmettre-obs').attr('disabled', 'disabled');
1033
		$('#transmettre-obs').attr('disabled', 'disabled');
1034
		$('#ajouter-obs').removeAttr('disabled');
1034
		$('#ajouter-obs').removeAttr('disabled');
1035
		$('#zone-liste-obs').addClass('hidden');
1035
		$('#zone-liste-obs').addClass('hidden');
1036
	} else {
1036
	} else {
1037
		$('#zone-liste-obs').removeClass('hidden');
1037
		$('#zone-liste-obs').removeClass('hidden');
1038
		
1038
		
1039
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1039
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1040
			$('#transmettre-obs').removeAttr('disabled');
1040
			$('#transmettre-obs').removeAttr('disabled');
1041
			$('#ajouter-obs').removeAttr('disabled');
1041
			$('#ajouter-obs').removeAttr('disabled');
1042
		} else if (obsNbre >= OBS_MAX_NBRE) {
1042
		} else if (obsNbre >= OBS_MAX_NBRE) {
1043
			$('#ajouter-obs').attr('disabled', 'disabled');
1043
			$('#ajouter-obs').attr('disabled', 'disabled');
1044
			afficherPanneau('#dialogue-bloquer-creer-obs');
1044
			afficherPanneau('#dialogue-bloquer-creer-obs');
1045
		}
1045
		}
1046
	}
1046
	}
1047
}
1047
}
1048
 
1048
 
1049
function supprimerObs() {
1049
function supprimerObs() {
1050
	var obsId = $(this).val();
1050
	var obsId = $(this).val();
1051
	// Problème avec IE 6 et 7
1051
	// Problème avec IE 6 et 7
1052
	if (obsId == 'Supprimer') {
1052
	if (obsId == 'Supprimer') {
1053
		obsId = $(this).attr('title');
1053
		obsId = $(this).attr('title');
1054
	}
1054
	}
1055
	obsNbre = obsNbre - 1;
1055
	obsNbre = obsNbre - 1;
1056
	$('.obs-nbre').text(obsNbre);
1056
	$('.obs-nbre').text(obsNbre);
1057
	$('.obs-nbre').triggerHandler('changement');
1057
	$('.obs-nbre').triggerHandler('changement');
1058
	
1058
	
1059
	$('.obs'+obsId).remove();
1059
	$('.obs'+obsId).remove();
1060
	$('#liste-obs').removeData('obsId' + obsId);
1060
	$('#liste-obs').removeData('obsId' + obsId);
1061
}
1061
}
1062
 
1062
 
1063
function initialiserObs() {
1063
function initialiserObs() {
1064
	obsNbre = 0;
1064
	obsNbre = 0;
1065
	$('.obs-nbre').text(obsNbre);
1065
	$('.obs-nbre').text(obsNbre);
1066
	$('.obs-nbre').triggerHandler('changement');
1066
	$('.obs-nbre').triggerHandler('changement');
1067
	$('#liste-obs').removeData();
1067
	$('#liste-obs').removeData();
1068
	$('.obs').remove();
1068
	$('.obs').remove();
1069
	$('#dialogue-bloquer-creer-obs').hide();
1069
	$('#dialogue-bloquer-creer-obs').hide();
1070
}
1070
}
1071
 
1071
 
1072
function stockerObsData() {
1072
function stockerObsData() {
1073
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
1073
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
1074
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
1074
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
1075
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
1075
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
1076
		nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
1076
		nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
1077
		nomRet = nomHorsListe ? $('#taxon').data('nomRet') : taxons[numNomSel]['nom_ret'],
1077
		nomRet = nomHorsListe ? $('#taxon').data('nomRet') : taxons[numNomSel]['nom_ret'],
1078
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1078
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1079
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1079
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1080
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1080
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1081
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1081
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1082
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1082
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1083
	
1083
	
1084
	$('#liste-obs').data('obsId'+obsNbre, {
1084
	$('#liste-obs').data('obsId'+obsNbre, {
1085
		'date': $('#date').val(), 
1085
		'date': $('#date').val(), 
1086
		'notes': notes,
1086
		'notes': notes,
1087
		
1087
		
1088
		'station': $('input[name="adresse"]').val(),
1088
		'station': $('input[name="adresse"]').val(),
1089
		'latitude': $('#latitude').val(),
1089
		'latitude': $('#latitude').val(),
1090
		'longitude': $('#longitude').val(),
1090
		'longitude': $('#longitude').val(),
1091
		'commune_nom': $('#commune-nom').text(),
1091
		'commune_nom': $('#commune-nom').text(),
1092
		'commune_code_insee': $('#commune-code-insee').text(),
1092
		'commune_code_insee': $('#commune-code-insee').text(),
1093
		
1093
		
1094
		'nom_sel': nomSel,
1094
		'nom_sel': nomSel,
1095
		'num_nom_sel': numNomSel,
1095
		'num_nom_sel': numNomSel,
1096
		'nom_ret': nomRet,
1096
		'nom_ret': nomRet,
1097
		'num_nom_ret': numNomRet,
1097
		'num_nom_ret': numNomRet,
1098
		'num_taxon': numTaxon,
1098
		'num_taxon': numTaxon,
1099
		'famille': famille,
1099
		'famille': famille,
1100
		'referentiel': referentiel,
1100
		'referentiel': referentiel,
1101
		
1101
		
1102
		'milieu': getMilieux(),
1102
		'milieu': getMilieux(),
1103
		
1103
		
1104
		// Ajout des champs images
1104
		// Ajout des champs images
1105
		'image_nom': getNomsImgsOriginales(),
1105
		'image_nom': getNomsImgsOriginales(),
1106
		
1106
		
1107
		// Ajout des champs étendus de l'obs
1107
		// Ajout des champs étendus de l'obs
1108
		'obs_etendue': getObsChpEtendus()
1108
		'obs_etendue': getObsChpEtendus()
1109
	});
1109
	});
1110
	if (DEBUG) {
1110
	if (DEBUG) {
1111
		console.log($('#liste-obs').data('obsId'+obsNbre));
1111
		console.log($('#liste-obs').data('obsId'+obsNbre));
1112
	}
1112
	}
1113
}
1113
}
1114
 
1114
 
1115
function getNomsImgsOriginales() {
1115
function getNomsImgsOriginales() {
1116
	var noms = new Array();
1116
	var noms = new Array();
1117
	$('.miniature-img').each(function() {
1117
	$('.miniature-img').each(function() {
1118
		noms.push($(this).attr('alt'));
1118
		noms.push($(this).attr('alt'));
1119
	});
1119
	});
1120
	return noms;
1120
	return noms;
1121
}
1121
}
1122
 
1122
 
1123
function getObsChpEtendus() {
1123
function getObsChpEtendus() {
1124
	var champs = [];
1124
	var champs = [];
1125
	if (latLngDeb != undefined) {
1125
	if (latLngDeb != undefined) {
1126
		var latitudeDebutRue = {cle: 'latitudeDebutRue', label: 'Latitude du début de la rue', valeur: latLngDeb.lat().toFixed(5)};
1126
		var latitudeDebutRue = {cle: 'latitudeDebutRue', label: 'Latitude du début de la rue', valeur: latLngDeb.lat().toFixed(5)};
1127
		champs.push(latitudeDebutRue);
1127
		champs.push(latitudeDebutRue);
1128
		var longitudeDebutRue = {cle: 'longitudeDebutRue', label: 'Longitude du début de la rue', valeur: latLngDeb.lng().toFixed(5)};
1128
		var longitudeDebutRue = {cle: 'longitudeDebutRue', label: 'Longitude du début de la rue', valeur: latLngDeb.lng().toFixed(5)};
1129
		champs.push(longitudeDebutRue);
1129
		champs.push(longitudeDebutRue);
1130
	}
1130
	}
1131
	if (latLngFin != undefined) {
1131
	if (latLngFin != undefined) {
1132
		var latitudeFinRue = {cle: 'latitudeFinRue', label: 'Latitude de fin de la rue', valeur: latLngFin.lat().toFixed(5)};
1132
		var latitudeFinRue = {cle: 'latitudeFinRue', label: 'Latitude de fin de la rue', valeur: latLngFin.lat().toFixed(5)};
1133
		champs.push(latitudeFinRue);
1133
		champs.push(latitudeFinRue);
1134
		var longitudeFinRue = {cle: 'longitudeFinRue', label: 'Longitude de fin de la rue', valeur: latLngFin.lng().toFixed(5)};
1134
		var longitudeFinRue = {cle: 'longitudeFinRue', label: 'Longitude de fin de la rue', valeur: latLngFin.lng().toFixed(5)};
1135
		champs.push(longitudeFinRue);
1135
		champs.push(longitudeFinRue);
1136
	}
1136
	}
1137
	
1137
	
1138
	$('.obs-chp-etendu').each(function() {
1138
	$('.obs-chp-etendu').each(function() {
1139
		var valeur = $(this).val(),
1139
		var valeur = $(this).val(),
1140
			cle = $(this).attr('name'),
1140
			cle = $(this).attr('name'),
1141
			label = $(this).data('label');
1141
			label = $(this).data('label');
1142
		if (valeur != '') {
1142
		if (valeur != '') {
1143
			var chpEtendu = {cle: cle, label: label, valeur: valeur};
1143
			var chpEtendu = {cle: cle, label: label, valeur: valeur};
1144
			champs.push(chpEtendu);
1144
			champs.push(chpEtendu);
1145
		}
1145
		}
1146
	});
1146
	});
1147
	return champs;
1147
	return champs;
1148
}
1148
}
1149
 
1149
 
1150
//+----------------------------------------------------------------------------------------------------------+
1150
//+----------------------------------------------------------------------------------------------------------+
1151
//TRANSFERER OBS : envoie des obs au CEL => OK
1151
//TRANSFERER OBS : envoie des obs au CEL => OK
1152
 
1152
 
1153
function transmettreObs() {
1153
function transmettreObs() {
1154
	var observations = $('#liste-obs').data();
1154
	var observations = $('#liste-obs').data();
1155
	
1155
	
1156
	if (observations == undefined || jQuery.isEmptyObject(observations)) {
1156
	if (observations == undefined || jQuery.isEmptyObject(observations)) {
1157
		afficherPanneau('#dialogue-zero-obs');
1157
		afficherPanneau('#dialogue-zero-obs');
1158
	} else {
1158
	} else {
1159
		observations['projet'] = TAG_PROJET;
1159
		observations['projet'] = TAG_PROJET;
1160
		observations['tag-obs'] = TAG_OBS;
1160
		observations['tag-obs'] = TAG_OBS;
1161
		observations['tag-img'] = TAG_IMG;
1161
		observations['tag-img'] = TAG_IMG;
1162
		
1162
		
1163
		var utilisateur = new Object();
1163
		var utilisateur = new Object();
1164
		utilisateur.id_utilisateur = $('#id_utilisateur').val();
1164
		utilisateur.id_utilisateur = $('#id_utilisateur').val();
1165
		utilisateur.prenom = $('#prenom').val();
1165
		utilisateur.prenom = $('#prenom').val();
1166
		utilisateur.nom = $('#nom').val();
1166
		utilisateur.nom = $('#nom').val();
1167
		utilisateur.courriel = $('#courriel').val();
1167
		utilisateur.courriel = $('#courriel').val();
1168
		observations['utilisateur'] = utilisateur;
1168
		observations['utilisateur'] = utilisateur;
-
 
1169
		
-
 
1170
		if (DEBUG) {
-
 
1171
			console.log(observations);
-
 
1172
		}
1169
		envoyerObsAuCel(observations);
1173
		envoyerObsAuCel(observations);
1170
	}
1174
	}
1171
	return false;
1175
	return false;
1172
}
1176
}
1173
 
1177
 
1174
function envoyerObsAuCel(observations) {
1178
function envoyerObsAuCel(observations) {
1175
	var erreurMsg = '',
1179
	var erreurMsg = '',
1176
		debugNonJson = '';
1180
		debugNonJson = '';
1177
	$.ajax({
1181
	$.ajax({
1178
		url: SERVICE_SAISIE_URL,
1182
		url: SERVICE_SAISIE_URL,
1179
		type: 'POST',
1183
		type: 'POST',
1180
		data: observations,
1184
		data: observations,
1181
		dataType: 'json',
1185
		dataType: 'json',
1182
		beforeSend: function() {
1186
		beforeSend: function() {
1183
			$('#dialogue-obs-transaction-ko').hide();
1187
			$('#dialogue-obs-transaction-ko').hide();
1184
			$('#dialogue-obs-transaction-ok').hide();
1188
			$('#dialogue-obs-transaction-ok').hide();
1185
			$('.alert-txt').empty();
1189
			$('.alert-txt').empty();
1186
			$('#chargement').show();
1190
			$('#chargement').show();
1187
		},
1191
		},
1188
		success: function(data, textStatus, jqXHR) {
1192
		success: function(data, textStatus, jqXHR) {
1189
			$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1193
			$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1190
			supprimerMiniatures();
1194
			supprimerMiniatures();
1191
		},
1195
		},
1192
		statusCode: {
1196
		statusCode: {
1193
			500: function(jqXHR, textStatus, errorThrown) {
1197
			500: function(jqXHR, textStatus, errorThrown) {
1194
				erreurMsg += "Erreur 500 :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1198
				erreurMsg += "Erreur 500 :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1195
			}
1199
			}
1196
		},
1200
		},
1197
		error: function(jqXHR, textStatus, errorThrown) {
1201
		error: function(jqXHR, textStatus, errorThrown) {
1198
			erreurMsg += "Erreur Ajax :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1202
			erreurMsg += "Erreur Ajax :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1199
			try {
1203
			try {
1200
				reponse = jQuery.parseJSON(jqXHR.responseText);
1204
				reponse = jQuery.parseJSON(jqXHR.responseText);
1201
				if (reponse != null) {
1205
				if (reponse != null) {
1202
					$.each(reponse, function (cle, valeur) {
1206
					$.each(reponse, function (cle, valeur) {
1203
						erreurMsg += valeur + "\n";
1207
						erreurMsg += valeur + "\n";
1204
					});
1208
					});
1205
				}
1209
				}
1206
			} catch(e) {
1210
			} catch(e) {
1207
				erreurMsg += "L'erreur n'est pas en JSON.";
1211
				erreurMsg += "L'erreur n'est pas en JSON.";
1208
				debugNonJson = jqXHR.responseText;
1212
				debugNonJson = jqXHR.responseText;
1209
			}
1213
			}
1210
		},
1214
		},
1211
		complete: function(jqXHR, textStatus) {
1215
		complete: function(jqXHR, textStatus) {
1212
			$('#chargement').hide();
1216
			$('#chargement').hide();
1213
			var debugMsg = extraireEnteteDebug(jqXHR);
1217
			var debugMsg = extraireEnteteDebug(jqXHR);
1214
			
1218
			
1215
			if (erreurMsg != '') {
1219
			if (erreurMsg != '') {
1216
				if (DEBUG) {
1220
				if (DEBUG) {
1217
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1221
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1218
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1222
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1219
				}
1223
				}
1220
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' + 
1224
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' + 
1221
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET + 
1225
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET + 
1222
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1226
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1223
				
1227
				
1224
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1228
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1225
					.find('.courriel-erreur')
1229
					.find('.courriel-erreur')
1226
					.attr('href', hrefCourriel)
1230
					.attr('href', hrefCourriel)
1227
					.end()
1231
					.end()
1228
					.html());
1232
					.html());
1229
				$('#dialogue-obs-transaction-ko').show();
1233
				$('#dialogue-obs-transaction-ko').show();
1230
			} else {
1234
			} else {
1231
				if (DEBUG) {
1235
				if (DEBUG) {
1232
					$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + debugNonJson + '</pre>');
1236
					$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + debugNonJson + '</pre>');
1233
				}
1237
				}
1234
				$('#dialogue-obs-transaction-ok').show();
1238
				$('#dialogue-obs-transaction-ok').show();
1235
			}
1239
			}
1236
			initialiserObs();
1240
			initialiserObs();
1237
		}
1241
		}
1238
	});
1242
	});
1239
}
1243
}