// Fonctions servant a la generation dynamique des pages, au Logout ainsi qu'aux 
// boutons Update-Profile et My Wx Data
//
// Ce fichier contient les fonctions suivantes:
//   function CreeProduit(produit)
//   function enterAction(obj)
//   function GenerAncrage (Page, Point, TypeDoc)
//   function GenerDoc(page,langue,type_doc)
//   function GenerUpdProfile(langue)
//   function GenerWxData(langue)
//   function seLogger()
//   function verifierNoSession( choix )
//   function putFocus() 


// 
// Fonction appelee apres un appel a GenerDoc lors que la valeur de page
// est AnalSfc, Uprair, FD-FL180, Uprwind (ces mots passes deviennent
// le nom du produit a generer.
// Cette fonction a ete extraite de divers.js (attention car d'autres page
// utilisent ces fonction) et si le js divers disparait alors on est faitte...
// DEV5 - Environment Canada - CMDS - Dorval, Quebec, CMDW, Aout 2002. 
//
function CreeProduit(produit)
   {
   document.CreeProduit.Produit.value=produit;
   var nomforme=document.CreeProduit.value
   document.CreeProduit.submit();
   }


// Capture key events at the document level and submit the form when the enter key is pressed
// by a simulated click on the submit button given as parameter.
// Function added by DEV25 - Environment Canada - CMDS - Dorval, Quebec 2006-05
// Sample call: <body onLoad="enterAction(document.Registered.elements['R-Submit']);">
function enterAction(obj)
   {
   if (obj && obj.click)
      {
      if (document.layers)  // Pour Netscape 4.x
         {
         document.captureEvents(Event.KEYPRESS);
         }
      document.onkeypress = function (evt)
         {
         var key = document.all ? event.keyCode : evt.which ? evt.which : evt.keyCode;
         if (key == 13)
            {
            obj.click();
            }
         }
      }
   }


// Fonction pour generer un document avec un point d'ancrage mentionne
function GenerAncrage (Page, Point, TypeDoc)
   {
   window.location =  '/cgi-bin/CreePage.pl?' + 'Page=' + Page + '&NoSession=' + document.CreePage.NoSession.value + '&TypeDoc=' + TypeDoc + '&Langue=' +document.CreePage.Langue.value + Point;
   }


// DEV5 - Environment Canada - CMDS - Dorval, Quebec, 10 septembre 2002.
// Fonction pour generer un document de type Documentation 
// type_doc en provenance de la BANNIERE (sous le bouton English) ne peut avoir que 
// HTML comme valeur. 
// Pour les autres document, reconnaitre (dans la valeur de PAGE) leur nom et traiter 
// differemment. Ce qui n'empechera pas d'utiliser GenerDoc(A,B, C) avec un C autre
// que HTML dans le cas des autres liens.....A REPENSER LES DETAILS DE CES COMMENTAIRES.
// CA DEVRAIT ETRE PLUS CLAIRE QUE CELA.
function GenerDoc(page,langue,type_doc)
{
   document.CreePage.Page.value = page;

//alert("valeur de type_doc recue :" + type_doc);
//alert("valeur de page     recue :" + page);
//alert("valeur de langue   recue :" + langue);

// verifie la valeur du parametre page qui indique quelle page afficher ou encore
// quelle fonction appeler pour aller vers une page.

    switch (page) {

// PasAstuce signifie qu'il n'y a pas d'astuce (TIPS) associee a cette page.
// Le msg sera affiche a l'usager via un popup.
      case "PasAstuce" :
         if ( langue == "anglais" )
         {
            var MsgUsager="There are no tips for this page."
            alert (MsgUsager);
         }
         else // forcement en francais alors
         {
            var MsgUsager="Il n\'y a pas d\'astuces pour cette page."
            alert (MsgUsager);
         }
         break

// NonAutreLangue signifie qu'il n'y a pas de page dans l'autre 
// langue qui soit equivalent a celle-ci. 
// Le msg sera affiche a l'usager via un popup.
      case "NonAutreLangue" :
         if ( langue == "anglais" )
         {
            MsgUsagerL="There is no equivalent english page."
            alert (MsgUsagerL);
         }
         else
         {
            MsgUsagerL="Il n\'y a pas de page française associée à celle ci."
            alert (MsgUsagerL);
         }
         break

      case "GenerUpdProfile" :
         GenerUpdProfile( langue )
         break

      case "GenerWxData" :
         document.CreePage.Langue.value = langue;
         verifierNoSession ('MyWxData');
         break
		 
      case "GenerWxMail" :
         document.ewxReload.Langue.value = langue;
	 document.ewxReload.submit();
	 break

      case "Fore-obs/analsfc" :
         var produit = "AnalSfc"
         CreeProduit(produit);
         break

      case "Fore-obs/upper-air" :
         var produit = "UpAir"
         CreeProduit(produit);
         break

      case "Fore-obs/fd-fl180" :
         var produit = "FD_FL180"
         document.CreePage.Langue.value = langue;
         CreeProduit(produit);
         break 

      case "Fore-obs/fdcn":
         var produit = "UpWind"
         document.CreePage.Langue.value = langue;
         CreeProduit(produit);
         break

      case "Fore-obs/lgf":
         document.CreeProduit.Produit.value="LGF";
         document.CreeProduit.Langue.value=langue;
         document.CreeProduit.Region.value="zvr";
         document.CreeProduit.submit();
         break

      case "Fore-obs/comox" :
         var produit = "COMOX"
         document.CreeProduit.Langue.value=langue;
         CreeProduit(produit);
         break

      case "Fore-obs/cdn-turb":
         var produit = "CanTurbFcst"
         document.CreePage.Langue.value = langue;
         CreeProduit(produit);
         break

      case "other-links":
// cas particulier pour le repertore nonkiosk lorsque nous cliquons sur English
// de la banniere. Car sur la banniere le type de doc (English) doit etre
// html. Force alors la valeur de document.CreePage.TypeDoc.value en lui 
// assignant une valeur de repertoire.
        repertoire="nonkiosk"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break

      case "faq":
// 
        repertoire="faq"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break

      case "wxsymbols":
// repertoire deviendra la nom du repertoire ou aller cherche le document
        repertoire="wxsymb"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break


      case "tutorial":
// repertoire deviendra la nom du repertoire ou aller cherche le document
        repertoire="radar-sat"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break

      case "sat-radar-tutorial":
// repertoire deviendra la nom du repertoire ou aller cherche le document
        repertoire="radar-sat"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break

      case "operations":
// repertoire deviendra la nom du repertoire ou aller cherche le document
        repertoire="operations"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break


      case "info-gfa":
// repertoire deviendra la nom du repertoire ou aller cherche le document
        repertoire="gfa"
//        alert ("valeur du repertoire ou aller chercher le document " + repertoire)
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = repertoire;
        document.CreePage.submit();
        break

      default :
        document.CreePage.Langue.value = langue;
        document.CreePage.TypeDoc.value = type_doc;
        document.CreePage.submit();

}
}


// Cette fonction est utilisee dans la bannière lorsqu'on est dans la page
// de MyWxData afin de "switcher" du francais a l'anglais et vice-versa.
// Elle est necessaire afin de changer la langue de la forme CreePage 
// avant d'appeler la fonction verifierNoSession qui fait le traitement pour la 
// generation de la page MyWxData.  Partout ailleurs, dans les autres pages, on 
// appelle directement la fonction verifierNoSession car la langue est celle utilisee
// dans la page où l'on se trouve.  G.H.
function GenerUpdProfile(langue)
   {
   document.CreePage.Langue.value = langue;
   verifierNoSession ('UpdProfile');
   }


// idem a la fonction precedente.
function GenerWxData(langue)
   {
   document.CreePage.Langue.value = langue;
   verifierNoSession ('MyWxData');
   }


// Put the cursor in the first text box available
// or in the specified field with id="init"
// Function added by DEV25 - Environment Canada - CMDS - Dorval, Quebec 2006-05
// Params: none
function putFocus()
   {
   var f = 0;   // Indice du Formulaire
   var e = 0;   // Indice de l'Element du formulaire
   if (document.getElementById
      && document.getElementById('init'))          // Cherche s'il y a un element identifie "init"
      {
      if (document.getElementById('init').type != "hidden")
         {
         document.getElementById('init').focus();  // Si trouve, y met le curseur
         }
      }
   else while (f < document.forms.length
      && document.forms[f].name != "Horloge")      // Sinon cherche dans tous les formulaires
      {
      e = 0;
      while (document.forms[f]
         && e < document.forms[f].elements.length) // Pour tous leurs elements
         {
         if (document.forms[f].elements[e].type == "text"
            || document.forms[f].elements[e].type == "password")
            {
            document.forms[f].elements[e].focus(); // Met le curseur sur le 1er trouve
            e=9999;                                // Force la fin des boucles
            f=9999;
            }
         e++;
         }
      f++;
      }
   }


function seLogger()
  {
  var no_session_number = "No session number was attributed. Please contact us at the feedback section."
  var aucun_num_session = "Aucun numéro de session attribué. Veuillez nous en informer à la section portant sur les commentaires."
  var not_a_number = "The session number is not a number."
  var pas_un_nombre = "Le numéro de la session n\'est pas un nombre."
  var langue_invalide = "Invalid language."
  var valid="0123456789";
  var num = document.CreePage.NoSession.value;
  num = 1234;
  var langue = document.CreePage.Langue.value; 

  // VALIDER LA LANGUE
/* if( langue != "anglais" && langue != "francais" )
  {
    alert( langue_invalide );
    return;        
  }
 */ 

  // VÉRIFIER SI LE NUMÉRO DE SESSION == NS_Inconnu
  if( num == "NS_Inconnu" )
  {
    if( langue == "anglais" )
    {
      Gener( "what-new", "anglais" );
      return; 
    }
    else
    {
      Gener( "what-new", "francais" );
      return;
    }
  }


  // VÉRIFIER S'IL Y A UN NUMÉRO DE SESSION
  if( num.length == 0 )
  {
    if( langue == "anglais" )
    {
      Gener( "what-new", "anglais" );
      return;
    }
    else
    {
      Gener( "what-new", "francais" );
      return;
    }
  }
 


  // VALIDER QUE LE NUMÉRO DE SESSION EST UN NOMBRE:
  for (var i=0; i< num.length; i++) 
  {
    if (valid.indexOf(num.charAt(i)) < 0) 
    {
      if( langue == "anglais" )
      {
        Gener( "what-new", "anglais" );
        return;
      }
      else
      {
        Gener( "what-new", "francais" );
        return;
      }
    }    
  }

  document.CreePage.action = "/cgi-bin/logout.cgi";  
  document.CreePage.submit();
}


// ---------------------------------------
// SESSION
// FONCTION: VÉRIFIER LE NUMÉRO DE SESSION
// ---------------------------------------
function verifierNoSession( choix )
{
  var num = "";
  var num = document.CreePage.NoSession.value;
  num = 1234;
  var langue = document.CreePage.Langue.value; 
  var num_valide = "false";
  var valid="0123456789";

  // MESSAGES D'ERREURS
  var invalid_language = "Invalid language.";
  var no_session_number = "You have no active session. Please login."
  var aucun_num_session = "Vous n\'avez aucune session active. Veuillez ouvrir une session."
  var NS_Inconnu_a = "You must register at the login section first."
  var NS_Inconnu_f = "Vous devez d\'abord vous enregistrer à la section \"Ouverture de session\"."
  var invalid_choice = "A problem with the button has occurred. Please contact us at the feedback section";
  var choix_invalide = "Un incident est survenu avec le bouton. Veuillez nous en aviser à la section portant sur les commentaires."; 
  var not_a_number = "The session number is not a number."
  var pas_un_nombre = "Le numéro de la session n\'est pas un nombre."

  // VÉRIFIER S'IL Y A UN NUMÉRO DE SESSION
/*  if( num.length == 0 )
    {
    if( langue == "anglais" )
    {
      alert( no_session_number );
      Gener( "login", "anglais" );
    }
    else
    {
      alert( aucun_num_session );
      Gener( "login", "anglais" );
    }
    return;
  }
*/

  // VÉRIFIER SI LE NUMÉRO DE SESSION == NS_Inconnu
  if( num == "NS_Inconnu" )  
  {
    if( langue == 'anglais' )
    {
      alert( no_session_number );
      Gener( "login", "anglais" );
    }
    else
    {
      alert( aucun_num_session );
      Gener( "login", "francais" );
    }    
    return;
  }
 

  // VALIDER QUE LE NUMÉRO DE SESSION EST UN NOMBRE:
/*  for (var i=0; i< num.length; i++) 
  {
    if (valid.indexOf(num.charAt(i)) < 0) 
    {
      if( langue == "anglais" )
      {
        alert( no_session_number );
        Gener( "login", "anglais" );
        return;
      }
      else
      {
        alert( aucun_num_session );
        Gener( "login", "francais" );
        return;
      }
    }    
  }
*/
  
  // VALIDER LE NUMÉRO DE SESSION (BD)  
  if( choix == 'UpdProfile' )
    { 
    document.CreePage.action = "/cgi-bin/session.cgi";
    document.CreePage.submit();
    }
  else if( choix == 'MyWxData' )
     {
     document.CreePage.action = "/cgi-bin/my_briefing.cgi";
     document.CreePage.submit();    
     } 
  else if ( choix == 'Ewx' )
     {
     document.CreePage.action = "/cgi-bin/ewx.cgi";
     document.CreePage.submit();
     }
  else if ( choix == 'Subscribe' )
     {
     document.CreePage.action = "/cgi-bin/ewx_briefing_action.cgi";
     document.CreePage.Action.value = "Subscribe-Ewx";     
     document.CreePage.submit();
     }
  else if ( choix == 'Edit' )
     {
     document.CreePage.action = "/cgi-bin/ewx_briefing_action.cgi";
     document.CreePage.Action.value = "Reset-Ewx";
     document.CreePage.submit();
     }
  else // bouton invalide ...
  {
    if( langue == "anglais" )
    {
      alert( invalid_choice );
      return;
    }
    else
    {
      alert( choix_invalide );
      return;
    }
  }
}

