Rev 2380 | Rev 2408 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
//+---------------------------------------------------------------------------------------------------------+// GÉNÉRAL$(document).ready(function() {if (DEBUG == false) {$(window).on('beforeunload', function(event) {return 'Êtes vous sûr de vouloir quiter la page?\nLes observations saisies mais non transmises seront perdues.';});}});//+----------------------------------------------------------------------------------------------------------+// FONCTIONS GÉNÉRIQUES/*** Stope l'évènement courrant quand on clique sur un lien.* Utile pour Chrome, Safari...* @param evenement* @return*/function arreter(evenement) {if (evenement.stopPropagation) {evenement.stopPropagation();}if (evenement.preventDefault) {evenement.preventDefault();}return false;}function extraireEnteteDebug(jqXHR) {var msgDebug = '';if (jqXHR.getResponseHeader('X-DebugJrest-Data') != '') {var debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader('X-DebugJrest-Data'));if (debugInfos != null) {$.each(debugInfos, function (cle, valeur) {msgDebug += valeur + "\n";});}}return msgDebug;}function afficherPanneau(selecteur) {$(selecteur).fadeIn('slow').delay(DUREE_MESSAGE).fadeOut('slow');}//+---------------------------------------------------------------------------------------------------------+//FORMULAIRE$(document).ready(function() {if (OBS_ID != '') {chargerInfoObs();}});function chargerInfoObs() {var urlObs = SERVICE_OBS_URL + '/' + OBS_ID;$.ajax({url: urlObs,type: 'GET',success: function(data, textStatus, jqXHR) {if (data != undefined && data != '') {prechargerForm(data);}// TODO: voir s'il est pertinent d'indiquer quelque chose en cas d'erreur ou d'obs// inexistante},error: function(jqXHR, textStatus, errorThrown) {// TODO: cf TODO ci-dessus}});}function prechargerForm(data) {$('#milieu').val(data.milieu);$('#carte-recherche').val(data.zoneGeo);$('#commune-nom').text(data.zoneGeo);if (data.hasOwnProperty('codeZoneGeo')) {// TODO: trouver un moyen qui fonctionne lorsqu'on aura d'autres référentiels que INSEE$('#commune-code-insee').text(data.codeZoneGeo.replace('INSEE-C:', ''));}if (data.hasOwnProperty('latitude') && data.hasOwnProperty('longitude')) {var latLng = new google.maps.LatLng(data.latitude, data.longitude);mettreAJourMarkerPosition(latLng);marker.setPosition(latLng);map.setCenter(latLng);map.setZoom(16);}}//+----------------------------------------------------------------------------------------------------------+//FORM IDENTITE : gestion de l'observateur$(document).ready(function() {requeterIdentite();// Sur rechargement de la page// Interaction sur le formulaire observateur$('#prenom').on('change', formaterPrenom);$('#nom').on('change', formaterNom);$('#courriel').on('blur', requeterIdentite);$('#courriel').on('keyup', testerLancementRequeteIdentite);$('#courriel_confirmation').on('paste', bloquerCopierCollerCourriel);});function testerLancementRequeteIdentite(event) {if (event.which == 13) {requeterIdentite();event.preventDefault();event.stopPropagation();}}function requeterIdentite() {var courriel = $('#courriel').val();if (courriel) {var urlAnnuaire = SERVICE_ANNUAIRE_ID_URL + courriel;$.ajax({url: urlAnnuaire,type: 'GET',success: function(data, textStatus, jqXHR) {if (data != undefined && data[courriel] != undefined) {var infos = data[courriel];surSuccesCompletionCourriel(infos, courriel);} else {surErreurCompletionCourriel();}},error: function(jqXHR, textStatus, errorThrown) {surErreurCompletionCourriel();},complete: function(jqXHR, textStatus) {$('#zone-courriel-confirmation, #zone-prenom-nom').removeClass('hidden');$('#form-observateur').valid();}});}}function surErreurCompletionCourriel() {$('#prenom, #nom, #courriel_confirmation').removeAttr('disabled');afficherPanneau('#dialogue-courriel-introuvable');}function surSuccesCompletionCourriel(infos, courriel) {$('#id_utilisateur').val(infos.id);$('#prenom').val(infos.prenom);$('#nom').val(infos.nom);$('#courriel_confirmation').val(courriel);$('#prenom, #nom, #courriel_confirmation').attr('disabled', 'disabled');$('#structure').focus();$('#dialogue-courriel-introuvable').hide();}function formaterNom() {$(this).val($(this).val().toUpperCase());}function formaterPrenom() {var prenom = new Array(),mots = $(this).val().split(' ');for (var i = 0; i < mots.length; i++) {var mot = mots[i];if (mot.indexOf('-') >= 0) {var prenomCompose = new Array(),motsComposes = mot.split('-');for (var j = 0; j < motsComposes.length; j++) {var motSimple = motsComposes[j],motMajuscule = motSimple.charAt(0).toUpperCase() + motSimple.slice(1);prenomCompose.push(motMajuscule);}prenom.push(prenomCompose.join('-'));} else {var motMajuscule = mot.charAt(0).toUpperCase() + mot.slice(1);prenom.push(motMajuscule);}}$(this).val(prenom.join(' '));}function bloquerCopierCollerCourriel() {afficherPanneau('#dialogue-bloquer-copier-coller');return false;}//+----------------------------------------------------------------------------------------------------------+// GOOGLE MAPvar map,marker,latLng,geocoder;$(document).ready(function() {initialiserGoogleMap();initialiserAutocompleteCommune();});function afficherErreurGoogleMap(status) {if (DEBUG) {$('#dialogue-google-map .contenu').empty().append('<pre class="msg-erreur">'+"Le service de Géocodage de Google Map a échoué à cause de l'erreur : "+status+'</pre>');afficherPanneau('#dialogue-google-map');}}function surDeplacementMarker() {mettreAJourMarkerPosition(marker.getPosition());}function surClickDansCarte(event) {deplacerMarker(event.latLng);}function geolocaliser() {var latitude = $('#latitude').val(),longitude = $('#longitude').val();latLng = new google.maps.LatLng(latitude, longitude);deplacerMarker(latLng);}function initialiserGoogleMap(){// Carteif (NOM_SCI_PROJET == 'bdtxa') {var latLng = new google.maps.LatLng(14.6, -61.08334);// Fort-De-Francevar zoomDefaut = 8;} else if (NOM_SCI_PROJET == 'isfan') {var latLng = new google.maps.LatLng(29.28358, 10.21884);// Afrique du Nordvar zoomDefaut = 4;} else if (NOM_SCI_PROJET == 'apd') {var latLng = new google.maps.LatLng(8.75624, 1.80176);// Afrique de l'Ouest et du Centrevar zoomDefaut = 4;} else {//var latLng = new google.maps.LatLng(46.30871, 2.54395);// Centre de la Francevar latLng = new google.maps.LatLng(45.1667, 5.7905);// Centre de l'Isèrevar zoomDefaut = 8;}var options = {zoom: zoomDefaut,center: latLng,mapTypeId: google.maps.MapTypeId.HYBRID,mapTypeControlOptions: {mapTypeIds: ['OSM', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.HYBRID, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.TERRAIN]}};// Ajout de la couche OSM à la carteosmMapType = new google.maps.ImageMapType({getTileUrl: function(coord, zoom) {return 'http://tile.openstreetmap.org/' +zoom + '/' + coord.x + '/' + coord.y + '.png';},tileSize: new google.maps.Size(256, 256),isPng: true,alt: 'OpenStreetMap',name: 'OSM',maxZoom: 19});// Création de la carte Googlemap = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvasmap.mapTypes.set('OSM', osmMapType);// Création du Geocodergeocoder = new google.maps.Geocoder();// Marqueur google draggablemarker = new google.maps.Marker({map: map,draggable: true,title: 'Ma station',icon: GOOGLE_MAP_MARQUEUR_URL,position: latLng});initialiserMarker(latLng);// Tentative de geocalisationif (navigator.geolocation) {navigator.geolocation.getCurrentPosition(function(position) {var latitude = position.coords.latitude;var longitude = position.coords.longitude;latLng = new google.maps.LatLng(latitude, longitude);deplacerMarker(latLng);});}// intéraction carte$('#geolocaliser').on('click', geolocaliser);google.maps.event.addListener(marker, 'dragend', surDeplacementMarker);google.maps.event.addListener(map, 'click', surClickDansCarte);}function initialiserMarker(latLng) {if (marker != undefined) {marker.setPosition(latLng);map.setCenter(latLng);mettreAJourMarkerPosition(latLng);}}function deplacerMarker(latLng) {if (marker != undefined) {marker.setPosition(latLng);map.setCenter(latLng);mettreAJourMarkerPosition(latLng);}}function mettreAJourMarkerPosition(latLng) {trouverCommune(latLng);trouverAltitude(latLng);var lat = latLng.lat().toFixed(5),lng = latLng.lng().toFixed(5);remplirChampLatitude(lat);remplirChampLongitude(lng);remplirChampsLambert93(lat, lng);}function remplirChampLatitude(latDecimale) {var lat = Math.round(latDecimale * 100000) / 100000;$('#latitude').val(lat);}function remplirChampLongitude(lngDecimale) {var lng = Math.round(lngDecimale * 100000) / 100000;$('#longitude').val(lng);}proj4.defs([['EPSG:4326', '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'],['EPSG:2154', '+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs']]);function remplirChampsLambert93(lat, lng) {// Prendre en compte l'initialisation des projectionsvar coordinate = {x: lng,y: lat};proj4(proj4.defs('EPSG:4326'), proj4.defs('EPSG:2154')).forward(coordinate);$('#l93-x').val(coordinate.x.toFixed(0));$('#l93-y').val(coordinate.y.toFixed(0));}function trouverAltitude(pos) {$(function() {var url_service = SERVICE_ALTITUDE_URL,urlAltFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());$.ajax({url: urlAltFormatee,type: 'GET',dataType: 'jsonp',beforeSend : function() {$('#altitude').empty();$('#dialogue-erreur .alert-txt').empty();},success : function(data, textStatus, jqXHR) {$('#altitude').empty().append(data.altitude);$('#marqueur-altitude').data('altitude', data.altitude);},statusCode : {500 : function(jqXHR, textStatus, errorThrown) {if (DEBUG) {$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissant l\'altitude.</p>');reponse = jQuery.parseJSON(jqXHR.responseText);var erreurMsg = '';if (reponse != null) {$.each(reponse, function (cle, valeur) {erreurMsg += valeur + '<br />';});}$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur 500 : '+errorThrown+"<br />"+erreurMsg+'</p>');}}},error : function(jqXHR, textStatus, errorThrown) {if (DEBUG) {$("#dialogue-erreur .alert-txt").append('<p class="msg">Une erreur Ajax est survenue lors de l\'appel au service fournissant l\'altitude.</p>');reponse = jQuery.parseJSON(jqXHR.responseText);var erreurMsg = '';if (reponse != null) {$.each(reponse, function (cle, valeur) {erreurMsg += valeur + '<br />';});}$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');}},complete : function(jqXHR, textStatus) {var debugMsg = extraireEnteteDebug(jqXHR);if (debugMsg != '') {if (DEBUG) {$('#dialogue-erreur .alert-txt').append('<pre class="msg-debug msg">Débogage : '+debugMsg+'</pre>');}}if ($('#dialogue-erreur .msg').length > 0) {$('#dialogue-erreur').show();}}});});}function trouverCommune(pos) {$(function() {var url_service = SERVICE_NOM_COMMUNE_URL,urlNomCommuneFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());$.ajax({url: urlNomCommuneFormatee,type: 'GET',dataType: 'jsonp',beforeSend : function() {$('.commune-info').empty();$('#dialogue-erreur .alert-txt').empty();},success : function(data, textStatus, jqXHR) {$('.commune-info').empty();$('#commune-nom').append(data.nom);$('#commune-code-insee').append(data.codeINSEE);$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});},statusCode : {500 : function(jqXHR, textStatus, errorThrown) {if (DEBUG) {$('#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>');reponse = jQuery.parseJSON(jqXHR.responseText);var erreurMsg = '';if (reponse != null) {$.each(reponse, function (cle, valeur) {erreurMsg += valeur + '<br />';});}$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur 500 : '+errorThrown+"<br />"+erreurMsg+'</p>');}}},error : function(jqXHR, textStatus, errorThrown) {if (DEBUG) {$("#dialogue-erreur .alert-txt").append('<p class="msg">Une erreur Ajax est survenue lors de la transmission de vos observations.</p>');reponse = jQuery.parseJSON(jqXHR.responseText);var erreurMsg = '';if (reponse != null) {$.each(reponse, function (cle, valeur) {erreurMsg += valeur + '<br />';});}$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');}},complete : function(jqXHR, textStatus) {var debugMsg = extraireEnteteDebug(jqXHR);if (debugMsg != '') {if (DEBUG) {$('#dialogue-erreur .alert-txt').append('<pre class="msg-debug msg">Débogage : '+debugMsg+'</pre>');}}if ($('#dialogue-erreur .msg').length > 0) {$('#dialogue-erreur').show();}}});});}//+---------------------------------------------------------------------------------------------------------+//AUTO-COMPLÉTION Noms Scientifiquesfunction ajouterAutocompletionNoms() {$('#taxon').autocomplete({source: function(requete, add){// la variable de requête doit être vidée car sinon le parametre "term" est ajoutévar url = getUrlAutocompletionNomsSci();$.getJSON(url, function(data) {var suggestions = traiterRetourNomsSci(data);add(suggestions);});},html: true});$('#taxon').on('autocompleteselect', function(event, ui) {$('#taxon').data(ui.item);if (ui.item.retenu == true) {$('#taxon').addClass('ns-retenu');} else {$('#taxon').removeClass('ns-retenu');}});}function getUrlAutocompletionNomsSci() {var mots = $('#taxon').val(),url = SERVICE_AUTOCOMPLETION_NOM_SCI_URL_TPL.replace('{referentiel}',NOM_SCI_PROJET);url = url.replace('{masque}', mots);return url;}function traiterRetourNomsSci(data) {var suggestions = [];if (data.resultat != undefined) {$.each(data.resultat, function(i, val) {val.nn = i;var nom = {label: '', value: '', nt: '', nomSel: '', nomSelComplet: '', numNomSel: '',nomRet: '', numNomRet: '', famille: '', retenu: false};if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {nom.label = '...';nom.value = $('#taxon').val();suggestions.push(nom);return false;} else {nom.label = val.nom_sci_complet;nom.value = val.nom_sci_complet;nom.nt = val.num_taxonomique;nom.nomSel = val.nom_sci;nom.nomSelComplet = val.nom_sci_complet;nom.numNomSel = val.nn;nom.nomRet = val.nom_retenu_complet;nom.numNomRet = val['nom_retenu.id'];nom.famille = val.famille;nom.retenu = (val.retenu == 'false') ? false : true;suggestions.push(nom);}});}return suggestions;}/** jQuery UI Autocomplete HTML Extension** Copyright 2010, Scott González (http://scottgonzalez.com)* Dual licensed under the MIT or GPL Version 2 licenses.** http://github.com/scottgonzalez/jquery-ui-extensions** Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides*/(function($) {var proto = $.ui.autocomplete.prototype,initSource = proto._initSource;function filter(array, term) {var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');return $.grep(array, function(value) {return matcher.test($('<div>').html(value.label || value.value || value).text());});}$.extend(proto, {_initSource: function() {if (this.options.html && $.isArray(this.options.source)) {this.source = function( request, response ) {response(filter(this.options.source, request.term));};} else {initSource.call(this);}},_renderItem: function(ul, item) {if (item.retenu == true) {item.label = '<strong>'+item.label+'</strong>';}return $('<li></li>').data('item.autocomplete', item).append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label)).appendTo(ul);}});})(jQuery);//+----------------------------------------------------------------------------------------------------------+//UPLOAD PHOTO : Traitement de l'image$(document).ready(function() {$('.effacer-miniature').click(function () {supprimerMiniatures($(this));});$('#fichier').on('change', function (e) {arreter(e);var options = {success: afficherMiniature, // post-submit callbackdataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)resetForm: true // reset the form after successful submit};$('#ajouter-obs').attr('disabled', 'disabled');if (verifierFormat($('#fichier').val())) {$('#form-upload').ajaxSubmit(options);} else {$('#form-upload')[0].reset();window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+$('#fichier').attr('accept'));}return false;});if (ESPECE_IMPOSEE) {$('#taxon').attr('disabled', 'disabled');$('#taxon-input-groupe').attr('title', '');var infosAssociee = new Object();infosAssociee.label = INFOS_ESPECE_IMPOSEE.nom_sci_complet;infosAssociee.value = INFOS_ESPECE_IMPOSEE.nom_sci_complet;infosAssociee.nt = INFOS_ESPECE_IMPOSEE.num_taxonomique;infosAssociee.nomSel = INFOS_ESPECE_IMPOSEE.nom_sci;infosAssociee.nomSelComplet = INFOS_ESPECE_IMPOSEE.nom_sci_complet;infosAssociee.numNomSel = INFOS_ESPECE_IMPOSEE.id;infosAssociee.nomRet = INFOS_ESPECE_IMPOSEE['nom_retenu.libelle'];infosAssociee.numNomRet = INFOS_ESPECE_IMPOSEE['nom_retenu.id'];infosAssociee.famille = INFOS_ESPECE_IMPOSEE.famille;infosAssociee.retenu = (INFOS_ESPECE_IMPOSEE.retenu == 'false') ? false : true;$('#taxon').data(infosAssociee);}$('body').on('click', '.effacer-miniature', function() {$(this).parent().remove();});});function verifierFormat(nom) {var parts = nom.split('.');extension = parts[parts.length - 1];return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');}function afficherMiniature(reponse) {if (DEBUG) {var debogage = $('debogage', reponse).text();console.log("Débogage upload : "+debogage);}var message = $('message', reponse).text();if (message != '') {$('#miniature-msg').append(message);} else {$('#miniatures').append(creerWidgetMiniature(reponse));}$('#ajouter-obs').removeAttr('disabled');}function creerWidgetMiniature(reponse) {var miniatureUrl = $('miniature-url', reponse).text();var imgNom = $('image-nom', reponse).text();var html ='<div class="miniature">'+'<img class="miniature-img thumbnail" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+'<button class="effacer-miniature" type="button">Effacer</button>'+'</div>'return html;}function supprimerMiniatures() {$('#miniatures').empty();$('#miniature-msg').empty();}//Initialise l'autocomplétion de la commune, en fonction du référentielfunction initialiserAutocompleteCommune() {var geocoderOptions = {},addressSuffix = '';switch(NOM_SCI_PROJET) {case 'isfan':// Si des résultats se trouvent dans ce rectangle, ils apparaîtront en premier.// Ça marche moyen...geocoderOptions.bounds = new google.maps.LatLngBounds(new google.maps.LatLng(20.756114, -22.023927),new google.maps.LatLng(38.065392, 33.78662));break;case 'apd':geocoderOptions.bounds = new google.maps.LatLngBounds(new google.maps.LatLng(-6.708254, -26.154786),new google.maps.LatLng(27.488781, 30.490722));break;case 'bdtfx':case 'bdtxa':geocoderOptions.region = 'fr';addressSuffix = ', France';}$('#carte-recherche').autocomplete({//Cette partie utilise geocoder pour extraire des valeurs d'adressesource: function(request, response) {geocoderOptions.address = request.term + addressSuffix;geocoder.geocode( geocoderOptions, function(results, status) {if (status == google.maps.GeocoderStatus.OK) {response($.map(results, function(item) {var retour = {label: item.formatted_address,value: item.formatted_address,latitude: item.geometry.location.lat(),longitude: item.geometry.location.lng()};return retour;}));} else {afficherErreurGoogleMap(status);}});},// Cette partie est executee a la selection d'une adresseselect: function(event, ui) {var latLng = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);deplacerMarker(latLng);}});// Autocompletion du champ adresse$('#carte-recherche').on('focus', function() {$(this).select();});$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...event.preventDefault();});$('#carte-recherche').keypress(function(e) {if (e.which == 13) {e.preventDefault();}});};//+---------------------------------------------------------------------------------------------------------+// FORMULAIRE : traitements génériquesvar obsNbre = 0;$(document).ready(function() {$('.alert .close').on('click', fermerPanneauAlert);$('body').on('click', '.fermer', function(event) {event.preventDefault();basculerOuvertureFermetureCadre($(this).find('.icone'));});$('.has-tooltip').tooltip('enable');$('#btn-aide').on('click', basculerAffichageAide);// Date pickerconfigurerDatePicker();// Gestion de la liste des taxonsajouterAutocompletionNoms();surChangementTaxonListe();// Vérif lors du chargement de la page$('#taxon-liste').on('change', surChangementTaxonListe);surChangementFormation();// Vérif lors du chargement de la page$('#formation').on('change', surChangementFormation);// Validation du formulaireconfigurerFormValidator();definirReglesFormValidator();// Gestion des obsconfigurerMilieux();$('.btn-coord ').on('click', basculerAffichageCoord);$('#ajouter-obs').on('click', ajouterObs);surChangementNbreObs();$('.obs-nbre').on('changement', surChangementNbreObs);$('body').on('click', '.supprimer-obs', supprimerObs);$('#transmettre-obs').on('click', transmettreObs);// Défilement des photos$('body').on('click', '.defilement-miniatures-gauche', function(event) {event.preventDefault();defilerMiniatures($(this));});$('body').on('click', '.defilement-miniatures-droite', function(event) {event.preventDefault();defilerMiniatures($(this));});});function surChangementTaxonListe() {if ($('#taxon-liste').val() === '?') {$('#taxon-input-groupe').removeClass('hidden');$('#taxon').valid();} else {$('#taxon-input-groupe').addClass('hidden');}}function surChangementFormation() {if ($('#formation').val() === 'alignement') {$('#aligne-nbre-groupe').removeClass('hidden');$('#aligne-nbre').valid();} else {$('#aligne-nbre-groupe').addClass('hidden');}}function configurerFormValidator() {$.validator.addMethod('dateCel',function (value, element) {return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));},'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');$.validator.addMethod('aligneNbre',function (value, element) {var ok = true;if ($('#formation').val() === 'alignement') {ok = (value != '' && /^[0-9]+$/.test(value) && value > 1);}console.log(ok);return ok;},"Veuillez indiquer le nombre d'arbres d'alignement.");$.validator.addMethod('autreSp',function (value, element) {var taxonListe = $('#taxon-liste').val();return taxonListe !== '?' || (taxonListe === '?' && value != '');},"Veuillez sélectionner une espèce ou une indication sur la plante.");// Modification des méthodes par défaut de Jquery Validation pour Boostrap 3$.validator.setDefaults({ignore: [],// Forcer Jquery Validate à examiner les éléments en "display:none;"highlight: function(element) {$(element).closest('.form-group').addClass('has-error');},unhighlight: function(element) {$(element).closest('.form-group').removeClass('has-error');},success: function(element) {$(element).closest('.form-group').removeClass('has-error').addClass('has-success');if ($(element).attr('id') == 'taxon' && $('#taxon').val() != '') {// Si le taxon n'est pas lié au référentiel, on vide le data associéif ($('#taxon').data('value') != $('#taxon').val()) {$('#taxon').data('numNomSel', '');$('#taxon').data('nomRet', '');$('#taxon').data('numNomRet', '');$('#taxon').data('nt', '');$('#taxon').data('famille', '');}}},errorElement: 'span',errorClass: 'help-block',errorPlacement: function(error, element) {//console.log(element.attr('name') +'-'+ element.parent('.input-group').length);if (element.parent('.input-group').length) {error.insertAfter(element.parent());} else {error.insertAfter(element);}}});}function definirReglesFormValidator() {$('#form-observateur').validate({rules: {courriel : {required : true,email : true},courriel_confirmation : {required : true,equalTo: '#courriel'}}});$('#form-station').validate({rules: {latitude : {range: [-90, 90],required: true},longitude : {range: [-180, 180],required: true},'l93-x': 'required','l93-y': 'required'}});$('#form-obs').validate({rules: {date: {required: true,'dateCel' : true},'taxon-liste': {required: true},taxon: {autreSp: true},certitude: 'required',arbreTetardFormation: 'required',arbreTetardAligneNbre: {aligneNbre: true}}});}function configurerDatePicker() {$.datepicker.setDefaults($.datepicker.regional['fr']);$('#date').datepicker({dateFormat: 'dd/mm/yy',maxDate: new Date,showOn: 'button',buttonImageOnly: true,buttonImage: CALENDRIER_ICONE_URL,buttonText: 'Afficher le calendrier pour saisir la date.',showButtonPanel: true,onSelect: function(date) {$(this).valid();}});$('img.ui-datepicker-trigger').appendTo('#date-icone');}function configurerMilieux() {$('.cb-milieux').on('click', function(event) {$(this).valid();event.stopPropagation();});}function fermerPanneauAlert() {$(this).parentsUntil('.zone-alerte', '.alert').hide();}function basculerOuvertureFermetureCadre(element) {if (element.hasClass('glyphicon-plus-sign')) {element.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');} else {element.removeClass('glyphicon-minus-sign').addClass('glyphicon-plus-sign');}}function basculerAffichageAide() {if ($(this).hasClass('btn-warning')) {$('.has-tooltip').tooltip('enable');$(this).removeClass('btn-warning').addClass('btn-success');$('#btn-aide-txt', this).text("Désactiver l'aide");} else {$('.has-tooltip').tooltip('disable');$(this).removeClass('btn-success').addClass('btn-warning');$('#btn-aide-txt', this).text("Activer l'aide");}}function bloquerCopierCollerCourriel() {afficherPanneau('#dialogue-bloquer-copier-coller');return false;}function basculerAffichageCoord() {var textActuel = $(this).text(),textARemplacer = $(this).data('toggle-text');$(this).text(textARemplacer).data('toggle-text', textActuel);if ($(this).hasClass('cacher-coord')) {$(this).removeClass('cacher-coord').addClass('afficher-coord');$('#coordonnees-geo').addClass('hidden');} else {$(this).removeClass('afficher-coord').addClass('cacher-coord');$('#coordonnees-geo').removeClass('hidden');}return false;}function ajouterObs() {// Fermeture automatique des dialogue de transmission de données$('#dialogue-obs-transaction-ko').hide();$('#dialogue-obs-transaction-ok').hide();if (validerFormulaire() == true) {obsNbre = obsNbre + 1;$('.obs-nbre').text(obsNbre);$('.obs-nbre').triggerHandler('changement');afficherObs();stockerObsData();supprimerMiniatures();if(!ESPECE_IMPOSEE) {$('#taxon').val('');$('#taxon').data('numNomSel',undefined);}$('#barre-progression-upload').attr('aria-valuemax', obsNbre);$('#barre-progression-upload .sr-only').text('0/'+obsNbre+' observations transmises');} else {afficherPanneau('#dialogue-form-invalide');}}function afficherObs() {var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',commune = $('#commune-nom').text(),codeInsee = $('#commune-code-insee').text(),lat = $('input[name="latitude"]').val(),lng = $('input[name="longitude"]').val(),date = $('#date').val(),formation = getTextOptionSelectionne('formation'),nbreAligne = ($('#aligne-nbre').val() != undefined ? ' (' + $('#aligne-nbre').val() + ')' : ''),cavites = getTextOptionSelectionne('cavites'),circonference = getTextOptionSelectionne('circonference'),hauteurTete = getTextOptionSelectionne('hauteur-tete'),presenceSp = $('#presence-sp').val(),taille = getTextOptionSelectionne('taille-type'),entretien = getTextOptionSelectionne('entretien'),etatSanitaire = getTextOptionSelectionne('etat-sanitaire'),milieux = getMilieux(),notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();$('#liste-obs').prepend('<div id="obs'+obsNbre+'" class="obs obs'+obsNbre+'">'+'<div class="well">'+'<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+'title="Supprimer cette observation de la liste à transmettre">'+'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">'+'<span class="glyphicon glyphicon-trash icon-white"></i>'+'</button>'+'</div> '+'<div class="row">'+'<div class="col-md-2 obs-miniatures">'+ajouterImgMiniatureAuTransfert()+'</div>'+'<div class="col-md-8">'+'<ul class="list-unstyled obs-entete">'+'<li>'+'<span class="nom-sci">' + taxon + '</span> ' +formaterNumNomSel(numNomSel)+'<span class="referentiel-obs">' + referentiel + '</span>' +' observé à ' +'<span class="commune">' + commune + '</span> ' +'(' + codeInsee + ') [' + lat +' / ' + lng + ']' +' le ' +'<span class="date">' + date + '</span>' +'</li>' +'</ul>'+'<ul class="list-unstyled obs-details">'+'<li>' +'<span>Situation(s) :</span> ' + milieux + ' ; ' +'<span>Formation :</span> ' + formation + nbreAligne + ' ; ' +'<span>Cavités :</span> ' + cavites + ' ; ' +'<span>Circonférence :</span> ' + circonference + ' ; ' +'<span>Hauteur de la tête :</span> ' + hauteurTete + ' ; ' +'</li>' +'<li>' +'<span>Présences sur l\'arbre :</span> ' + presenceSp + ' ' +'</li>' +'<li>' +'<span>Type taille :</span> ' + taille + ' ; ' +'<span>Entretien :</span> ' + entretien + ' ; ' +'<span>État sanitaire :</span> ' + etatSanitaire + ' ; ' +'</li>' +'<li>' +'<span>Commentaires :</span> ' + notes +'</li>'+'</ul>'+'</div>'+'</div>'+'</div>'+'</div>');}function getMilieux() {var milieuxStr = '',milieux = [];$('.cb-milieux:checked').each(function() {milieux.push($(this).val());});milieuxStr = Array.prototype.slice.call(milieux).join(', ');return milieuxStr;}function getTextOptionSelectionne(id) {return ($('#' + id).val() != undefined ? $('#' + id + ' option:selected').text() : '');}function stockerObsData() {var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),nomRet = nomHorsListe ? $('#taxon').data('nomRet') : taxons[numNomSel]['nom_ret'],numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL;$('#liste-obs').data('obsId'+obsNbre, {'date' : $('#date').val(),'notes' : $('#notes').val(),'nom_sel': nomSel,'num_nom_sel': numNomSel,'nom_ret': nomRet,'num_nom_ret': numNomRet,'num_taxon': numTaxon,'famille': famille,'referentiel': referentiel,'latitude' : $('#latitude').val(),'longitude' : $('#longitude').val(),'commune_nom' : $('#commune-nom').text(),'commune_code_insee' : $('#commune-code-insee').text(),'altitude': $('#altitude').text(),'lieudit': $('#lieudit').val(),'milieu': getMilieux(),'certitude': $('#certitude').val(),//Ajout des champs images'image_nom' : getNomsImgsOriginales(),// Ajout des champs étendus de l'obs'obs_etendue': getObsChpEtendus()});}function getObsChpEtendus() {var champs = [];$('.obs-chp-etendu').each(function() {var valeur = $(this).val(),cle = $(this).attr('name'),label = $(this).data('label');if (valeur != '') {var chpEtendu = {cle: cle, label: label, valeur: valeur};champs.push(chpEtendu);}});return champs;}function surChangementNbreObs() {if (obsNbre == 0) {$('#transmettre-obs').attr('disabled', 'disabled');$('#ajouter-obs').removeAttr('disabled');} else if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {$('#transmettre-obs').removeAttr('disabled');$('#ajouter-obs').removeAttr('disabled');} else if (obsNbre >= OBS_MAX_NBRE) {$('#ajouter-obs').attr('disabled', 'disabled');afficherPanneau('#dialogue-bloquer-creer-obs');}}var nbObsEnCours = 1;var totalObsATransmettre = 0;function transmettreObs() {var observations = $('#liste-obs').data();console.log(observations);if (observations == undefined || jQuery.isEmptyObject(observations)) {afficherPanneau('#dialogue-zero-obs');} else {nbObsEnCours = 1;nbObsTransmises = 0;totalObsATransmettre = $.map(observations, function(n, i) { return i; }).length;depilerObsPourEnvoi();}return false;}function depilerObsPourEnvoi() {var observations = $('#liste-obs').data();// la boucle est factice car on utilise un tableau// dont on a besoin de n'extraire que le premier élément// or javascript n'a pas de méthode cross browsers pour extraire les clés// TODO: utiliser var.keys quand ça sera plus répandu// ou bien utiliser un vrai tableau et pas un objetfor (var obsNum in observations) {obsATransmettre = new Object();obsATransmettre['projet'] = TAG_PROJET;obsATransmettre['tag-obs'] = TAG_OBS;obsATransmettre['tag-img'] = TAG_IMG;var utilisateur = new Object();utilisateur.id_utilisateur = $('#id_utilisateur').val();utilisateur.prenom = $('#prenom').val();utilisateur.nom = $('#nom').val();utilisateur.courriel = $('#courriel').val();obsATransmettre['utilisateur'] = utilisateur;obsATransmettre[obsNum] = observations[obsNum];var idObsNumerique = obsNum.replace('obsId', '');if (idObsNumerique != '') {envoyerObsAuCel(idObsNumerique, obsATransmettre);}break;}}var nbObsTransmises = 0;function mettreAJourProgression() {nbObsTransmises++;var pct = (nbObsTransmises/totalObsATransmettre)*100;$('#barre-progression-upload').attr('aria-valuenow', nbObsTransmises);$('#barre-progression-upload').attr('style', 'width: '+pct+'%');$('#barre-progression-upload .sr-only').text(nbObsTransmises+'/'+totalObsATransmettre+' observations transmises');if (obsNbre == 0) {$('.progress').removeClass('active');$('.progress').removeClass('progress-striped');}}function envoyerObsAuCel(idObs, observation) {var erreurMsg = '';$.ajax({url : SERVICE_SAISIE_URL,type : 'POST',data : observation,dataType : 'json',beforeSend : function() {$('#dialogue-obs-transaction-ko').hide();$('#dialogue-obs-transaction-ok').hide();$('.alert-txt .msg').remove();$('.alert-txt .msg-erreur').remove();$('.alert-txt .msg-debug').remove();$('#chargement').show();},success : function(data, textStatus, jqXHR) {// mise à jour du nombre d'obs à transmettre// et suppression de l'obssupprimerObsParId(idObs);nbObsEnCours++;// mise à jour du statutmettreAJourProgression();if(obsNbre > 0) {// dépilement de la suivantedepilerObsPourEnvoi();}},statusCode : {500 : function(jqXHR, textStatus, errorThrown) {erreurMsg += "Erreur 500 :\ntype : "+textStatus+' '+errorThrown+"\n";}},error : function(jqXHR, textStatus, errorThrown) {erreurMsg += "Erreur Ajax :\ntype : "+textStatus+' '+errorThrown+"\n";try {reponse = jQuery.parseJSON(jqXHR.responseText);if (reponse != null) {$.each(reponse, function (cle, valeur) {erreurMsg += valeur + "\n";});}} catch(e) {erreurMsg += "L'erreur n'était pas en JSON.";}},complete : function(jqXHR, textStatus) {var debugMsg = extraireEnteteDebug(jqXHR);if (erreurMsg != '') {if (DEBUG) {$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">'+erreurMsg+'</pre>');$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : '+debugMsg+'</pre>');}var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?'+'subject=Dysfonctionnement du widget de saisie '+TAG_PROJET+'&body='+erreurMsg+'%0D%0ADébogage :%0D%0A'+debugMsg;// mise en valeur de l'obs en erreur + scroll vers celle ci en changeant le hash$('#obs'+idObs+' div div').addClass('obs-erreur');window.location.hash = 'obs'+idObs;$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone().find('.courriel-erreur').attr('href', hrefCourriel).end().html());$('#dialogue-obs-transaction-ko').show();$('#chargement').hide();initialiserBarreProgression();} else {if (DEBUG) {$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : '+debugMsg+'</pre>');}if(obsNbre == 0) {setTimeout(function() {$('#chargement').hide();$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());$('#dialogue-obs-transaction-ok').show();window.location.hash = 'dialogue-obs-transaction-ok';initialiserObs();}, 1500);}}}});}function validerFormulaire() {$observateur = $('#form-observateur').valid();$station = $('#form-station').valid();$obs = $('#form-obs').valid();return ($observateur == true && $station == true && $obs == true) ? true : false;}function getNomsImgsOriginales() {var noms = new Array();$('.miniature-img').each(function() {noms.push($(this).attr('alt'));});return noms;}function supprimerObs() {var obsId = $(this).val();// Problème avec IE 6 et 7if (obsId == 'Supprimer') {obsId = $(this).attr('title');}supprimerObsParId(obsId);}function supprimerObsParId(obsId) {obsNbre = obsNbre - 1;$('.obs-nbre').text(obsNbre);$('.obs-nbre').triggerHandler('changement');$('.obs'+obsId).remove();$('#liste-obs').removeData('obsId'+obsId);}function initialiserBarreProgression() {$('#barre-progression-upload').attr('aria-valuenow', 0);$('#barre-progression-upload').attr('style', 'width: 0%');$('#barre-progression-upload .sr-only').text('0/0 observations transmises');$('.progress').addClass('active');$('.progress').addClass('progress-striped');}function initialiserObs() {obsNbre = 0;nbObsTransmises = 0;nbObsEnCours = 0;totalObsATransmettre = 0;initialiserBarreProgression();$('.obs-nbre').text(obsNbre);$('.obs-nbre').triggerHandler('changement');$('#liste-obs').removeData();$('.obs').remove();$('#dialogue-bloquer-creer-obs').hide();}function ajouterImgMiniatureAuTransfert() {var html = '';var miniatures = '';var premiere = true;if ($('#miniatures img').length >= 1) {$('#miniatures img').each(function() {var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee';premiere = false;var css = $(this).hasClass('b64') ? 'thumbnail b64' : 'thumbnail';var src = $(this).attr('src');var alt = $(this).attr('alt');miniature = '<img class="'+css+' '+visible+'" alt="'+alt+'"src="'+src+'" />';miniatures += miniature;});visible = ($('#miniatures img').length > 1) ? '' : 'defilement-miniatures-cache';var html ='<div class="defilement-miniatures">'+'<a class="defilement-miniatures-gauche '+visible+'"><</a>'+miniatures+'<a class="defilement-miniatures-droite '+visible+'">></a>'+'</div>';} else {html = '<img class="thumbnail" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';}return html;}function defilerMiniatures(element) {var miniatureSelectionne = element.siblings('img.miniature-selectionnee');miniatureSelectionne.removeClass('miniature-selectionnee');miniatureSelectionne.addClass('miniature-cachee');var miniatureAffichee = miniatureSelectionne;if(element.hasClass('defilement-miniatures-gauche')) {if(miniatureSelectionne.prev('.miniature').length != 0) {miniatureAffichee = miniatureSelectionne.prev('.thumbnail');} else {miniatureAffichee = miniatureSelectionne.siblings('.thumbnail').last();}} else {if(miniatureSelectionne.next('.miniature').length != 0) {miniatureAffichee = miniatureSelectionne.next('.thumbnail');} else {miniatureAffichee = miniatureSelectionne.siblings('.thumbnail').first();}}//console.log(miniatureAffichee);miniatureAffichee.addClass('miniature-selectionnee');miniatureAffichee.removeClass('miniature-cachee');}function formaterNumNomSel(numNomSel) {var nn = '';if (numNomSel == undefined) {nn = '<span class="alert-error">[non lié au référentiel]</span>';} else {nn = '<span class="nn">[nn'+numNomSel+']</span>';}return nn;}