/*
 * Librairie de detection automatique du support des navigateurs.
 * N'est pas infaillible, car il existe des faux positifs ainsi que des faux negatifs.
 */
/*
 * Detecte le support d'une balise (HTML5) instanciee par reconnaissance du type d'objet cree :
 *  tag : nom de la balise a tester qui doit etre instanciee au prealable dans le document.
 */
function isTagSupported(tag) {
	eltTag = document.getElementsByTagName(tag)[0];
//	alert(tag+" :\n\n"+eltTag);  // Debug.
	if (eltTag == "[object HTMLUnknownElement]"
	 || (eltTag == "[object HTMLElement]" && tag != "mark") || eltTag == null) {    // Ligne pour traiter les cas Chrome & Safari (exception pour <mark> et null pour <progress>).
		document.write('<br/><br/><span id="'+tag+'"></span>');
 		eltMsg = document.getElementById(tag);
		eltMsg.innerHTML = "&lt;" + tag + "&gt; non support&eacute;e par votre navigateur !";
		eltMsg.className = "ko";
	}
}
/*
 * Détecte le support d'un attribut (HTML5) par interrogation des attributs possibles pour une balise instanciee :
 *  tag : nom de la balise.
 *  attr : nom de l'attribut a tester.
 */
function isAttributeSupported(tag, attr) {
	eltTag = document.getElementsByTagName(tag)[0];
//	for (i in eltTag) document.write("<br/>"+i);	// Debug.
	if (!(attr in eltTag)) {
		document.write('<br/><br/><span id="'+attr+'"></span>');
 		eltMsg = document.getElementById(attr);
		eltMsg.innerHTML = attr + " non support&eacute; par votre navigateur !";
		eltMsg.className = "ko";
	}
}
/*
 * Detecte le support d'un attribut (HTML5) specifie dans une balise instanciee par interrogation de la valeur de l'objet cree :
 *  id : id de la balise.
 *  attr : nom de l'attribut a tester.
 * [ref] : valeur a laquel l'attribut a été initialisé (valeur de retour attendu de "eval") (utilisé pour <input>).
 */
function isAttributeSpecified(name, attr, ref) {
	attrVal = eval("document.getElementsByName(\""+name+"\")[0]."+attr);
//	alert(attr+"/"+name+" :\n\n"+attrVal);	// Debug.
	if (!ref) {
	    sup = attr;
		ref = attrVal;
	}
	else
	    sup = attr + "=" + ref;
	if (!attrVal || attrVal != ref) {
		document.write('<br/><br/><span id="'+attr+ref+'"></span>');
 		eltMsg = document.getElementById(attr+ref);
		eltMsg.innerHTML = sup + " non support&eacute; par votre navigateur !";
		eltMsg.className = "ko";
	}
}
/*
 * Detecte le support d'un item (objet ou methode) JavaScript (HTML5) :
 *  item : objet/fonction a tester.
 * [isFunc] : booleen pour indiquer si c'est une fonction (true) ou un object (false, par defaut).
 * [ref] : valeur a laquel l'objet a ete initialise (valeur de retour attendu de "eval") (utilise pour designMode).
 */
function isItemSupported(item, isFunc, ref) {
	value = eval(item);
//	alert(item+" :\n\n"+value);		// Debug.
	if (!ref)
		ref = value;
	if (!value || value != ref) {
		document.write('<br/><br/><span id="'+item+'"></span>');
 		eltMsg = document.getElementById(item);
		eltMsg.innerHTML = item.slice(item.lastIndexOf('.')+1) + (isFunc?"()":"")
			+ " non support&eacute;" + (isFunc?"e":"") + " par votre navigateur !";
		eltMsg.className = "ko";
	}
}
