// meteo.js
// copyright meteo.deltafox.net

// cartes et sondages personnalisées


// initialisations
  
  var nomMois = new Array (" janvier "," février "," mars "," avril "," mai "," juin "," juillet "," août "," septembre "," octobre "," novembre "," décembre ");
  var nomJour = new Array("dimanche ","lundi ","mardi ","mercredi ","jeudi ","vendredi ","samedi ");
  var nJour = new Array("D","L","M","M","J","V","S");
  var params = new Array ("Center lat", "Center lon", "Radius"); // pour cartes personnalisées
  var paramsText = "lat=Latitude |lon=Longitude |rad=Rayon |deg=degrés";

  var ModelDelayHours = 6;         // délai moyen de mise à jour des modèles GFS (environ 6 heures)
  var Delay = 0;                   // échéance
  var TimeInterval = 3;            // intervalle des prévisions 
  var ModelInterval = 6;           // intervalle des mise à jour du modèle 
  var dateMod, datePrev ;		// dates du modèle et de la prévi

  var initMod = calculeModele();   // date de mise à jour du modèle (texte)

// fonctions

function ouvreCartes (a) {					// ouvre le lien dans la fenetre 'cartes' et la met eu premier plan
 var w = open(a.href,"cartes");w.focus();
}

function calculeModele() {   		// calcule la date de mise à jour du modèle
  var s = "";
  var maintenant = new Date();        
  dateMod = new Date();  
  datePrev = new Date();
  dateMod.setTime(Math.round((maintenant.getTime()/3600000 - ModelDelayHours - ModelInterval / 2)/ModelInterval ) * ModelInterval * 3600000);
  s += nomJour[dateMod.getUTCDay()] + dateMod.getUTCDate() + nomMois[dateMod.getUTCMonth()];
  s += dateMod.getUTCFullYear() + " à " + dateMod.getUTCHours() + " h UTC";
  return s ;
};


function majDatePrev() {             // calcule la date de prévision et l'affiche

  Delay = document.Init.Delay.options[document.Init.Delay.selectedIndex].value * 1;
  var DaysAfter = document.Init.DaysAfter.options[document.Init.DaysAfter.selectedIndex].value * 1;
  TimeInterval = 3;
  Delay += DaysAfter * 24;     // calcule échéance de la prévi et adapte l'intervalle du modèle
  if (Delay > 384) Delay = 384;
  if (Delay > 84) TimeInterval = 6;
  if (Delay > 180) {
    TimeInterval = 12;
 //   if (Delay < 192) Delay = 192;  // précaution inutile ?
  }
  datePrev.setTime(dateMod.getTime() + Math.round((Delay - TimeInterval/2)/TimeInterval) * TimeInterval * 3600000);
  var Res = nomJour[datePrev.getDay()];
  Res += datePrev.getDate();  
  Res += nomMois[datePrev.getMonth()];
  Res += datePrev.getFullYear();
  var hour = datePrev.getUTCHours();
  var hour2 = datePrev.getHours();
  var decal = document.carte.elements["Center lon"].value / 15;
  hour = Math.round(hour + decal);
  if (hour > 23) hour = hour - 24;
  if (hour < 0) hour = hour + 24;
  hour = String("0" + hour).slice(-2);
  if (hour2 < 10) hour2 = "0" + hour2;
  Res += " à " + hour2 + " h (de Paris)";
  Res += " (" + hour + " h au soleil)";
  
  document.getElementById("previ").firstChild.nodeValue = Res ;
};


function DatumTxtMap() {  // fournit la date de prévision au format texte NOAA 

  MonName = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  var Res = MonName[datePrev.getUTCMonth()] + " ";
  Res += datePrev.getUTCDate() + ", ";
  Res += datePrev.getUTCFullYear();
  var hourText = " at ";
  var hour = datePrev.getUTCHours();
  if (hour < 10) hour = "0" + hour;
  Res += " at " + hour + " UTC";
  return Res;
};


function afficheParams() {  // déclenchée au chgt de carte 

  var param1 = paramsText.split("|");  // décode les textes de paramètres personnalisés;   
  var param2;
  if (document.carte.carte.options[document.carte.carte.selectedIndex].value.length < 5) // carte personnalisé
  {
//  if (navigator.appName.substring(0,9) == "Microsoft")         // non pris en compte par IE...
//  {
//  alert ("Attention... vous utilisez un navigateur de Bill Gates qui ne respecte pas les standards du Web ! Pour avoir accès aux cartes personnalisées, utilisez Firefox 
// (http://frenchmozilla.sourceforge.net/), Mozilla ou tout autre navigateur 100% compatible W3C...");
//  } // if navigator...

  for ( i=0 ; i<params.length; i++ ) document.carte.elements[params[i]].type = "text"; // affiche les cases de saisie

  for (i=0;i<param1.length;i++)         
  {
  param2 = param1[i].split("=");
  document.getElementById(param2[0]).firstChild.nodeValue = param2[1];  // crée les textes
  }; // for  
  } // if document...
  else                  // carte prédéfinie
  { 
  decodeCarte();
  for ( i=0 ; i<params.length; i++ ) document.carte.elements[params[i]].type = "hidden"; // masque les cases 

  for (i=0;i<param1.length;i++)         
  {
  param2 = param1[i].split("=");
  var txt = param2[1];
  if (i < 3) txt += " " + document.carte.elements[params[i]].value;   
  document.getElementById(param2[0]).firstChild.nodeValue = txt;    // affiche les coordonnées prédéfinies 
  }; // for  
  }; //else
  majDatePrev();
};


// niveaux présélectionnés plaine/montagne fonction de la carte choisie

function decodeCarte() {   

  if (document.carte.carte.options[document.carte.carte.selectedIndex].value.length > 4) // carte prédéfinie
  {
  var c = document.carte.carte.selectedIndex;  // adapte les niveaux aux types de cartes et aux zones
  var plaine = true;
  
// à mettre à jour si le menu cartes est changé

  if (c == 0) {plaine = false; 
  };
  if (c == 5) {plaine = false; 
  };
  if (c == 6) {plaine = false; 
  };
   if (c >= 8) {plaine = false; 
  };

  if (plaine)
  {
  document.forms["vit"].Lev.selectedIndex = 4;
  document.forms["vent"].Lev.options[4].selected = true;
  document.forms["tempe"].Lev.options[1].selected = true;
  document.forms["humid"].Lev.options[9].selected = true;
  document.forms["niveau"].Lev.options[9].selected = true;
  document.forms["subsid"].Lev.options[9].selected = true;
  }
  else
  {
  document.forms["vit"].Lev.selectedIndex = 9;
  document.forms["vent"].Lev.options[9].selected = true;
  document.forms["tempe"].Lev.options[1].selected = true;
  document.forms["humid"].Lev.options[15].selected = true;
  document.forms["niveau"].Lev.options[15].selected = true;
  document.forms["subsid"].Lev.options[15].selected = true;
  }; // else plaine...

  var carte1;   // remplace les valeurs perso
  var carte2;
  carte1 = document.carte.carte.options[document.carte.carte.selectedIndex].value.split(";");
  for (i=0;i<carte1.length;i++)         // prend en compte les paramètres de la carte sélectionnée
  {
  carte2 = carte1[i].split("=");
  if (i > 0) document.carte.elements[carte2[0]].value = carte2[1];
  }; // for
  }; // if document...
};


function GetParams(txt) {  // décode position sondage

  var p = new Array("","","");
  var Ort = 0;
  while ((txt.substring(Ort, Ort + 1) != "(") && (txt.substring(Ort, Ort + 1) != "")) {
    p[0] += txt.substring(Ort, Ort + 1);
    Ort++;
  };
  Ort++;
  while ((txt.substring(Ort, Ort + 1) != ",") && (txt.substring(Ort, Ort + 1) != "")) {
    p[1] += txt.substring(Ort, Ort + 1);
    Ort++;
  };
  Ort+=2;
  while ((txt.substring(Ort, Ort + 1) != ")") && (txt.substring(Ort, Ort + 1) != "")) {
    p[2] += txt.substring(Ort, Ort + 1);
    Ort++;
  };
  return p;
};


function DoMap(which,n) {      // traite la demande de carte avant submit (1 ou 2 niveaux différents)

  which.metdata.value = "GFS";	// définit le modèle selon échéance
  if (Delay > 84) which.metdata.value = "GFSx";
  if (Delay > 180) which.metdata.value = "GFSlr";
  
  which.metdate.value = DatumTxtMap(); 

  which.userid.value = document.Init.userid.value;   // prend en compte les valeurs de Init
  which.password.value = document.Init.password.value;

  var Level = which.Lev.options[which.Lev.selectedIndex].value * 1;  // niveaux choisis
  var Level2 = which.Level2.value * 1;
  if (n == 1) Level2 = Level;				// overlay avec deux niveaux identiques
  which.Level.value = Level;		
  which.Level2.value = Level2;
 

  if (document.carte.carte.options[document.carte.carte.selectedIndex].value.length < 5) // decode la zone de carte
  {
  for ( i=0 ; i<params.length; i++ )    // prend en compte les paramètres personnalisés pour la carte demandée
  { 
  which.elements[params[i]].value = document.carte.elements[params[i]].value;
  }; // for
  which.sid.value = which.elements["Center lat"].value + " deg N / " + which.elements["Center lon"].value + " deg E";
  }  // if
  else	// carte prédéfinie
  {
  var carte1;
  var carte2;
  carte1 = document.carte.carte.options[document.carte.carte.selectedIndex].value.split(";");
  
  for (i=0;i<carte1.length;i++)         // prend en compte les paramètres de la carte sélectionnée pour la carte demandée
  {
  carte2 = carte1[i].split("=");
  which.elements[carte2[0]].value = carte2[1];
  }; // for
  }; // else // carte prédéfinie

  if (Number(which.Radius.value) > 12) which.gsize.value = "1200";     // adapte la taille en pixels au rayon
  else if (Number(which.Radius.value) > 7) which.gsize.value = "900";
  else which.gsize.value = "700";


  which.submit();  // soumet la forme
};


function DoForm(which) {   // traite dde de sondage

  which.metdata.value = "GFS";	// définit le modèle selon échéance
  if (Delay > 84) which.metdata.value = "GFSx";
  if (Delay > 180) which.metdata.value = "GFSlr";

  which.metdate.value = DatumTxtMap();

  which.userid.value = document.Init.userid.value;   // prend en compte les valeurs de Init
  which.password.value = document.Init.password.value;

  var p = GetParams(document.place.location.options[document.place.location.selectedIndex].text);
   // lieu sondage
  if (p[0] == "défini ci-contre") {
  which.Lat.value = document.carte.elements["Center lat"].value ;
  which.Lon.value = document.carte.elements["Center lon"].value ;
  which.sname.value = "";  
  } else {
  which.sname.value = p[0]; 
  which.Lat.value = p[1] ;
  which.Lon.value = p[2] ;
  }
  which.elev.value = "";
  
  which.submit();
};

// fin meteo.js


