Subversion Repositories eFlore/Applications.cel

Rev

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

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