// JavaScript Document


// Définir document.getElementById() pour les vieux navigateurs
if (!document.getElementById) {
	if (document.all)
        document.getElementById=function() {
          if ( typeof(document.all[arguments[0]]) != "undefined")
            return document.all[arguments[0]];
          else
            return null;
         }
     else if (document.layers)
       document.getElementById=function() {
         if ( typeof(document[arguments[0]]) != "undefined")
           return document[arguments[0]];
         else
           return null;
         }
}


// $()
/*
Issue du projet Prototype, elle sert de remplacement efficace à getElementById(). En effet, grâce à elle, un développeur peut remplacer ces appels de la forme var el = document.getElementById('id'); en var el = $('id'). 
C'est bien sûr plus court, mais $() va plus loin, en donnant la possibilité d'appeller plusieurs id différents pour obtenir un tableau d'éléments à parcourir ensuite : var el = $('id1', 'id2', 'id3');. 
//
Cette version est celle de Matthew Pennell.
L'idée de cette version est d'offrir un raccourci non seulement pour getElementById(), mais également getElementsByTagName() et getElementsByClass(), le tout en une seule fonction. En somme, une boîte à outils entière en une seule fonction simple d'usage : l'auteur la surnomme d'ailleurs getElementsByAnything().
*/
function $() {
     var elements = new Array();
     for (var i=0,len=arguments.length;i<len;i++) {
         var element = arguments[i];
         if (typeof element == 'string') {
             var matched = document.getElementById(element);
             if (matched) {
                  elements.push(matched);
             } else {
                 var allels = (document.all) ? document.all : document.getElementsByTagName('*');
				 var regexp = new RegExp('(^| )'+element+'( |$)');
                 for (var i=0,len=allels.length;i<len;i++) if (regexp.test(allels[i].className)) elements.push(allels[i]);
             }
             if (!elements.length) elements = document.getElementsByTagName(element);
             if (!elements.length) {
                 elements = new Array();
                 var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                 for (var i=0,len=allels.length;i<len;i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
             }
             if (!elements.length) {
                 var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                 for (var i=0,len=allels.length;i<len;i++) if (allels[i].attributes) for (var j=0,lenn=allels[i].attributes.length;j<lenn;j++) if (allels[i].attributes[j].specified) if (allels[i].attributes[j].nodeValue == element) elements.push(allels[i]);
             }
         } else {
             elements.push(element);
         }
     }
     if (elements.length == 1) {
         return elements[0];
     } else {
         return elements;
     }
 }


function getElementsBySelector(selector){
// Permet de cibler un sélecteur contenu dans un autre sélecteur, et/ou ayant tel ou tel identifiant / classe... 
// Exemples : 	var lst= getElementsBySelector('div.h');
// 				var lst= getElementsBySelector('span h1');
	var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
	if(selector.indexOf(" ")>0){  //descendant selector like "tag#id tag"
		s=selector.split(" ");
		var fs=s[0].split("#");
		if(fs.length==1) return(objlist);
		f=document.getElementById(fs[1]);
		if(f) return(f.getElementsByTagName(s[1]));
		return(objlist);
	}
	if(selector.indexOf("#")>0){ //id selector like "tag#id"
		s=selector.split("#");
		tag=s[0];
		selid=s[1];
    }
	if(selid!=""){
		f=document.getElementById(selid);
		if(f) objlist.push(f);
		return(objlist);
    }
	if(selector.indexOf(".")>0){  //class selector like "tag.class"
		s=selector.split(".");
		tag=s[0];
		selclass=s[1];
    }
	var v=document.getElementsByTagName(tag);  // tag selector like "tag"
	if(selclass=="")
		return(v);
	for(i=0;i<v.length;i++){
		if(v[i].className.indexOf(selclass)>=0)
			objlist.push(v[i]);
    }
	return(objlist);
}

// domEl()
/* domEl() est encore une fonction personnelle, créée par Pawal Knapvik, autorisant une manipulation plus rapide du DOM : elle combine plusieurs fonctions afin d'ajouter simplement un nouvel élément HTML au DOM en cours. L'exemple de l'auteur est comme suit :

var link = document.createElement('a');
link.setAttribute('href', 'index.html');
link.appendChild(document.createTextNode('go home'));
document.getElementById('content').appendChild(link);

...devient...

domEl('a', 'go home', [['href', 'index.html']], document.getElementById('content'));

domEl() prend 5 arguments, la plupart optionnels ce qui permet d'avoir plusieurs cas de figure. Le premier donne le type de l'élément à créer, le second le contenu de cet élément, le troisième ses attributs, le quatrième indique dans quel(s) élément(s) celui-ci doit être créé, et le dernier précise si l'élément remplace les éléments existants, ou s'ajoute à eux.
*/
var domEl = function(e,c,a,p,x) {
// e = la balise
// c = contenu 
// a = attribut & paramètre
// p = emplacement
// x = ajout / remplacement
	if(e||c) {
   		c=(typeof c=='string'||(typeof c=='object'&&!c.length))?[c]:c;   
		e=(!e&&c.length==1)?document.createTextNode(c[0]):e;   
		var n =(typeof e=='string')?document.createElement(e) : !(e&&e===c[0])?e.cloneNode(false):e.cloneNode(true);
		if(e.nodeType!=3) {
			c[0]===e?c[0]='':'';
			for(var i=0,j=c.length;i<j;i++) typeof c[i]=='string'? n.appendChild(document.createTextNode(c[i])) : n.appendChild(c[i].cloneNode(true));
			if(a) {for(var i=(a.length-1);i>=0;i--) a[i][0]=='class' ? n.className=a[i][1] : n.setAttribute(a[i][0],a[i][1]);}
		}
	}
	if(!p)return n;
		p=(typeof p=='object'&&!p.length)?[p]:p;
		for(var i=(p.length-1);i>=0;i--) {
		if(x) { while(p[i].firstChild) p[i].removeChild(p[i].firstChild);
		if(!e&&!c&&p[i].parentNode) p[i].parentNode.removeChild(p[i]);}
		if(n) p[i].appendChild(n.cloneNode(true));
	}   
}

// addLoadEvent() 
// addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
// OU 
// addLoadEvent(function() { ma fonction à lancer lorsque la page est chargée });
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

