// JavaScript Document /** * @fileOverview Contient les fonctions nécessaires au fonctionnement de l'interface MOBILE de l'application de prévision des vagues PREViMer.org. * La partie PHP de ce fichier génère les listes de sélection (zones, geoIDs, données) dans le code des fonctions javascript avec les messages de la langue choisie * @author Cédric ALBRECHT @ WeBla.fr */ //initialisation de l'horodatage pour Courbe et spectre (avec GeoID) var today = new Date(); today.setHours(1,0,0,0); var msecCourbe = today.getTime(); //initialisation de l'horodatage var msec = new Date().getTime(); var unJour = 1000 * 60 * 60 * 24; // Nombre de millisecondes pour un jour var aujourdhui = Math.floor(msec / unJour); // nb de jours depuis le 1er janvier 1970 var oldMsec = msec; var divAreaEnCours = 'divArea1'; var modelEnCours = ''; var donneeEnCours = 'hs'; var typVisuEnCours = 'map'; var navEnCours = 3; var flagSelectChanged = false; var geoID = '-1'; var langue = 'fr'; // Activation désactivation du mode debug/offline // valeurs possibles : true OU false var debug = false; /** Démarrage de l'application web @param {string} model Le modèle choisi sur l'écran d'accueil */ function StartModel(model) { modelEnCours = model; BuildSelectDonnee(model); BuildSelectArea(model); DisplayArea(); HideSelectModel(); ShowAppli(); HideLogo(); ActiveBoutonCal(); } /** Retour à l'écran d'accueil de sélection des modèles */ function BackToSelectModel() { // cacher l'appli HideAppli(); // afficher le logo ShowLogo(); // afficher les boutons de sélection des modèles ShowSelectModel(); } /** Actions effectuées à chaque changement de zone dans la liste déroulante @param {string} model Le modèle choisi sur l'écran d'accueil */ function ChangeArea(model) { flagSelectChanged = true; ShowLoading(); if (donneeEnCours == 'hs') { // on affiche les boutons de choix de visualisation si on est en mode "Hauteur significative des vagues" document.getElementById('divTypVisu').style.visibility = 'visible'; document.getElementById('divTypVisu').style.height = 'auto'; if (typVisuEnCours != 'map') { // on affiche le select des geoIDs si on est en mode autre que carte ShowSelectGeoid(); } } DisplayArea(); } /** Affichage de l'image Previmer.org en fonction des modèle, zone et geoID choisis */ function DisplayArea() { var geoIDsrc = ''; var debugMsec = msec; var areaSelected = document.formarea.choixarea.value; if (areaSelected == '-1') { // Aucune zone sélectionnée document.getElementById(divAreaEnCours).innerHTML = '
Sélectionnez une carte dans la liste

Naviguez en touchant la carte



Zoomez pour voir plus de détails
'; } else { if (geoID != '-1') { geoIDurl = '/geoid/'+geoID; if (typVisuEnCours == 'temporal') { debugMsec = msecCourbe; var src = 'http://marc.ifremer.fr/services/getResult/theme/vagues/appli/'+modelEnCours+'/var/'+donneeEnCours+'/type/'+typVisuEnCours+'/date/'+msecCourbe+'/area/'+areaSelected+geoIDurl+'/lang/'+langue; var areaHtml = ''; } else { // spectrum var src = 'http://marc.ifremer.fr/services/getResult/theme/vagues/appli/'+modelEnCours+'/var/'+donneeEnCours+'/type/'+typVisuEnCours+'/date/'+msec+'/area/'+areaSelected+geoIDurl+'/lang/'+langue; var areaHtml = ''; } } else { // map var src = 'http://marc.ifremer.fr/services/getResult/theme/vagues/appli/'+modelEnCours+'/var/'+donneeEnCours+'/type/'+typVisuEnCours+'/date/'+msec+'/area/'+areaSelected+'/lang/'+langue; var areaHtml = ''; } // Mode debug/offline : affichage des variables à la place de l'image if (debug == true) { var debugDateObj = new Date(debugMsec); var debugDate = debugDateObj.getDate() + '/' + (debugDateObj.getMonth() + 1) + '/' + debugDateObj.getFullYear() + ' - ' + debugDateObj.getHours() + ':' + debugDateObj.getMinutes(); areaHtml = '

Debug/Offline mode

langue : '+langue+'
appli : '+modelEnCours+'
var : '+donneeEnCours+'
type : '+typVisuEnCours+'
date (ms) : '+debugMsec+'
date : '+debugDate+'
area : '+areaSelected+'
geoid : '+geoID+'
URL demandée
'; } // Affichage de l'image document.getElementById(divAreaEnCours).innerHTML = areaHtml; } // Focus en haut de page pour voir la nouvelle carte qui charge window.location.href = "#"; } /** Actions à effectuer à chaque changement de geoID dans la liste */ function ChangeGeoid() { flagSelectChanged = true; geoID = document.formarea.choixgeoid.value; DisplayArea(); } /** Permute les calques d'affichage des résultats en laissant apparaitre l'animation de chargement (calque divLoading dont le zIndex = 11) */ function ChangeDivArea() { if (divAreaEnCours == 'divArea1') { document.getElementById('divArea1').style.zIndex = '10'; document.getElementById('divArea2').style.zIndex = '12'; divAreaEnCours = 'divArea2'; } else { document.getElementById('divArea2').style.zIndex = '10'; document.getElementById('divArea1').style.zIndex = '12'; divAreaEnCours = 'divArea1'; } } /** Change l'heure de l'image demandée au webservice getResult @param {string} signe Indique si l'ajout ou la suppression d'heures à l'heure en cours, prend les valeurs ('plus', 'moins') */ function ChangeHeures(signe) { var already = false; if (signe == 'moins') { if (msec - (navEnCours * 3600000) == oldMsec) { already = true; } oldMsec = msec; msec -= (navEnCours * 3600000); // -3/-24 heures en millisecondes } else { /* 'plus' */ if (msec + (navEnCours * 3600000) == oldMsec) { already = true; } oldMsec = msec; msec += (navEnCours * 3600000); // +3/+24 heures en millisecondes } ChangeDivArea(); if (already == false || flagSelectChanged == true) { DisplayArea(); } flagSelectChanged = false; ActiveBoutonCal(); } /** Activation/désactivation de la fonction zoom des navigateurs mobiles @deprecated Gestion du zoom non utilisée mais gardée au cas ou ça pose problème sur certains mobiles @param {string} lockornot Indique s'il faut bloquer ou débloquer le zoom, prend les valeur ('lock', 'unlock') */ function Zoom(lockornot) { if (lockornot == 'unlock') { // Débloquage du zoom document.getElementsByName("viewport").item(0).setAttribute("content", "width = 748, user-scalable = yes"); // Changement d'apparence des boutons document.getElementById('divZoom').innerHTML = '
'; } else { // Changement d'apparence du bouton sélectionné document.getElementsByName("viewport").item(0).setAttribute("content", "width = 748, user-scalable = no"); // Changement d'apparence du bouton sélectionné document.getElementById('divZoom').innerHTML = '
'; } } /** Actions lors du changement du type de données à afficher @param {string} donnee Type de données/variable PREViMer */ function ChangeDonnee(donnee) { flagSelectChanged = true; donneeEnCours = donnee; if (donnee == 'hs') { // on affiche les boutons de choix de visualisation si une zone est sélectionnée if (document.formarea.choixarea.value != "-1") { document.getElementById('divTypVisu').style.visibility = 'visible'; document.getElementById('divTypVisu').style.height = 'auto'; if (typVisuEnCours != 'map') { // on affiche le select des geoIDs si on est en mode autre que carte ShowSelectGeoid(); } } } else { ChangeTypVisu('map'); document.getElementById('divTypVisu').style.visibility = 'hidden'; document.getElementById('divTypVisu').style.height = '0px'; } DisplayArea(); } /** Actions lors du changement du type de visualisation @param {string} typvisu Type de visualisation Previmer, prend les valeurs ('map', 'temporal', 'spectrum') */ function ChangeTypVisu(typvisu) { flagSelectChanged = true; typVisuEnCours = typvisu; // Changement d'apparence du bouton sélectionné switch (typvisu){ case 'map': document.getElementById('boutonCarte').className = 'bouton boutonON'; document.getElementById('boutonCourb').className = 'bouton'; document.getElementById('boutonSpect').className = 'bouton'; HideSelectGeoid(); geoID = '-1'; break; case 'temporal': document.getElementById('boutonCarte').className = 'bouton'; document.getElementById('boutonCourb').className = 'bouton boutonON'; document.getElementById('boutonSpect').className = 'bouton'; ShowSelectGeoid(); break; case 'spectrum': document.getElementById('boutonCarte').className = 'bouton'; document.getElementById('boutonCourb').className = 'bouton'; document.getElementById('boutonSpect').className = 'bouton boutonON'; ShowSelectGeoid(); break; default : alert("Type de visualisation '"+typVisuEnCours+"' non reconnu par PREViMer"); } DisplayArea(); } /** Actions lors du changement de mode de navigation +/-3h ou +/-24h @param {string} troisOu24h Nombre d'heures à ajouter ou soustraire lors de la navigation, prend les valeurs (3, 24) */ function ChangeNavigation(troisOu24h) { navEnCours = troisOu24h; // Changement d'apparence du bouton sélectionné switch (troisOu24h){ case '3': document.getElementById('bouton3h').className = 'bouton boutonON'; document.getElementById('bouton24h').className = 'bouton'; break; case '24': document.getElementById('bouton3h').className = 'bouton'; document.getElementById('bouton24h').className = 'bouton boutonON'; break; default : alert("Navigation +/-'"+navEnCours+"' non prévu dans PREViPhone"); } } /** Construction de la liste Html des zones en fonction d'un modèle @param {string} model Le modèle choisi sur l'écran d'accueil */ function BuildSelectArea(model) { switch (model){ case 'shom-med': var selectHtml = ''; break; case 'demonstrateur-1': var selectHtml = ''; break; case 'shom-ultramarins': var selectHtml = ''; break; case 'shom-atlnord': var selectHtml = ''; break; default : alert("Erreur : modèle '"+model+"' non reconnu"); } document.getElementById('divSelectsAreas').innerHTML = selectHtml; } /** Construction de la liste Html des geoIDs en fonction d'une zone sélectionnée @param {string} model Le modèle choisi sur l'écran d'accueil @param {string} donnee Type de données/variable Previmer @param {string} typvisu Type de visualisation Previmer, prend les valeurs ('map', 'temporal', 'spectrum') */ function BuildSelectGeoid(model, donnee, typevisu) { var areaSelected = document.formarea.choixarea.value; if (areaSelected != '-1') { var listeId = model+donnee+typevisu+areaSelected; switch (listeId){ case 'shom-medhsspectrummed': var selectHtml = ''; break; case 'shom-medhsspectrummenor': var selectHtml = ''; break; case 'shom-medhsspectrumfos-capo-mele': var selectHtml = ''; break; case 'shom-medhsspectrumcorse': var selectHtml = ''; break; case 'shom-medhsspectrum6844': var selectHtml = ''; break; case 'shom-medhsspectrum7053': var selectHtml = ''; break; case 'shom-medhsspectrum7409': var selectHtml = ''; break; case 'shom-medhstemporalmed-ouest': var selectHtml = ''; break; case 'shom-medhstemporalcabo-fos': var selectHtml = ''; break; case 'shom-medhstemporalnice-piombino': var selectHtml = ''; break; case 'shom-medhstemporal6843': var selectHtml = ''; break; case 'shom-medhstemporal7054': var selectHtml = ''; break; case 'shom-medhstemporal6767': var selectHtml = ''; break; case 'shom-medhstemporal7407': var selectHtml = ''; break; case 'shom-medhstemporal7409': var selectHtml = ''; break; case 'demonstrateur-1hsspectrum7150': var selectHtml = ''; break; case 'demonstrateur-1hsspectrum7148': var selectHtml = ''; break; case 'demonstrateur-1hsspectrum7121': var selectHtml = ''; break; case 'demonstrateur-1hstemporal7150': var selectHtml = ''; break; case 'demonstrateur-1hstemporal7148': var selectHtml = ''; break; case 'demonstrateur-1hstemporal7121': var selectHtml = ''; break; case 'shom-ultramarinshsspectrumantilles': var selectHtml = ''; break; case 'shom-ultramarinshsspectrumreunion': var selectHtml = ''; break; case 'shom-ultramarinshsspectrumsaintleu': var selectHtml = ''; break; case 'shom-ultramarinshstemporalantilles': var selectHtml = ''; break; case 'shom-ultramarinshstemporal7631': var selectHtml = ''; break; case 'shom-ultramarinshstemporalreunion': var selectHtml = ''; break; case 'shom-ultramarinshstemporalsaintleu': var selectHtml = ''; break; case 'shom-ultramarinshstemporalvolcan': var selectHtml = ''; break; case 'shom-ultramarinshstemporalsaintdenis': var selectHtml = ''; break; case 'shom-atlnordhsspectrumnorgas': var selectHtml = ''; break; case 'shom-atlnordhsspectrumgascogne': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7311': var selectHtml = ''; break; case 'shom-atlnordhsspectrum6990': var selectHtml = ''; break; case 'shom-atlnordhsspectrumg1': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7066': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7149': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7147': var selectHtml = ''; break; case 'shom-atlnordhsspectrum6786': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7070': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7404': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7405_2': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7402': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7394': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7395': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7068': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7032_2': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7031_2': var selectHtml = ''; break; case 'shom-atlnordhsspectrum6680': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7151': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7155': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7154_2': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7120': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7421': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7418': var selectHtml = ''; break; case 'shom-atlnordhsspectrum6824': var selectHtml = ''; break; case 'shom-atlnordhsspectrum7323': var selectHtml = ''; break; case 'shom-atlnordhstemporalano': var selectHtml = ''; break; case 'shom-atlnordhstemporal7209': var selectHtml = ''; break; case 'shom-atlnordhstemporal7312': var selectHtml = ''; break; case 'shom-atlnordhstemporal7076': var selectHtml = ''; break; case 'shom-atlnordhstemporal6991': var selectHtml = ''; break; case 'shom-atlnordhstemporalg2': var selectHtml = ''; break; case 'shom-atlnordhstemporalg5': var selectHtml = ''; break; case 'shom-atlnordhstemporal7150': var selectHtml = ''; break; case 'shom-atlnordhstemporal7150_3': var selectHtml = ''; break; case 'shom-atlnordhstemporal7149_2': var selectHtml = ''; break; case 'shom-atlnordhstemporal7147': var selectHtml = ''; break; case 'shom-atlnordhstemporal6786': var selectHtml = ''; break; case 'shom-atlnordhstemporal7070': var selectHtml = ''; break; case 'shom-atlnordhstemporal7404': var selectHtml = ''; break; case 'shom-atlnordhstemporal7405_2': var selectHtml = ''; break; case 'shom-atlnordhstemporal7402': var selectHtml = ''; break; case 'shom-atlnordhstemporal7394': var selectHtml = ''; break; case 'shom-atlnordhstemporal7395': var selectHtml = ''; break; case 'shom-atlnordhstemporal7068': var selectHtml = ''; break; case 'shom-atlnordhstemporal7032_2': var selectHtml = ''; break; case 'shom-atlnordhstemporal7031_2': var selectHtml = ''; break; case 'shom-atlnordhstemporal6680': var selectHtml = ''; break; case 'shom-atlnordhstemporal7151': var selectHtml = ''; break; case 'shom-atlnordhstemporal7155': var selectHtml = ''; break; case 'shom-atlnordhstemporal7154_2': var selectHtml = ''; break; case 'shom-atlnordhstemporal7120': var selectHtml = ''; break; case 'shom-atlnordhstemporal7421': var selectHtml = ''; break; case 'shom-atlnordhstemporal7418': var selectHtml = ''; break; case 'shom-atlnordhstemporal7416': var selectHtml = ''; break; case 'shom-atlnordhstemporal7424': var selectHtml = ''; break; case 'shom-atlnordhstemporal6735': var selectHtml = ''; break; case 'demonstrateur-1': var selectHtml = ''; break; case 'shom-ultramarins': var selectHtml = ''; break; case 'shom-atlnord': var selectHtml = ''; break; default : alert("Erreur : modèle '"+model+"' non reconnu"); } document.getElementById('divSelectsDonnees').innerHTML = selectHtml; donneeEnCours = document.getElementById('choixvariable').options[0].value; } /** Affichage de l'animation de chargement */ function ShowLoading() { document.getElementById('divLoading').style.visibility = "visible"; } /** Masquage de l'animation de chargement */ function HideLoading() { document.getElementById('divLoading').style.visibility = "hidden"; } /** Affichage de la zone de résultats et des boutons d'options */ function ShowAppli() { document.getElementById('divAreas').style.visibility = "visible"; document.getElementById('divAreas').style.height = "576px"; document.getElementById('divPanels').style.visibility = "visible"; document.getElementById('divPanels').style.height = "auto"; } /** Masquage de la zone de résultats et des boutons d'options */ function HideAppli() { // vider les divArea document.getElementById('divArea1').innerHTML = ''; document.getElementById('divArea2').innerHTML = ''; HideLoading(); // cacher les div appli et panels document.getElementById('divAreas').style.visibility = "hidden"; document.getElementById('divAreas').style.height = "0px"; document.getElementById('divPanels').style.visibility = "hidden"; document.getElementById('divPanels').style.height = "0px"; // cacher les boutons de type de visualisation document.getElementById('divTypVisu').style.visibility = 'hidden'; document.getElementById('divTypVisu').style.height = '0px'; // cacher le select des GeoIDs HideSelectGeoid(); } /** Affichage de l'écran d'accueil de sélection des modèles */ function ShowSelectModel() { document.getElementById('divModels').style.visibility = "visible"; document.getElementById('divModels').style.height = "auto"; } /** Masquage de l'écran d'accueil de sélection des modèles */ function HideSelectModel() { document.getElementById('divModels').style.visibility = "hidden"; document.getElementById('divModels').style.height = "0px"; } /** Affichage du logo */ function ShowLogo() { document.getElementById('divLogo').style.display = "inherit"; } /** Masquage du logo */ function HideLogo() { document.getElementById('divLogo').style.display = "none"; } /** Affichage de la liste déroulante de choix des geoID */ function ShowSelectGeoid() { BuildSelectGeoid(modelEnCours, donneeEnCours, typVisuEnCours); document.getElementById('divSelectsGeoids').style.visibility = "visible"; document.getElementById('divSelectsGeoids').style.height = "auto"; geoID = document.formarea.choixgeoid.value; // afficher l'image du geoid selectionné ---- facultatif /*var areaSelected = document.formarea.choixarea.value; var imgGeoidSrc = 'http://marc.ifremer.fr/services/getBackground/theme/vagues/appli/'+modelEnCours+'/var/'+donneeEnCours+'/type/'+typVisuEnCours+'/w/155/h/155/lang/fr/area/'+areaSelected+'/select/'+geoID; var imgGeoidHtml = ''; // Affichage de l'image document.getElementById('divImgGeoid').innerHTML = imgGeoidHtml;*/ // fin ------ facultatif } /** Masquage de la liste déroulante de choix des geoID */ function HideSelectGeoid() { document.getElementById('divSelectsGeoids').style.visibility = "hidden"; document.getElementById('divSelectsGeoids').style.height = "0px"; geoID = '-1'; } /** Gestion de l'activation des boutons du calendrier à 6 jours lors de la navigation temporelle */ function ActiveBoutonCal() { var horodatage = Math.floor(msec / unJour); var difference = horodatage - aujourdhui; switch (difference) { case 0: // Si horodatage en cours = aujourd'hui alors bouton 0 actif document.getElementById('btncal0').className = 'bouton boutoncal boutonON'; document.getElementById('btncal1').className = 'bouton boutoncal'; document.getElementById('btncal2').className = 'bouton boutoncal'; document.getElementById('btncal3').className = 'bouton boutoncal'; document.getElementById('btncal4').className = 'bouton boutoncal'; document.getElementById('btncal5').className = 'bouton boutoncal'; break; case 1: // Si horodatage en cours = aujourd'hui + 1 jour alors bouton 1 actif document.getElementById('btncal0').className = 'bouton boutoncal'; document.getElementById('btncal1').className = 'bouton boutoncal boutonON'; document.getElementById('btncal2').className = 'bouton boutoncal'; document.getElementById('btncal3').className = 'bouton boutoncal'; document.getElementById('btncal4').className = 'bouton boutoncal'; document.getElementById('btncal5').className = 'bouton boutoncal'; break; case 2: // Si horodatage en cours = aujourd'hui + 2 jours alors bouton 2 actif document.getElementById('btncal0').className = 'bouton boutoncal'; document.getElementById('btncal1').className = 'bouton boutoncal'; document.getElementById('btncal2').className = 'bouton boutoncal boutonON'; document.getElementById('btncal3').className = 'bouton boutoncal'; document.getElementById('btncal4').className = 'bouton boutoncal'; document.getElementById('btncal5').className = 'bouton boutoncal'; break; case 3: // Si horodatage en cours = aujourd'hui + 3 jours alors bouton 3 actif document.getElementById('btncal0').className = 'bouton boutoncal'; document.getElementById('btncal1').className = 'bouton boutoncal'; document.getElementById('btncal2').className = 'bouton boutoncal'; document.getElementById('btncal3').className = 'bouton boutoncal boutonON'; document.getElementById('btncal4').className = 'bouton boutoncal'; document.getElementById('btncal5').className = 'bouton boutoncal'; break; case 4: // Si horodatage en cours = aujourd'hui + 4 jours alors bouton 4 actif document.getElementById('btncal0').className = 'bouton boutoncal'; document.getElementById('btncal1').className = 'bouton boutoncal'; document.getElementById('btncal2').className = 'bouton boutoncal'; document.getElementById('btncal3').className = 'bouton boutoncal'; document.getElementById('btncal4').className = 'bouton boutoncal boutonON'; document.getElementById('btncal5').className = 'bouton boutoncal'; break; case 5: // Si horodatage en cours = aujourd'hui + 5 jours alors bouton 5 actif document.getElementById('btncal0').className = 'bouton boutoncal'; document.getElementById('btncal1').className = 'bouton boutoncal'; document.getElementById('btncal2').className = 'bouton boutoncal'; document.getElementById('btncal3').className = 'bouton boutoncal'; document.getElementById('btncal4').className = 'bouton boutoncal'; document.getElementById('btncal5').className = 'bouton boutoncal boutonON'; break; default: // Si horodatage en cours < aujourd'hui OU > ajourd'hui + 5 jours alors aucun bouton n'est actif document.getElementById('btncal0').className = 'bouton boutoncal'; document.getElementById('btncal1').className = 'bouton boutoncal'; document.getElementById('btncal2').className = 'bouton boutoncal'; document.getElementById('btncal3').className = 'bouton boutoncal'; document.getElementById('btncal4').className = 'bouton boutoncal'; document.getElementById('btncal5').className = 'bouton boutoncal'; break; } } /** Gestion des actions lors du clic sur un bouton du calendrier @param {integer} msecDuBouton Date en millisecondes correspondant au bouton du calendrier qui a été sélectionné */ function ClicBoutonCal(msecDuBouton) { // extraire l'heure de msec var dateCal = new Date(msec); var heureMsec = dateCal.getHours(); // changer msec avec le jour de msecDuBouton et l'heure extraite dateCal.setTime(msecDuBouton); dateCal.setHours(heureMsec,0,0,0); msec = dateCal.getTime(); // Affichage de la carte et Activation du bouton du calendrier DisplayArea(); ActiveBoutonCal(); }