Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1070 Rev 1073
1
//+---------------------------------------------------------------------------------------------------------+
1
//+---------------------------------------------------------------------------------------------------------+
2
// GÉNÉRAL
2
// GÉNÉRAL
3
/**
3
/**
4
 * Stope l'évènement courrant quand on clique sur un lien.
4
 * Stope l'évènement courrant quand on clique sur un lien.
5
 * Utile pour Chrome, Safari...
5
 * Utile pour Chrome, Safari...
6
 * @param evenement
6
 * @param evenement
7
 * @return
7
 * @return
8
 */
8
 */
9
function arreter(evenement) {
9
function arreter(evenement) {
10
	if (evenement.stopPropagation) {
10
	if (evenement.stopPropagation) {
11
		evenement.stopPropagation();
11
		evenement.stopPropagation();
12
	}
12
	}
13
	return false;
13
	return false;
14
}
14
}
15
// TODO : voir si cette fonction est bien utile. Résoud le pb d'un warning sous chrome.
15
// TODO : voir si cette fonction est bien utile. Résoud le pb d'un warning sous chrome.
16
(function(){
16
(function(){
17
    // remove layerX and layerY
17
    // remove layerX and layerY
18
    var all = $.event.props,
18
    var all = $.event.props,
19
        len = all.length,
19
        len = all.length,
20
        res = [];
20
        res = [];
21
    while (len--) {
21
    while (len--) {
22
      var el = all[len];
22
      var el = all[len];
23
      if (el != 'layerX' && el != 'layerY') res.push(el);
23
      if (el != 'layerX' && el != 'layerY') res.push(el);
24
    }
24
    }
25
    $.event.props = res;
25
    $.event.props = res;
26
}());
26
}());
27
 
27
 
28
//+----------------------------------------------------------------------------------------------------------+
28
//+----------------------------------------------------------------------------------------------------------+
29
//UPLOAD PHOTO : Traitement de l'image 
29
//UPLOAD PHOTO : Traitement de l'image 
30
$(document).ready(function() {	
30
$(document).ready(function() {	
31
	//prepare the form when the DOM is ready 
31
	//prepare the form when the DOM is ready 
32
	//create service object(proxy) using SMD (generated by the json result)
32
	//create service object(proxy) using SMD (generated by the json result)
33
	var options = { 
33
	var options = { 
34
		success: afficherMiniature, // post-submit callback 
34
		success: afficherMiniature, // post-submit callback 
35
		dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type) 
35
		dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type) 
36
		resetForm: true // reset the form after successful submit 
36
		resetForm: true // reset the form after successful submit 
37
	};
37
	};
38
 
38
 
39
	// post-submit callback 
39
	// post-submit callback 
40
	function afficherMiniature(reponse) { 
40
	function afficherMiniature(reponse) { 
41
		// 'responseXML' is the XML document returned by the server; we use 
41
		// 'responseXML' is the XML document returned by the server; we use 
42
		// jQuery to extract the content of the message node from the XML doc 
42
		// jQuery to extract the content of the message node from the XML doc 
43
		var miniatureUrl = $("miniature-url", reponse).text();
43
		var miniatureUrl = $("miniature-url", reponse).text();
44
		var imgNom = $("image-nom", reponse).text();
44
		var imgNom = $("image-nom", reponse).text();
45
		$("#miniature").empty();
45
		$("#miniature").empty();
46
		$("#miniature").append('<img id="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>');
46
		$("#miniature").append('<img id="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>');
47
		console.log(imgNom);
47
		console.log(imgNom);
48
		console.log(miniatureUrl);		
48
		console.log(miniatureUrl);		
49
	};
49
	};
50
	
50
	
51
	$("#form-upload").submit(function() { 
51
	$("#form-upload").submit(function() { 
52
		// inside event callbacks 'this' is the DOM element so we first 
52
		// inside event callbacks 'this' is the DOM element so we first 
53
		// wrap it in a jQuery object and then invoke ajaxSubmit 
53
		// wrap it in a jQuery object and then invoke ajaxSubmit 
54
		$(this).ajaxSubmit(options); 
54
		$(this).ajaxSubmit(options); 
55
		 
55
		 
56
		// !!! Important !!! 
56
		// !!! Important !!! 
57
		// always return false to prevent standard browser submit and page navigation 
57
		// always return false to prevent standard browser submit and page navigation 
58
		return false; 
58
		return false; 
59
	});
59
	});
60
});
60
});
61
 
61
 
62
//+----------------------------------------------------------------------------------------------------------+
62
//+----------------------------------------------------------------------------------------------------------+
63
// GOOGLE MAP
63
// GOOGLE MAP
64
var geocoder;
64
var geocoder;
65
var map;
65
var map;
66
var marker;
66
var marker;
67
var latLng;
67
var latLng;
68
 
68
 
69
function initialize(){
69
function initialize(){
70
	// Carte
70
	// Carte
71
	var latLng = new google.maps.LatLng(43.29545, 5.37458);
71
	var latLng = new google.maps.LatLng(43.29545, 5.37458);
72
	$('#adresse').val('1 rue de la canebiere, 13001');
72
	$('#adresse').val('1 rue de la canebiere, 13001');
73
	$('#latitude').val('43.29545');
73
	$('#latitude').val('43.29545');
74
	$('#longitude').val('5.37458');
74
	$('#longitude').val('5.37458');
75
	var options = {
75
	var options = {
76
		zoom: 16,
76
		zoom: 16,
77
		center: latLng,
77
		center: latLng,
78
		mapTypeId: google.maps.MapTypeId.SATELLITE
78
		mapTypeId: google.maps.MapTypeId.SATELLITE
79
	};
79
	};
80
	
80
	
81
	map = new google.maps.Map(document.getElementById("map_canvas"), options); //affiche la google map dans la div map_canvas
81
	map = new google.maps.Map(document.getElementById("map_canvas"), options); //affiche la google map dans la div map_canvas
82
	
82
	
83
	// Geocodeur
83
	// Geocodeur
84
	geocoder = new google.maps.Geocoder();
84
	geocoder = new google.maps.Geocoder();
85
	console.log(GOOGLE_MAP_MARQUEUR_URL);
85
	console.log(GOOGLE_MAP_MARQUEUR_URL);
86
 
86
 
87
	// Marqueur google draggable
87
	// Marqueur google draggable
88
	marker = new google.maps.Marker({
88
	marker = new google.maps.Marker({
89
		map: map,
89
		map: map,
90
		draggable: true,
90
		draggable: true,
91
		title: 'Ma station',
91
		title: 'Ma station',
92
		icon: GOOGLE_MAP_MARQUEUR_URL,
92
		icon: GOOGLE_MAP_MARQUEUR_URL,
93
		position: latLng
93
		position: latLng
94
	});
94
	});
95
}
95
}
96
 
96
 
97
$(document).ready(function() {
97
$(document).ready(function() {
98
	initialize();
98
	initialize();
99
  
99
  
100
	$(function() {
100
	$(function() {
101
		// Tentative de geocalisation
101
		// Tentative de geocalisation
102
		if (navigator.geolocation) {
102
		if (navigator.geolocation) {
103
			navigator.geolocation.getCurrentPosition(function(position) {
103
			navigator.geolocation.getCurrentPosition(function(position) {
104
				var latitude = position.coords.latitude;
104
				var latitude = position.coords.latitude;
105
				var longitude = position.coords.longitude;
105
				var longitude = position.coords.longitude;
106
				var altitude = position.coords.altitude;
106
				var altitude = position.coords.altitude;
107
				var geocalisation = new google.maps.LatLng(latitude, longitude);
107
				var geocalisation = new google.maps.LatLng(latitude, longitude);
108
				marker.setPosition(geocalisation);
108
				marker.setPosition(geocalisation);
109
				map.setCenter(geocalisation);
109
				map.setCenter(geocalisation);
110
				$('#latitude').val(marker.getPosition().lat());
110
				$('#latitude').val(marker.getPosition().lat());
111
				$('#longitude').val(marker.getPosition().lng());
111
				$('#longitude').val(marker.getPosition().lng());
112
				$('#adresse').val(codeLatLng(marker.getPosition()));
112
				$('#adresse').val(codeLatLng(marker.getPosition()));
113
			});
113
			});
114
		}   
114
		}   
115
		
115
		
116
		// Autocompletion du champ adresse
116
		// Autocompletion du champ adresse
117
		$("#adresse").autocomplete({
117
		$("#adresse").autocomplete({
118
			//Cette partie utilise geocoder pour extraire des valeurs d'adresse
118
			//Cette partie utilise geocoder pour extraire des valeurs d'adresse
119
			source: function(request, response) {
119
			source: function(request, response) {
120
				geocoder.geocode( {'address': request.term }, function(results, status) {
120
				geocoder.geocode( {'address': request.term }, function(results, status) {
121
					response($.map(results, function(item) {
121
					response($.map(results, function(item) {
122
						return {
122
						return {
123
							label:  item.formatted_address,
123
							label:  item.formatted_address,
124
							value: item.formatted_address,
124
							value: item.formatted_address,
125
							latitude: item.geometry.location.lat(),
125
							latitude: item.geometry.location.lat(),
126
							longitude: item.geometry.location.lng()
126
							longitude: item.geometry.location.lng()
127
						}
127
						}
128
					}));
128
					}));
129
				})
129
				})
130
			},
130
			},
131
			// Cette partie est executee a la selection d'une adresse
131
			// Cette partie est executee a la selection d'une adresse
132
			select: function(event, ui) {
132
			select: function(event, ui) {
133
				$("#latitude").val(ui.item.latitude);
133
				$("#latitude").val(ui.item.latitude);
134
				$("#longitude").val(ui.item.longitude);
134
				$("#longitude").val(ui.item.longitude);
135
				var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
135
				var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
136
				marker.setPosition(location);
136
				marker.setPosition(location);
137
				map.setCenter(location);
137
				map.setCenter(location);
138
				map.setZoom(20);
138
				map.setZoom(20);
139
			}
139
			}
140
		});
140
		});
141
 
141
 
142
		// Ajoute un ecouteur sur le marker pour le reverse geocoding
142
		// Ajoute un ecouteur sur le marker pour le reverse geocoding
143
		google.maps.event.addListener(marker, 'drag', function() {
143
		google.maps.event.addListener(marker, 'drag', function() {
144
			geocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
144
			geocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
145
				if (status == google.maps.GeocoderStatus.OK) {
145
				if (status == google.maps.GeocoderStatus.OK) {
146
					if (results[0]) {
146
					if (results[0]) {
147
						$('#adresse').val(results[0].formatted_address);
147
						$('#adresse').val(results[0].formatted_address);
148
						$('#latitude').val(Math.round(marker.getPosition().lat()*100000)/100000);
148
						$('#latitude').val(Math.round(marker.getPosition().lat()*100000)/100000);
149
						$('#longitude').val(Math.round(marker.getPosition().lng()*100000)/100000);
149
						$('#longitude').val(Math.round(marker.getPosition().lng()*100000)/100000);
150
					}
150
					}
151
				}
151
				}
152
			});
152
			});
153
		});
153
		});
154
	});
154
	});
155
});
155
});
156
 
156
 
157
// Transforme les coordonnés en adresse (reverse geocoder)
157
// Transforme les coordonnés en adresse (reverse geocoder)
158
function codeLatLng() {
158
function codeLatLng() {
159
	var lat = parseFloat(document.getElementById("latitude").value);
159
	var lat = parseFloat(document.getElementById("latitude").value);
160
	var lng = parseFloat(document.getElementById("longitude").value);
160
	var lng = parseFloat(document.getElementById("longitude").value);
161
	var latlng = new google.maps.LatLng(lat, lng);
161
	var latlng = new google.maps.LatLng(lat, lng);
162
	geocoder.geocode({'latLng': latlng}, function(results, status) {
162
	geocoder.geocode({'latLng': latlng}, function(results, status) {
163
		if (status == google.maps.GeocoderStatus.OK) {
163
		if (status == google.maps.GeocoderStatus.OK) {
164
			if (results[0]) {
164
			if (results[0]) {
165
				marker.setPosition(latlng);
165
				marker.setPosition(latlng);
166
				map.setCenter(latlng);
166
				map.setCenter(latlng);
167
				$('#adresse').val(results[0].formatted_address);
167
				$('#adresse').val(results[0].formatted_address);
168
			}
168
			}
169
		} else {
169
		} else {
170
			alert("Geocoder failed due to: " + status);
170
			alert("Geocoder failed due to: " + status);
171
		}
171
		}
172
	});
172
	});
173
}
173
}
174
 
174
 
175
//+---------------------------------------------------------------------------------------------------------+
175
//+---------------------------------------------------------------------------------------------------------+
176
// FORMULAIRE
176
// FORMULAIRE
177
$(document).ready(function() {
177
$(document).ready(function() {
178
	$("form#saisie-obs").validate({
178
	$("form#saisie-obs").validate({
179
		rules: {
179
		rules: {
180
			courriel : {
180
			courriel : {
181
				required : true,
181
				required : true,
182
				email : true},
182
				email : true},
183
			courriel_confirmation : {
183
			courriel_confirmation : {
184
				required : true,
184
				required : true,
185
				equalTo: "#courriel"
185
				equalTo: "#courriel"
186
			},
186
			},
187
			rue : "required",
187
			rue : "required",
188
			rue_num_debut : {
188
			rue_num_debut : {
189
				required : true,
189
				required : true,
190
				digits : true,
190
				digits : true,
191
				min : 1},
191
				min : 1},
192
			rue_num_fin : {
192
			rue_num_fin : {
193
				required : true,
193
				required : true,
194
				digits : true,
194
				digits : true,
195
				min : 1},
195
				min : 1},
196
			rue_cote : "required",
196
			rue_cote : "required",
197
			milieu : "required",
197
			milieu : "required",
198
			adresse : "required",
198
			adresse : "required",
199
			latitude : {
199
			latitude : {
200
				required: true,
200
				required: true,
201
				range: [-90, 90]},
201
				range: [-90, 90]},
202
			longitude : {
202
			longitude : {
203
				required: true,
203
				required: true,
204
				range: [-180, 180]},
204
				range: [-180, 180]},
205
			date : {
205
			date : {
206
				required: true,
206
				required: true,
207
				date: true},
207
				date: true},
208
			taxon : "required"
208
			taxon : "required"
209
		}
209
		}
210
	});
210
	});
211
	
211
	
212
	$("#date").datepicker($.datepicker.regional['fr']);
212
	$("#date").datepicker($.datepicker.regional['fr']);
213
	
213
	
214
	$("#courriel_confirmation").bind('paste', function(e) {
214
	$("#courriel_confirmation").bind('paste', function(e) {
215
		$("#dialogue-bloquer-copier-coller").dialog();
215
		$("#dialogue-bloquer-copier-coller").dialog();
216
		return false;
216
		return false;
217
	});
217
	});
218
	
218
		
219
	/*---Afficher/cacher les coordonnees geographiques----*/	
219
	/*---Afficher/cacher les coordonnees geographiques----*/	
220
	
220
	
221
	var showText=" -Afficher-";
221
	var showText=" -Afficher-";
222
	var hideText=" -Masquer- ";
222
	var hideText=" -Masquer- ";
223
	
223
	
224
	//créer le lien afficher/masquer
224
	//créer le lien afficher/masquer
225
	$("#coordonnees-geo").before("<a href='#' id='toogle_link'>"+showText+"</a>")
225
	$("#coordonnees-geo").before("<a href='#' id='toogle_link'>"+showText+"</a>")
226
	//masquer le contenu
226
	//masquer le contenu
227
	$("#masque").hide();
227
	$("#masque").hide();
228
	//bascule le texte d'afficher à masquer
228
	//bascule le texte d'afficher à masquer
229
	$("a#toogle_link").click(function() {
229
	$("a#toogle_link").click(function() {
230
		//changer le texte du lien
230
		//changer le texte du lien
231
		if($('a#toogle_link').text()==showText){
231
		if($('a#toogle_link').text()==showText){
232
			$('a#toogle_link').text(hideText);
232
			$('a#toogle_link').text(hideText);
233
		} else{
233
		} else{
234
			$('a#toogle_link').text(showText);
234
			$('a#toogle_link').text(showText);
235
		}
235
		}
236
	//basuler l'affichage
236
	//basuler l'affichage
237
	$('#masque').toggle('slow');
237
	$('#masque').toggle('slow');
238
	//valeur false pour que le lien ne soit pas suivi
238
	//valeur false pour que le lien ne soit pas suivi
239
	return false
239
	return false
240
	});
240
	});
241
 
241
 
242
	/*------obs-----------*/	
242
	/*------obs-----------*/	
243
	
243
	
244
	var obsNumero = 0;
244
	var obsNumero = 0;
245
	$("#ajouter-obs").bind('click', function(e) {
245
	$("#ajouter-obs").bind('click', function(e) {
246
		if ($("#saisie-obs").valid() == false) {
246
		if ($("#saisie-obs").valid() == false) {
247
			$("#dialogue-form-invalide").dialog();
247
			$("#dialogue-form-invalide").dialog();
248
		} else {
248
		} else {
249
			//rassemble les obs dans un tableau html
249
			//rassemble les obs dans un tableau html
250
			obsNumero = obsNumero + 1;
250
			obsNumero = obsNumero + 1;
251
			$("#liste-obs tbody").append(
251
			$("#liste-obs tbody").append(
252
					'<tr id="obs'+obsNumero+'" class="obs">'+
252
					'<tr id="obs'+obsNumero+'" class="obs">'+
253
					'<td>'+obsNumero+'</td>'+
253
					'<td>'+obsNumero+'</td>'+
254
					'<td>'+$("#date").val()+'</td>'+
254
					'<td>'+$("#date").val()+'</td>'+
255
					'<td>'+$("#adresse").val()+'</td>'+
255
					'<td>'+$("#adresse").val()+'</td>'+
256
					'<td>'+$("#taxon option:selected").text()+'</td>'+
256
					'<td>'+$("#taxon option:selected").text()+'</td>'+
257
					'<td>'+$('input[name=milieu]:checked').val()+'</td>'+
257
					'<td>'+$('input[name=milieu]:checked').val()+'</td>'+
258
					'<td>'+$("#latitude").val()+'</td>'+
258
					'<td>'+$("#latitude").val()+'</td>'+
259
					'<td>'+$("#longitude").val()+'</td>'+
259
					'<td>'+$("#longitude").val()+'</td>'+
260
					//Ajout du champ photo
260
					//Ajout du champ photo
261
					'<td><img class="miniature" alt="'+$("#miniature-img").attr("alt")+'"src="'+$("#miniature-img").attr("src")+'" /></td>'+
261
					'<td><img class="miniature" alt="'+$("#miniature-img").attr("alt")+'"src="'+$("#miniature-img").attr("src")+'" /></td>'+
262
					'<td>'+$("#notes").val()+'</td>'+
262
					'<td>'+$("#notes").val()+'</td>'+
263
					'<td><button class="supprimer-obs" value="'+obsNumero+'" title="Supprimer l\'observation '+obsNumero+'">'+
263
					'<td><button class="supprimer-obs" value="'+obsNumero+'" title="Supprimer l\'observation '+obsNumero+'">'+
264
					'<img src="'+SUPPRIMER_ICONE_URL+'"/></button></td>'+
264
					'<img src="'+SUPPRIMER_ICONE_URL+'"/></button></td>'+
265
				'</tr>');
265
				'</tr>');
266
			//rassemble les obs dans #liste-obs
266
			//rassemble les obs dans #liste-obs
267
			var numNomSel = $("#taxon").val();
267
			var numNomSel = $("#taxon").val();
268
			$("#liste-obs").data('obsId'+obsNumero, {
268
			$("#liste-obs").data('obsId'+obsNumero, {
269
				'date' : $("#date").val(), 
269
				'date' : $("#date").val(), 
270
				'num_nom_sel' : numNomSel,
270
				'num_nom_sel' : numNomSel,
271
				'nom_sel' : taxons[numNomSel]['nom_sel'],
271
				'nom_sel' : taxons[numNomSel]['nom_sel'],
272
				'nom_ret' : taxons[numNomSel]['nom_ret'],
272
				'nom_ret' : taxons[numNomSel]['nom_ret'],
273
				'num_nom_ret' : taxons[numNomSel]['num_nom_ret'],
273
				'num_nom_ret' : taxons[numNomSel]['num_nom_ret'],
274
				'num_taxon' : taxons[numNomSel]['num_taxon'],
274
				'num_taxon' : taxons[numNomSel]['num_taxon'],
275
				'famille' : taxons[numNomSel]['famille'],
275
				'famille' : taxons[numNomSel]['famille'],
276
				'nom_fr' : taxons[numNomSel]['nom_fr'],
276
				'nom_fr' : taxons[numNomSel]['nom_fr'],
277
				'commune' : '',// TODO : utiliser le web service
-
 
278
				'lieu_dit' : $("#rue").val(),
-
 
279
				'station' : $("#rue_num_debut").val()+'-'+$("#rue_num_fin").val()+'-'+$("#rue_cote").val(),
-
 
280
				'milieu' : $('input[name=milieu]:checked').val(),
277
				'milieu' : $('input[name=milieu]:checked').val(),
281
				'latitude' : $("#latitude").val(),
278
				'latitude' : $("#latitude").val(),
282
				'longitude' : $("#longitude").val(),
279
				'longitude' : $("#longitude").val(),
-
 
280
				'commune_nom' : '',// TODO : utiliser le web service
-
 
281
				'commune_code_insee' : '',// TODO : utiliser le web service
283
				'tag' : 'Sauvages',
282
				'lieu_dit' : $("#rue").val(),
-
 
283
				'station' : $("#rue_num_debut").val()+'-'+$("#rue_num_fin").val()+'-'+$("#rue_cote").val(),
284
				'notes' : $("#notes").val(),
284
				'notes' : $("#notes").val(),
285
				//Ajout des champs images
285
				//Ajout des champs images
286
				'image_nom' : $("#miniature-img").attr('alt'),
286
				'image_nom' : $("#miniature-img").attr('alt'),
287
				'image_b64' : ''// TODO : ajoute le support HTML5
287
				'image_b64' : ''// TODO : ajoute le support HTML5
288
				});
288
			});
289
		}
289
		}
290
	});
290
	});
291
	
291
	
292
	$(".supprimer-obs").live('click', function() {
292
	$(".supprimer-obs").live('click', function() {
293
		var obsId = $(this).val();
293
		var obsId = $(this).val();
294
		// Problème avec IE 6 et 7
294
		// Problème avec IE 6 et 7
295
		if (obsId == "Supprimer") {
295
		if (obsId == "Supprimer") {
296
			obsId = $(this).attr("title");
296
			obsId = $(this).attr("title");
297
		}
297
		}
298
		
298
		
299
		$('#obs'+obsId).remove();
299
		$('#obs'+obsId).remove();
300
		$("#liste-obs").removeData('obsId'+obsId)
300
		$("#liste-obs").removeData('obsId'+obsId)
301
	});
301
	});
302
 
302
 
303
	$("#effacer-miniature").click(function () {
303
	$("#effacer-miniature").click(function () {
304
		$("#miniature").empty();	    
304
		$("#miniature").empty();	    
305
	});	
305
	});	
306
	
306
	
307
	// TODO : remplacer par du jquery
307
	// TODO : remplacer par du jquery
308
	//document.getElementById('image_file').addEventListener('change', handleFileSelect, false);
308
	//document.getElementById('image_file').addEventListener('change', handleFileSelect, false);
309
	
309
	
310
	$("#transmettre-obs").click(function(e) {
310
	$("#transmettre-obs").click(function(e) {
311
		var observations = $("#liste-obs").data();
311
		var observations = $("#liste-obs").data();
-
 
312
		
312
		if (observations == undefined || jQuery.isEmptyObject(observations)) {
313
		if (observations == undefined || jQuery.isEmptyObject(observations)) {
313
			$("#dialogue-zero-obs").dialog();
314
			$("#dialogue-zero-obs").dialog();
314
		} else if ($("#saisie-obs").valid() == false) {
315
		} else if ($("#saisie-obs").valid() == false) {
315
			$("#dialogue-form-invalide").dialog();
316
			$("#dialogue-form-invalide").dialog();
316
		} else {
317
		} else {
-
 
318
			observations['projet'] = 'Sauvages';
-
 
319
			
317
			var utilisateur = new Object();
320
			var utilisateur = new Object();
318
			utilisateur.prenom = $("#prenom").val();
321
			utilisateur.prenom = $("#prenom").val();
319
			utilisateur.nom = $("#nom").val();
322
			utilisateur.nom = $("#nom").val();
320
			utilisateur.courriel = $("#courriel").val();
323
			utilisateur.courriel = $("#courriel").val();
321
			observations['utilisateur'] = utilisateur;
324
			observations['utilisateur'] = utilisateur;
322
					$.ajax({
-
 
323
						url : SERVICE_SAISIE_URL,
-
 
324
						type : "POST",
-
 
325
						data : observations,
-
 
326
						context : document.body,
-
 
327
						beforeSend : function() {
-
 
328
							$("#msg").remove();	
-
 
329
							$("#msg-erreur").remove();
-
 
330
							$("#msg-debug").remove();
-
 
331
						},
-
 
332
						statusCode : {
-
 
333
						    500 : function(jqXHR, textStatus, errorThrown) {
-
 
334
								$("#dialogue-obs-transaction").append('<p id="msg">Un problème est survenu lors de la transmission de vos observations.</p>');
-
 
335
								reponse = jQuery.parseJSON(jqXHR.responseText);
-
 
336
								var erreurMsg = "";
-
 
337
								if (reponse != null) {
-
 
338
									$.each(reponse, function (cle, valeur) {
-
 
339
										erreurMsg += valeur + "<br />";
-
 
340
									});
-
 
341
								}
-
 
342
								
-
 
343
								$("#dialogue-obs-transaction").append('<p id="msg-erreur">Erreur 500 : '+errorThrown+"<br />"+erreurMsg+'</p>');
-
 
344
						    }
-
 
345
						},
-
 
346
						success : function(data, textStatus, jqXHR) {
-
 
347
							$("#dialogue-obs-transaction").append('<p id="msg">Vos observations ont bien été transmises.</p>');
-
 
348
						},
-
 
349
						complete : function(jqXHR, textStatus) {
-
 
350
							var debugMsg = "";
-
 
351
							if (DEBUG && jqXHR.getResponseHeader("X-DebugJrest-Data") != '') {
-
 
352
								debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader("X-DebugJrest-Data"));
-
 
353
								if (debugInfos != null) {
-
 
354
									$.each(debugInfos, function (cle, valeur) {
-
 
355
										debugMsg += valeur + "<br />";
-
 
356
									});
-
 
357
									$("#dialogue-obs-transaction").append('<pre id="msg-debug">Débogage : '+debugMsg+'</pre>');
-
 
358
								}
-
 
359
							}
-
 
360
							
-
 
361
							$("#dialogue-obs-transaction").dialog();
-
 
362
							$("#liste-obs").removeData();
-
 
363
							$('.obs').remove();
-
 
364
							obsNumero = 0;
-
 
365
						},
-
 
-
 
325
			
-
 
326
			var erreurMsg = "";
-
 
327
			$.ajax({
-
 
328
				url : SERVICE_SAISIE_URL,
-
 
329
				type : "POST",
-
 
330
				data : observations,
-
 
331
				dataType : "json",
-
 
332
				beforeSend : function() {
-
 
333
					$(".msg").remove();	
-
 
334
					$(".msg-erreur").remove();
-
 
335
					$(".msg-debug").remove();
-
 
336
				},
-
 
337
				success : function(data, textStatus, jqXHR) {
-
 
338
					$("#dialogue-obs-transaction").append('<p class="msg">Vos observations ont bien été transmises.</p>');
-
 
339
				},
-
 
340
				statusCode : {
-
 
341
				    500 : function(jqXHR, textStatus, errorThrown) {
-
 
342
						erreurMsg += "Erreur 500 :\ntype : "+textStatus+' '+errorThrown+"\n";
-
 
343
						reponse = jQuery.parseJSON(jqXHR.responseText);
-
 
344
						if (reponse != null) {
-
 
345
							$.each(reponse, function (cle, valeur) {
-
 
346
								erreurMsg += valeur + "\n";
-
 
347
							});
-
 
348
						}
-
 
349
						if (DEBUG) {
-
 
350
							$("#dialogue-obs-transaction").append('<pre class="msg-erreur">'+erreurMsg+'</pre>');
-
 
351
						}
-
 
352
				    }
-
 
353
				},
-
 
354
				error : function(jqXHR, textStatus, errorThrown) {
-
 
355
					erreurMsg += "Erreur Ajax :\ntype : "+textStatus+' '+errorThrown+"\n";
-
 
356
					reponse = jQuery.parseJSON(jqXHR.responseText);
-
 
357
					if (reponse != null) {
-
 
358
						$.each(reponse, function (cle, valeur) {
366
			
359
							erreurMsg += valeur + "\n";
-
 
360
						});
-
 
361
					}
-
 
362
					
-
 
363
					if (DEBUG) {
-
 
364
						$("#dialogue-obs-transaction").append('<pre class="msg-erreur">'+erreurMsg+'</pre>');
-
 
365
					}
-
 
366
				},
-
 
367
				complete : function(jqXHR, textStatus) {
-
 
368
					var debugMsg = '';
-
 
369
					if (jqXHR.getResponseHeader("X-DebugJrest-Data") != '') {
-
 
370
						debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader("X-DebugJrest-Data"));
-
 
371
						if (debugInfos != null) {
-
 
372
							$.each(debugInfos, function (cle, valeur) {
-
 
373
								debugMsg += valeur + "\n";
-
 
374
							});
-
 
375
						}
-
 
376
					}
-
 
377
					if (erreurMsg != '') {
-
 
378
						$("#dialogue-obs-transaction").append('<p class="msg">'+
-
 
379
								'Une erreur est survenue lors de la transmission de vos observations.'+'<br />'+
-
 
380
								'Vous pouvez signaler le disfonctionnement à <a href="'+
-
 
381
								'mailto:cel@tela-botanica.org'+'?'+
-
 
382
								'subject=Disfonctionnement du widget de saisie Biodiversite34'+
-
 
383
								"&body="+erreurMsg+"\nDébogage :\n"+debugMsg+
-
 
384
								'">cel@tela-botanica.org</a>.'+
-
 
385
								'</p>');
-
 
386
					}
-
 
387
					if (DEBUG) {
-
 
388
						$("#dialogue-obs-transaction").append('<pre class="msg-debug">Débogage : '+debugMsg+'</pre>');
-
 
389
					}
-
 
390
					
-
 
391
					$("#dialogue-obs-transaction").dialog();
-
 
392
					$("#liste-obs").removeData();
-
 
393
					$('.obs').remove();
-
 
394
					obsNumero = 0;
-
 
395
				}
367
					});
396
			});
368
		}
397
		}
369
		return false;
398
		return false;
370
	});
399
	});
371
});
400
});
372
 
401
 
373
 
402
 
374
function handleFileSelect(evt) {
403
function handleFileSelect(evt) {
375
	// Check for the various File API support.
404
	// Check for the various File API support.
376
	if (window.File && window.FileReader && window.FileList && window.Blob) {
405
	if (window.File && window.FileReader && window.FileList && window.Blob) {
377
	// Great success! All the File APIs are supported.
406
	// Great success! All the File APIs are supported.
378
		var selectedfiles = evt.target.files; // FileList object
407
		var selectedfiles = evt.target.files; // FileList object
379
		
408
		
380
		// Loop through the FileList and render image files as thumbnails.
409
		// Loop through the FileList and render image files as thumbnails.
381
		for (var i = 0, f; f = selectedfiles[i]; i++) {
410
		for (var i = 0, f; f = selectedfiles[i]; i++) {
382
		
411
		
383
		  // Only process image files.
412
		  // Only process image files.
384
		  if (!f.type.match('image.*')) {
413
		  if (!f.type.match('image.*')) {
385
		    continue;
414
		    continue;
386
		  }
415
		  }
387
		
416
		
388
		  var reader = new FileReader();
417
		  var reader = new FileReader();
389
		
418
		
390
		  // Read in the image file as a data URL.
419
		  // Read in the image file as a data URL.
391
		  reader.readAsDataURL(f);
420
		  reader.readAsDataURL(f);
392
		  
421
		  
393
		  // Closure to capture the file information.
422
		  // Closure to capture the file information.
394
		  reader.onload = (function(theFile) {
423
		  reader.onload = (function(theFile) {
395
			 return function(e) {
424
			 return function(e) {
396
		    	// Render thumbnail.
425
		    	// Render thumbnail.
397
		    	document.getElementById('image').src = e.target.result;
426
		    	document.getElementById('image').src = e.target.result;
398
		    	//document.getElementById('list').insertBefore(img, null);
427
		    	//document.getElementById('list').insertBefore(img, null);
399
		    };
428
		    };
400
		  })(f);
429
		  })(f);
401
		}
430
		}
402
 
431
 
403
	} 
432
	} 
404
	else {
433
	else {
405
	  alert('The File APIs are not fully supported in this browser.');
434
	  alert('The File APIs are not fully supported in this browser.');
406
	}
435
	}
407
}
436
}