function findDOM(objID)
{
	return document.getElementById(objID);
}

function runEvent(objID, event) {
	var o=findDOM(objID);
	var s=String(eval('findDOM(\''+ objID + '\').' + event));
	var code=s.substr(s.indexOf('{')+1);
	code=code.substr(0, code.lastIndexOf('}'));
	code=code.replace(/this./g, 'findDOM(\''+ objID + '\').');
	var ret;
	var str='function ' + objID + '_runEvent() {' + code + '} ret=' + objID + '_runEvent();';
	eval(str);
	return ret;
}

function verifdate(d)
{
// vérif d'une date au format DD/MM/YYYY ou d/m/yy ou d/m/yy ou ddmmyyyy ou ddmmyy

	var i=d.indexOf('/',0);
	if (i==-1) {
		if ((d.length!=8) && (d.length!=6)) {
			return false;
		}
		else {
			var j=parseFloat(d.substr(0,2));
			var m=parseFloat(d.substr(2,2));
			var a=parseFloat(d.substr(4,4));
		}
	}
	else {
		var j=parseFloat(d.substr(0,i));
		var k=d.indexOf('/',i+1);
		if (k==-1) {return false;}
		var m=parseFloat(d.substr(i+1,k-i));
		var a=parseFloat(d.substr(k+1));

	}
	if ((a>50)&&(a<100)) {a=a+1900;}
	else if (a<100)		 {a=a+2000;}
	var d2=new Date(a,m-1,j);

	var j2=d2.getDate();
	var m2=d2.getMonth()+1;
	var a2=d2.getFullYear();

	if ((a2<1900)||(a2>3000))	 {return false;}

	return (!( (j!=j2)||(m!=m2)||(a!=a2) ));
}

function verifentier(d)
{
//vérif que la valeur passée en paramètre est un nombre entier

	return (!( (isNaN(d)) || (Math.round(d)!=d) ));
}
function verifentierpositif(d)
{
//vérif que la valeur passée en paramètre est un nombre entier >0

	return (!( (isNaN(d)) || (Math.round(d)!=d) || (d<0) ));
}
function verifentierSAUF0(d)
{
//vérif que la valeur passée en paramètre est un nombre entier <>0

	return (!( (isNaN(d)) || (Math.round(d)!=d) || (d==0) ));
}
function verifentierpositifSAUF0(d)
{
//vérif que la valeur passée en paramètre est un nombre entier >0 et <>0

	return (!( (isNaN(d)) || (Math.round(d)!=d) || (d<0) || (d==0) ));
}

function verifreel(d)
{
//vérif que la valeur passée en paramètre est un nombre

	return (!( (isNaN(d)) ));
}
function verifreelpositif(d)
{
//vérif que la valeur passée en paramètre est un nombre >0

	return (!( (isNaN(d)) || (d<0) ));
}
function verifreelSAUF0(d)
{
//vérif que la valeur passée en paramètre est un nombre <>0

	return (!( (isNaN(d)) || (d==0) ));
}
function verifreelpositifSAUF0(d)
{
//vérif que la valeur passée en paramètre est un nombre >0 et <>0

	return (!( (isNaN(d)) || (d<0) || (d==0) ));
}


// globale
var xmlDocs=new Array();
//var xmlDocTermine=false;
//var xmlDocAbort=false;
var EMPTY_FCT = function () {}
//var gxmlValeur="";
var xmlDocTimer;
var xmlDocTimerNb=0;
var xmlDocStrProgress;
// var xmlList;

function XMLChargeCacheListe(xmlDoc1, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur) {
	xmlList.options.length=0;
	var nbval=0;
	var i;
	var text;
	var val;
	var doc=xmlDoc1.responseXML.documentElement;
	nbval=doc.getElementsByTagName("CHAMPXMLTEXT").length;
	if (nbval==0)
	{
		xmlDiv.style.display="none"
		try {
			eval(xmlList.name+'ListeVide();');
		} catch (e) {}
	}
	else
	{
		try
		{
			for (i=0;i<nbval;i++)
			{
				text='';
				val='';
				try {
					val=doc.getElementsByTagName("CHAMPXMLVALUE")[i].firstChild.nodeValue;
					text=doc.getElementsByTagName("CHAMPXMLTEXT")[i].firstChild.nodeValue;
					xmlList.options[i] = new Option(text, val);
				} catch (e) {}
			}
			xmlDiv.style.display="block";
			// if ((xmlDiv.offsetLeft+xmlDiv.offsetWidth)>(xmlDiv.offsetParent.offsetWidth-5))	{	}
			// xmlDiv.style.left=xmlDiv.offsetParent.offsetLeft+xmlDiv.offsetParent.offsetWidth-xmlDiv.offsetWidth-5;
		} catch (e) {}
		try {
			eval(xmlList.name+'ListeNonVide();');
		} catch (e) {}
	}
	if (xmlValeur) {xmlList.value=xmlValeur;} // utilisé pour définir, en cas de surcharge de l'évènement, la valeur qque fasse le code ci-dessus
	xmlValeur="";
	return true;
}

function XMLCharge(xmlDoc1, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur, keepedValue, selFirstValue) {
	xmlList.options.length=0;
	var nbval;
	var i;
	var text;
	var val;
	var doc=xmlDoc1.responseXML.documentElement;
	nbval=doc.getElementsByTagName("CHAMPXMLTEXT").length;

	if (nbval==0)
	{
		xmlList.options[0] = new Option("Aucune donnée trouvée", "");
		try {
			eval(xmlList.name+'ListeVide();');
		} catch (e) {}
	}
	else
	{
		try
		{
			for (i=0;i<nbval;i++)
			{
				text='';
				val='';
				try {
					val=doc.getElementsByTagName("CHAMPXMLVALUE")[i].firstChild.nodeValue;
					text=doc.getElementsByTagName("CHAMPXMLTEXT")[i].firstChild.nodeValue;
					xmlList.options[i+1] = new Option(text, val);
				} catch (e) {}
			}
			if (typeof(veuillez_choisir_une_valeur)!='undefined')
				if (typeof(veuillez_choisir_une_valeur)=='object')
					if (typeof(veuillez_choisir_une_valeur[xmlList.id])!='undefined')
						xmlList.options[0].text = veuillez_choisir_une_valeur[xmlList.id];
					else
						xmlList.options[0].text = "Veuillez choisir une valeur";
				else
					xmlList.options[0].text = veuillez_choisir_une_valeur;
			else
				xmlList.options[0].text = "Veuillez choisir une valeur";
			xmlList.options[0].value = '';
		} catch (e) {}
		if (keepedValue || xmlList.options.length==2 ) { 
			if (keepedValue) {
				xmlList.value=keepedValue;
			}
			else if (selFirstValue) {
				xmlList.value=xmlList.options[1].value;
			}
			runEvent(xmlList.id, 'onchange');
		}
		try {
			eval(xmlList.name+'ListeNonVide();');
		} catch (e) {}
	}
	if (xmlValeur) {xmlList.value=xmlValeur;} // utilisé pour définir, en cas de surcharge de l'évènement, la valeur qque fasse le code ci-dessus
	xmlValeur="";
	return true;
}

function XMLChargeTexte(xmlDoc1, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur) {
	var doc=xmlDoc1.responseXML.documentElement;
	try
	{
		xmlList.value = doc.getElementsByTagName("CHAMPXMLVALUE")[0].firstChild.nodeValue;
	} catch (e) {}
	try {
		eval(xmlList.name+'TexteRenseigne();');
	} catch (e) {}
	if (xmlValeur) {xmlList.value=xmlValeur;}// utilisé pour définir, en cas de surcharge de l'évènement, la valeur qque fasse le code ci-dessus
	xmlValeur="";
	return true;
}

function XMLChargeHtml(xmlDoc1, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur) {
	var doc=xmlDoc1.responseXML.documentElement;
	try
	{
		xmlList.innerHTML = doc.getElementsByTagName("CHAMPXMLVALUE")[0].firstChild.nodeValue;
	} catch (e) {}
	if (xmlValeur) {xmlList.innerHTML=xmlValeur;}// utilisé pour définir, en cas de surcharge de l'évènement, la valeur qque fasse le code ci-dessus
	xmlValeur="";
	return true;
}


function xmlDocTimerListe (obj) {
	if (findDOM(obj).options.length==0 || findDOM(obj).options.length>1) {
			findDOM(obj).options.length=0;
			findDOM(obj).options[0] = new Option('Chargement en cours', '');
	}
	switch (xmlDocStrProgress) {
		case '':
			xmlDocStrProgress='.';
		break;
		case '.':
			xmlDocStrProgress='..';
		break;
		case '..':
			xmlDocStrProgress='...';
		break;
		default:
			xmlDocStrProgress='';
		break;
	}

	findDOM(obj).options[0].text = 'Chargement en cours'+xmlDocStrProgress;

	for (var n in xmlDocs) {
		if (xmlDocs[n][0]==obj) {
			var t=setTimeout('xmlDocTimerListe(\''+obj+'\');', 500);
			xmlDocs[n][3]=t;
		}
	}
	if (t==undefined) {
		var t=setTimeout('xmlDocTimerListe(\''+obj+'\');', 500);
	}
	return t;
}

function ChercheValeurs(fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur, funcdeb, funcfin, funcProgress, keepValue, selFirstValue) {
// cherche les valeurs de départ dans la table

	var xmlDoc;

	if (keepValue) {
		var keepedValue=xmlList.value;
	}
	else {
		var keepValue=false;
	}
	if (typeof(selFirstValue)=='undefined') var selFirstValue=false;
	for (var n in xmlDocs) {
		if (xmlDocs[n][0]==xmlList.id && xmlDocs[n][1].readyState<4) {
			xmlDocs[n][2]=true;
			xmlDocs[n][1].abort();
			//xmlDocs[n][1].onreadystatechange=EMPTY_FCT;
		}
	}

	try {    // Firefox, Opera 8.0+, Safari
		xmlDoc=new XMLHttpRequest();
	}
	catch (e) {    // Internet Explorer
		try {
			xmlDoc=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try	{
				xmlDoc=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {
				  alert("Votre navigateur n'est pas compatible.");
				  return false;
			}
		}
	}

	xmlDoc.onreadystatechange=function () {
		switch (xmlDoc.readyState) {
		case 1:
		case 2:
		case 3:
			try {
				funcdeb(xmlDoc, typeliste, xmlList, xmlDiv, xmlValeur);
			}
			catch (e) {}
		break;
		case 4:
			for (var n in xmlDocs) {
				if (xmlDocs[n][0]==xmlList.id) {
					var stop=xmlDocs[n][2];
					clearTimeout(xmlDocs[n][3]);
					xmlDocs.splice(n, 1);
				}
			}

			if (!stop) {
				switch (typeliste) {
					case 'listecache':
						XMLChargeCacheListe(xmlDoc, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur);
					break;
					case 'liste':
						XMLCharge(xmlDoc, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur, keepedValue, selFirstValue);
					break;
					case 'texte':
						XMLChargeTexte(xmlDoc, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur);
					break;
					case 'html':
						XMLChargeHtml(xmlDoc, fichxml, quoi, typeliste, nom, xmlList, xmlDiv, xmlValeur);
					break;
				}
				try {
					funcfin(xmlDoc, typeliste, xmlList, xmlDiv, xmlValeur);
				}
				catch (e) {}
			}
		}
		return true;
	}

	var get='?nom='+encodeURIComponent(nom)+'&';
	if (typeof(quoi)=='string') {
		get+='valeur='+encodeURIComponent(quoi);
	}
	else {
		for (var key in quoi) {
			get+=encodeURIComponent(key)+'='+encodeURIComponent(quoi[key])+'&';
		}
		get=get.substr(0, get.length-1);
	}

	switch (typeliste) {
	case 'liste':
		if (!funcProgress) {
			var tmr=xmlDocTimerListe(xmlList.id);
		}
		else {
			funcProgress();
		}
	break;
	}
	var a=new Array();

	a.push(xmlList.id);
	a.push(xmlDoc);
	a.push(false);
	a.push(tmr);

	xmlDocs.push(a);

	xmlDoc.open("GET",fichxml+get,true);
    xmlDoc.send(null);

	return true;

}


function griser (o) {
	try {
		o.disabled=true;
		o.className='Inactif';
	}
	catch (e) {}
	return true;
}

function degriser (o) {
	try {
		o.disabled=false;
		o.className='';
	}
	catch (e) {}
	return true;
}

function isIE () {
	return document.all?true:false;
}

function valeurRadio(o) {
	var retour=false;
	for (var i=0; i<o.length; i++) {
		if (o[i].type=='radio' && o[i].checked) {
			return o[i].value;
		} else if(o[i].type=='radio') {
			retour=true;
		}
	}
	if (!retour)
		throw 'Objet non défini';
	return '';
}

