//============================================================================================
// Autres fichiers JavaScript nécessaires au fonctionnement de celui-ci :
// - gen.js
//============================================================================================

//====================================================================================
//	Namespace Fsa :
//
//  fonction f_CreateElmt(tagName, attributes, childNodes[])
//           f_CreateElmt(tagName, childNodes[])
//           f_CreateElmt(tagName)
//   retourne un élément <tagName> avec ses attributs et enfants éventuels
//              fonctions newP(), newTable(), etc.
//   retourne un élément <p>, <table>, etc. avec ses attributs et enfants éventuels
//  fonction f_...(...)
//   ...
//
//====================================================================================

// Créer les constantes Node si elles n'existent pas

if (!Node)
{
 var Node = {
  ELEMENT_NODE                :  1,
  ATTRIBUTE_NODE              :  2,
  TEXT_NODE                   :  3,
  CDATA_SECTION_NODE          :  4,
  PROCESSING_INSTRUCTION_NODE :  7,
  COMMENT_NODE                :  8,
  DOCUMENT_NODE               :  9,
  DOCUMENT_TYPE_NODE          : 10,
  DOCUMENT_FRAGMENT_NODE      : 11};
}

//====================================================================================

// Initialisation du NameSpace

var Fsa;

(function()
{
 if (!Fsa)
  Fsa = {};

//====================================================================================

function f_CreateElmt(a_tagName, a_attrib, a_childNodes)
{
 try
 {
 if(arguments.length == 2 &&
  (a_attrib instanceof Array || typeof a_attrib == "string"))
 {
  a_childNodes = a_attrib;
  a_attrib = null;
 }

 var el = document.createElement(a_tagName);
 if (el == null)
 {
  alert("document.createElement(" + a_tagName + ") retourne null"); // Opera déclenche ce message
  return null;
 }

 if (a_attrib)
  for(var att in a_attrib)
   el.setAttribute(att, a_attrib[att]);

 if (a_childNodes != null)
 {
  if (a_childNodes instanceof Array)
   for (var i = 0; i < a_childNodes.length; i++)
   {
    var childNode = a_childNodes[i];
    if (typeof childNode == "string")
     childNode = document.createTextNode(childNode);
    if(childNode) el.appendChild(childNode);
   }
  else
   if (typeof a_childNodes == "string")
    el.appendChild(document.createTextNode(a_childNodes));
   else
    if(childNode) el.appendChild(a_childNodes);
 }

 return el;
 }
 catch(ex)
 {
  Fsa.f_exception('f_createElmt(' + a_tagName + ')', ex);
 }
}

//====================================================================================

function createur(a_tagName)
{
 return function(a_attrib, a_childNodes)
  {
   if (arguments.length == 1)
    return f_CreateElmt(a_tagName, a_attrib);
   else
    return f_CreateElmt(a_tagName, a_attrib, a_childNodes);
  }
}

//====================================================================================

function f_public_creator(a_tagName)
{
 var tagName_maj = a_tagName.substr(0,1).toUpperCase() + a_tagName.substr(1).toLowerCase()
 var tagName_min = a_tagName.toLowerCase();
 Fsa["new" + tagName_maj] = createur(tagName_min);
}

//====================================================================================
/*
function f_...(...)
{
 ...
}
*/
//====================================================================================

// Fonctions publiques

 Fsa.f_CreateElmt = f_CreateElmt;

 //----- créer les fonctions publiques Fsa.newP(), Fsa.newTable(), etc.

 var tagnames = [
  "a", "abbr", "acronym", "address", "applet", "area", "b", "base", "basefont",
  "bdo", "big", "blockquote", "body", "br", "button", "caption", "center", "cite",
  "code", "col", "colgroup", "dd", "del", "dfn", "dir", "div", "dl", "dt", "em",
  "fieldset", "font", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5",
  "h6", "head", "hr", "html", "i", "iframe", "img", "input", "ins", "isindex",
  "kbd", "label", "legend", "li", "link", "map", "menu", "meta", "noframes",
  "noscript", "object", "ol", "optgroup", "option", "p", "param", "pre", "q",
  "s", "samp", "script", "select", "small", "span", "strike", "strong", "style",
  "sub", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "title",
  "tr", "tt", "u", "ul", "var"];

 for (var i=0; i < tagnames.length; i++)
  f_public_creator(tagnames[i]);

 // !!! document.body.appendChild(newTable([tr]))); ne fonctionne pas avec IE 6.0.2800 !!!
 // => nécessite tbody ou thead comme niveau intermédiaire

}
)();

