Subversion Repositories eFlore/Applications.cel

Rev

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

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