Subversion Repositories eFlore/Applications.cel

Rev

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

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