/*******************************************************************************
 *                                                                             *
 * File        : tools_css.js                                                  *
 *                                                                             * 
 * Author      : Boucher Jean-Pierre                                           *
 * Creation    : 19-MAR-2004                                                   *
 *                                                                             *
 ******************************************************************************/

  
/*******************************************************************************
* Recherche le style styleRule dans la feuille de style styleSheet.
*
* Parametres: styleSheet: index de la feuille de style ou rechercher la regle.
*             styleRule : style a rechercher. (nom de la class),
*******************************************************************************/
function getRule(styleSheet, styleRule) {
   var rules = new Array();

   // Retourne toutes les classes
   // Explorer
   if (document.styleSheets[styleSheet].rules)
      rules = document.styleSheets[styleSheet].rules;
   // Netscape
   else if (document.styleSheets[styleSheet].cssRules)
      rules = document.styleSheets[styleSheet].cssRules;

   // Recherche de la classe
   for (var i = 0; i < rules.length; i++) {
      var selectorText = rules[i].selectorText;
      var firstChar = selectorText.substring(0, 1);

      // Si le premier caractere est (#, .) on n'en tient pas compte car le styl
      //  envoye ne comporte que le nom.
      if ((firstChar == "#") || (firstChar == ".")) {
         selectorText = selectorText.substring(1, selectorText.length);
      }

      if (selectorText == styleRule) {
         return rules[i];
      }
   }

   return null;
}


/*******************************************************************************
* Calcule la nouvelle taille par rapport a la taille de caractere de la classe.
*
* Parametres: className: nom de la classe
*             inc      : valeur a incrementer a la taille
*******************************************************************************/
function resize(className, inc) {
   var rule = getRule(0, className);
   var ruleSize = rule.style.fontSize;
   var newSize = parseInt(ruleSize);
   var newSizeString = new String(newSize);

   var unit = ruleSize.substring(newSizeString.length, ruleSize.length);
   newSize += inc;
   
   var newSizeUnit = new String(newSize).concat(unit);

   return newSizeUnit;
}


/*******************************************************************************
* Parcour l'arbre du tag pere et modifie la taille pour tous les tag fils qui
*  ont un style applique.  On utilise les cookies pour conserver les modification
*  de l'usager.
*  
* Parametres: objNode   : Object du tag de depart
*             inc       : valeur a incrementer a la taille
*             ckeckSaved: Vaut true si appele par le onLoad du body.  Sert a 
*                          appliquer les modifications de l'usager si il avait
*                          modifier la taille du texte.
*******************************************************************************/
function getNextNode(objNode, inc, checkSaved) {
   // Si l'objet tag a un style d'applique
   if ((objNode.className != undefined) && (objNode.className != "")) {
      // Doit-on verifier si l'utilisateur a modifier la taille
      if (checkSaved == "true") {
         var oldSize = getCookie(objNode.className);

         if (oldSize != null) {
            objNode.style.fontSize = oldSize;
         }
      }
      else {
         // La taille a deja ete modifie.  On utilise fontSize pour
         //  court-circuiter la feuille de style.
         if (! objNode.style.fontSize) {
            var newSizeUnit = resize(objNode.className, inc)

            if (newSizeUnit != "NaN"){
               objNode.style.fontSize = newSizeUnit;
               setCookie(objNode.className, newSizeUnit, 60);
            }
         }
         else {
            var ruleSize = objNode.style.fontSize;
            var newSize = parseInt(ruleSize);
            var newSizeString = new String(newSize);
            var unit = ruleSize.substring(newSizeString.length, ruleSize.length);

            newSize += inc;
            var newSizeUnit = new String(newSize).concat(unit);
            
            objNode.style.fontSize = newSizeUnit;
            setCookie(objNode.className, newSizeUnit, 60);
         }
      }
   }

   // Si objet tag a des enfants, on se rappelle
   if (objNode.hasChildNodes) {
      for (var i = 0; i < objNode.childNodes.length; i++) {
         getNextNode(objNode.childNodes[i], inc, checkSaved);
      }
   }
}


/*******************************************************************************
* Fonction appele pour modifier la taille du texte..
*  
* Parametres: inc       : valeur a incrementer a la taille
*             tagId     : Id du node(tag) pere.  Dans quel arbre modifie-t-on
*                          la taille du texte.
*******************************************************************************/
function changeSize(inc, tagId) {
   tagStart = document.getElementById(tagId);

   getNextNode(tagStart, inc, "false");
}


/*******************************************************************************
* Fonction appele par l'evenement onLoad du body pour mettre a jour les
*  modification apporte a la taille du texte par l'utilisateur.
*  
* Parametres: tagId     : Id du node(tag) pere.  Dans quel arbre modifie-t-on
*                          la taille du texte.
*******************************************************************************/
function checkResized(tagId) {
   tagStart = document.getElementById(tagId);

   getNextNode(tagStart, 0, "true");
}