
// <div id='ajax_opacity' name='ajax_opacity' class='ajax-opacity' style='background:transparent url("<?=GetIconPath('opacity.gif')?>");'></div>
// <div id='ajax_container' name='ajax_container' class='ajax-container'></div>
// n'est plus utilisé <div id='ajax_container_idSpan' name='ajax_container_idSpan' style='display:none;'>________________</div>



//	<div id='company' name='company' class='ajax-container' style='border: 5px solid red;' ostyle='background:transparent url("<?//=GetIconPath('opacity.gif')?>");'></div>
//		<table border="0" cellpadding="0" cellspacing="0"><tr><td>
//			<form
//				<div ou <table

//----------------------------------------------------------------------------------------------------
	function getDiv(o) {
		// go through parents, find div with class ajax-container
		for(;;) {
			o = o.parentNode;
//alert(typeof(o));
			if (o == null) break;
//alert(o.tagName);
			if (o.tagName == 'DIV') {
				if (o.className == 'ajax-container') {
					return o;
				}
			}
		}
		return null;
	}

//----------------------------------------------------------------------------------------------------
	function getQueryString(oForm) {
		queryString = '';
		n = oForm.elements.length;

		for(; n--; ) {
			// le 13 vide est le bouton Rechercher
			e = oForm.elements[n];
			if (e.tagName == 'INPUT') {
				if (e.type == 'button') {
				} else if (e.type == 'hidden') {
					if (e.id.substring(0, 9) == 'xmlAction') {
					} else if (e.id.substring(0, 9) == 'xmlUpdKey') {
					} else if (e.id.substring(0, 6) == 'xmlURL') {
					} else {
						queryString += '&'+ e.id + '=' + encodeURIComponent(e.value);
					}
				} else if (e.type == 'radio') {
					if (e.checked) {
						queryString += '&'+ e.id + '=' + encodeURIComponent(e.value);
					}
				} else if (e.type == 'checkbox') {				// SLA 12-09-2008 peut poser un problème avec Delete[] ou avec une checklist
					if (e.id.indexOf('[]', 0) != -1) {			// SLA 2009-04-17 nTypeD[]
						if (e.checked) {
							queryString += '&'+ e.id + '=' + e.value;
						} else {
							queryString += '&'+ e.id + '=' + '0';
						}
					} else {
						if (e.checked) {
							queryString += '&'+ e.id + '=' + '1';
						} else {
							queryString += '&'+ e.id + '=' + '0';
						}
					}
				} else {
					queryString += '&'+ e.id + '=' + encodeURIComponent(e.value);
				}
			} else if (e.tagName == 'SELECT') {
				//queryString += '&'+ e.id + '=' + e.value;

				s = '';
				for(m=0; m < e.options.length; m++) {
					if (e.options.item(m).selected) {
						v = e.options.item(m).value;
						if (s != '') s += ',';
						s += v;
					}
				}
				if (s != '') {
					queryString += '&'+ e.id + '=' + s;
				}

			} else if (e.tagName == 'TEXTAREA') {
				queryString += '&'+ e.id + '=' + encodeURIComponent(e.value);
			} else {
alert(n + ' id=' + e.id + ' value=' + e.value + ' tag=' + e.tagName + ' type=' + e.type);
			}
		}

//alert(queryString);
		return queryString;
	}










//----------------------------------------------------------------------------------------------------
	function AjaxGoto(idRequest, oLink, fn, pn) {			// control, formname, pagenum
		oDiv = getDiv(oLink);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_goto' + '&xmlActionParam=' + pn + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxFirst(idRequest, oImg, fn) {			// control, formname
		oDiv = getDiv(oImg);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_first' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxLast(idRequest, oImg, fn) {			// control, formname
		oDiv = getDiv(oImg);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_last' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxNext(idRequest, oImg, fn) {			// control, formname
		oDiv = getDiv(oImg);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_next' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxPrev(idRequest, oImg, fn) {			// control, formname
		oDiv = getDiv(oImg);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_prev' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxSortAsc(idRequest, oImg, fn, field) {			// control, formname, field
		oDiv = getDiv(oImg);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_sort' + '&xmlActionParam=' + field + ' ASC' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxSortDesc(idRequest, oImg, fn, field) {			// control, formname, field
		oDiv = getDiv(oImg);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'list_action_sort' + '&xmlActionParam=' + field + ' DESC' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}




//----------------------------------------------------------------------------------------------------
	function AjaxCancel(v) {		// v=oImg, oButton or string
//alert('cancel');
		if (typeof v == 'string') {
			idDiv = v;
			oDiv = document.getElementById(idDiv);
		} else {
			oImg = v;
			oDiv = getDiv(oImg);
			idDiv = oDiv.id;
		}
		if (oDiv != null) {
			AjaxHide(oDiv);
		}
	}


//----------------------------------------------------------------------------------------------------
// called when dialog box validated
	function AjaxClose(v) {		// v=oImg, oButton or string
//alert('close');
		if (typeof v == 'string') {
			idDiv = v;
			oDiv = document.getElementById(idDiv);
		} else {
			oImg = v;
			oDiv = getDiv(oImg);
			idDiv = oDiv.id;
		}
		if (oDiv != null) {
			AjaxHide(oDiv);
		}
	}



//----------------------------------------------------------------------------------------------------
// passer idDiv directement plutôt que l'id du bouton, non ?
	function AjaxUpdate(idRequest, oHtml, fn, id, sParam) {		// , formname	, sAjaxParams
		oAjaxContainer = getDiv(oHtml);
		if (oAjaxContainer != null) {
			var queryString = 'idDiv=' + oAjaxContainer.id;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_update' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
			//queryString += '&sAjaxParams=' + sAjaxParams;

			if (sParam != undefined) queryString += '&' + sParam;

//alert('AjaxUpdate='+idRequest);

//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxTab(idRequest, oTd, fn, tn, id) {				// 'viewCompany', control, formname, tabnum AjaxTab('businessView', this, 'CBusiness_View_Ajax', 2, 1326)
		oDiv = getDiv(oTd);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_goto' + '&xmlActionParam=' + tn + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;

			sAjaxParametersEx = getParametersEx(oDiv);
			queryString += '&sAjaxParametersEx=' + sAjaxParametersEx;

//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}





//----------------------------------------------------------------------------------------------------
	function AjaxLockUnlock(idRequest, oButton, fn, id) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			queryString += '&xmlActionAsked=' + 'form_action_unlock' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxLockRefresh(idRequest, oButton, fn, id) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			queryString += '&xmlActionAsked=' + 'form_action_refresh' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxLockCancel(idRequest, oButton, fn, id) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			queryString += '&xmlActionAsked=' + 'form_action_cancelwithlock' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxEditCancel(idRequest, oButton, fn, id, sParam) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_cancel' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
			
			if (sParam != undefined) queryString += '&' + sParam;
//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}





//----------------------------------------------------------------------------------------------------
	function AjaxAdd(idRequest, oButton, fn, id, sn) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_new' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + sn;
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}




//----------------------------------------------------------------------------------------------------
	function AjaxDelete(idRequest, oButton, fn, id, ns, sn) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_del' + '&xmlActionParam=' + ns + '&xmlActionParamEx=' + sn;
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
//alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}





//----------------------------------------------------------------------------------------------------
	function AjaxEdit(idRequest, oButton, id) {			// , sAjaxParams
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			idDiv = oDiv.id;
//alert(idDiv);
			// this have already been saved, see viewCompany
			// o = document.getElementById(idDiv + '_idSpan');
			// o.innerHTML = idSpan;					// save idSpan

			// o = document.getElementById(idDiv);
			// o.style.display = "block";
			
/*
			o = document.getElementById(idDiv + '_idSpan');
			idSpan = o.innerHTML;		// company_3

			
			// company_idCCompany_3
			à transformer en javascript
			$nPos = strrpos($idDiv, '_');
			$idHidden = substr($idDiv, 0, $nPos + 1).'idCCompany'.substr($idDiv, $nPos);
*/
			//idRequest = 'editCompany';
			var queryString = 'idDiv' + '=' + idDiv;
			queryString += '&id=' + id;
			queryString += '&idRequest=' + idRequest;
			//queryString += '&sAjaxParams=' + sAjaxParams;
			var options;
			options = {parameters: queryString};
//alert('before');
			ajaxEngine.sendRequest(idRequest, options);
//alert('after');
		}
	}




	// when searching an existing element the div named "company" contains a div named "company+_criteria" which contains the form and a div named "company+_result" which contains the result list
	// and the div named "company_idSpan" contains the text "company_3"
	
	// when creating a new element the div named "company" contains the form
	// and the div named "company_idSpan" contains the text "company_3"

//----------------------------------------------------------------------------------------------------
	function AjaxSearch(idRequest, oButton, fn) {
//alert('ajaxsearch');
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id + '_result';
			queryString += '&idRequest=' + idRequest;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_update' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}


//----------------------------------------------------------------------------------------------------
	function AjaxSelect(idRequest, v, id) {	// v=oImg image or string idDiv, newid			, sAjaxParams
		if (typeof v == 'string') {
			// javascript évalué et généré dans newCompany() ou editCompany()
			// AjaxSelect('setCompany', 'ajax-container1', 4882);
//alert('bad thing');				// because we don't go thru getDiv()
//alert(id);
//alert(v);
			idDiv = v;
			oDiv = document.getElementById(idDiv);
		} else {
			// onclick sur les icones dans la liste des sociétés <img onclick="<?=$this->PrintActionSelect()?>" src="<?=GetIconPath('window_application.png')?>" 
//alert('good thing');
			oImg = v;
			oDiv = getDiv(oImg);
			idDiv = oDiv.id;
		}
		if (oDiv != null) {
// get hidden input id and span id
			idParent = getParent(oDiv);
//alert('idParent=' + idParent);
			idSpan = getParameters(oDiv);			// l'id des contrôles à mettre à jour seqProjects_1/nProjectStatus,seqProjects_1/sProjectPhase
//alert('idSpan=' + idSpan);
			sAjaxParametersEx = getParametersEx(oDiv);
if (idSpan != "") {
			//o = document.getElementById(idDiv + '_idSpan');
			//idSpan = o.innerHTML;
//alert(idSpan);
			var queryString = 'idDiv=' + idSpan;
			queryString += '&idParent=' + idParent;
			queryString += '&id=' + id;
			queryString += '&sAjaxParametersEx=' + sAjaxParametersEx;

//alert(queryString);
			
			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
} else {
	// cas où on passe l'id directement
	// <a href="javascript:donothing()" onclick="AjaxView('companyView', null, {xml,./idCCompany,,0}, null, this);">

//alert('pas de paramètre');
}

			AjaxHide(oDiv);
		}
	}



//transformer les ancres en bouton Modifier plus bouton Toutes avec le texte Toutes+valeur="" par défaut


//----------------------------------------------------------------------------------------------------
	function AjaxList(idRequest, sParam, idDiv, idSpan, oHtml) {
//alert(oHtml.tagName);
		/*
			AjaxList('loadCompany', 'nKind=20', 'ajax_container', '{seqpath}/company_id,{seqpath}/company_name');
			à partir de l'objet on pourrait retrouver son parent et donc le mémoriser pour retrouver de manière unique le hidden input et le span parmi les enfants de ce parent
		*/

		//o = document.getElementById(idDiv + '_idSpan');
		//o.innerHTML = idSpan;					// save idSpan

		idDiv = AjaxShow(idDiv);
		
		setParameters(idDiv, idSpan);
		oParent = getDiv(oHtml);
		setParent(idDiv, oParent);

		//idRequest = 'loadCompany';
		var queryString = 'idDiv=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
//alert('before');
		ajaxEngine.sendRequest(idRequest, options);
//alert('after');
	}



//----------------------------------------------------------------------------------------------------
// tamron <span onclick="AjaxNew('newMessage', 'idCItem=<?=$idCItem?>', 'newMessage', null)"
// tamron AjaxNewChild('newChild', null, 'newChild', null, <?=$id?>) => AjaxNew('newChild', 'idParent=<?=$id?>', 'newChild', null)

	function AjaxNew(idRequest, sParam, idDiv, idSpan, oHtml) {				// AjaxNew('companyNew', 'nKind=20', null, '{seqpath}/company_id,{seqpath}/company_name', this);
		// oHtml facultatif

		//o = document.getElementById(idDiv + '_idSpan');
		//o.innerHTML = idSpan;					// save idSpan

		idDiv = AjaxShow(idDiv);				// create ajax div

		if (oHtml != undefined) {
			setParameters(idDiv, idSpan);			// save controls ids to update on return
			oParent = getDiv(oHtml);
			setParent(idDiv, oParent);				// save div id containing controls
		}

		//idRequest = 'newCompany';
		id = 0;
		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&id=' + id;
		queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}

//----------------------------------------------------------------------------------------------------
// bizdev version
//<div id='ajax_opacity' name='ajax_opacity' class='ajax-opacity' style='background:transparent url("<?=GetIconPath('opacity.gif')?>");'> </div>
//<div id='ajax_container' name='ajax_container' class='ajax-container'> </div>
//<div id='ajax_container_idSpan' name='ajax_container_idSpan' style='display:none;'>________________</div>

// tamron version
//<div id='newChild_opacity' name='newChild_opacity' class='ajax-opacity'></div>
//<div id='newChild' name='newChild' class='ajax-container'></div>
//<div id='newChild_idSpan' name='newChild_idSpan' style='display:none;'>________________</div>

// on appelle AjaxShow
// on appelle setParameters et on ignore _idSpan
// il faudrait passer idParent dans sParam pour regrouper avec AjaxNew()
// il faut modifier centerAjaxContainer()
// au niveau du php il faut supprimer les 3 divs
// 
// impossible de trouver oMaster = document.getElementById('ajax-container'); mais cela fonctionne quand même il doit y avoir une erreur cela doit être ajax_container

	function _AjaxNewChild(idRequest, sParam, idDiv, idSpan, idParent) {			// AjaxNewChild('newChild', null, 'newChild', null, <?=$id?>)
//alert('nouvelle méthode');
		idDiv = AjaxShow(idDiv);

		//o = document.getElementById(idDiv + '_idSpan');
		//o.innerHTML = idSpan;					// save idSpan
		setParameters(idDiv, idSpan);

		//o = document.getElementById(idDiv);
		//o.style.display = "block";

		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&id=' + idParent;
		if (sParam != null) queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}

//----------------------------------------------------------------------------------------------------
	function ooAjaxNewChild(idRequest, sParam, idDiv, idSpan, idParent) {			// AjaxNewChild('newChild', null, 'newChild', null, <?=$id?>)
		o = document.getElementById(idDiv + '_idSpan');
		o.innerHTML = idSpan;					// save idSpan

		//o = document.getElementById(idDiv);
		//o.style.display = "block";

		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&id=' + idParent;
		if (sParam != null) queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}

//----------------------------------------------------------------------------------------------------
	// non utilisé dans bizdev ni investimmo donc on prend la version tamron
	function oAjaxNewChild(idRequest, sParam, idDiv, idSpan, idParent) {
		//o = document.getElementById(idDiv + '_idSpan');
		//o.innerHTML = idSpan;					// save idSpan

		AjaxShow(idDiv);

		alert('bads');

		id = 0;
		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&id=' + id;
		queryString += '&idParent=' + idParent;
		queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}


//----------------------------------------------------------------------------------------------------
	// non utilisé dans bizdev ni investimmo mais dans tamron sous le nom AjaxModify() donc on prend la version tamron
	function oAjaxEditDirect(idRequest, sParam, idDiv, idSpan, id) {
		//o = document.getElementById(idDiv + '_idSpan');
		//o.innerHTML = idSpan;					// save idSpan

		AjaxShow(idDiv);
		
		alert('bads');

		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&id=' + id;
		if (sParam != null) queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}

//----------------------------------------------------------------------------------------------------
	function AjaxMainEdit(idRequest, sParam, idDiv, idSpan, id) {
//alert('AjaxMainEdit');
		o = document.getElementById(idDiv + '_idSpan');
		o.innerHTML = idSpan;					// save idSpan

		//o = document.getElementById(idDiv);
		//o.style.display = "block";

		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		queryString += '&id=' + id;
		if (sParam != null) queryString += '&' + sParam;
//alert(queryString);
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}


//----------------------------------------------------------------------------------------------------
	function AjaxView(idRequest, sAjaxParametersEx, id, idControls, oHtml) { // idSpan) {
		/*
			- Bouton Afficher dans la séquence des actionnaires ou pour définir le rédacteur d'un compte rendu
				{seqpath}/company_id,{seqpath}/company_name sert à identifier les input hidden et/ou span à mettre à jour si on va jusqu'à modifier l'élément
				Le premier sert également à obtenir l'id
				<input type="button"             onclick="AjaxView('companyView', null, null,                '{seqpath}/company_id,{seqpath}/company_name', this);" value="<?=GetMessage(MSG_VIEW)?>">
			- Ancre createdBy
				Pas fondamentalement de raison de modifier l'élément
				On passe directement l'id
				<a href="javascript:donothing()" onclick="AjaxView('userView',    null, {xml,./createdBy,,0}, null,                                         this);">
		*/
		/*
			idControls = person_id,person_name
			doit contenir en premier le contrôle (caché) qui contient l'id
		*/
		//oHidden = document.getElementById(idHidden);
		//id = oHidden.value;

// oParent = oAjaxContainer

		oParent = getDiv(oHtml);

if (id != null) {
} else {
		var t;
		t = idControls.split(",");
		idHidden = t[0];
		
		if (oParent == null)
			oHidden = document.getElementById(idHidden);
		else
			oHidden = getElementById(oParent, idHidden);
		id = oHidden.value;
//alert('hidden value='+id);
}

		idDiv = AjaxShow(null);

		setParameters(idDiv, idControls);
		//oParent = getDiv(oHtml);
		setParent(idDiv, oParent);
		setParametersEx(idDiv, sAjaxParametersEx);


		//o = document.getElementById(idDiv + '_idSpan');
		//o.innerHTML = idSpan;					// save idSpan

		//idRequest = 'viewCompany';
		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&id=' + id;
		queryString += '&idRequest=' + idRequest;
		queryString += '&sAjaxParametersEx=' + sAjaxParametersEx;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}



/*
ne peuvent fonctionner en l'état

//----------------------------------------------------------------------------------------------------
	function AjaxFileAdd(idRequest, oButton, fn, id, sFolderCID) {
		oc = document.getElementById(sFolderCID);
		v = oc.value;
		re = new RegExp(",", "g");
		t = v.split(re);
		//alert(t[1]);
		if (t[1] != 1) {
			alert('Ce dossier ne peut pas recevoir de fichier. Vous devez sélectionner un sous dossier.');
		} else {
			oDiv = getDiv(oButton);
			if (oDiv != null) {
				var queryString = 'idDiv=' + oDiv.id;

				oForm = document.getElementById(fn);

				queryString += getQueryString(oForm);
				queryString += '&xmlActionAsked=' + 'form_action_sendfile' + '&xmlActionParam=' + '' + '&xmlActionParamEx=' + '';
				queryString += '&idRequest=' + idRequest;
				queryString += '&id=' + id;
alert(queryString);

				var options;
				options = {parameters: queryString};
				ajaxEngine.sendRequest(idRequest, options);
			}
		}
	}

//----------------------------------------------------------------------------------------------------
	function AjaxFileDelete(idRequest, oButton, fn, id, sFile) {
		oDiv = getDiv(oButton);
		if (oDiv != null) {
			var queryString = 'idDiv=' + oDiv.id;

			oForm = document.getElementById(fn);

			queryString += getQueryString(oForm);
			queryString += '&xmlActionAsked=' + 'form_action_deletefile' + '&xmlActionParam=' + sFile + '&xmlActionParamEx=' + '';
			queryString += '&idRequest=' + idRequest;
			queryString += '&id=' + id;
alert(queryString);

			var options;
			options = {parameters: queryString};
			ajaxEngine.sendRequest(idRequest, options);
		}
	}
*/

//----------------------------------------------------------------------------------------------------
	function centerAjaxContainer(idDiv) {
		// idDiv => ajax-container-1

// gestion de l'opacité
		oDiv = document.getElementById(idDiv + '-opacity');
		oDiv.style.width = document.body.scrollWidth;						// taille du html
		oDiv.style.height = document.body.scrollHeight;
		oDiv.style.display = "block";
//alert('opacity');

// gestion de la div ajax-container-1
		//oDiv = document.getElementById(idDiv);
		//oDiv.style.marginTop = document.body.scrollTop + 'px';
		//oDiv.style.marginLeft = document.body.scrollLeft + 'px';
		//oDiv.style.display = "block";

		oDiv = document.getElementById(idDiv);
		//oDiv.style.width = document.body.scrollWidth;						// taille du html
		//oDiv.style.height = document.body.scrollHeight;
//alert("fullsize= " + document.body.scrollWidth + " " + document.body.scrollHeight);
		oDiv.style.visibility = 'hidden';
		oDiv.style.display = "block";
//alert(oDiv.style.width);
//alert(document.body.scrollWidth);

		n = oDiv.childNodes.length;
		for(i = 0; i < n; i++) {
			oChild = oDiv.childNodes[i];
			if (oChild.tagName == 'TABLE') {
				ih = oChild.clientHeight;
				iw = oChild.clientWidth;
//alert("table= " + iw + " " + ih);

				wh = document.body.clientHeight;							// taille de la fenêtre
				ww = document.body.clientWidth;
//alert("fenêtre= " + ww + " " + wh);

				if (ih > wh) y = 0;
				else y = (wh - ih) / 2;

				if (iw > ww) x = 0;
				else x = (ww - iw) / 2;

				y = Math.ceil(y);
				x = Math.ceil(x);
//alert("decalage= " + x + " " + y);

				yp = document.body.scrollTop + y;							// décalage du point en haut à gauche par rapport au html
				xp = document.body.scrollLeft + x;

				//oDiv.style.paddingLeft = xp;
				//oDiv.style.paddingTop = yp;
				oDiv.style.marginLeft = xp;
				oDiv.style.marginTop = yp;
//alert("new= " + xp + " " + yp);
				break;
			}
		}
		oDiv.style.visibility = 'visible';

// il reste un petit problme sur firefox qui change la taille de la table dès lors que l'on change marginLeft et marginTop
//				ih = oChild.clientHeight;
//				iw = oChild.clientWidth;
//alert("table= " + iw + " " + ih);

	}

//----------------------------------------------------------------------------------------------------
	function ocenterAjaxContainer(idDiv) {
		oDiv = document.getElementById(idDiv);
		oDiv.style.width = document.body.scrollWidth;						// taille du html
		oDiv.style.height = document.body.scrollHeight;
		oDiv.style.visibility = 'hidden';
		oDiv.style.display = "block";

		n = oDiv.childNodes.length;
		for(i = 0; i < n; i++) {
			oChild = oDiv.childNodes[i];
			if (oChild.tagName == 'TABLE') {
				ih = oChild.clientHeight;
				iw = oChild.clientWidth;

				wh = document.body.clientHeight;							// taille de la fenêtre
				ww = document.body.clientWidth;

				if (ih > wh) y = 0;
				else y = (wh - ih) / 2;

				if (iw > ww) x = 0;
				else x = (ww - iw) / 2;

				y = Math.ceil(y);
				x = Math.ceil(x);

				yp = document.body.scrollTop + y;							// décalage du point en haut à gauche par rapport au html
				xp = document.body.scrollLeft + x;

				oDiv.style.paddingLeft = xp;
				oDiv.style.paddingTop = yp;
				break;
			}
		}
		oDiv.style.visibility = 'visible';

		oDiv = document.getElementById(idDiv + '_opacity');
		oDiv.style.width = document.body.scrollWidth;						// taille du html
		oDiv.style.height = document.body.scrollHeight;
		oDiv.style.display = "block";
	}


//----------------------------------------------------------------------------------------------------
	function AjaxCommand(idRequest, idDiv, sParam) {
		idDiv = AjaxShow(idDiv);

		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		if (sParam != null) queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}

	function oAjaxCommand(idRequest, idDiv, sParam) {
		var queryString = 'idDiv' + '=' + idDiv;
		queryString += '&idRequest=' + idRequest;
		if (sParam != null) queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}

//----------------------------------------------------------------------------------------------------
// non utilisé dans bizdev ni investimmo et sous le nom AjaxCommand() dans tamron
	function oAjaxSimpleCommand(idRequest, sParam) {
		var queryString;
		queryString += '?idRequest=' + idRequest;
		if (sParam != null) queryString += '&' + sParam;
		var options;
		options = {parameters: queryString};
		ajaxEngine.sendRequest(idRequest, options);
	}


//----------------------------------------------------------------------------------------------------
	function getElementById(oParent, cId) {
		var i;									// ne pas oublier de déclarer les variables car sinon variable globale

if (oParent == null) return document.getElementById(cId);

//alert('getElementById');
//alert(oParent.id);

//if (oParent.tagName == undefined) return null;

if (oParent.tagName == "SCRIPT") return null;

if (oParent.childNodes == undefined) return null;

		i = oParent.childNodes.length;
//alert('length='+i);

//alert('getElementById='+oParent.tagName+'-'+oParent.id+'-'+i);

		for(; i--; ) {
			var oChild;
			oChild = oParent.childNodes[i];
if (oChild.tagName == undefined) continue;
//alert(oChild.id);
//alert(oChild.tagName);
			if (oChild.id == cId) {
//alert('Match');
				return oChild;
			}
			var oControl;
			oControl = getElementById(oChild, cId);
			if (oControl != null) {
//alert('ret not null');
				return oControl;
			}
//alert('ret null');
		}
//alert('out');
		return null;
	}


//----------------------------------------------------------------------------------------------------
	function AjaxOnEnterSearch(idRequest, event, oInput, fn) {
//alert('onenter');
		if(window.event) { // IE
			keynum = event.keyCode;
		} else if(event.which) { // Netscape/Firefox/Opera
			keynum = event.which;
		}

		if (keynum == 13) {
			AjaxSearch(idRequest, oInput, fn);
		}
	}


// -----------------------------------------------------------------------------------

	var nAjaxContainer = 1;

// devrait s'appeler plutôt AjaxCreateDiv()
	function AjaxShow(idDiv) {					// idDiv n'est plus utilisé, on retourne l'id de la div
		/*
			on vient d'appuyer sur un bouton qui déclenche AjaxList()
			ce bouton appartient à un ajax-container ou alors au document
		*/


		// master
		oMaster = document.getElementById('ajax-container'); // idDiv);

		s = 'ajax-container-' + nAjaxContainer;
//alert(s);
		++nAjaxContainer;
//alert(nAjaxContainer);

// gestion de l'opacité
		oDiv = document.createElement('div');
		oDiv.id = s + '-opacity';
		oDiv.name = s + '-opacity';
		oDiv.className = 'ajax-opacity';
		oDiv.innerHTML = 'opacity';
		document.body.insertBefore(oDiv, oMaster);




/*
		h = document.body.clientHeight;												// taille de la fenêtre
		w = document.body.clientWidth;

		if (document.body.scrollWidth > w) w = document.body.scrollWidth;			// taille du html
		if (document.body.scrollHeight > h) h = document.body.scrollHeight;
*/

		//oOpacity = document.getElementById('ajax_opacity');
		//oOpacity.style.width = w + 'px';
		//oOpacity.style.height = h + 'px';
		//oOpacity.style.display = "block";

//alert(idDiv);
//		oDiv = document.getElementById(idDiv);
		

		/*
			<div id='ajax_container' name='ajax_container' class='ajax-container'>
			</div>
		*/

// création de la div ajax-container-1
		oDiv = document.createElement('div');
		oDiv.id = s;
		oDiv.name = s;
		oDiv.className = 'ajax-container';
		oDiv.innerHTML = 'html';
		document.body.insertBefore(oDiv, oMaster);


		// create hidden div to store hidden input id and span id (person_id,person_name)
		oDiv = document.createElement('div');
		oDiv.id = s + '-parameters';
		oDiv.name = s + '-parameters';
		oDiv.className = 'ajax-parameters';
		oDiv.innerHTML = 'parameters';
		document.body.insertBefore(oDiv, oMaster);

		// create hidden div to store parent id
		oDiv = document.createElement('div');
		oDiv.id = s + '-parent';
		oDiv.name = s + '-parent';
		oDiv.className = 'ajax-parent';
		oDiv.innerHTML = 'parent';
		document.body.insertBefore(oDiv, oMaster);

		// create hidden div to store extended parameters
		oDiv = document.createElement('div');
		oDiv.id = s + '-parametersEx';
		oDiv.name = s + '-parametersEx';
		oDiv.className = 'ajax-parameters';
		oDiv.innerHTML = ''; // 'parametersEx'; sinon dans businessSet.php le test if ($sAjaxParams == null) { ne fonctionne plus
		document.body.insertBefore(oDiv, oMaster);

//alert('show');
		return s;
	}

//----------------------------------------------------------------------------------------------------
	function AjaxHide(oDiv) {
		oDiv.innerHTML = '';
		oDiv.style.display = "none";

		s = oDiv.id;
		
		document.body.removeChild(oDiv);
		--nAjaxContainer;
//alert(nAjaxContainer);

		// delete hidden div containing person_id,person_name
		oDiv = document.getElementById(s + '-parameters');
		document.body.removeChild(oDiv);

		// delete hidden div containing parent id
		oDiv = document.getElementById(s + '-parent');
		document.body.removeChild(oDiv);

		// delete hidden div containing extended parameters
		oDiv = document.getElementById(s + '-parametersEx');
		document.body.removeChild(oDiv);

		//oOpacity = document.getElementById('ajax_opacity');
		//oOpacity.style.display = "none";

// gestion de l'opacité
		oDiv = document.getElementById(s + '-opacity');
		document.body.removeChild(oDiv);
	}

// -----------------------------------------------------------------------------------

	function getParameters(oDiv) {
		s = oDiv.id;
		oDiv = document.getElementById(s + '-parameters');
		return oDiv.innerHTML;
	}

//----------------------------------------------------------------------------------------------------
	function getParametersEx(oDiv) {
		s = oDiv.id;
		oDiv = document.getElementById(s + '-parametersEx');
		return oDiv.innerHTML;
	}

//----------------------------------------------------------------------------------------------------
	function setParameters(idDiv, sParameters) {
		oDiv = document.getElementById(idDiv + '-parameters');
		oDiv.innerHTML = sParameters;
	}

//----------------------------------------------------------------------------------------------------
	function setParametersEx(idDiv, sParameters) {
		oDiv = document.getElementById(idDiv + '-parametersEx');
		oDiv.innerHTML = sParameters;
	}

//----------------------------------------------------------------------------------------------------
	function getParent(oDiv) {
		s = oDiv.id;
		oDiv = document.getElementById(s + '-parent');
		return oDiv.innerHTML;
	}

//----------------------------------------------------------------------------------------------------
	function setParent(idDiv, oParent) {
		// oParent may be null if control is sun of main page
		oDiv = document.getElementById(idDiv + '-parent');
		if (oParent == null)
			oDiv.innerHTML = null;
		else
			oDiv.innerHTML = oParent.id;
	}

// -----------------------------------------------------------------------------------

	function AjaxClear(t, oHtml) {
		var oParent;
		oParent = getDiv(oHtml);

		var oChild;
		var i;
//alert(t.length);
		for (i=t.length; i--;) {		// Array('company_id=', 'company_name=Toutes')
			var s;
			s = t[i];
//alert(i + '-' + s);
			var p;
			p = s.split("=");		// company_name=Toutes

			oChild = getElementById(oParent, p[0]);
			if (oChild) {
				if (oChild.value != undefined) {					// test value before innerHTML because input hidden have innerHTML = "<INPUT>" strange ?
					oChild.value = p[1];
				} else if (oChild.innerHTML != undefined) {
					var n;
					n = p[1];
					var nPos;
					nPos = n.indexOf(";", 0);
					if (nPos != -1) {
						var regExpr;
						regExpr = new RegExp(";", "g");
						n = n.split(regExpr);
						n = n[nLanguage];
					}
					oChild.innerHTML = n;
				}
			}
			
		}
/*
		oChild = getElementById(oParent, 'company_id');
		if (oChild) {
			if (oChild.value != undefined) {
				oChild.value = "";
				alert('A');
			}
			else if (oChild.innerHTML != undefined)
				oChild.innerHTML = "";
		}

		oChild = getElementById(oParent, 'company_name');
		if (oChild) {
			if (oChild.value != undefined)
				oChild.value = "Toutes";
			else if (oChild.innerHTML != undefined) {
				oChild.innerHTML = "Toutes";
				alert('B');
			}
		}
*/
	}



//----------------------------------------------------------------------------------------------------
	function donothing() {
	}

