Subversion Repositories eFlore/Applications.cel

Rev

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

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