Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1963 Rev 1964
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
	console.log('Selected taxon:'+$('#taxon-liste option:selected').val());
682
		console.log('Selected taxon:'+$('#taxon-liste option:selected').val());
682
	
683
	}
683
 
684
 
684
	// Validation du formulaire
685
	// Validation du formulaire
685
	configurerFormValidator();
686
	configurerFormValidator();
686
	definirReglesFormValidator();
687
	definirReglesFormValidator();
687
	
688
	
688
	// Interaction sur le formulaire obs
689
	// Interaction sur le formulaire obs
689
	configurerDatePicker('#date');
690
	configurerDatePicker('#date');
690
	$('a.afficher-coord').on('click', basculerAffichageCoord);
691
	$('a.afficher-coord').on('click', basculerAffichageCoord);
691
	$('.cb-milieux').on('click', function(event) {
692
	$('.cb-milieux').on('click', function(event) {
692
		$(this).valid();
693
		$(this).valid();
693
		event.stopPropagation();
694
		event.stopPropagation();
694
	});
695
	});
695
	$('#ajouter-obs').on('click', ajouterObs);
696
	$('#ajouter-obs').on('click', ajouterObs);
696
	$('.obs-nbre').on('changement', surChangementNbreObs);
697
	$('.obs-nbre').on('changement', surChangementNbreObs);
697
	$('body').on('click', '.supprimer-obs', supprimerObs);
698
	$('body').on('click', '.supprimer-obs', supprimerObs);
698
	$('#transmettre-obs').on('click', transmettreObs);
699
	$('#transmettre-obs').on('click', transmettreObs);
699
	
700
	
700
	// Défilement des photos
701
	// Défilement des photos
701
	$('body').on('click', '.defilement-control-zone', function(event) {
702
	$('body').on('click', '.defilement-control-zone', function(event) {
702
		defilerMiniatures($(this));
703
		defilerMiniatures($(this));
703
	});
704
	});
704
	$('body').on('mouseover', '.defilement-control-zone', function(event) {
705
	$('body').on('mouseover', '.defilement-control-zone', function(event) {
705
		$('.defilement-control', this).removeClass('hidden');
706
		$('.defilement-control', this).removeClass('hidden');
706
	});
707
	});
707
	$('body').on('mouseout', '.defilement-control-zone', function(event) {
708
	$('body').on('mouseout', '.defilement-control-zone', function(event) {
708
		$('.defilement-control', this).addClass('hidden');
709
		$('.defilement-control', this).addClass('hidden');
709
	});
710
	});
710
});
711
});
711
 
712
 
712
function configurerFormValidator() {
713
function configurerFormValidator() {
713
	$.validator.addMethod(
714
	$.validator.addMethod(
714
		'dateCel', 
715
		'dateCel', 
715
		function (value, element) { 
716
		function (value, element) { 
716
			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)); 
717
		}, 
718
		}, 
718
		'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.');
719
	
720
	
720
	$.extend($.validator.defaults, {
721
	$.extend($.validator.defaults, {
721
		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;
722
		highlight: function(element) {
723
		highlight: function(element) {
723
			$(element).closest('.control-group').removeClass('success').addClass('error');
724
			$(element).closest('.control-group').removeClass('success').addClass('error');
724
		},
725
		},
725
		success: function(element) {
726
		success: function(element) {
726
			element.text('OK!').addClass('valid');
727
			element.text('OK!').addClass('valid');
727
			element.closest('.control-group').removeClass('error').addClass('success');
728
			element.closest('.control-group').removeClass('error').addClass('success');
728
			
729
			
729
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
730
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
730
				// 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é
731
				if ($('#taxon').data('value') != $('#taxon').val()) {
732
				if ($('#taxon').data('value') != $('#taxon').val()) {
732
					$('#taxon').data('numNomSel', '');
733
					$('#taxon').data('numNomSel', '');
733
					$('#taxon').data('nomRet', '');
734
					$('#taxon').data('nomRet', '');
734
					$('#taxon').data('numNomRet', '');
735
					$('#taxon').data('numNomRet', '');
735
					$('#taxon').data('nt', '');
736
					$('#taxon').data('nt', '');
736
					$('#taxon').data('famille', '');
737
					$('#taxon').data('famille', '');
737
				}
738
				}
738
			}
739
			}
739
		}
740
		}
740
	});
741
	});
741
}
742
}
742
 
743
 
743
function definirReglesFormValidator() {
744
function definirReglesFormValidator() {
744
	$('#form-observateur').validate({
745
	$('#form-observateur').validate({
745
		rules: {
746
		rules: {
746
			courriel: {
747
			courriel: {
747
				required: true,
748
				required: true,
748
				email: true},
749
				email: true},
749
			courriel_confirmation: {
750
			courriel_confirmation: {
750
				required: true,
751
				required: true,
751
				equalTo: '#courriel'},
752
				equalTo: '#courriel'},
752
			prenom: {
753
			prenom: {
753
				required: true},
754
				required: true},
754
			nom: {
755
			nom: {
755
				required: true}
756
				required: true}
756
		}
757
		}
757
	});
758
	});
758
	$('#form-obs').validate({
759
	$('#form-obs').validate({
759
		rules: {
760
		rules: {
760
			station: {
761
			station: {
761
				required: true},
762
				required: true},
762
			latitude : {
763
			latitude : {
763
				required: true,
764
				required: true,
764
				range: [-90, 90]},
765
				range: [-90, 90]},
765
			longitude: {
766
			longitude: {
766
				required: true,
767
				required: true,
767
				range: [-180, 180]},
768
				range: [-180, 180]},
768
			date: {
769
			date: {
769
				required: true,
770
				required: true,
770
				'dateCel' : true},
771
				'dateCel' : true},
771
			coteRue: {
772
			coteRue: {
772
				required: true},
773
				required: true},
773
			'taxon-liste': {
774
			'taxon-liste': {
774
				required: true},
775
				required: true},
775
			'milieux[]': {
776
			'milieux[]': {
776
				required: true,
777
				required: true,
777
				minlength: 1}
778
				minlength: 1}
778
		},
779
		},
779
		errorPlacement: function(error, element) {
780
		errorPlacement: function(error, element) {
780
			if (element.attr('name') == 'date') {
781
			if (element.attr('name') == 'date') {
781
				element.parent('.input-prepend').after(error);
782
				element.parent('.input-prepend').after(error);
782
			} else if (element.attr('name') == 'milieux[]') {
783
			} else if (element.attr('name') == 'milieux[]') {
783
				error.insertAfter('#milieux-controls');
784
				error.insertAfter('#milieux-controls');
784
			} else {
785
			} else {
785
				error.insertAfter(element);
786
				error.insertAfter(element);
786
			}
787
			}
787
		},
788
		},
788
		messages: {
789
		messages: {
789
			'milieu[]': 'Vous devez sélectionner au moins un milieu'
790
			'milieu[]': 'Vous devez sélectionner au moins un milieu'
790
		}
791
		}
791
	});
792
	});
792
}
793
}
793
 
794
 
794
function validerFormulaire() {
795
function validerFormulaire() {
795
	var observateur = $('#form-observateur').valid(),
796
	var observateur = $('#form-observateur').valid(),
796
		obs = $('#form-obs').valid(),
797
		obs = $('#form-obs').valid(),
797
		debRue = (latLngDeb == undefined || latLngDeb == latLngFin) ? false : true,
798
		debRue = (latLngDeb == undefined || latLngDeb == latLngFin) ? false : true,
798
		finRue = (latLngFin == undefined || latLngDeb == latLngFin) ? false : true;
799
		finRue = (latLngFin == undefined || latLngDeb == latLngFin) ? false : true;
799
	var ok = (observateur && obs && debRue && finRue) ? true : false;
800
	var ok = (observateur && obs && debRue && finRue) ? true : false;
800
	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+')');
801
	return ok;
802
	return ok;
802
}
803
}
803
 
804
 
804
function surChangementTaxonListe() {
805
function surChangementTaxonListe() {
805
	if ($('#taxon-liste').val() === '?') {
806
	if ($('#taxon-liste').val() === '?') {
806
		$('#taxon-input-groupe').removeClass('hidden');
807
		$('#taxon-input-groupe').removeClass('hidden');
807
	} else {
808
	} else {
808
		$('#taxon-input-groupe').addClass('hidden');
809
		$('#taxon-input-groupe').addClass('hidden');
809
	}
810
	}
810
}
811
}
811
 
812
 
812
function configurerDatePicker(selector) {
813
function configurerDatePicker(selector) {
813
	$.datepicker.setDefaults($.datepicker.regional['fr']);
814
	$.datepicker.setDefaults($.datepicker.regional['fr']);
814
	$(selector).datepicker({
815
	$(selector).datepicker({
815
		dateFormat: 'dd/mm/yy',
816
		dateFormat: 'dd/mm/yy',
816
		showOn: 'button',
817
		showOn: 'button',
817
		buttonImageOnly: true,
818
		buttonImageOnly: true,
818
		buttonImage: CALENDRIER_ICONE_URL,
819
		buttonImage: CALENDRIER_ICONE_URL,
819
		buttonText: 'Afficher le calendrier pour saisir la date.',
820
		buttonText: 'Afficher le calendrier pour saisir la date.',
820
		showButtonPanel: true,
821
		showButtonPanel: true,
821
		onSelect: function(date) {
822
		onSelect: function(date) {
822
			$(this).valid();
823
			$(this).valid();
823
		}
824
		}
824
	});
825
	});
825
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
826
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
826
}
827
}
827
 
828
 
828
function fermerPanneauAlert() {
829
function fermerPanneauAlert() {
829
	$(this).parentsUntil('.zone-alerte', '.alert').hide();
830
	$(this).parentsUntil('.zone-alerte', '.alert').hide();
830
}
831
}
831
 
832
 
832
function basculerAffichageAide() {
833
function basculerAffichageAide() {
833
	if ($(this).hasClass('btn-warning')) {
834
	if ($(this).hasClass('btn-warning')) {
834
		$('.has-tooltip').tooltip('enable');
835
		$('.has-tooltip').tooltip('enable');
835
		$(this).removeClass('btn-warning').addClass('btn-success');
836
		$(this).removeClass('btn-warning').addClass('btn-success');
836
		$('#btn-aide-txt', this).text("Désactiver l'aide");
837
		$('#btn-aide-txt', this).text("Désactiver l'aide");
837
	} else {
838
	} else {
838
		$('.has-tooltip').tooltip('disable');
839
		$('.has-tooltip').tooltip('disable');
839
		$(this).removeClass('btn-success').addClass('btn-warning');
840
		$(this).removeClass('btn-success').addClass('btn-warning');
840
		$('#btn-aide-txt', this).text("Activer l'aide");
841
		$('#btn-aide-txt', this).text("Activer l'aide");
841
	}
842
	}
842
}
843
}
843
 
844
 
844
function basculerAffichageCoord() {
845
function basculerAffichageCoord() {
845
	$('.afficher-coord-action').toggle();
846
	$('.afficher-coord-action').toggle();
846
	$('#coordonnees-geo').toggle('slow');
847
	$('#coordonnees-geo').toggle('slow');
847
	//valeur false pour que le lien ne soit pas suivi
848
	//valeur false pour que le lien ne soit pas suivi
848
	return false;
849
	return false;
849
}
850
}
850
 
851
 
851
//+----------------------------------------------------------------------------------------------------------+
852
//+----------------------------------------------------------------------------------------------------------+
852
//CRÉER OBS : Gestion des obs => OK
853
//CRÉER OBS : Gestion des obs => OK
853
 
854
 
854
var obsNbre = 0;
855
var obsNbre = 0;
855
 
856
 
856
function ajouterObs() {
857
function ajouterObs() {
857
	if (validerFormulaire() == true) {
858
	if (validerFormulaire() == true) {
858
		obsNbre = obsNbre + 1;
859
		obsNbre = obsNbre + 1;
859
		$('.obs-nbre').text(obsNbre);
860
		$('.obs-nbre').text(obsNbre);
860
		$('.obs-nbre').triggerHandler('changement');
861
		$('.obs-nbre').triggerHandler('changement');
861
		afficherObs();
862
		afficherObs();
862
		stockerObsData();
863
		stockerObsData();
863
		supprimerMiniatures();
864
		supprimerMiniatures();
864
	} else {
865
	} else {
865
		// Affichage de tous les panneau cachés avec champ obligatoire
866
		// Affichage de tous les panneau cachés avec champ obligatoire
866
		var debRue = (latLngDeb == undefined || latLngDeb == latLngFin) ? false : true,
867
		var debRue = (latLngDeb == undefined || latLngDeb == latLngFin) ? false : true,
867
			finRue = (latLngFin == undefined || latLngDeb == latLngFin) ? false : true;
868
			finRue = (latLngFin == undefined || latLngDeb == latLngFin) ? false : true;
868
		if (debRue == false || finRue == false) {
869
		if (debRue == false || finRue == false) {
869
			afficherPanneau('#dialogue-form-invalide-rue');
870
			afficherPanneau('#dialogue-form-invalide-rue');
870
		} else {
871
		} else {
871
			afficherPanneau('#dialogue-form-invalide');
872
			afficherPanneau('#dialogue-form-invalide');
872
		}
873
		}
873
		montrerFormIdentite();
874
		montrerFormIdentite();
874
	}
875
	}
875
}
876
}
876
 
877
 
877
function afficherObs() {
878
function afficherObs() {
878
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
879
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
879
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
880
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
880
		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'),
881
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
882
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
882
		commune = $('#commune-nom').text(),
883
		commune = $('#commune-nom').text(),
883
		codeInsee = $('#commune-code-insee').text(),
884
		codeInsee = $('#commune-code-insee').text(),
884
		station = $('input[name="adresse"]').val(),
885
		station = $('input[name="adresse"]').val(),
885
		lat = $('input[name="latitude"]').val(),
886
		lat = $('input[name="latitude"]').val(),
886
		lng = $('input[name="longitude"]').val(),
887
		lng = $('input[name="longitude"]').val(),
887
		date = $('#date').val(),
888
		date = $('#date').val(),
888
		milieux = getMilieux(),
889
		milieux = getMilieux(),
889
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
890
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
890
	
891
	
891
	$('#liste-obs').prepend(
892
	$('#liste-obs').prepend(
892
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">' +
893
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">' +
893
			'<div class="span12">' +
894
			'<div class="span12">' +
894
				'<div class="well">' +
895
				'<div class="well">' +
895
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" ' +
896
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" ' +
896
						'title="Supprimer cette observation de la liste à transmettre">' +
897
						'title="Supprimer cette observation de la liste à transmettre">' +
897
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">' +
898
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">' +
898
							'<i class="icon-trash icon-white"></i>' +
899
							'<i class="icon-trash icon-white"></i>' +
899
						'</button>' +
900
						'</button>' +
900
					'</div> ' +	
901
					'</div> ' +	
901
					'<div class="row-fluid">' +	
902
					'<div class="row-fluid">' +	
902
						'<div class="span2 obs-miniatures">' +
903
						'<div class="span2 obs-miniatures">' +
903
							ajouterImgMiniatureAuTransfert() +
904
							ajouterImgMiniatureAuTransfert() +
904
						'</div>'+
905
						'</div>'+
905
						'<div class="span7">' +
906
						'<div class="span7">' +
906
							'<ul class="unstyled">' +
907
							'<ul class="unstyled">' +
907
								'<li>'+
908
								'<li>'+
908
									'<span class="nom-sci">' + taxon + '</span> ' +
909
									'<span class="nom-sci">' + taxon + '</span> ' +
909
									formaterNumNomSel(numNomSel) +
910
									formaterNumNomSel(numNomSel) +
910
									' observé à <br />' +
911
									' observé à <br />' +
911
									'<span class="station">' + station + '</span><br /> ' +
912
									'<span class="station">' + station + '</span><br /> ' +
912
									'<span class="commune">' + commune + '</span> ' +
913
									'<span class="commune">' + commune + '</span> ' +
913
									'(' + codeInsee + ') ' +
914
									'(' + codeInsee + ') ' +
914
									' le ' +
915
									' le ' +
915
									'<span class="date">' + date + '</span>' +
916
									'<span class="date">' + date + '</span>' +
916
								'</li>' +
917
								'</li>' +
917
								'<li>' +
918
								'<li>' +
918
									'Milieux : ' + milieux + ' ' + ' ; ' +
919
									'Milieux : ' + milieux + ' ' + ' ; ' +
919
								'</li>' +
920
								'</li>' +
920
								'<li>' +
921
								'<li>' +
921
									'Notes : ' + notes + 
922
									'Notes : ' + notes + 
922
								'</li>' +
923
								'</li>' +
923
							'</ul>' +
924
							'</ul>' +
924
						'</div>' +
925
						'</div>' +
925
					'</div>' +
926
					'</div>' +
926
				'</div>' +
927
				'</div>' +
927
			'</div>'+
928
			'</div>'+
928
		'</div>');
929
		'</div>');
929
}
930
}
930
 
931
 
931
function getMilieux() {
932
function getMilieux() {
932
	var milieuxStr = '',
933
	var milieuxStr = '',
933
		milieux = [];
934
		milieux = [];
934
	$('.cb-milieux:checked').each(function() {
935
	$('.cb-milieux:checked').each(function() {
935
		milieux.push($(this).val());
936
		milieux.push($(this).val());
936
	});
937
	});
937
	
938
	
938
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
939
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
939
	return milieuxStr;
940
	return milieuxStr;
940
}
941
}
941
 
942
 
942
function ajouterImgMiniatureAuTransfert() {
943
function ajouterImgMiniatureAuTransfert() {
943
	var html = '',
944
	var html = '',
944
		miniatures = '',
945
		miniatures = '',
945
		indicateurs = '',
946
		indicateurs = '',
946
		premiere = true,
947
		premiere = true,
947
		numero = 1;
948
		numero = 1;
948
	if ($('#miniatures img').length == 0) {
949
	if ($('#miniatures img').length == 0) {
949
		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+'" />';
950
	} else if ($('#miniatures img').length >= 1) {
951
	} else if ($('#miniatures img').length >= 1) {
951
		$('#miniatures img').each(function() {
952
		$('#miniatures img').each(function() {
952
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
953
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
953
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
954
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
954
				src = $(this).attr('src'),
955
				src = $(this).attr('src'),
955
				alt = $(this).attr('alt');
956
				alt = $(this).attr('alt');
956
			
957
			
957
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
958
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
958
			miniatures += miniature;
959
			miniatures += miniature;
959
			
960
			
960
			var indicateurActif = premiere ? 'active' : '';
961
			var indicateurActif = premiere ? 'active' : '';
961
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
962
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
962
			indicateurs += indicateur;
963
			indicateurs += indicateur;
963
		
964
		
964
			premiere = false;
965
			premiere = false;
965
		});
966
		});
966
		
967
		
967
		if ($('#miniatures img').length == 1) {
968
		if ($('#miniatures img').length == 1) {
968
			html = miniatures;
969
			html = miniatures;
969
		} else {
970
		} else {
970
			html = 
971
			html = 
971
				'<div class="defilement">' +
972
				'<div class="defilement">' +
972
					miniatures +
973
					miniatures +
973
					'<a class="defilement-control-zone gauche">' +
974
					'<a class="defilement-control-zone gauche">' +
974
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
975
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
975
					'</a>' +
976
					'</a>' +
976
					'<a class="defilement-control-zone droite">' +
977
					'<a class="defilement-control-zone droite">' +
977
					'	<span class="defilement-control droite hidden">&#62;</span>' +
978
					'	<span class="defilement-control droite hidden">&#62;</span>' +
978
					'</a>' +
979
					'</a>' +
979
					'<ol class="defilement-indicateurs">' + indicateurs + '</ol>' +
980
					'<ol class="defilement-indicateurs">' + indicateurs + '</ol>' +
980
				'</div>';
981
				'</div>';
981
		}
982
		}
982
	}
983
	}
983
	return html;
984
	return html;
984
}
985
}
985
 
986
 
986
function defilerMiniatures(element) {
987
function defilerMiniatures(element) {
987
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
988
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
988
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
989
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
989
	var miniatureAffichee = miniatureSelectionne;
990
	var miniatureAffichee = miniatureSelectionne;
990
	
991
	
991
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
992
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
992
	indicateurActif.removeClass('active');
993
	indicateurActif.removeClass('active');
993
	
994
	
994
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
995
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
995
		if (miniatureSelectionne.prev('.miniature').length != 0) {
996
		if (miniatureSelectionne.prev('.miniature').length != 0) {
996
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
997
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
997
			indicateurActif.prev().addClass('active');
998
			indicateurActif.prev().addClass('active');
998
		} else {
999
		} else {
999
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').last();
1000
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').last();
1000
			indicateurActif.siblings().last().addClass('active');
1001
			indicateurActif.siblings().last().addClass('active');
1001
		}
1002
		}
1002
	} else {
1003
	} else {
1003
		if (miniatureSelectionne.next('.miniature').length != 0) {
1004
		if (miniatureSelectionne.next('.miniature').length != 0) {
1004
			miniatureAffichee = miniatureSelectionne.next('.miniature');
1005
			miniatureAffichee = miniatureSelectionne.next('.miniature');
1005
			indicateurActif.next().addClass('active');
1006
			indicateurActif.next().addClass('active');
1006
		} else {
1007
		} else {
1007
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').first();
1008
			miniatureAffichee = miniatureSelectionne.siblings('.miniature').first();
1008
			indicateurActif.siblings().first().addClass('active');
1009
			indicateurActif.siblings().first().addClass('active');
1009
		}
1010
		}
1010
	}
1011
	}
1011
	miniatureAffichee.addClass('miniature-selectionnee').removeClass('miniature-cachee');
1012
	miniatureAffichee.addClass('miniature-selectionnee').removeClass('miniature-cachee');
1012
}
1013
}
1013
 
1014
 
1014
function formaterNumNomSel(numNomSel) {
1015
function formaterNumNomSel(numNomSel) {
1015
	var nn = '';
1016
	var nn = '';
1016
	if (numNomSel == undefined) {
1017
	if (numNomSel == undefined) {
1017
		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>';
1018
	} else {
1019
	} else {
1019
		nn = '<span class="nn">[nn'+numNomSel+']</span>';
1020
		nn = '<span class="nn">[nn'+numNomSel+']</span>';
1020
	}
1021
	}
1021
	return nn;
1022
	return nn;
1022
}
1023
}
1023
 
1024
 
1024
function surChangementReferentiel() {
1025
function surChangementReferentiel() {
1025
	NOM_SCI_PROJET = $('#referentiel').val();
1026
	NOM_SCI_PROJET = $('#referentiel').val();
1026
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1027
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1027
	$('#taxon').val('');
1028
	$('#taxon').val('');
1028
}
1029
}
1029
 
1030
 
1030
function surChangementNbreObs() {
1031
function surChangementNbreObs() {
1031
	if (obsNbre == 0) {
1032
	if (obsNbre == 0) {
1032
		$('#transmettre-obs').attr('disabled', 'disabled');
1033
		$('#transmettre-obs').attr('disabled', 'disabled');
1033
		$('#ajouter-obs').removeAttr('disabled');
1034
		$('#ajouter-obs').removeAttr('disabled');
1034
		$('#zone-liste-obs').addClass('hidden');
1035
		$('#zone-liste-obs').addClass('hidden');
1035
	} else {
1036
	} else {
1036
		$('#zone-liste-obs').removeClass('hidden');
1037
		$('#zone-liste-obs').removeClass('hidden');
1037
		
1038
		
1038
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1039
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1039
			$('#transmettre-obs').removeAttr('disabled');
1040
			$('#transmettre-obs').removeAttr('disabled');
1040
			$('#ajouter-obs').removeAttr('disabled');
1041
			$('#ajouter-obs').removeAttr('disabled');
1041
		} else if (obsNbre >= OBS_MAX_NBRE) {
1042
		} else if (obsNbre >= OBS_MAX_NBRE) {
1042
			$('#ajouter-obs').attr('disabled', 'disabled');
1043
			$('#ajouter-obs').attr('disabled', 'disabled');
1043
			afficherPanneau('#dialogue-bloquer-creer-obs');
1044
			afficherPanneau('#dialogue-bloquer-creer-obs');
1044
		}
1045
		}
1045
	}
1046
	}
1046
}
1047
}
1047
 
1048
 
1048
function supprimerObs() {
1049
function supprimerObs() {
1049
	var obsId = $(this).val();
1050
	var obsId = $(this).val();
1050
	// Problème avec IE 6 et 7
1051
	// Problème avec IE 6 et 7
1051
	if (obsId == 'Supprimer') {
1052
	if (obsId == 'Supprimer') {
1052
		obsId = $(this).attr('title');
1053
		obsId = $(this).attr('title');
1053
	}
1054
	}
1054
	obsNbre = obsNbre - 1;
1055
	obsNbre = obsNbre - 1;
1055
	$('.obs-nbre').text(obsNbre);
1056
	$('.obs-nbre').text(obsNbre);
1056
	$('.obs-nbre').triggerHandler('changement');
1057
	$('.obs-nbre').triggerHandler('changement');
1057
	
1058
	
1058
	$('.obs'+obsId).remove();
1059
	$('.obs'+obsId).remove();
1059
	$('#liste-obs').removeData('obsId' + obsId);
1060
	$('#liste-obs').removeData('obsId' + obsId);
1060
}
1061
}
1061
 
1062
 
1062
function initialiserObs() {
1063
function initialiserObs() {
1063
	obsNbre = 0;
1064
	obsNbre = 0;
1064
	$('.obs-nbre').text(obsNbre);
1065
	$('.obs-nbre').text(obsNbre);
1065
	$('.obs-nbre').triggerHandler('changement');
1066
	$('.obs-nbre').triggerHandler('changement');
1066
	$('#liste-obs').removeData();
1067
	$('#liste-obs').removeData();
1067
	$('.obs').remove();
1068
	$('.obs').remove();
1068
	$('#dialogue-bloquer-creer-obs').hide();
1069
	$('#dialogue-bloquer-creer-obs').hide();
1069
}
1070
}
1070
 
1071
 
1071
function stockerObsData() {
1072
function stockerObsData() {
1072
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
1073
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
1073
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
1074
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
1074
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
1075
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
1075
		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'),
1076
		nomRet = nomHorsListe ? $('#taxon').data('nomRet') : taxons[numNomSel]['nom_ret'],
1077
		nomRet = nomHorsListe ? $('#taxon').data('nomRet') : taxons[numNomSel]['nom_ret'],
1077
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1078
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1078
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1079
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1079
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1080
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1080
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1081
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1081
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1082
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1082
	
1083
	
1083
	$('#liste-obs').data('obsId'+obsNbre, {
1084
	$('#liste-obs').data('obsId'+obsNbre, {
1084
		'date': $('#date').val(), 
1085
		'date': $('#date').val(), 
1085
		'notes': notes,
1086
		'notes': notes,
1086
		
1087
		
1087
		'station': $('input[name="adresse"]').val(),
1088
		'station': $('input[name="adresse"]').val(),
1088
		'latitude': $('#latitude').val(),
1089
		'latitude': $('#latitude').val(),
1089
		'longitude': $('#longitude').val(),
1090
		'longitude': $('#longitude').val(),
1090
		'commune_nom': $('#commune-nom').text(),
1091
		'commune_nom': $('#commune-nom').text(),
1091
		'commune_code_insee': $('#commune-code-insee').text(),
1092
		'commune_code_insee': $('#commune-code-insee').text(),
1092
		
1093
		
1093
		'nom_sel': nomSel,
1094
		'nom_sel': nomSel,
1094
		'num_nom_sel': numNomSel,
1095
		'num_nom_sel': numNomSel,
1095
		'nom_ret': nomRet,
1096
		'nom_ret': nomRet,
1096
		'num_nom_ret': numNomRet,
1097
		'num_nom_ret': numNomRet,
1097
		'num_taxon': numTaxon,
1098
		'num_taxon': numTaxon,
1098
		'famille': famille,
1099
		'famille': famille,
1099
		'referentiel': referentiel,
1100
		'referentiel': referentiel,
1100
		
1101
		
1101
		'milieu': getMilieux(),
1102
		'milieu': getMilieux(),
1102
		
1103
		
1103
		// Ajout des champs images
1104
		// Ajout des champs images
1104
		'image_nom': getNomsImgsOriginales(),
1105
		'image_nom': getNomsImgsOriginales(),
1105
		
1106
		
1106
		// Ajout des champs étendus de l'obs
1107
		// Ajout des champs étendus de l'obs
1107
		'obs_etendue': getObsChpEtendus()
1108
		'obs_etendue': getObsChpEtendus()
1108
	});
1109
	});
-
 
1110
	if (DEBUG) {
1109
	console.log($('#liste-obs').data('obsId'+obsNbre));
1111
		console.log($('#liste-obs').data('obsId'+obsNbre));
-
 
1112
	}
1110
}
1113
}
1111
 
1114
 
1112
function getNomsImgsOriginales() {
1115
function getNomsImgsOriginales() {
1113
	var noms = new Array();
1116
	var noms = new Array();
1114
	$('.miniature-img').each(function() {
1117
	$('.miniature-img').each(function() {
1115
		noms.push($(this).attr('alt'));
1118
		noms.push($(this).attr('alt'));
1116
	});
1119
	});
1117
	return noms;
1120
	return noms;
1118
}
1121
}
1119
 
1122
 
1120
function getObsChpEtendus() {
1123
function getObsChpEtendus() {
1121
	var champs = [];
1124
	var champs = [];
1122
	if (latLngDeb != undefined) {
1125
	if (latLngDeb != undefined) {
1123
		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)};
1124
		champs.push(latitudeDebutRue);
1127
		champs.push(latitudeDebutRue);
1125
		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)};
1126
		champs.push(longitudeDebutRue);
1129
		champs.push(longitudeDebutRue);
1127
	}
1130
	}
1128
	if (latLngFin != undefined) {
1131
	if (latLngFin != undefined) {
1129
		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)};
1130
		champs.push(latitudeFinRue);
1133
		champs.push(latitudeFinRue);
1131
		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)};
1132
		champs.push(longitudeFinRue);
1135
		champs.push(longitudeFinRue);
1133
	}
1136
	}
1134
	
1137
	
1135
	$('.obs-chp-etendu').each(function() {
1138
	$('.obs-chp-etendu').each(function() {
1136
		var valeur = $(this).val(),
1139
		var valeur = $(this).val(),
1137
			cle = $(this).attr('name'),
1140
			cle = $(this).attr('name'),
1138
			label = $(this).data('label');
1141
			label = $(this).data('label');
1139
		if (valeur != '') {
1142
		if (valeur != '') {
1140
			var chpEtendu = {cle: cle, label: label, valeur: valeur};
1143
			var chpEtendu = {cle: cle, label: label, valeur: valeur};
1141
			champs.push(chpEtendu);
1144
			champs.push(chpEtendu);
1142
		}
1145
		}
1143
	});
1146
	});
1144
	return champs;
1147
	return champs;
1145
}
1148
}
1146
 
1149
 
1147
//+----------------------------------------------------------------------------------------------------------+
1150
//+----------------------------------------------------------------------------------------------------------+
1148
//TRANSFERER OBS : envoie des obs au CEL => OK
1151
//TRANSFERER OBS : envoie des obs au CEL => OK
1149
 
1152
 
1150
function transmettreObs() {
1153
function transmettreObs() {
1151
	var observations = $('#liste-obs').data();
1154
	var observations = $('#liste-obs').data();
1152
	
1155
	
1153
	if (observations == undefined || jQuery.isEmptyObject(observations)) {
1156
	if (observations == undefined || jQuery.isEmptyObject(observations)) {
1154
		afficherPanneau('#dialogue-zero-obs');
1157
		afficherPanneau('#dialogue-zero-obs');
1155
	} else {
1158
	} else {
1156
		observations['projet'] = TAG_PROJET;
1159
		observations['projet'] = TAG_PROJET;
1157
		observations['tag-obs'] = TAG_OBS;
1160
		observations['tag-obs'] = TAG_OBS;
1158
		observations['tag-img'] = TAG_IMG;
1161
		observations['tag-img'] = TAG_IMG;
1159
		
1162
		
1160
		var utilisateur = new Object();
1163
		var utilisateur = new Object();
1161
		utilisateur.id_utilisateur = $('#id_utilisateur').val();
1164
		utilisateur.id_utilisateur = $('#id_utilisateur').val();
1162
		utilisateur.prenom = $('#prenom').val();
1165
		utilisateur.prenom = $('#prenom').val();
1163
		utilisateur.nom = $('#nom').val();
1166
		utilisateur.nom = $('#nom').val();
1164
		utilisateur.courriel = $('#courriel').val();
1167
		utilisateur.courriel = $('#courriel').val();
1165
		observations['utilisateur'] = utilisateur;
1168
		observations['utilisateur'] = utilisateur;
1166
		envoyerObsAuCel(observations);
1169
		envoyerObsAuCel(observations);
1167
	}
1170
	}
1168
	return false;
1171
	return false;
1169
}
1172
}
1170
 
1173
 
1171
function envoyerObsAuCel(observations) {
1174
function envoyerObsAuCel(observations) {
1172
	var erreurMsg = '',
1175
	var erreurMsg = '',
1173
		debugNonJson = '';
1176
		debugNonJson = '';
1174
	$.ajax({
1177
	$.ajax({
1175
		url: SERVICE_SAISIE_URL,
1178
		url: SERVICE_SAISIE_URL,
1176
		type: 'POST',
1179
		type: 'POST',
1177
		data: observations,
1180
		data: observations,
1178
		dataType: 'json',
1181
		dataType: 'json',
1179
		beforeSend: function() {
1182
		beforeSend: function() {
1180
			$('#dialogue-obs-transaction-ko').hide();
1183
			$('#dialogue-obs-transaction-ko').hide();
1181
			$('#dialogue-obs-transaction-ok').hide();
1184
			$('#dialogue-obs-transaction-ok').hide();
1182
			$('.alert-txt').empty();
1185
			$('.alert-txt').empty();
1183
			$('#chargement').show();
1186
			$('#chargement').show();
1184
		},
1187
		},
1185
		success: function(data, textStatus, jqXHR) {
1188
		success: function(data, textStatus, jqXHR) {
1186
			$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1189
			$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1187
			supprimerMiniatures();
1190
			supprimerMiniatures();
1188
		},
1191
		},
1189
		statusCode: {
1192
		statusCode: {
1190
			500: function(jqXHR, textStatus, errorThrown) {
1193
			500: function(jqXHR, textStatus, errorThrown) {
1191
				erreurMsg += "Erreur 500 :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1194
				erreurMsg += "Erreur 500 :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1192
			}
1195
			}
1193
		},
1196
		},
1194
		error: function(jqXHR, textStatus, errorThrown) {
1197
		error: function(jqXHR, textStatus, errorThrown) {
1195
			erreurMsg += "Erreur Ajax :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1198
			erreurMsg += "Erreur Ajax :\ntype : " + textStatus + ' ' + errorThrown + "\n";
1196
			try {
1199
			try {
1197
				reponse = jQuery.parseJSON(jqXHR.responseText);
1200
				reponse = jQuery.parseJSON(jqXHR.responseText);
1198
				if (reponse != null) {
1201
				if (reponse != null) {
1199
					$.each(reponse, function (cle, valeur) {
1202
					$.each(reponse, function (cle, valeur) {
1200
						erreurMsg += valeur + "\n";
1203
						erreurMsg += valeur + "\n";
1201
					});
1204
					});
1202
				}
1205
				}
1203
			} catch(e) {
1206
			} catch(e) {
1204
				erreurMsg += "L'erreur n'est pas en JSON.";
1207
				erreurMsg += "L'erreur n'est pas en JSON.";
1205
				debugNonJson = jqXHR.responseText;
1208
				debugNonJson = jqXHR.responseText;
1206
			}
1209
			}
1207
		},
1210
		},
1208
		complete: function(jqXHR, textStatus) {
1211
		complete: function(jqXHR, textStatus) {
1209
			$('#chargement').hide();
1212
			$('#chargement').hide();
1210
			var debugMsg = extraireEnteteDebug(jqXHR);
1213
			var debugMsg = extraireEnteteDebug(jqXHR);
1211
			
1214
			
1212
			if (erreurMsg != '') {
1215
			if (erreurMsg != '') {
1213
				if (DEBUG) {
1216
				if (DEBUG) {
1214
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1217
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1215
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1218
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1216
				}
1219
				}
1217
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' + 
1220
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' + 
1218
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET + 
1221
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET + 
1219
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1222
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1220
				
1223
				
1221
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1224
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1222
					.find('.courriel-erreur')
1225
					.find('.courriel-erreur')
1223
					.attr('href', hrefCourriel)
1226
					.attr('href', hrefCourriel)
1224
					.end()
1227
					.end()
1225
					.html());
1228
					.html());
1226
				$('#dialogue-obs-transaction-ko').show();
1229
				$('#dialogue-obs-transaction-ko').show();
1227
			} else {
1230
			} else {
1228
				if (DEBUG) {
1231
				if (DEBUG) {
1229
					$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + debugNonJson + '</pre>');
1232
					$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + debugNonJson + '</pre>');
1230
				}
1233
				}
1231
				$('#dialogue-obs-transaction-ok').show();
1234
				$('#dialogue-obs-transaction-ok').show();
1232
			}
1235
			}
1233
			initialiserObs();
1236
			initialiserObs();
1234
		}
1237
		}
1235
	});
1238
	});
1236
}
1239
}