//Création des utilitaires
var ut = {};

ut.userAgent = navigator.userAgent.toLowerCase();
if(document.all && document.getElementById){
	ut.ie = true;
	ut.ns = false;
	if(ut.userAgent.indexOf( "msie 5.0" ) > 0){
		ut.ie5=true;
		ut.ie55=false;
		ut.ie6=false;
	}else if(ut.userAgent.indexOf( "msie 5.5" ) > 0){
		ut.ie5=true;
		ut.ie55=true;
		ut.ie6=false;
	}else if(ut.userAgent.indexOf( "msie 6.0" ) > 0){
		ut.ie5=true;
		ut.ie55=true;
		ut.ie6=true;
	}else{
		//on est dans une version superrieure
		ut.ie5=true;
		ut.ie6=true;
		ut.ie55=true;
	}
} else {
	ut.ie=false;
	ut.ie5=false;
	ut.ie55=false;
	ut.ie6=false;
	ut.ns=true;
	ut.ns6=(document.getElementById) ? true : false;
}

ut.win = (ut.userAgent.indexOf("windows")!=-1) || (ut.userAgent.indexOf("32bit")!=-1);
ut.mac = (ut.userAgent.indexOf("mac")!=-1);
ut.xp = (ut.userAgent.indexOf("nt 5.1")!=-1);

/**
 * Contrôle si un plugin existe enf onction du mime-type(Netscape) 
 * ou de la classe Active X (IE windows). 
 * Exemples de couples mime-types / plugin :
 *
 * Plugin				Mime-type						IEClassID
 *
 * AdobeSVG				image/svg-xml					Adobe.SVGCtl
 * Acrobat Reader		application/pdf					PDF.PdfCtrl.5
 * Shockwave Director	application/x-director			SWCtl.SWCtl.1
 * Shockwave Flash		application/x-shockwave-flash	ShockwaveFlash.ShockwaveFlash.1
 * RealPlayer			audio/x-pn-realaudio-plugin		rmocx.RealPlayer G2 Control.1
 * QuickTime			video/quicktime					QuickTimeCheckObject.QuickTimeCheck.1
 * Windows Media Player	application/x-mplayer2			MediaPlayer.MediaPlayer.1
 * 
 */ 
ut.checkPlugin = function (pMimeType, pIEClassID){
	if(pIEClassID && ut.ie && ut.win) {
		try{
			new ActiveXObject(pIEClassID);
		} catch(e){
			return false;
		}
		return true;
	} else {
		var vPlugIn = navigator.mimeTypes[pMimeType];
		return (vPlugIn != null && vPlugIn.enabledPlugin != null);
	}
}
/*
alert("AdobeSVG : "+ut.checkPlugin("image/svg-xml", "Adobe.SVGCtl"));
alert("Acrobat Reader : "+ut.checkPlugin("application/pdf", "PDF.PdfCtrl.5"));
alert("Shockwave Director : "+ut.checkPlugin("application/x-director", "SWCtl.SWCtl.1"));
alert("Shockwave Flash : "+ut.checkPlugin("application/x-shockwave-flash", "ShockwaveFlash.ShockwaveFlash.1"));
alert("RealPlayer : "+ut.checkPlugin("audio/x-pn-realaudio-plugin", "rmocx.RealPlayer G2 Control.1"));
alert("QuickTime : "+ut.checkPlugin("video/quicktime", "QuickTimeCheckObject.QuickTimeCheck.1"));
alert("Windows Media Player : "+ut.checkPlugin("application/x-mplayer2", "MediaPlayer.MediaPlayer.1"));
*/


/** 
 * Highlight une image ou un tag quelconque. 
 * pEl objet avec obligatoirement une classe.
 * il faut qu'il existe en plus une classe de nom="over"+ nome de la classe
 * Si il trouve une image d'id="ico"+id de l'element passe en parametre il lui donne le même nom mais avec le motif over
 */

/** fonction pour nettoyer les caractères qui sont interpretés en html**/ 
ut.nettoyage = function(element){
	element=element.replace(/(<)/, "&lt;");
	return element;
}
 
ut.test = function (){
	alert(ih.fContenuWidth);
}

ut.highlight = function (pEl){
	var pDocument=pEl.ownerDocument;
	if(pEl.nodeName.toUpperCase()=="IMG") {
		this.image_met_motif(pEl,"over");
	} else {
		if(document.getElementById("ico"+pEl.id) && document.getElementById("ico"+pEl.id).nodeName.toUpperCase()=="IMG"){
			this.highlight(document.getElementById("ico"+pEl.id));
		}
		if(pEl.className.substring(0, 4) != "over") {
			pEl.className="over"+pEl.className;
		}
	}
}

/** 
 * Unlight une image ou un tag quelconque. 
 * pEl objet avec obligatoirement une classe.
 * il faut qu'il existe en plus une classe de nom="over"+ nome de la classe
 * Si il trouve une image d'id="ico"+id de l'element passe en parametre il lui donne le même nom mais avec le motif over.
 */
ut.unlight = function (pEl){
	if(pEl.nodeName.toUpperCase()=="IMG") {
		this.image_enleve_motif(pEl,"over");
	} else {
		if(document.getElementById("ico"+pEl.id) && document.getElementById("ico"+pEl.id).nodeName.toUpperCase()=="IMG"){
			this.unlight(document.getElementById("ico"+pEl.id));
		}
		if(pEl.className.substring(0, 4) == "over") {
			pEl.className = pEl.className.substring(4);
		}
	}
}

/** 
 * Permet de remplacer des bouts de string dans une chaine par une autre string
 */
ut.replaceAll = function(pStr,pOld,pNew){
  for(i=0; i<pStr.length; i++){
    var vPattern = pStr.substring(i,i+pOld.length);
    if(vPattern == pOld){
      pStr=pStr.substring(0,i)+pNew+pStr.substring(i+pOld.length,pStr.length);
    }
  }
  return pStr;
}

/* Modifie le nom des url des images en supprimant un suffixe. */
ut.image_enleve_motif = function (pEl,pMotif){
	if(pEl.nodeName.toUpperCase()=="IMG"){
		var vSrc=pEl.src;
		var vOffs = vSrc.lastIndexOf('.');
		if(vOffs>pMotif.length && vSrc.substr(vOffs-pMotif.length, pMotif.length) == pMotif) {
			pEl.src = vSrc.substring(0,vOffs-pMotif.length) + vSrc.substring(vOffs);
		}
	}
}

/* Modifie le nom des url des images en ajoutant un suffixe. */
ut.image_met_motif = function (pEl,pMotif){
	if(pEl.nodeName.toUpperCase()=="IMG"){
		var vSrc=pEl.src;
		var vOffs = vSrc.lastIndexOf('.');
		if(vOffs<pMotif.length || vSrc.substr(vOffs-pMotif.length, pMotif.length) != pMotif) {
			pEl.src = vSrc.substring(0, vOffs) + pMotif + vSrc.substring(vOffs);
		}
	}
}


/*	Gestion des symboles : tableau des symboles "symbolArray"
/	symbolArray[i][0] = code désignant le symbole
/	symbolArray[i][1] = code HTML classique, à utiliser avec <font face="symbol">&#913;</font> sous IE
/	symbolArray[i][2] = code ISOmachin (http://www.w3.org/TR/html4/sgml/entities.html#h-24.3) à utiliser tel quel sous Mozilla et parfois sous IE
*/
var symbolArray = null;

ut.getHTMLScriptFromSymbol= function(pSymbol){
	if(!symbolArray || !pSymbol )return null;
	for(var i=0;i<symbolArray.length;i++){
		if(symbolArray[i][0] == pSymbol) {			
			var vHTMLString="";
			//on prend le symbole le plus adapté au navigateur
			if(ut.ns6){				
				if(symbolArray[i][2]!="") vHTMLString = symbolArray[i][2];
				else if(symbolArray[i][1]!="") vHTMLString = symbolArray[i][1];
			}			
			if(ut.ie5 || ut.ie55 || ut.ie6){				
				if(symbolArray[i][1]!="") vHTMLString = "<font face=\"symbol\">" + symbolArray[i][1] + "</font>";
				else if(symbolArray[i][2]!="") vHTMLString = symbolArray[i][2];
			}			
			return vHTMLString;	
		}
	}
	return null;
}

ut.addSymbol = function (pSymbol,pCodeHTML,pCodeW3C){
	if(!symbolArray) symbolArray = new Array();
	var i=symbolArray.length;
	symbolArray[i] = new Array(3);
	symbolArray[i][0] = pSymbol;
	symbolArray[i][1] = pCodeHTML;
	symbolArray[i][2] = pCodeW3C;
}
//REMPLISSAGE DE LA TABLE DES SYMBOLES

	// GREC MAJUSCULE
	ut.addSymbol("alphamaj","A","&#913;");
	ut.addSymbol("betamaj","B","&#914;");	
	ut.addSymbol("gammamaj","G","&#915;");
	ut.addSymbol("deltamaj","D","&#916;");
	ut.addSymbol("epsilonmaj","E","&#917;");
	ut.addSymbol("zetamaj","Z","&#918;");
	ut.addSymbol("etamaj","H","&#919;");
	ut.addSymbol("thetamaj","Q","&#920;");
	ut.addSymbol("iotamaj","I","&#921;");
	ut.addSymbol("kappamaj","K","&#922;");
	ut.addSymbol("lambdamaj","L","&#923;");
	ut.addSymbol("mumaj","M","&#924;");
	ut.addSymbol("numaj","N","&#925;");
	ut.addSymbol("ximaj","X","&#926;");
	ut.addSymbol("pimaj","P","&#928;");
	ut.addSymbol("rhomaj","R","&#929;");
	ut.addSymbol("sigmamaj","S","&#931;");
	ut.addSymbol("taumaj","T","&#932;");
	ut.addSymbol("upsilonmaj","U","&#933;");
	//pour le symbole phi, ça passe beaucoup mieux si on utilise le code ascii
	ut.addSymbol("phimaj","","&#934;");
	ut.addSymbol("chimaj","C","&#935;");
	ut.addSymbol("omicronmaj","O","&#937;");
	ut.addSymbol("psimaj","Y","&#936;");
	ut.addSymbol("omegamaj","W","&#937;");
	// GREC MINUSCULE
	ut.addSymbol("alphamin","a","&#945;");
	ut.addSymbol("betamin","b","&#946;");
	ut.addSymbol("gammamin","g","&#947;");	
	ut.addSymbol("deltamin","d","&#948;");	
	ut.addSymbol("epsilonmin","e","&#949;");	
	ut.addSymbol("zetamin","z","&#950;");	
	ut.addSymbol("etamin","h","&#951;");	
	ut.addSymbol("thetamin","q","&#952;");	
	ut.addSymbol("iotamin","i","&#953;");	
	ut.addSymbol("kappamin","k","&#954;");	
	ut.addSymbol("lambdamin","l","&#955;");	
	ut.addSymbol("mumin","m","&#956;");	
	ut.addSymbol("numin","n","&#957;");	
	ut.addSymbol("ximin","x","&#958;");	
	ut.addSymbol("omicronmin","o","&#959;");	
	ut.addSymbol("pimin","p","&#960;");	
	ut.addSymbol("rhomin","r","&#961;");	
	ut.addSymbol("sigmamin","s","&#963;");	
	ut.addSymbol("taumin","t","&#964;");	
	ut.addSymbol("upsilonmin","u","&#965;");	
	//pour le symbole phi, ça passe beaucoup mieux si on utilise le code ascii
	ut.addSymbol("phimin","","&#966;");	
	ut.addSymbol("chimin","c","&#967;");	
	ut.addSymbol("psimin","y","&#968;");	
	ut.addSymbol("omegamin","w","&#969;");
	// SYMBOLES MATH
	ut.addSymbol("flechedroite","&#174;","&#8594;");
	ut.addSymbol("flechegauche","&#172;","&#8592;");			
	ut.addSymbol("doubleflechedroite","&#222;","&#8658;");
	ut.addSymbol("doubleflechegauche","&#220;","&#8656;");			
	ut.addSymbol("appartient","&#206;","&#8712;");
	ut.addSymbol("appartientpas","&#207;","&#8713;");			
	ut.addSymbol("equivalent","&#219;","&#8660;");
	ut.addSymbol("pourtout","&#34;","&#8704;");
	ut.addSymbol("different","&#185;","&#8800;");					
	ut.addSymbol("sousEnsembleDe","&#201;","&#8834;");
	ut.addSymbol("surEnsembleDe","&#204;","&#8835;");
	ut.addSymbol("flechedouble","&#171;","&#8596;");			
	ut.addSymbol("plusMoins","&#xB1;","");			
	ut.addSymbol("diametre","&#198;","&#8709;");
	ut.addSymbol("gradient","&#209;","&#8711;");
	ut.addSymbol("ilexiste","","&#x2203;");
	// AUTRES SYMBOLES
	ut.addSymbol("environ","","&#8776;");
	ut.addSymbol("euro","","&#8364;");
	ut.addSymbol("supegal","","&#8805;");
	ut.addSymbol("infegal","","&#8804;");
	ut.addSymbol("flechehaut","","&#8593;");
	ut.addSymbol("flechebas","","&#8595;");
	ut.addSymbol("ensemblevide","","&#xD8;");
	ut.addSymbol("espace","","&#160;");
	ut.addSymbol("copyright","","&#169;");
	ut.addSymbol("marqueDeposee","","&#174;");
	ut.addSymbol("paragraphe","","&#xA7;");
	ut.addSymbol("pourMille","","&#x2030;");
	ut.addSymbol("infini","","&#x221E;");
	ut.addSymbol("oe","","&#x0153;");


