/**
 * Fonction qui remplace la propriété innerHTML de n'importe quel élément
 * le but étant de pouvoir ajouter des sous éléments à un <table> (<thead>, <tbody>, <tr>, <td>) sous IE
 * (le innerHTML sur un <table> ne fonctionne pas correctement sous IE6)
 */
function PFW_customInnerHTML(id_dest, html)
{
	is_table_content= false;
	var dest= document.getElementById(id_dest);
	
	// Si l'element dont on doit rafraichir le contenu n'est pas present dans la page, on retourne false
	if(!dest)
	{
		return false;
	}
	
	// On detecte le type de balise de l'element dont on doit rafraichir le contenu
	// On recherche une balise de type table pour adapter le comportement de la fonction
	destTagName= dest.tagName.toLowerCase();
	if(destTagName=='table' || destTagName=='tr' || destTagName=='tbody' || destTagName=='thead' || destTagName=='tfoot')
	{
		is_table_content= true;	
	}
	
	// L'element dont on doit rafraichir le contenu est effectivement de type table ...
	if(is_table_content)
	{
		// On récupère le type de la première balise du contenu HTML a insérer
		var res= html.match(/<([a-z]+)/i);
		if(res && res[1])
		{
			balise= res[1];
		}
		// S'il n'y a aucune balise on assimile le cas à celui de la balise TD
		else
		{
			balise= 'td';
		}
			
		var content;
		
		// On recréée une table complète à partir du code HTML a insérer
		if(balise== 'td')
		{
			content='<table way_to_container="yes"><tbody way_to_container="yes"><tr is_searched_container="yes">'+ html +'</tr></tbody></table>';
		}
		else if(balise== 'tr')
		{
			content='<table way_to_container="yes"><tbody is_searched_container="yes">'+ html +'</tbody></table>';
		}
		else
		{
			content='<table is_searched_container="yes">'+ html +'</table>';
		}
		
		// On crée un élément temporaire qui autorise l'usage de innerHTML pour lui insérer via cette méthode, la table recréée précedemment
		// Le but de cette manipulation est d'obtenir une table qui soit parsable en DOM
		var container= document.createElement("div");
		container.innerHTML= content;
	
		// On parcourt desormais en DOM le sous arbre DOM ainsi obtenu à la recherche du contenu que l'on doit insérer
		// (l'équivalent DOM en fait du code html passé à la fonction PFW_customInnerHTML)
		var to_see=container;
		var found= null;
		while(to_see!=null)
		{
			var elem= to_see;
			to_see= null;
			
			for (var i=0;i<elem.childNodes.length;i++)
			{
				// On a trouvé le noeud qui contient notre code html ...
				if(elem.childNodes[i].getAttribute("is_searched_container")=="yes")
				{
					var src= elem.childNodes[i];
					
					// On supprime le contenu de l'element que l'on doit rafraichir
					while(dest.childNodes.length>0)
					{
						dest.removeChild(dest.childNodes[0]);
					}
					// On ajoute dans l'element que l'on doit rafraichir les noeuds DOM du contenu HTML passés à la fonction
					while(src.childNodes.length>0)
					{
						dest.appendChild(src.childNodes[0]);
					}
				}
				// On n'a pas trouvé le noeud qui contient notre code html à ajouter, on poursuit la recherche ...
				else if(elem.childNodes[i].getAttribute("way_to_container")=="yes")
				{
					to_see= elem.childNodes[i];
				}
			}
		}
	}
	// Si le contenu HTML a insérer n'est pas de type table, on utilise la méthode innerHTML classique
	else
	{
		dest.innerHTML= html;
	}
}