//
// Fichier JavaScript de support pour la page maître du site GuildWars.
//
// Auteur:  OrdinaSoft
//          Patrick Lanz
//          Lausanne
//
// Première version:  23 juin 2007
//
// Dépend de:
//  - OrdinaSoft.Base
//

//-----------------------------------------------------------------------------------------------
// Initialisation du namespace.

if (typeof Master == 'undefined')
  Master = new Object ();
  
//-----------------------------------------------------------------------------------------------
// Initialisation.

// Fonction d'initialisation.

Master.DoInit = function () {
  Master.Form = document.forms [0];
  Master.MasterId = document.getElementById ('MasterId').value;
  Master.VirtAppPath = document.getElementById ('VirtPath').value + '/';
  Master.AppName = 'Guild Wars';

  // Autres initialisations
  Master.PlaceItems ();
  Master.ScanImagesToClone ();
  setInterval (function () {
                  Master.PlaceItems ();
                  Master.UpdateClonedImages ();
                  return true;
                },
               250);

  Master_Initialized = true;
  return true;
} // Master.DoInit



// Attend que la bonne fonction soit chargée avant de mettre un événement sur la fin du
// chargement de la page.

Master.Init = function () {

  if (typeof OrdinaSoft_Base_Initialized == 'undefined') {
    setTimeout (Master.Init, 40);
    return false;
  }  // typeof OrdinaSoft_Base_Initialized == 'undefined'

  AddLoadEvent (Master.DoInit);
  return true;
} // Master.Init

Master.Init ();

//-----------------------------------------------------------------------------------------------
// Divers outils.

// Recherche d'un élément en fonction de son identificateur. Cette fonction permet de retrouver
// un élément qui a été préfixé par ASP.NET.
//  - id est l'identificateur de l'élément à rechercher.
//  - Le résultat sera l'élément, ou null si on ne le trouve pas.

Master.GetElementById = function (id) {

  var Elmt = document.getElementById (id);
  if (Elmt != null)
    return Elmt;

  Elmt = document.getElementById (Master.MasterId + id);
  if (Elmt != null)
    return Elmt;

  return null;
} //Master.GetElementById

//-----------------------------------------------------------------------------------------------
// Mise en page.

// Positionne correctement les différents éléments, d'après la taille de la fenêtre.

Master.PlaceItems = function () {

  var BkgndImg = Master.GetElementById ('img_ImageFond');
  var xBkgndImg = OrdinaSoft.Base.GetElementLeftAbs (BkgndImg);
  var yBkgndImg = OrdinaSoft.Base.GetElementTopAbs (BkgndImg);
  var Style;

  // Logo GuildWars
  Style = Master.GetElementById ('div_LogoGW').style;
  Style.left = (xBkgndImg + BkgndImg.offsetWidth -
                  Master.GetElementById ('img_LogoGW').offsetWidth + 20).toString ()
               + 'px';
  Style.top = (yBkgndImg + 10).toString () + 'px';
  Style.visibility = 'visible';

  // Menu
  var Menu = Master.GetElementById ('div_Menu');
  Style = Menu.style;
  Style.left = (xBkgndImg + 25).toString () + 'px';
  Style.top = (yBkgndImg + 300).toString () + 'px';
  Style.visibility = 'visible';

  // Contenu
  var Content = Master.GetElementById ('div_Content');
  Style = Content.style;
  Style.left = (xBkgndImg + Menu.offsetWidth + 50).toString () + 'px';
  Style.width = (BkgndImg.offsetWidth - Menu.offsetWidth - 100).toString () + 'px';
  Style.top = Menu.style.top;
  Style.visibility = 'visible';

  return true;
} // Master.PlaceItems

//-----------------------------------------------------------------------------------------------
// Gestion des menus.

// Définition d'un menu qui peut s'ouvrir.
//   - Title est le nom de l'élément avec le titre du menu.
//   - Menu est le nom de l'élément avec le contenu du menu.

Master.DefineMenu = function (Title, Menu) {

  Title = document.getElementById (Title);
  Menu = document.getElementById (Menu);
  
  Title.onclick = function () {
      Master.OpenMenu (Title, Menu);
      return true;
    };

} // Master.DefineMenu



// Ouvre le menu spécifié.
//   - Title est le titre du menu.
//   - Menu est le contenu du menu.

Master.OpenMenu = function (Title, Menu) {

  Menu.style.display = "inline";

  Title.onclick = function () {
      Master.CloseMenu (Title, Menu);
      return true;
    };

  return true;
} // Master.OpenMenu



// Ferme le menu spécifié.
//   - Title est le titre du menu.
//   - Menu est le contenu du menu.

Master.CloseMenu = function (Title, Menu) {

  Menu.style.display = "none";

  Title.onclick = function () {
      Master.OpenMenu (Title, Menu);
      return true;
    };

  return true;
} // Master.CloseMenu

//-----------------------------------------------------------------------------------------------
// Gestion des images qui ne doivent pas être transparentes.

// Scanne toutes les images à cloner et les traite.

Master.ScanImagesToClone = function () {

  var Images = document.getElementsByTagName ('img');
  for (var i = 0; i < Images.length; i++) {
    var Image = Images [i];
    if (Image.id.indexOf ('img_Clone') != -1)  // Image à traiter
      Master.CloneImage (Image);
  } // pour toutes les images de la page

  Master.UpdateClonedImages ();
  return true;
} // Master.ScanImagesToClone



// Crée un clone de l'image spécifiée.
//  - Image est l'image pour laquelle on doit créer un clone.

Master.CloneImage = function (Image) {

  // Crée le masque
  var Mask = document.createElement ('div');
  var Style = Mask.style;
  Style.backgroundColor = '#000000';
  Style.position = 'absolute';
  Master.PositionImageClone (Image, Style);

  // Copie l'image dans le masque
  var Clone = Image.cloneNode (true);
  Clone.id = '';
  Mask.appendChild (Clone);

  // Affiche le masque
  document.forms [0].appendChild (Mask);
  Image.Clone = Mask;

  return true;
} // Master.CloneImage



// Supprime le clone de l'image spécifiée.
//  - Image est l'image pour laquelle on doit supprimer le clone.

Master.RemoveImageClone = function (Image) {

  if ((Image.Clone != null) && (Image.Clone.nodeName == 'DIV')) {
    Image.Clone.parentNode.removeChild (Image.Clone);
    Image.Clone = null;
  }  // (Image.Clone != null) && (Image.Clone.nodeName = 'DIV')
  return true;
} // Master.RemoveImageClone 



// Positionnement et définition de la taille pour un masque d'image.
//  - Image est l'image originale.
//  - Style est le style pour l'image clonée.

Master.PositionImageClone = function (Image, Style) {

  Style.width = Image.offsetWidth.toString () + 'px';
  Style.height = Image.offsetHeight.toString () + 'px';
  Style.left = OrdinaSoft.Base.GetElementLeftAbs (Image).toString () + 'px';
  Style.top = OrdinaSoft.Base.GetElementTopAbs (Image).toString () + 'px';
  return true
} // Master.PositionImageClone



// Redéplace les images si la taille de la fenêtre change.

Master.UpdateClonedImages = function () {

  var Images = document.getElementsByTagName ('img');
  for (var i = 0; i < Images.length; i++) {
    var Image = Images [i];
    if (Image.Clone != null)
      Master.PositionImageClone (Image, Image.Clone.style);
  } // pour toutes les images de la page

  return true;
} // Master.UpdateClonedImages
