function supprSpace(chaine)
{
	//regex qui supprime les espaces retour chariot ... au debut et a la fin de la chaine
	return chaine.replace(/(^\s*)|(\s*$)/g,'');
}

function supprQuote(chaine)
{
	//regex qui supprime les espaces retour chariot ... au debut et a la fin de la chaine
	return chaine.replace(/(^"*)|("*$)/g,'');
}

//cible : l'endroit ou l'on veu afficher le resultat obtenu par ajax, par exemple dans un div cible sera l'identifiant du div
//chaine : la chaine a traiter
//type : si c'est de l'ajout ou du remplacement des donn�e
//cible replace : �l�ment que l'on remplace

function interpreteHTML(cible,chaine,type,cibleReplace)
{
	//on test si la chaine existe, si elle n'�xiste pas on ne fait rien et on retourne vide pour arreter le script
	if (chaine.length==0) return'';

	var debutBalise = chaine.indexOf('<');//donne la posision de la premiere balise

	//on test si il y a une balise, ou si on commence par une balise ou par du text
	if(debutBalise==0)//on commence par une balise
	{
		var finBalise = chaine.indexOf('>');//position de la fin de la premiere balise
		var finBaliseAutoFermante = chaine.indexOf('/>')//posistion de la fin de la premiere balise autofermante

		//pour tester si on a une balise autofermante ou pas, on compare la valeur de la position de symbole >. Si la valeur est la meme c'est que la balise est autofermante
		if(finBaliseAutoFermante==finBalise-1)
		{
			//on recup�re ce qu'il y a dans la balise
			var balise = supprSpace(chaine.substring(1,finBaliseAutoFermante));
			//on test si la balise comporte des attributs
			var attribut=Array();//on precise que attribut est un tableau
			if(balise.indexOf('=')!=-1)//si on a un espace dans la balise on va prendre uniquement ce qu'il y a avant le premier espace
			{
				var baliseTemp = balise.substring(balise.indexOf(' '),balise.length);
				var attribut = baliseTemp.split('=\"');
			}

			if(balise.indexOf(' ')!=-1)//si on a un espace dans la balise on va prendre uniquement ce qu'il y a avant le premier espace
				var balise = balise.substring(0,balise.indexOf(' '));

			//on cr�e l'�l�ment balise puis on l'associe a la cible sp�cifi� en &rgument de la fonction
			var baliseCree = document.createElement(balise);

			//on r�cup�re la chaine apr�s la fin de la balise fermante puis on r�apel al fonction pour continuer le traitement
			chaine = chaine.substring(finBalise+1,chaine.length);//donne toute la chaine depuis la fin de la balise
		}
		else
		{
			//on recup�re ce qu'il y a dans la balise
			var balise = chaine.substring(1,finBalise);
			//on test si la balise comporte des attributs
			var attribut=Array();//on precise que attribut est un tableau
			if(balise.indexOf('=')!=-1)//si on a un espace dans la balise on va prendre uniquement ce qu'il y a avant le premier espace
			{
				var baliseTemp = balise.substring(balise.indexOf(' '),balise.length);
				var attribut = baliseTemp.split('=\"');
			}

			if(balise.indexOf(' ')!=-1)//si on a un espace dans la balise on va prendre uniquement ce qu'il y a avant le premier espace
				var balise = balise.substring(0,balise.indexOf(' '));

			chaine = chaine.substring(finBalise+1,chaine.length);//donne toute la chaine depuis la fin de la balise

			var contenuBalise = chaine.substring(0,chaine.indexOf('</'+balise));//donne le contenu de la balise dans le cas d'un balise fermante

			//on cr�e l'�l�ment balise puis on l'associe a la cible sp�cifi� en &rgument de la fonction
			var baliseCree = document.createElement(balise);
			if(contenuBalise!='')//si le contenu de la balise n'est pas vide on r�apel la fonction en sp�cifiant comme cible la balise qui vient d'etre cr��
				interpreteHTML(baliseCree,contenuBalise,'add','NA');

			//on r�cup�re la chaine apr�s la fin de la balise fermante puis on r�apel al fonction pour continuer le traitement
			chaine = chaine.substring(chaine.indexOf('</'+balise)+3+balise.length,chaine.length);
		}
		//ajout des attributs � la balise
		for(i=0;i<attribut.length;i++)
		{
			if(attribut[i+1])
			{
				attribut[i+1]='\"'+attribut[i+1];
				//on recup�re l'attribut
				var attrTemp=supprSpace(attribut[i].substring(attribut[i].indexOf(' '),attribut[i].length));

				attribut[i+1]=attribut[i+1].substring(1,attribut[i+1].length);
				var valeurAttrTemp=supprSpace(attribut[i+1].substring(0,attribut[i+1].indexOf('"')));

				//on stock la valeur de l'attribu i+1 restant
				var tmp=attribut[i+1].substring(valeurAttrTemp.length+2,attribut[i+1].length);

				if(document.all)//on diff�rencie le cas IE des autre navigateur.
				{
					if(attrTemp=='class')
						baliseCree.setAttribute(attrTemp+'Name',valeurAttrTemp);
					else if(attrTemp.substring(0,2)=='on')
					{
						// var valeurAttrTempS=valeurAttrTemp.substring(0,valeurAttrTemp.indexOf('('));
						// eval('baliseCree.attachEvent("'+attrTemp+'",'+valeurAttrTempS+')');
						eval('baliseCree.'+attrTemp+' = function() {'+valeurAttrTemp+'};');
					}
					else
						baliseCree.setAttribute(attrTemp,valeurAttrTemp);
				}
				else{
					baliseCree.setAttribute(attrTemp,valeurAttrTemp);
				}

				//si l'attribut i+1 restant n'est pas vide on lui rajoute "_  " devant et on le remplace.
				//Ca permet de recuperer l'attribut i au prochain passage dans la boucle. On met le symbole _ pour que la chaine ne commence pas pas un espace puisqu'on utilise supprSpace
				if (tmp!='')
					attribut[i+1]="_ "+tmp;

			}
		}
		if (type=="add")
			cible.appendChild(baliseCree);
		else
			cible.replaceChild(baliseCree,cibleReplace);

		interpreteHTML(cible,chaine,'add','NA');
	}
	else if(debutBalise>0)//on ne commence pas par une balise
	{
		//on isole le debut de la chaine avant la premiere balise
		debutChaine = chaine.substring(0,debutBalise);
		//on cree le node text et on le met dans la cible
		var debutChaineCree = document.createTextNode(debutChaine);
		if (type=="add")
			cible.appendChild(debutChaineCree);
		else
			cible.replaceChild(debutChaineCree,cibleReplace);

		//on supprime de la chaine le text pour faire commencer la chaine � la premiere balise puis on r�apel la focntion
		chaine = chaine.substring(debutBalise,chaine.length);
		interpreteHTML(cible,chaine,'add','NA')
	}
	else if(debutBalise==-1)//pas de balise
	{
		//on a plus ou pas de balise on va donc cr�� l'element text qui correspond et on l'associe � la cible
		var suiteChaine = document.createTextNode(chaine);
		if (type=="add")
			cible.appendChild(suiteChaine);
		else
			cible.replaceChild(suiteChaine,cibleReplace);
	}
}
