Subversion Repositories eFlore/Applications.cel

Rev

Rev 1987 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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