// ===================================================================================
// Analyse browser
var DHTML 	= false;
var ie 		= false;
var ie6 	= false;
var ie7 	= false;
var ie8 	= false;
if (document.getElementById || document.all || document.layers) DHTML = true;
posMSIE = navigator.userAgent.toLowerCase().indexOf('msie');
if ( (posMSIE) > 0)
{
	ie = true;
	version = navigator.userAgent.toLowerCase().charAt(posMSIE + 5);
	if (version == 6) ie6 = true;
	if (version == 7) ie7 = true;
	if (version == 8) ie8 = true;
}

// ===================================================================================
// Détection des axes de milieu d'écran
if (ie)
{
	var zWidth = eval(document.documentElement.clientWidth);
	var zHeight = eval(document.documentElement.clientHeight);
}
else
{
	var zWidth = eval(window.innerWidth);
	var zHeight = eval(window.innerHeight);
}
if ((zWidth%2) == 1) zWidth--;
var vPosMX = zWidth/2;
if ((zHeight%2) == 1) zHeight--;
var vPosMY = zHeight/2;

// ===================================================================================
// Initialisation contexte
var vPosX, vPosY;
var fflActive = null;
var isCtrl = false;
var raccClavKey = new Array();
var raccClavAct = new Array();
document.onmousemove = CatchMouse;
document.onmouseup = Function("fflActive=null");
document.onkeydown = ctrlRaccClavDown;

// ===================================================================================
// Gestion de raccourcis claviers

// Catch des touches frappées
function ctrlRaccClavDown(e)
{
	if (ie) var k = window.event.keyCode;
	else var k = e.which;
    if(k == 17) isCtrl = true;
    if (isCtrl && (k != 17))
    {
		for (var i=0; i<raccClavKey.length; i++)
		{
			if (k == raccClavKey[i])
			{
				eval(raccClavAct[i]);
				isCtrl = false;
				if (ie) window.event.returnValue = false;
				else e.preventDefault();
			}
		}
	}
}

// Ajout d'un raccourci
// -----------------------------------------------------------------------------------
// Arguments :
//   arg_key (obl.) : un caractère
//   arg_act (obl.) : l'action à effectuer lors de la frappe CTRL + [arg_key]
//   arg_niv (fac.) : le niveau où implémenter le raccourci (ex. : pour l'implémenter dans la page maître alors qu'on se trouve dans une iframe, arg_niv = 1)
function ajouterRaccourciClavier(arg_key, arg_act, arg_niv)
{
	if (arg_niv == undefined) arg_niv = 0;
	arg_key = arg_key.toUpperCase();
	
	var pref = '';
	for(var i=0; i<arg_niv; i++)
	{
		pref += 'parent.';
	}
	eval(pref + 'raccClavKey[raccClavKey.length] = arg_key.charCodeAt(0)');
	eval(pref + 'raccClavAct[raccClavAct.length] = arg_act');
}

// Suppression des raccourcis actifs
// -----------------------------------------------------------------------------------
// Arguments :
//   arg_niv (fac.) : le niveau où implémenter le raccourci (ex. : pour l'implémenter dans la page maître alors qu'on se trouve dans une iframe, arg_niv = 1)
function supprimerRaccourcisClavier(arg_niv)
{
	if (arg_niv == undefined) arg_niv = 0;

	var pref = '';
	for(var i=0; i<arg_niv; i++)
	{
		pref += 'parent.';
	}
	eval(pref + 'raccClavKey = new Array();');
	eval(pref + 'raccClavAct = new Array();');
}

// ===================================================================================
// Initialisations contrôles de modifications non enregistrées
// Appel de la fonction de contrôle avant chaque sortie d'écran
window.onbeforeunload=ConfirmLeave;
// Variable globale JS pour détecter les désactivations en cours de chargement de page (cas des écrans de recherche)
var FORM_ACT_CL = true;
// Variable globale JS pour stocker les id des éventuels objets ne devant pas intégrer le contrôle (les input de type hidden sont automatiquement exclus)
var EXCL_ACT_CL = new Array();
// Variable globale JS pour stocker les id des éventuels objets forcés dans le contrôle (les input de type hidden à inclure)
var INCL_ACT_CL = new Array();

// ===================================================================================
// Tableau pour stocker les id des éventuels objets dont l'événement provoqué par un clic ne doit pas être pris en compte dans "ddlFerme" pour une DDL ou une SSA
var EXCL_DDL_SSA = new Array();

// ===================================================================================
// Gestion des fermetures des listes d'options des DDL et SSA
function ddlFerme(e)
{
	vSrc = (ie6 || ie7 || ie8) ? event.srcElement : e.target;
	var wrk_cmp_cls = '';
	try
	{
		vSrcId = vSrc.id;
		for (i = 0; i<tabDDL.length; i++)
		{
			if ( (vSrcId != tabDDL[i] + '_sel') && (vSrcId != tabDDL[i] + '_img'))
			{
				var vExcl = false;
				for (var j = 0; j < EXCL_DDL_SSA.length; j++)
				{
					if ( (vSrcId == EXCL_DDL_SSA[j][0]) && (tabDDL[i] == EXCL_DDL_SSA[j][1]) ) vExcl = true;
				}
				if (!(vExcl))
				{
					if (tabTypDDL[i] == 'r') wrk_cmp_cls = '_req';
					else wrk_cmp_cls = '';
					getId(tabDDL[i] + '_bot').style.visibility = 'hidden';
					getId(tabDDL[i] + '_bot').style.overflow = 'hidden';
					var c = getId(tabDDL[i] + '_sel').className;
					if (c.substr((c.length-3), 3) != 'rdy')
					{
						getId(tabDDL[i] + '_sel').className = 'ddl_top' + wrk_cmp_cls;
						getId(tabDDL[i] + '_img').className = 'ddl_top_img' + wrk_cmp_cls;
					}
				}
			}
		}
		
		for (i = 0; i<tabSSA.length; i++)
		{
			if ( (vSrcId != tabSSA[i]) && (vSrcId != tabSSA[i] + '_img') )
			{
				var vExcl = false;
				for (var j = 0; j < EXCL_DDL_SSA.length; j++)
				{
					if ( (vSrcId == EXCL_DDL_SSA[j][0]) && (tabDDL[i] == EXCL_DDL_SSA[j][1]) ) vExcl = true;
				}
				if (!(vExcl))
				{
					if (tabTypSSA[i] == 'r') wrk_cmp_cls = '_req';
					else wrk_cmp_cls = '';
					getId(tabSSA[i] + '_bot').style.visibility = 'hidden';
					getId(tabSSA[i] + '_bot').style.overflow = 'hidden';
					var c = getId(tabSSA[i]).className;
					if (c.substr((c.length-3), 3) != 'rdy')
					{
						getId(tabSSA[i]).className = 'ssa_top' + wrk_cmp_cls;
						getId(tabSSA[i] + '_img').className = 'ssa_top_img' + wrk_cmp_cls;
					}
				}
			}
		}
	}
	catch(e){}
	/*
	try
	{
		vSrcId = vSrc.id;
		for (i = 0; i<tabSSA.length; i++)
		{
			if (vSrcId != tabSSA[i])
			{
				getId(tabSSA[i] + '_bot').style.visibility = 'hidden';
				getId(tabSSA[i] + '_bot').style.overflow = 'hidden';
				getId(tabSSA[i]).className = 'ssa_top';
				getId(tabSSA[i] + '_img').className = 'ssa_top_img';
			}
		}
		
		vSrcId = vSrc.id;
		for (i = 0; i<tabSSA.length; i++)
		{
			if ( (vSrcId != tabSSA[i]) && (vSrcId != tabSSA[i] + '_img') )
			{
				if (tabTypSSA[i] == 'r') wrk_cmp_cls = '_req';
				else wrk_cmp_cls = '';
				getId(tabSSA[i] + '_bot').style.visibility = 'hidden';
				getId(tabSSA[i] + '_bot').style.overflow = 'hidden';
				var c = getId(tabSSA[i]).className;
				if (c.substr((c.length-3), 3) != 'rdy')
				{
					getId(tabSSA[i]).className = 'ssa_top' + wrk_cmp_cls;
					getId(tabSSA[i] + '_img').className = 'ssa_top_img' + wrk_cmp_cls;
				}
			}
		}
	}
	catch(e){}
	*/
}

function dec2hex(dec)
{
	var hexa='0123456789abcdef', hex='';
	while (dec>15)
	{
		tmp=dec-(Math.floor(dec/16))*16;
		hex=hexa.charAt(tmp)+hex;
		dec=Math.floor(dec/16);
	}
	hex=hexa.charAt(dec)+hex;
	return(hex);
}

// ===================================================================================
// Gestion des erreurs
var msgerr_txtcomp = "";
function errAfficher(err, txt)
{
	msgerr_txtcomp = txt;
	exec_async_http_req("GET", fwkPath + "err/err_hrq.php?err="+err, "ERRORMANAGER");
	return(true);
}

function lire_retourerr_http_req(arg_ret)
{
	var tab_err=arg_ret.split("|");
	wngCreerMsgErreur('Erreur n°' + tab_err[0] + ' : ' + tab_err[1], tab_err[2] + "<br />" + msgerr_txtcomp);
	return(true);
}

// ===================================================================================
// Alias fonctions JS

// Génériques
function fwk_ouvrirFenetre(idt, lar, hau, uri, cen, ret, asc)
{
	ouvrirFenetre(idt, lar, hau, uri, cen, ret, asc);
}

function fwk_ajouterRaccourciClavier(arg_key, arg_act, arg_niv)
{
	ajouterRaccourciClavier(arg_key, arg_act, arg_niv);
}

function fwk_supprimerRaccourcisClavier(arg_niv)
{
	supprimerRaccourcisClavier(arg_niv);
}

function fwk_errAfficher(err, txt)
{
	errAfficher(err, txt);
}

// DAT
function fwk_datLire(arg_idt, arg_fmt)
{
	datLire(arg_idt, arg_fmt);
}

function fwk_dahLire(arg_idt, arg_fmt)
{
	dahLire(arg_idt, arg_fmt);
}

function fwk_datInit(idt, dat)
{
	datInit(idt, dat);
}

function fwk_dahInit(idt, dat)
{
	dahInit(idt, dat);
}

function fwk_datActiver(arg_idt)
{
	datActiver(arg_idt);
}

function fwk_datInactiver(arg_idt)
{
	datInactiver(arg_idt);
}

// DDL
function fwk_ddlCreer(arg_idt, arg_cnt, arg_idt_parent, arg_lar, arg_act, arg_lar_bot, arg_opt_ini, arg_req)
{
	ddlCreer(arg_idt, arg_cnt, arg_idt_parent, arg_lar, arg_act, arg_lar_bot, arg_opt_ini, arg_req);
}

function fwk_ddlAjouterOption(arg_idt, arg_val)
{
	ddlAjouterOption(arg_idt, arg_val);
}

function fwk_ddlSelectionnerOption(arg_idt, arg_opt)
{
	ddlSelectionnerOption(arg_idt, arg_opt);
}

function fwk_ddlSupprimerOption(arg_idt, arg_opt)
{
	ddlSupprimerOption(arg_idt, arg_opt);
}

function fwk_ddlModifierOption(arg_idt, optIdt, arg_val)
{
	ddlModifierOption(arg_idt, optIdt, arg_val);
}

function fwk_ddlVider(arg_idt)
{
	ddlVider(arg_idt);
}

function fwk_ddlRollback(arg_idt)
{
	ddlRollback(arg_idt);
}

function fwk_ddlInactiver(arg_idt)
{
	ddlInactiver(arg_idt);
}

function fwk_ddlActiver(arg_idt)
{
	ddlActiver(arg_idt);
}

function fwk_ddlListOptions(arg_idt, arg_val)
{
	return(ddlListOptions(arg_idt, arg_val));
}

function fwk_ddlLireOption(arg_idt, optIdt)
{
	return(ddlLireOption(arg_idt, optIdt));
}

// FFL
function fwk_fflCreer(arg_idt, arg_cnt, arg_tit, arg_lar, arg_msk)
{
	fflCreer(arg_idt, arg_cnt, arg_tit, arg_lar, arg_msk);
}

function fwk_fflShow(arg_idt, arg_msk)
{
	fflShow(arg_idt, arg_msk);
}

function fwk_fflHide(arg_idt, arg_msk)
{
	fflHide(arg_idt, arg_msk);
}

function fwk_fflCreerPostIt(arg_idt, arg_cnt)
{
	fflCreerPostIt(arg_idt, arg_cnt);
}
// IMG

// INB
function fwk_inbShow(arg_cnt, arg_tit)
{
	inbShow(arg_cnt, arg_tit);
}

function fwk_inbHide() 
{
	inbHide();
}

// MSK
function fwk_mskHeuIni(arg_idt, arg_heu)
{
	mskHeuIni(arg_idt, arg_heu);
}

function fwk_mskHeuLire(arg_idt)
{
	return(mskHeuLire(arg_idt));
}

function fwk_mskLireInsee(arg_idt, arg_fmt)
{
	return(mskLireInsee(arg_idt, arg_fmt));
}

function fwk_mskIniCpam(arg_idt, arg_val)
{
	mskIniCpam(arg_idt, arg_val);
}

function fwk_mskLireCpam(arg_idt, arg_fmt)
{
	return(mskLireCpam(arg_idt, arg_fmt));
}

function fwk_mskDecimalInactiver(arg_idt)
{
	mskDecimalInactiver(arg_idt);
}

function fwk_mskDecimalActiver(arg_idt)
{
	mskDecimalActiver(arg_idt);
}

function fwk_mskDecimalLire(arg_idt)
{
	return(mskDecimalLire(arg_idt));
}

function fwk_mskDecimal2Lire(arg_idt)
{
	return(mskDecimal2Lire(arg_idt));
}

function fwk_mskDecimalIni(arg_idt, arg_val)
{
	mskDecimalIni(arg_idt, arg_val);
}

function fwk_mskDecimal2Ini(arg_idt, arg_val)
{
	mskDecimal2Ini(arg_idt, arg_val);
}

function fwk_mskDecimalMasquerSigne(arg_idt)
{
	mskDecimalMasquerSigne(arg_idt);
}

function fwk_mskDecimalMontrerSigne(arg_idt)
{
	mskDecimalMontrerSigne(arg_idt);
}

function fwk_mskDecimalSwitchSigne(arg_idt)
{
	mskDecimalSwitchSigne(arg_idt);
}

function fwk_mskDecimalVerrouillerSigne(arg_idt, arg_sig)
{
	mskDecimalVerrouillerSigne(arg_idt, arg_sig);
}

function fwk_mskDecimalValoriserSigne(arg_idt, arg_sig)
{
	mskDecimalValoriserSigne(arg_idt, arg_sig);
}

// ONG
function fwk_ongActiverOng(arg_idt, arg_num)
{
	ongActiverOng(arg_idt, arg_num);
}

function fwk_ongDesactiverOng(arg_idt, arg_num)
{
	ongDesactiverOng(arg_idt, arg_num);
}

// SSA
function fwk_ssaCreer(arg_idt, arg_fct, arg_idt_parent, arg_lar, arg_act, arg_nbc, arg_lar_bot, arg_opt_ini, arg_val_ini, arg_req, arg_max, arg_pop)
{
	ssaCreer(arg_idt, arg_fct, arg_idt_parent, arg_lar, arg_act, arg_nbc, arg_lar_bot, arg_opt_ini, arg_val_ini, arg_req, arg_max, arg_pop);
}

function fwk_ssaVider(arg_idt)
{
	ssaVider(arg_idt);
}

function fwk_ssaLire(arg_idt)
{
	ssaLire(arg_idt);
}

function fwk_ssaInit(arg_idt, arg_val_lib, arg_val_idt)
{
	ssaInit(arg_idt, arg_val_lib, arg_val_idt);
}

function fwk_ssaInactiver(arg_idt)
{
	ssaInactiver(arg_idt);
}

function fwk_ssaActiver(arg_idt)
{
	ssaActiver(arg_idt);
}

// TAB
function fwk_tabSelectLigne(arg_idt_tab, arg_idt_lig)
{
	tabSelectLigne(arg_idt_tab, arg_idt_lig);
}

function fwk_tabInsererLigne(arg_idt_tab, arg_idt_lig, arg_clk, arg_dck, arg_cnt)
{
	tabInsererLigne(arg_idt_tab, arg_idt_lig, arg_clk, arg_dck, arg_cnt);
}

function fwk_tabSupprimerLigne(arg_idt_tab, arg_idt_lig)
{
	tabSupprimerLigne(arg_idt_tab, arg_idt_lig);
}

function fwk_tabTrier(arg_idt_tab, arg_num_col, arg_sens)
{
	tabTrier(arg_idt_tab, arg_num_col, arg_sens);
}

function fwk_tabViderTableau(arg_idt_tab)
{
	tabViderTableau(arg_idt_tab);
}

function fwk_tabMasquerLigne(arg_idt_tab, arg_idt_lig)
{
	tabMasquerLigne(arg_idt_tab, arg_idt_lig);
}

function fwk_tabAfficherLigne(arg_idt_tab, arg_idt_lig)
{
	tabAfficherLigne(arg_idt_tab, arg_idt_lig);
}

// TRV
function fwk_trvCreer(arg_idt, arg_cnt, arg_idt_parent, arg_typ, arg_lar, arg_hau, arg_col)
{
	trvCreer(arg_idt, arg_cnt, arg_idt_parent, arg_typ, arg_lar, arg_hau, arg_col);
}

function fwk_trvRemplir(arg_idt, arg_cnt, zTV)
{
	trvRemplir(arg_idt, arg_cnt, zTV);
}

function fwk_trvVider(arg_idt_trv)
{
	trvVider(arg_idt_trv);
}

function fwk_trvAjouterNoeud(vNoeud, zTab, nbNiveaux, Niveau, tvIdt, dernierNoeud)
{
	trvAjouterNoeud(vNoeud, zTab, nbNiveaux, Niveau, tvIdt, dernierNoeud);
}

function fwk_trvSwitchNoeud(idt, tvIdt)
{
	trvSwitchNoeud(idt, tvIdt);
}

function fwk_trvSelectionner(tvIdt)
{
	trvSelectionner(tvIdt);
}

function fwk_trvSelectionnerNoeud(tvIdt, vNoeud, thenClick)
{
	trvSelectionnerNoeud(tvIdt, vNoeud, thenClick);
}

function fwk_trvClickNoeud(tvIdt, vNoeud)
{
	trvClickNoeud(tvIdt, vNoeud);
}

function fwk_trvDeployer(tvIdt)
{
	trvDeployer(tvIdt);
}

function fwk_trvContracter(tvIdt)
{
	trvContracter(tvIdt);
}

function fwk_trvCalcNbNiv(t)
{
	trvCalcNbNiv(t);
}

function fwk_trvGrefferNoeud(arg_idt_trv, arg_idt_per, arg_cnt)
{
	trvGrefferNoeud(arg_idt_trv, arg_idt_per, arg_cnt);
}

function fwk_trvSupprimerNoeud(arg_idt_trv, arg_idt)
{
	trvSupprimerNoeud(arg_idt_trv, arg_idt);
}

function fwk_trvAjouterTabNoeud(arg_tab, arg_idt, arg_cnt)
{
	trvAjouterTabNoeud(arg_tab, arg_idt, arg_cnt);
}

function fwk_trvSupprimerTabNoeud(arg_tab, arg_idt)
{
	trvSupprimerTabNoeud(arg_tab, arg_idt);
}

function fwk_trvRollback(tvIdt)
{
	trvRollback(tvIdt);
}

// WHG
function fwk_whgUpdate(idt)
{
	whgUpdate(idt);
}

// WNG
function fwk_wngCreerMsgAttente(arg_msg1, arg_msg2, arg_mas)
{
	wngCreerMsgAttente(arg_msg1, arg_msg2, arg_mas);
}

function fwk_wngCreerMsgErreur(arg_msg1, arg_msg2)
{
	wngCreerMsgErreur(arg_msg1, arg_msg2);
}

function fwk_wngCreerMsgInfo(arg_msg1, arg_msg2)
{
	wngCreerMsgInfo(arg_msg1, arg_msg2);
}

function fwk_wngSupprimerMsg()
{
	wngSupprimerMsg();
}

function fwk_wngCreerMsgAttenteDyn(arg_msg)
{
	wngCreerMsgAttenteDyn(arg_msg);
}

function fwk_wngIncrMsgAttenteDyn(arg_cpt, arg_txt)
{
	wngIncrMsgAttenteDyn(arg_cpt, arg_txt);
}

// ===================================================================================
// Gestion événementiel de la position du curseur
function CatchMouse(e) 
{
	// -------------------------------------------------------------------------------
	// Détection position du curseur
	var vPosX = (ie) ? event.x+document.body.scrollLeft : e.pageX; 
	var vPosY = (ie) ? event.y+document.body.scrollTop : e.pageY;
	
	// -------------------------------------------------------------------------------
	// Gestion de la position du block infobulle (si les infobulles sont actives)
	if (getId('inbBlock') != undefined)
	{
		if (vPosY > vPosMY) getId('inbBlock').style.top = eval(vPosY-getId('inbBlock').offsetHeight-5) + "px";
		else getId('inbBlock').style.top = eval(vPosY+25) + "px";
		if (vPosX > vPosMX) getId('inbBlock').style.left = eval(vPosX-getId('inbBlock').offsetWidth-5) + "px";
		else getId('inbBlock').style.left = eval(vPosX) + "px";
	}
	
	// -------------------------------------------------------------------------------
	// Gestion de la position de la fenêtre flottante éventuellement active
	if (fflActive !== null)
	{
		fflActive.style.left= (ie) ? nowX+event.clientX-voffsetX : eval(nowX + e.clientX - voffsetX) + 'px'; 
		fflActive.style.top= (ie) ? nowY+event.clientY-voffsetY : eval(nowY + e.clientY - voffsetY) + 'px';
	}
}

// ===================================================================================
// Création du masque rendant les objets de la page inaccessible et des zones messages (erreur/attente/barres de progression)
var blocImg = document.createElement('div');
blocImg.id = "blocImg";
blocImg.className = 'bloc_img';
document.body.appendChild(blocImg);
getId('blocImg').innerHTML = '<img id="imgViewer" src="' + sknPath + 'void.gif" style="margin: 0px;" onclick="imgViewNext();" alt="" title="" />';
var blocMasque = document.createElement('div');
blocMasque.id = "zoneMasque";
blocMasque.className = 'masque';
document.body.appendChild(blocMasque);
var blocMsg = document.createElement('div');
blocMsg.className = 'bloc_msg';
blocMsg.id = 'blocMsg';
var blocMsgHaut = document.createElement('div');
blocMsgHaut.id = 'blocMsgHaut';
blocMsgHaut.className = 'bloc_msg_haut';
var blocMsgBorImg = document.createElement('div');
blocMsgBorImg.id = 'blocMsgBorImg';
blocMsgBorImg.className = 'bloc_bor_img';
var blocMsgImg = document.createElement('img');
blocMsgImg.id = 'blocMsgImg';
var blocMsgBas = document.createElement('div');
blocMsgBas.id = 'blocMsgBas';
blocMsgBas.className = 'bloc_msg_bas';
var blocMsgBouton = document.createElement('div');
blocMsgBouton.id = 'blocMsgBouton';
blocMsgBouton.style.textAlign = 'center';
blocMsgBouton.style.padding = '5px';
document.body.appendChild(blocMsg);
blocMsg.appendChild(blocMsgHaut);
blocMsg.appendChild(blocMsgBorImg);
blocMsgBorImg.appendChild(blocMsgImg);
blocMsg.appendChild(blocMsgBas);
blocMsg.appendChild(blocMsgBouton);
// ---
var blocNavImg = document.createElement('div');
blocNavImg.id = 'blocNavImg';
blocNavImg.className = 'bloc_nav_img';
blocNavImg.style.display = 'none';
blocNavImg.innerHTML = '<img src="' + sknPath + 'img/img_close.gif" style=\"margin-top: 5px; cursor: pointer;\" alt="Fermer" onclick="imgViewClose(' + imgMsk + ');" />&nbsp;';
blocImg.appendChild(blocNavImg);
// ---
getId('blocMsgBouton').innerHTML = '<img src="' + sknPath + 'btn/bt_adm_retour_nor.gif" style="cursor: pointer;" onmousedown="this.src=\'' + sknPath + 'btn/bt_adm_retour_psd.gif\';" onmouseup="this.src=\'' + sknPath + 'btn/bt_retour_adm_rov.gif\';" onmouseover="this.src=\'' + sknPath + 'btn/bt_adm_retour_rov.gif\';" onmouseout="this.src = \'' + sknPath + 'btn/bt_adm_retour_nor.gif\';" alt="Ok" title ="" onclick="wngSupprimerMsg();" />';
imgSetOpacity(getId('zoneMasque'), 0);

// ===================================================================================
// Activation du masque
var mskAct = false;
function wngActiverMasque()
{
	if(!mskAct)
	{
		mskAct = true;
		getId("zoneMasque").style.visibility = "visible";
		getId("zoneMasque").style.height=eval(document.documentElement.scrollTop + document.documentElement.clientHeight) + 'px';
		wngFadeInMasque(0);
	}
	else
	{
		getId("zoneMasque").style.height=eval(document.documentElement.scrollTop + document.documentElement.clientHeight) + 'px';
		msk = setTimeout("wngActiverMasque()", 250);
	}
}

function wngFadeInMasque(arg_oct)
{
	if (arg_oct <= 60)
	{
		imgSetOpacity(getId('zoneMasque'), arg_oct);
		arg_oct += 5;
		window.setTimeout('wngFadeInMasque(' + arg_oct + ')', 5);
	}
	else msk = setTimeout("wngActiverMasque()", 250);
}

// ===================================================================================
// Désctivation du masque
function wngDesactiverMasque()
{
	clearTimeout(msk);
	getId("zoneMasque").style.visibility = "hidden";
	imgSetOpacity(getId('zoneMasque'), 0);
	mskAct = false;
}
	
// ===================================================================================
// Optimisation getElementById
function getId(vIdt)
{
	return(document.getElementById(vIdt));
}

// ===================================================================================
// Optimisation soumissions forms
function subForm(vForm)
{
	document.forms[vForm].submit();
}

// ===================================================================================
// Inclusion fichier JS
function include(f)
{
	document.writeln("<script type='text/javascript' src='" + f + "'></script>");
}

// ===================================================================================
// Rattachement d'un event universel (patch IE pour reconnaître 'this')
// On remercie John Resig (http://ejohn.org/projects/flexible-javascript-events)
function addEvent(obj, type, fn)
{
	if (obj.attachEvent)
	{
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn](window.event);}
		obj.attachEvent('on'+type, obj[type+fn]);
	}
	else obj.addEventListener(type, fn, false);
}

// ===================================================================================
// Détachement d'un event universel (patch IE pour reconnaître 'this')
// On remercie John Resig (http://ejohn.org/projects/flexible-javascript-events)
function removeEvent(obj, type, fn)
{
	if (obj.detachEvent)
	{
		//if(obj[type+fn]) obj.detachEvent('on'+type, obj[type+fn]);
		obj.detachEvent('on'+type, obj[type+fn]);
		obj[type+fn] = null;
	}
	else obj.removeEventListener(type, fn, false);
}

// ===================================================================================
// Remplacement d'une chaîne par une autre
function strReplace(strCible, strRecherchee, strNouvelle)
{
	var tmp = strCible;
	var i = tmp.indexOf(strRecherchee);
	while(i > -1)
	{
		tmp = tmp.replace(strRecherchee, strNouvelle);
		i = tmp.indexOf(strRecherchee);
	}
	return tmp;
}

// ===================================================================================
// Suppression d'un élément d'un tableau
function tabDelElt(arg_tab, arg_pos)
{
	return (arg_pos>arg_tab.length) ? false : (arg_tab.slice(0, arg_pos).concat(arg_tab.slice(arg_pos + 1, arg_tab.length)));
}

// ===================================================================================
// Suppression des balises HTML dans du texte
function strip_html(arg_str)
{
	var ret = arg_str.replace(/(<([^>]+)>)/ig, '');
	return(ret);
}

// ===================================================================================
// Fonction de gestion du replacement sur un id dans les div avec scrolling
function gotopos(arg_div, arg_idt)
{
	getId(arg_div).scrollTop = getId(arg_idt).offsetTop;
}

// ===================================================================================
// Renvoie la position de départ d'une sélection de texte
function getSelectionStart(arg_inp, n)
{
	if (!ie) return arg_inp.selectionStart;
	var range = document.selection.createRange();
	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
	if (!isCollapsed) range.collapse(true);
	var b = range.getBookmark();
	return b.charCodeAt(2) - n;
};

// ===================================================================================
// Renvoie la position de fin d'une sélection de texte
function getSelectionEnd(arg_inp, n)
{
	if (!ie) return arg_inp.selectionEnd;
	var range = document.selection.createRange();
	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
	if (!isCollapsed) range.collapse(false);
	var b = range.getBookmark();
	return b.charCodeAt(2) - n;
};

// ===================================================================================
// Comparaisons de valeurs
// -----------------------------------------------------------------------------------
function compVal(arg_e1, arg_e2, arg_sens)
{
	if (arg_sens == undefined) arg_sens = 'a';
	if (arg_sens == 'a')
	{
		if (arg_e1.match('/[0-9]/', 'g')) return((arg_e1*1>arg_e2*1) ? true : false);
		else return(((compStr(arg_e1, arg_e2, arg_sens)) ? true : false));
	}
	else
	{
		if (arg_e1.match('/[0-9]/', 'g')) return((arg_e1*1<arg_e2*1) ? true : false);
		else return(((compStr(arg_e1, arg_e2, arg_sens)) ? true : false));
	}
}

// -----------------------------------------------------------------------------------
function compStr(arg_e1, arg_e2, arg_sens)
{
	if (arg_sens == undefined) arg_sens = 'a';
	if (arg_sens == 'a') return (arg_e1 < arg_e2);
	else return (arg_e1 > arg_e2);
}

// ===================================================================================
// Tronquage de décimaux (sans arrondi)
// -----------------------------------------------------------------------------------
function toFixedTronque(arg_val, arg_pre)
{
	arg_val = Math.floor(arg_val*Math.pow(10, arg_pre));
	arg_val/=Math.pow(10, arg_pre);
	return(arg_val.toFixed(arg_pre));
}

// -----------------------------------------------------------------------------------
// Tronquage de décimaux (avec arrondi)
function toFixedArrondi(arg_val, arg_pre)
{
	arg_val = Math.round(arg_val*Math.pow(10, arg_pre));
	arg_val/=Math.pow(10, arg_pre);
	return(arg_val.toFixed(arg_pre));
}

// ===================================================================================
// Dénombrement d'une sous-chaînes de caractères dans une chaîne
// -----------------------------------------------------------------------------------
function strCount(haystack, needle, offset, length)
{
    var pos = 0, cnt = 0;
    if(isNaN(offset)) offset = 0;
    if(isNaN(length)) length = 0;
    offset--;
    while( (offset = haystack.indexOf(needle, offset+1)) != -1 )
    {
        if(length > 0 && (offset+needle.length) > length) return false;
        else cnt++;
    }
    return cnt;
}

// ===================================================================================
// Suppression de quotes
// -----------------------------------------------------------------------------------
function delQuotes(str)
{
	charToRemove = '"';
	regExp = new RegExp("["+charToRemove+"]","g");
	str = str.replace(regExp,"&#34;");
	charToRemove = '\'';
	regExp = new RegExp("["+charToRemove+"]","g");
	return str.replace(regExp,"&#39;");
}

// ===================================================================================
// Affichage d'une date
// -----------------------------------------------------------------------------------
function lib_date_afficher(arg_dat, arg_fmt)
{
	if (arg_dat == glbDatnul) ret = '';
	else
	{
		if (arg_fmt == undefined) arg_fmt = 'eur';
		if (arg_fmt == 'eur')
		{
			var re = /([0-9]{4})-([0-9]{2})-([0-9]{2})/;
			var ret = arg_dat.replace(re, '$3/$2/$1');
		}
	}
	return(ret);
}

// ===================================================================================
// Suppression des espaces dans une chaîne
// -----------------------------------------------------------------------------------
// Gauche + droite
function trim(str, chars)
{
    return gtrim(dtrim(str, chars), chars);
}

// -----------------------------------------------------------------------------------
// Gauche
function gtrim(str, chars)
{
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
// -----------------------------------------------------------------------------------
// Droite
function dtrim(str, chars)
{
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

// ===================================================================================
// Retourne la position absolue réelle d'un objet
function getPos(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent)
	{
		do
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
		while ( (obj = obj.offsetParent) && (obj.className != 'fflCnt') && (obj.style.position != 'absolute'));
	}
	return [curleft, curtop];
}

// ===================================================================================
// Affichage d'une date
function datAffiche(arg_dat, arg_fmt)
{
	if (arg_dat == glbDatnul) ret = '';
	else
	{
		if (arg_fmt == undefined) arg_fmt = 'eur';
		if (arg_fmt == 'eur')
		{
			var re = /([0-9]{4})-([0-9]{2})-([0-9]{2})/;
			var ret = arg_dat.replace(re, '$3/$2/$1');
		}
	}
	return(ret);
}

// ===================================================================================
// Ajoute ou supprime des jours à une date
function datAjouteJour(arg_dat, arg_jour)
{
	var d = new Date(eval(parseInt(arg_dat.substr(0, 4), 10)), eval(parseInt(arg_dat.substr(5, 2), 10))-1, eval(parseInt(arg_dat.substr(8, 2), 10)))
	var j  = d.getDay();
	if (j == 0) j = 7;
	var s = new Date(d.getTime() + (1000 * 60 * 60 * 24 * arg_jour));
	j = s.getDate();
	if ((j.toString().length) == 1) j = '0' + j;
	var m = s.getMonth() + 1;
	if ((m.toString().length) == 1) m = '0' + m;
	return(s.getFullYear() + '-' + m + '-' + j);
}

// ===================================================================================
// Crée un format date JS sur la base d'un format aaaa-mm-jj
function datFormJS(arg_dat)
{	  
	day = arg_dat.substring(8, 9);
	month = arg_dat.substring(5, 6);
	year = arg_dat.substring(0, 4);
	d = new Date();
	d.setDate(day);
	d.setMonth(month);
	d.setFullYear(year); 
	return d;
}

// ===================================================================================
// Compare deux dates au format aaaa-mm-jj
// Retour : 
//		0 si date_1=date_2
//		1 si date_1<date_2
//		-1 si date_1>date_2	  
function datCompare(arg_dat1, arg_dat2)
{
	var d1 = new Date(eval(parseInt(arg_dat1.substr(0, 4), 10)), eval(parseInt(arg_dat1.substr(5, 2), 10))-1, eval(parseInt(arg_dat1.substr(8, 2), 10)));
	var d2 = new Date(eval(parseInt(arg_dat2.substr(0, 4), 10)), eval(parseInt(arg_dat2.substr(5, 2), 10))-1, eval(parseInt(arg_dat2.substr(8, 2), 10)));
	diff = d2.getTime()-d1.getTime();
	return (diff==0?diff:diff/Math.abs(diff));
}

// ===================================================================================
// Ouvrir fenêtre
// -----------------------------------------------------------------------------------
// Arguments : 
//   idt : identifiant
//   lar : largeur en pixels
//   hau : hauteur en pixels
//   uri : URL de destination
//   cen : centrer ou non (true ou false)
//   ret : possibilté de retailler ou non (true ou false)
//   asc : affichage des ascenseurs (true ou false)
function ouvrirFenetre(idt, lar, hau, uri, cen, ret, asc)
{
	ret = (ret) ? 1 : 0;
	asc = (asc) ? 1 : 0;
	fenetre = window.open(uri, idt, 'width=' + lar + ', height=' + hau + ', toolbar=0, location=0, directories=0, status=0, menubar=0, resizable=' + ret + ', scrollbars= ' + asc);
	if (cen)
	{
		var px = parseInt(screen.width/2) - parseInt(lar/2);
		var py = parseInt(screen.height/2) - parseInt(hau/2);
		fenetre.moveTo(px, py);
	}
	return(fenetre);
}

// ===================================================================================
// Règlage multi-browser de l'opacité d'un onbjet
// Paramètres : 
//   arg_obj : l'objet
//   arg_oct : l'opacité, de 0 à 100
function imgSetOpacity(arg_obj, arg_oct)
{
	arg_oct = (arg_oct == 100) ? 99.999 : arg_oct;
	// IE
	arg_obj.style.filter = 'alpha(opacity:' + arg_oct + ')';
	// Konqueror
	arg_obj.style.KHTMLOpacity = arg_oct/100;
	// Mozilla
	arg_obj.style.MozOpacity = arg_oct/100;
	// Safari, Fx, ...
	arg_obj.style.opacity = arg_oct/100;
}

// ===================================================================================
// Execution d'une requete HTTPRequest synchrone
// Paramètres : 
//   arg_typ : type de requete (get ou post)
//   arg_url : url de destination de la requete
//   retour : ce qu'affichera le script cible (arg_url)

function exec_sync_http_req(arg_typ, arg_url)
{
	var xmlhttp;
	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e)
		{
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp = new XMLHttpRequest();
	try
	{
		arg_typ = arg_typ.toUpperCase();
		if (arg_typ == 'POST')
		{
			tab_url = arg_url.split("?");
			arg_url = tab_url[0];
		}
		xmlhttp.open(arg_typ, arg_url, false);
		xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
		if (arg_typ == 'POST')
		{
			xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlhttp.send(tab_url[1]);
		}
		else
		{
			xmlhttp.setRequestHeader("Content-Type", "text/html; charset=iso-8859-15");
			xmlhttp.send(null);
		} 
	}
	catch(e)
	{
		alert(e.toString());
	}
	return xmlhttp.responseText;
}

// ===================================================================================
// Execution d'une requete HTTPRequest asynchrone
// Paramètres : 
//   arg_typ : type de requete (get ou post)
//   arg_url : url de destination de la requete
//   arg_idt : un identifiant quelconque qui sera renvoye a la fonction de lecture du retour de la requete
//   retour : true

// Attention : une fonction "lire_retour_http_req(arg_idt, arg_ret)"
// est necessaire dans le code de l'appelant pour recuperer le resultat
// de la requete quand celui-ci sera disponible; le parametre arg_idt
// pourra etre utilise pour connaitre le type d'appel original dans
// le code de la fonction "lire_retour_http_req"

tXHTTP = new Array;
function exec_async_http_req(arg_typ, arg_url, arg_idt)
{
	var i = tXHTTP.length;
	tXHTTP[i] = null;
	try
	{
		tXHTTP[i] = new ActiveXObject("Msxml2.XMLHTTP");
	} 
	catch (e)
	{
		try
		{
			tXHTTP[i] = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (E)
		{
			tXHTTP[i] = false;
		}
	}
	if (!tXHTTP[i] && typeof XMLHttpRequest!='undefined')
	{
		tXHTTP[i] = new XMLHttpRequest();
	}
	tXHTTP[i].open(arg_typ.toUpperCase(), arg_url, true);
	tXHTTP[i].setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	tXHTTP[i].setRequestHeader("Content-Type", "text/html; charset=iso-8859-15");
	tXHTTP[i].onreadystatechange=function()
	{
	  	if (tXHTTP[i].readyState==4)
	  	{
	  		if (arg_idt!="ERRORMANAGER") lire_retour_http_req(arg_idt, tXHTTP[i].responseText);
	  		else lire_retourerr_http_req(tXHTTP[i].responseText);
	  	}
	}
	tXHTTP[i].send(null);
	return(true);
}

// ===================================================================================
// Fonction de comparaison entre les valeurs actuelles à l'écran et celles précédemment mémorisées (appel automatique)
function ConfirmLeave()
{
	if (getId('FORM_DEF_VALUES'))
	{
		if (FORM_ACT_CL)
		{
			if (getId('FORM_ACT_CL').value == 1)
			{
				var fContenu = '';
				fContenu = ContenuForms();
				//alert(fContenu);
				//alert(getId('FORM_DEF_VALUES').value);
				if (fContenu != getId('FORM_DEF_VALUES').value) return "Des modifications y ont été apportées sans être enregistrées";
				else return;
			}
			else return;
		}
		else return;
	}
	else return;
}

// ===================================================================================
// Fonction de comparaison entre les valeurs actuelles à l'écran et celles précédemment mémorisées (appel non automatique)
function DeclencherConfirmLeave()
{
	if (getId('FORM_DEF_VALUES'))
	{
		if (FORM_ACT_CL)
		{
			if (getId('FORM_ACT_CL').value == 1)
			{
				var fContenu = '';
				fContenu = ContenuForms();
				if (fContenu != getId('FORM_DEF_VALUES').value)
				{
					vrep = confirm("Attention : des modifications ont été apportées à cet écran sans être enregistrées; voulez-vous continuer ?");
					if (vrep) return(true);
					else return(false);
				}
				else return(true);
			}
			else return(true);
		}
		else return(true);
	}
	else return(true);
}

// ===================================================================================
// Fonction de désactivation du contrôle
function DesactiverConfirmLeave()
{
	if (getId('FORM_DEF_VALUES')) getId('FORM_ACT_CL').value = 0;
	FORM_ACT_CL = false;
}

// ===================================================================================
// Fonction d'activation du contrôle
function ActiverConfirmLeave()
{
	if (FORM_ACT_CL)
	{
		var fContenu = '';
		if (fRepContenu != '') fContenu = fRepContenu;
		else fContenu = ContenuForms();
		var fForm = document.forms;
		if (fForm.length != 0)
		{
			for(var i=0; i<fForm.length; i++)
			{
				var fValues = document.createElement('input');
				fValues.setAttribute("id", 'FORM_DEF_VALUES');
				fValues.setAttribute("name", 'FORM_DEF_VALUES');
				fValues.setAttribute("type", "hidden");
				fForm[i].appendChild(fValues);
				var fActCL = document.createElement('input');
				fActCL.setAttribute("id", 'FORM_ACT_CL');
				fActCL.setAttribute("name", 'FORM_ACT_CL');
				fActCL.setAttribute("type", "hidden");
				fForm[i].appendChild(fActCL);
			}
			getId('FORM_DEF_VALUES').value = fContenu;
			getId('FORM_ACT_CL').value = 1;
		}
	}
}

// ===================================================================================
// Fonction de récupération des valeurs des objets de la page
function ContenuForms()
{
	var fContenu = '';
	var fForm = document.forms;
	for(var i=0; i<fForm.length; i++)
	{
		// Récupération des objets de la form
		var fElements = fForm[i].elements;
		// Parcours des objets de la form
		for(var j=0; j<fElements.length; j++)
		{
			// Détection des hidden
			if (fElements[j].type == 'hidden')
			{
				// Par défaut : hidden à exclure
				var wrk_exclure = true;
				// Parcours des id des objets inclus forcés
				for(var k=0; k<INCL_ACT_CL.length; k++)
				{
					// Si forcage spécifié : hidden à ne pas exclure
					if (INCL_ACT_CL[k] == fElements[j].id) wrk_exclure = false;
				}
				// Intégration du hidden dans la liste des objets exclus si besoin
				if (wrk_exclure) EXCL_ACT_CL[EXCL_ACT_CL.length] = fElements[j].id;
			}
		}
		
		// Parcours des objets de la form
		for(j=0; j<fElements.length; j++)
		{
			var wrk_exclure = false;
			// Parcours des id des objets à exclure
			for(var k=0; k<EXCL_ACT_CL.length; k++)
			{
				// Si exclusion spécifiée : objet à exclure
				if (EXCL_ACT_CL[k] == fElements[j].id) wrk_exclure = true;
			}
			if (!wrk_exclure)
			{
				if ( (fElements[j].id != 'FORM_DEF_VALUES') && (fElements[j].id != 'FORM_ACT_CL') )
				{
					if ( (fElements[j].type != 'radio') && (fElements[j].type != 'checkbox') ) fContenu += fElements[j].id + '°|°' + fElements[j].value + '$^$';
					else
					{
						if(fElements[j].checked) fContenu += fElements[j].id + '°|°' + '1' + '$^$';
						else fContenu += fElements[j].id + '°|°' + '0' + '$^$';
					}
				}
			}
		}
	}
	return(fContenu);
}

// ===================================================================================
// Fonction de rafraichissement des valeurs mémorisées des objets de la page
function RefreshContenuForms()
{
	var fContenu = '';
	fContenu = ContenuForms();
	getId('FORM_DEF_VALUES').value = fContenu;
	return(true);
}

// ===================================================================================
// Fonction d'exclusion du contrôle d'un objet de la page
function ExclureContenuForms(idt)
{
	// Cas des masques de dates
	if ( (getId(idt + '_aaaa') != null) && (getId(idt + '_mm') != null) && (getId(idt + '_jj') != null) )
	{
		EXCL_ACT_CL[EXCL_ACT_CL.length] = idt + '_aaaa';
		EXCL_ACT_CL[EXCL_ACT_CL.length] = idt + '_mm';
		EXCL_ACT_CL[EXCL_ACT_CL.length] = idt + '_jj';
	}
	else
	{
		// Cas des DDL
		if ( (getId(idt + '_sel') != null) && (getId(idt + '_tab') != null) && (getId(idt + '_bot') != null) ) idt = idt + '_sel';
		// Cas générique
		EXCL_ACT_CL[EXCL_ACT_CL.length] = idt;
	}
}

// ===================================================================================
// Fonction d'inclusion forcée du contrôle d'un objet de la page (pour les input hidden normalement exclus automatiquement)
function InclureContenuForms(idt)
{
	INCL_ACT_CL[INCL_ACT_CL.length] = idt;
}

var fField;

function ordTab(fst_obj, tab_obj)
{
	var fForm = document.forms;
	fField = fst_obj;
	
	for(var i=0; i<fForm.length; i++)
	{
		// Récupération des objets de la form
		var fElements = fForm[i].elements;
		// Parcours des objets de la form
		for(var j=0; j<fElements.length; j++)
		{
			if(fElements[j].tabIndex == 0) fElements[j].tabIndex = 9999;
		}
	}
	for(var i=0; i<tab_obj.length; i++)
	{
		// Les masques dates
		if ( (document.getElementById(tab_obj[i] + '_jj')) && (document.getElementById(tab_obj[i] + '_mm')) && (document.getElementById(tab_obj[i] + '_aaaa')) )
		{
			getId(tab_obj[i] + '_jj').tabIndex = i;
			getId(tab_obj[i] + '_mm').tabIndex = 10000;
			getId(tab_obj[i] + '_aaaa').tabIndex = 10000;
		}
		else
		{
			// Les DDL
			if ( (document.getElementById(tab_obj[i] + '_sel')) && (document.getElementById(tab_obj[i] + '_img')) )
			{
				getId(tab_obj[i] + '_sel').tabIndex = i;
				getId(tab_obj[i] + '_img').tabIndex = 10000;
			}
			else
			{
				// Les masques num. INSEE
				if (document.getElementById(tab_obj[i] + '_sex'))
				{
					getId(tab_obj[i] + '_sex').tabIndex = i;
					getId(tab_obj[i] + '_ann').tabIndex = 10000;
					getId(tab_obj[i] + '_moi').tabIndex = 10000;
					getId(tab_obj[i] + '_dep').tabIndex = 10000;
					getId(tab_obj[i] + '_orc').tabIndex = 10000;
					getId(tab_obj[i] + '_ora').tabIndex = 10000;
					getId(tab_obj[i] + '_cle').tabIndex = 10000;
				}
				// Les inputs/textareas
				else getId(tab_obj[i]).tabIndex = i;
			}
		}
	}
	
	for(var j=0; j<fForm.length; j++)
	{
		// Récupération des objets de la form
		var fElements = fForm[j].elements;
		// Parcours des objets de la form
		for(var k=0; k<fElements.length; k++)
		{
			if(fElements[k].tabIndex == 9999)
			{
				fElements[k].tabIndex = i;
				i++;
			}
		}
	}
	addEvent(getId('dummyTabIndex'), "focus", resetTabIndex);
}

function resetTabIndex()
{
	getId(fField).select();
}
