/**
 * @file
 * @brief Fonctions JavaScript pour le nouveau portail.
 * @author Marc-André Disnard <marc-andre.disnard@polymtl.ca>
 * @note © Copyright 2005, École Polytechnique de Montréal
 * @note Portions © Copyright Macromedia, Inc.
 * @version $Id: portail.js 1002 2005-04-08 14:24:16Z mad $
 * @updated Guy-P 7 avril 2005 to fix IE stupid Select tag z-index handling !
 * @updated Guy-P 13 avril 2005 for added MM_checkPlugin
 */


// Initialisation de l'état du DIV de liens rapides:
var etat_liens_rapides  = "hide";
var etat_multiSearhBox  = "show";
var etat_accesRapideBox = "show";

/** Fonction de rappel pour Internet Explorer lorsque la fenêtre change de taille. */
function recharge_page() {
    window.location.reload();
}


// Avec Internet Explorer, il faut recharger la page lorsque l'usager redimensionne
// la fenêtre, sinon l'affichage ne se fait pas correctement...
if ('undefined' != typeof(navigator) && navigator && 'undefined' != typeof(navigator.appName) &&
    'Microsoft Internet Explorer' == navigator.appName) {

    if ('undefined' != typeof(navigator.userAgent) && -1 != navigator.userAgent.indexOf('Opera')) {
        // Opera se fait passer pour un MSIE...!
    } else if (0) {
        /* TODO: voir si d'autres fureteurs font comme Opera... */
    } else {
        window.onresize = recharge_page;
    }
}


/** Fonction de rappel lorsqu'on clique sur le bouton de liens rapides. */
/* GPB 7 avril added visibility setting for the multiSearchBox and setting of mainWrap z-index to -1*/
function bascule_liens_rapides() {

    etat_liens_rapides  = 'hide' == etat_liens_rapides  ? 'show' : 'hide';
    etat_multiSearhBox  = 'hide' == etat_multiSearhBox  ? 'show' : 'hide';
    etat_accesRapideBox = 'hide' == etat_accesRapideBox ? 'show' : 'hide';

    MM_showHideLayers('liensRapides',   '', etat_liens_rapides);
    MM_showHideLayers('multiSearchBox', '', etat_multiSearhBox);
    MM_showHideLayers('accesRapideBox', '', etat_accesRapideBox);
    var obj;
    obj=MM_findObj('mainWrap');
    var bd = new BrowserDetector(navigator.userAgent);
    if(bd.browser == "IE") {
        /* si les liens rapides sont affichés nous passons le contenu principal de la page en arrière plan Requis seulement pour IE et fait en jscript car nous avons expérimenté des problèmes avec les liens et le copier/coller lorsque que le z-index mis à -1 via css*/
        if ( obj !=null && etat_liens_rapides == 'show') {
             obj.style.zIndex = -1;
        }
        else {
            obj.style.zIndex = 1;
        }
    }
}


/**
 * Écrit un témoin.
 * @param nom Nom du témoin (la syntaxe doit être valide).
 * @param valeur Valeur associée (la syntaxe doit être valide).
 * @param Délai de validité en secondes (0 pour la session, -1 pour toujours).
 * @param Chemin pour lequel le témoin est valide ('/' par défaut).
 */
function ecrit_temoin(nom, valeur, secondes, chemin) {
    temoin = nom + '=' + escape(valeur);

    if (!chemin)
        chemin = '/';

    temoin += '; path=' + chemin;

    if (-1 == secondes) {
        var date = new Date();
        date.setTime(2145916799000);
        temoin += '; expires=' + date.toGMTString();
    } else if (1 <= secondes) {
        var date = new Date();
        date.setTime(date.getTime() + secondes);
        temoin += '; expires=' + date.toGMTString();
    }

    document.cookie = temoin;
}


/**
 * Lit un témoin.
 * @param nom Nom du témoin à lire (la syntaxe doit être valide).
 * @return Valeur associée ou null si le témoin n'a pas été trouvé.
 */
function lit_temoin(nom) {
    temoins = document.cookie;
    morceaux = temoins.split(';');

    for (var i = 0; i < morceaux.length; i++) {
        miettes = morceaux[i].split('=');
        if (miettes[0] == nom || miettes[0] == ' ' + nom)
            return unescape(miettes[1]);
    }

    return null;
}


/**
 * Change la taille de caractères sur l'élément "body" (et donc dans toute la
 * page si le reste a été mis en taille relative).
 * @param pct Nouvelle taille, en pourcentage.
 */
function change_taille(pct) {
    document.body.style.fontSize = pct + '%';
    ecrit_temoin('taille_caracteres', pct, -1, null);
}


/**
 * À appeler dans l'élément "head" pour remettre la taille de caractères
 * choisie par l'usager (récupérée à partir du témoin, s'il existe).
 */
function init_taille() {
    var t = lit_temoin('taille_caracteres');
    if (t) {
        document.write('<style type="text/css" media="screen">');
        document.write('body {font-size: ' + t + '%}');
        document.write('</style>');
    }
}


/**
 * Ouvre une nouvelle fenêtre et la centre par rapport à son parent.
 * @param url URL à ouvrir.
 * @param largeur Largeur de la fenêtre à ouvrir.
 * @param hauteur Hauteur de la fenêtre à ouvrir.
 */
function ouvre_et_centre(url, largeur, hauteur) {
    // Pour tenir compte de la hauteur des barres de titre et d'état.
    var correction = 24;

    // Tentative pour récupérer les dimensions du parent...
    var largeur_parent = 800;
    var hauteur_parent = 600;
    if ('undefined' != typeof(window.outerWidth))
        largeur_parent = window.outerWidth;
    else if ('undefined' != typeof(document.body.offsetWidth))
        largeur_parent = document.body.offsetWidth;
    else if ('undefined' != typeof(document.body.clientWidth))
        largeur_parent = document.body.clientWidth;
    if ('undefined' != typeof(window.outerHeight))
        hauteur_parent = window.outerHeight;
    else if ('undefined' != typeof(document.body.offsetHeight))
        hauteur_parent = document.body.offsetHeight;
    else if ('undefined' != typeof(document.body.clientHeight))
        hauteur_parent = document.body.clientHeight;

    // Tentative pour récupérer la position du parent...
    var gauche = 0;
    var haut   = 0;
    if ('undefined' != typeof(window.screenLeft))
        gauche = window.screenLeft;
    else if ('undefined' != typeof(window.screenX))
        gauche = window.screenX;
    if ('undefined' != typeof(window.screenTop))
        haut = window.screenTop;
    else if ('undefined' != typeof(window.screenY))
        haut = window.screenY;

    // Calcul de la position de la nouvelle fenêtre:
    var pos_x = Math.floor(gauche + (largeur_parent - largeur) / 2);
    var pos_y = Math.floor(haut   + (hauteur_parent - hauteur) / 2) - correction;
    if (0 > pos_x)
        pos_x = 0;
    if (0 > pos_y)
        pos_y = 0;

    window.open(url, '_blank', 'width='    + largeur + ',height='  + hauteur +
                               ',left='    + pos_x   + ',top='     + pos_y +
                               ',screenX=' + pos_x   + ',screenY=' + pos_y);
}


/** Fonction de rappel lorsqu'on clique sur le bouton "Envoyer". */
function envoie_ami() {
    ouvre_et_centre('http://www.polymtl.ca/outils/outils/envoyer.php?url=' +
                    escape(document.location.href), 460, 550);
}




//==== Fonctions Macromedia ====================================================================//

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}




/* Guy-P 7 avril 2005 to fix IE stupid Select tag z-index handling ! */

/*
BrowserDetector()
Parses User-Agent string into useful info.

Source: Webmonkey Code Library
(http://www.hotwired.com/webmonkey/javascript/code_library/)

Author: Richard Blaylock
Author Email: blaylock@wired.com

Usage: var bd = new BrowserDetector(navigator.userAgent);
*/


// Utility function to trim spaces from both ends of a string
function Trim(inString) {
  var retVal = "";
  var start = 0;
  while ((start < inString.length) && (inString.charAt(start) == ' ')) {
    ++start;
  }
  var end = inString.length;
  while ((end > 0) && (inString.charAt(end - 1) == ' ')) {
    --end;
  }
  retVal = inString.substring(start, end);
  return retVal;
}

function BrowserDetector(ua) {

// Defaults
  this.browser = "Unknown";
  this.platform = "Unknown";
  this.version = "";
  this.majorver = "";
  this.minorver = "";

  uaLen = ua.length;

// ##### Split into stuff before parens and stuff in parens
  var preparens = "";
  var parenthesized = "";

  i = ua.indexOf("(");
  if (i >= 0) {
    preparens = Trim(ua.substring(0,i));
        parenthesized = ua.substring(i+1, uaLen);
        j = parenthesized.indexOf(")");
        if (j >= 0) {
          parenthesized = parenthesized.substring(0, j);
        }
  }
  else {
    preparens = ua;
  }

// ##### First assume browser and version are in preparens
// ##### override later if we find them in the parenthesized stuff
  var browVer = preparens;

  var tokens = parenthesized.split(";");
  var token = "";
// # Now go through parenthesized tokens
  for (var i=0; i < tokens.length; i++) {
    token = Trim(tokens[i]);
        //## compatible - might want to reset from Netscape
        if (token == "compatible") {
          //## One might want to reset browVer to a null string
          //## here, but instead, we'll assume that if we don't
          //## find out otherwise, then it really is Mozilla
          //## (or whatever showed up before the parens).
        //## browser - try for Opera or IE
    }
        else if (token.indexOf("MSIE") >= 0) {
      browVer = token;
    }
    else if (token.indexOf("Opera") >= 0) {
      browVer = token;
    }
        //'## platform - try for X11, SunOS, Win, Mac, PPC
    else if ((token.indexOf("X11") >= 0) || (token.indexOf("SunOS") >= 0) ||
(token.indexOf("Linux") >= 0)) {
      this.platform = "Unix";
        }
    else if (token.indexOf("Win") >= 0) {
      this.platform = token;
        }
    else if ((token.indexOf("Mac") >= 0) || (token.indexOf("PPC") >= 0)) {
      this.platform = token;
        }
  }

  var msieIndex = browVer.indexOf("MSIE");
  if (msieIndex >= 0) {
    browVer = browVer.substring(msieIndex, browVer.length);
  }

  var leftover = "";
  if (browVer.substring(0, "Mozilla".length) == "Mozilla") {
    this.browser = "Netscape";
        leftover = browVer.substring("Mozilla".length+1, browVer.length);
  }
  else if (browVer.substring(0, "Lynx".length) == "Lynx") {
    this.browser = "Lynx";
        leftover = browVer.substring("Lynx".length+1, browVer.length);
  }
  else if (browVer.substring(0, "MSIE".length) == "MSIE") {
    this.browser = "IE";
    leftover = browVer.substring("MSIE".length+1, browVer.length);
  }
  else if (browVer.substring(0, "Microsoft Internet Explorer".length) ==
"Microsoft Internet Explorer") {
    this.browser = "IE"
        leftover = browVer.substring("Microsoft Internet Explorer".length+1,
browVer.length);
  }
  else if (browVer.substring(0, "Opera".length) == "Opera") {
    this.browser = "Opera"
    leftover = browVer.substring("Opera".length+1, browVer.length);
  }

  leftover = Trim(leftover);

  // # Try to get version info out of leftover stuff
  i = leftover.indexOf(" ");
  if (i >= 0) {
    this.version = leftover.substring(0, i);
  }
  else
  {
    this.version = leftover;
  }
  j = this.version.indexOf(".");
  if (j >= 0) {
    this.majorver = this.version.substring(0,j);
    this.minorver = this.version.substring(j+1, this.version.length);
  }
  else {
    this.majorver = this.version;
  }


} // function BrowserCap

/*added gpb 13 avril */
function MM_checkPlugin(plgIn, theURL, altURL, autoGo) { //v4.0
  var ok=false; document.MM_returnValue = false;
  with (navigator) if (appName.indexOf('Microsoft')==-1 || (plugins && plugins.length)) {
    ok=(plugins && plugins[plgIn]);
  } else if (appVersion.indexOf('3.1')==-1) { //not Netscape or Win3.1
    if (plgIn.indexOf("Flash")!=-1 && window.MM_flash!=null) ok=window.MM_flash;
    else if (plgIn.indexOf("Director")!=-1 && window.MM_dir!=null) ok=window.MM_dir;
    else ok=autoGo; }
  if (!ok) theURL=altURL; if (theURL) window.location=theURL;
}
