Subversion Repositories eFlore/Applications.cel

Rev

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

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