
var path = (self.document.location.href.indexOf('admin')>-1 || self.document.location.href.indexOf('extranet')>-1)? '../' : '';
/** Variables JS contenant du texte **/





var lang = Array();

lang['msg_err_TXT']					= 'Champ obligatoire';
lang['msg_err_EURO']				= 'Saisissez un prix valide';
lang['msg_err_DATE']				= 'jj/mm/aaaa';
lang['msg_err_SELECT']				= 'Choisissez un élément !';
lang['msg_err_MAIL']				= 'Saissez une adresse e-mail valide';
lang['msg_err_LINK']				= 'Saissez une adresse internet valide';
lang['champs_incorects']			= 'Certains champs n\'ont pas été remplis correctement';
lang['chosse_file']					= 'Choisissez un fichier !';
lang['loading_file']				= 'Chargement du fichier ...';
lang['fields_not_correct']			= "Certains champs n'ont pas été remplis correctement";
lang['type_an_expression']			= "Saissez une expression à rechercher";
lang['search_3_letters']			= 'Votre requête doit contenir au moin 3 caractères';
lang['dont_cut_tags']				= "Ne coupez les balises";
lang['enter_text_to_format']		= "Entrez le texte à mettre en forme";
lang['url']							= 'URL (Adresse internet)';
lang['type_log']					= 'Saisissez un login';
lang['type_pass']					= 'Saisissez un mot de passe';
lang['close']						= 'Fermer';
lang['open']						= 'Ouvrir';
lang['none']						= 'Aucun';
lang['read_more']					= 'en savoir +';
lang['confirm_delete_media']		= "Voulez-vous vraiment supprimer ce média ? Il est peut-être utilisé dans une autre partie du site ";
lang['gest_media_preview_title']	= 'Gestionnaire de média - prévisualisation';
lang['CANT_DELETE']					= "Vous ne pouvez pas effacer cette ligne ";
lang['ELEM_ASSOCIES']				= ' élement(s) lui est(sont) associé(s)';
lang['SELECTIONNE']					= 'Choisissez au moin un élément ';
lang['choose_cat']					= 'Choisissez une categorie';
lang['confirm_delete_thread']		= 'Voulez-vous effacer cette question ainsi que tous ces réponses ?';
lang['confirm_publish']				= 'Voulez-vous vraiment publier cet élément ?';
lang['confirm_unpublish']			= 'Voulez-vous vraiment dé-publier cet élément ?';
lang['confirm_archive']				= 'Voulez-vous vraiment archiver cet élément ?';
lang['confirm_unarchive']			= 'Voulez-vous vraiment dé-archiver cet élément ?';
lang['confirm_headline']			= 'Voulez-vous vraiment mettre cet élément à la une ?';
lang['confirm_unheadline']			= 'Voulez-vous vraiment supprimer cet élément de la une  \n Le nouvel élément à la une sera le plus récent';
lang['confirm_add_favorites']		= 'Voulez-vous vraiment ajouter cet élément à vos favoris ?';
lang['confirm_rem_favorites']		= 'Voulez-vous vraiment supprimer cet élément de vos favoris ?';
lang['confirm_effectuer_upload']	= 'Il y a un fichier en attente dans le formulaire \n Voulez-vous envoyer ce fichier ? \n\n Cliquez sur annuler pour continuer sans envoyer le fichier';
lang['extension_de_fichier_non_acceptee'] = 'Le fichier que vous voulez envoyer sur le serveur n\'est pas conforme :\n Les extensions autorisées pour ce champ sont les suivantes : \n\n ';




var TAB_jours = Array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
var TAB_mois = Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');



function affiche_debug(tab){

	otp = '<div id="kc3_debug_contenair"><div class="debug_title">Etapes d\'exécution <a href="#" onclick="this.parentNode.parentNode.style.display=\'none\';">x</a></div>';
	otp += '<table border="0" class="debug">';
	otp += '<tr><th>Flag</th><th>Total</th><th>Tps Flag</th><th>Flag/Total</th></tr>';

	total_time = tab[tab.length-1][3];
	

	for(var i=0; i<tab.length; i++){
		//otp += '<div class="debug" id="debug_'+ tab[i][0] +'" style="top:'+ (22 + (22 * i)) +'px;">';
		otp += '<tr>';
		otp += '<th><label>'+ tab[i][1] +' : </label></th>';
		otp += '<td>'+ tab[i][3] +'</td>';
		otp += '<td><span class="debug_plus">'+ tab[i][2] +'</span></td>';
		otp += '<td><span class="debug_part"> &nbsp; '+ Math.round(((tab[i][2] / total_time)*100)*100)/100 +'%</span></td>';
		otp += '</tr>';
		//otp += '</div>';

	}
	otp += '<tr><th>TEMPS TOTAL</th><td colspan="3"><strong>'+ total_time +' secondes</strong></td></tr>';
	otp += '</table>';
	otp += '</div>';

	self.document.body.innerHTML += otp;
}



function update_datefin(){
	alert('ok');
}



/*
Séléctionner plusieurs lignes d'une liste dont un critere a une valeur donnée
*/
function lot_select(obj){
	// Remise à zéro
	LotCheckAll(false);
	for(var i=0; i<obj.options.length; i++){
		if(obj.options[i].selected){
			coche_lot(obj, i);
		}
	}
}

function coche_lot(obj, index){

	if(obj.options[index].value == 'all'){
		LotCheckAll(true);
	}
	else if(obj.options[index].value == 'none'){
		// LotCheckAll(false); // Déjà réinitialisé dans lot_select();
	}
	else{


		var Tinfo = obj.options[index].value.split(':');
		var champ = Tinfo[0];
		var val = Tinfo[1];
		var debug = '';


		liste_coche = document.getElementsByTagName('input');
		
		for(var i=0; i<liste_coche.length; i++){
			if(liste_coche[i].type == 'checkbox' && liste_coche[i].name == 'LOT'){
			input = document.getElementById('lot_' + champ + '_'+ liste_coche[i].value);
				if(input != null ){
					if(input.value == val){
						liste_coche[i].checked = true;
					}
				}
			}
		}
	}
}

function func_lot_advanced(bt){
	var op = bt.value;
	var mDiv = document.getElementById('div_mass_select');
	var mSel = document.getElementById('lot_mass_select');

	if(func_lot_advanced.arguments.length > 1){ op = '-'; }
 
	
	switch(op){
		case '+' :
			mSel.multiple = true;
			mSel.style.height = '150px';
		//	mSel.style.width = '120px';
		//	mDiv.style.position = 'absolute';
			bt.value = '-';
		break;

		case '-' :
			mSel.multiple = false;
			mSel.style.height = '16px';
	//		mSel.style.width = '120px';
			bt.value = '+';
		break;
	}

}


function assoStagiaireSession(id_session){
	inp = MM_findObj('id_session');
	
	if(inp){
		sep = (inp.value != '') ? ',' : '';
		inp.value += sep + id_session;
		submitit('formEdit');
	}
}

function modif_stage(){
	sel = MM_findObj('modif_stage_id_stage');
	var id_stage = sel.options[sel.selectedIndex].value;
	var url = 'index.asp?rub=522&op=edit&id_stage='+ id_stage;
	pop(url, 'width=750,height=680,status=yes');
}



function selection_session(id_session){

	//console.log('-131');
	var pref = window.parent.MM_findObj('prefer').checked;
	//console.log('-133');
	window.parent.opener.assoStagiaireSession(id_session);
	window.parent.opener.focus();
	window.parent.opener.submitit('form_preferences');
	//console.log('-137');
	if(pref){
		window.parent.setTimeout('self.close()', 500);
		window.parent.blur();
		self.document.location.href = 'index.asp?op=add_pref&rub='+GetVal('rub')+'&k=id_session&v='+ id_session +'&redirect=';
			//console.log('-142');
		if(!window.parent.opener.MM_findObj('id_session')){
			window.parent.opener.location.reload();
		}
	}
	else{
		window.parent.close();
	}
	//console.log('-150');


}

function assoStagiaireSessionFromPop(champ){
	var id_session = 0;
	radio = MM_findObj(champ);
	for(var i=0; i<radio.length; i++){
		if(radio[i].checked == true){
			id_session = radio[i].value;
			break;
		}
	}

	if(id_session == 0){
		alert('Choisissez une session');
	}
	else{
		window.opener.assoStagiaireSession(id_session);
		window.opener.focus();
		window.opener.submitit();
		self.close();
	}


}


function logout(){
	var url = self.document.location.href + '';
	url = BuildUrl(url, 'rub', 'ADM-CNX');
	url = BuildUrl(url, 'op', 'connexion');
	url = BuildUrl(url, 'deconnect', '1');

	self.document.location.href = url;
}


function navSelect(obj){
	var url = document.location.href + '';
	url = BuildUrl(url, obj.name, obj.options[obj.selectedIndex].value);
	document.location.href = url;
}


function onglet(ong, post){
	if(post == 1){
		submitit(formname, ong);
	}
	else{
		var url = self.document.location.href + '';
		url = BuildUrl(url, 'ong', ong);
		self.document.location.href = url;
	}
}


var ONGLETS_GEST_MEDIA = Array('IFRA', 'EDIT', 'SELECTION');

function openEDIT(champ){
	//var ifra = document.getElementById('i'+champ);
	var ifra = MM_findObj('i'+champ);
	//alert(ifra.id);
	var url = getIframeURL(ifra);

//	my_parent = GetVal('parent', url);
	rub = GetVal('rub', url);
	url = BuildUrl(url, 'op', 'edit');
//	url = BuildUrl(url, 'value', document.getElementById(champ).value);
//	alert(document.getElementById(champ).value);
	load_iframe(MM_findObj('i'+champ), url);
	highlight_small_ong(champ, 'EDIT', ONGLETS_GEST_MEDIA, GetVal('max_media', url));
}


function openSELECTION(champ){
	//var ifra = document.getElementById('i'+champ);
	var ifra = MM_findObj('i'+champ);
	var url = getIframeURL(ifra);

	url = BuildUrl(url, 'op', 'selection');
	url = BuildUrl(url, 'value', document.getElementById(champ).value);
	load_iframe(MM_findObj('i'+champ), url);	
	highlight_small_ong(champ, 'SELECTION', ONGLETS_GEST_MEDIA, GetVal('max_media', url));
}


function openIFRA(champ){
	//var ifra = document.getElementById('i'+champ);
	var ifra = MM_findObj('i'+champ);
	var url = getIframeURL(ifra);

	url = BuildUrl(url, 'op', 'ifra');
	url = BuildUrl(url, 'value', document.getElementById(champ).value);
	load_iframe(MM_findObj('i'+champ), url);	
	highlight_small_ong(champ, 'IFRA', ONGLETS_GEST_MEDIA, GetVal('max_media', url));
}

var LISTE_NUM_ROWS;
function add_num_rows(val){
	LISTE_NUM_ROWS = val;
}


function getIframeURL(obj_Iframe){
	//alert(obj_Iframe.id);
	if(obj_Iframe.contentDocument == null){
		return obj_Iframe.document.location.href + '';
	}
	else{
		return obj_Iframe.contentDocument.location + '';
	}
}


function load_iframe(obj_Iframe, url){
	//alert(url);
	if(obj_Iframe.contentDocument == null){
		obj_Iframe.document.location.href = url;
	}
	else{
		obj_Iframe.contentDocument.location.href = url;
	}
}



function highlight_small_ong(champ, onglet, Longlets, max_media){
	ifra = MM_findObj('i'+ champ);
	var idz = GetVal('value', getIframeURL(ifra));
	if(idz == ''){
		nb_elems = 0;
	}
	else{
		idz = idz.replace('0,', '');
		idz = idz.replace('0', '');
		tidz = idz.split(',');
		nb_elems = tidz.length;
	}

	if(nb_elems == 0 && onglet != 'EDIT' ){
		url = BuildUrl(getIframeURL(ifra), 'op', 'edit');
		load_iframe(ifra, url);
	}

//	alert(GetVal('value', getIframeURL(MM_findObj('i'+ champ))) + ' - '+ nb_elems);
	
	for(var i=0; i<Longlets.length; i++){
		oOng = MM_findObj(Longlets[i] +'_'+ champ);

		if(oOng != null){
			oOng.className = MM_findObj(Longlets[i] +'_'+ champ).className.replace('1', '0');
		}

		if(nb_elems >= max_media && i > 0){
			if(oOng != null){
				oOng.style.display = 'none';
			}
		}
		else{
			if(oOng != null){
				oOng.style.display = 'inline';
			}
		}
	}

	MM_findObj(onglet +'_'+ champ).className = MM_findObj(onglet +'_'+ champ).className.replace('0', '1');

}


var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName = "Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName = "MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName = "UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName = "Linux";


var BROWSER = "Unknow browser"
//alert(navigator.appName);
if(navigator.appName.indexOf('Microsoft') > -1){ BROWSER = 'IE';}
if(navigator.appName.indexOf('Netscape') > -1){ BROWSER = 'NS';}



var SEPARATORS = Array();
SEPARATORS["Windows"] = "\\";
SEPARATORS["MacOS"] = "/";
SEPARATORS["UNIX"] = "/";
SEPARATORS["Linux"] = "/";
var DIR_SEP = SEPARATORS[OSName];


// Object renvoi l'object n du document
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}




/*********************************/
/* FONCTIONS JAVASCRIPT COMMUNES */
/*********************************/

function get_kDbug(){
//	alert(document.all.innerHTML);
}

function vide() {return;}

function checkFields(form){
	if(!checkString(MM_findObj(COOKIE_LOG).value)) {
		alert(lang['type_log']);
	}
	else {
		if(!checkString(MM_findObj(COOKIE_PWD).value)){
			alert(lang['type_pass']);
		}
		else {
			form.submit();
		}
	}
}
    
function checkString(entry) 
{
   for(var i = 0; i < entry.length; i++)
   {if (entry.charAt(i) != " ") {return true;}}
   return false;
}

//* Fonctions de pop up

function pop(url, param)
{
	if (url){
		var jour = new Date();
		var name = 'pop_'+jour.getHours()+''+jour.getMinutes()+''+jour.getSeconds();
		var loader = path + '_js/loader.html';
		winname = name + '';

		if(pop.arguments.length == 3)
			winname = window.name;
	
		if (window.opener != null && pop.arguments[2] != 'pop')
		{
			self.document.location.href = url;
		}

		else{
			eval(winname +" = window.open('"+ loader +"','"+name+"','"+param+"');");
	//		eval();
			setTimeout(winname +".document.location.href = '"+ url +"';", 100);
			eval("setTimeout('"+winname+".focus();',250);");
			if(pop.arguments.length == 2){return eval(name);}
		}
	}
}


function popup(url, params){
	var jour = new Date();
	var name = 'pop_'+jour.getHours()+''+jour.getMinutes()+''+jour.getSeconds();
	var loader = path + '_js/loader.html';
	eval(name +' = window.open(url, name, params);');
	setTimeout(name + '.focus()', 250);
}



function MyClose(){
	
	// IE6 vois toujours le opener comme un objet meme si la fenetre a été fermée
	// avec un timeout la pop up sera fermée même si une erreur se produit dans les lignes qui suivent
	setTimeout('self.close()', 600);

	if (window.opener != null){
		var ifra = GetVal('ifraRef');
		if(ifra != false){
			window.opener.MM_findObj(ifra).location.reload();
		}else{
			window.opener.location.reload();
		}
		window.opener.focus();
	}
	
}


function waitLayer(etat){
	if((loader = MM_findObj('loading_layer')) != null){
		loader.style.display = (etat) ? 'block' : 'none';
	}
}



// Fonctions des trims
function strim(val, crt){
  var txt = val;
  while (txt.substr(0, 1) == crt) {txt = txt.substr(1, txt.length);}
  while (txt.substr(txt.length-1, 1) == crt) {txt = txt.substr(0, txt.length-1);}

  return txt;
}
function trim(val){return  strim(val+'', " ");} // un simple alias ?



var TR_COLOR_BUFFER = Array;
function TRhl(obj, p){
	if(p){
		TR_COLOR_BUFFER[obj.id] = obj.style.backgroundColor;
		obj.style.backgroundColor = p;
	}
	else{
		obj.style.backgroundColor = TR_COLOR_BUFFER[obj.id];
	}

}


/**** FONCTIONS POUR LES TABLEAUX *****/

// Booleen : Vérifie si la valeur [val] est présente dans le tableau [l]
function inList(l, val){
  for (var i=0; i < l.length; i++)
   {if (l[i].toUpperCase()==val.toUpperCase()) {return true; break;}
   }
  return false;
}

//  ?
function isExist(id, li, nval, oval){
	inl = inList(li, nval);

	if ((inl) && (id == 0)) {return true;}
	if ((inl) && (id > 0) && ((nval).toUpperCase() != (oval).toUpperCase())) {return true;}
	return false;
}

// Cherche la valeur val dans le tableau tab et renvoi son index, renvoi FALSE si la valeur n'est pas trouvée
function in_array(val, tab){
	for(var i=0; i<tab.length; i++){
		if(tab[i] == val){
			return i;
		}
	}
return false;
}


// Booleen : Vérifie si la valeur [val] est présente dans les valeurs du tableau d'options [opt]
function inSelect(opt, val){
  for (var i=0; i < opt.length; i++)
   {if (opt[i].value.toUpperCase() == val.toUpperCase()) {return true; break;}
   }
  return false;
}

// Cherche la valeur val dans le tableau tab et renvoi TRUE si elle existe, renvoi FALSE si la valeur n'est pas trouvée
function in_array_bool(val, tab){
	for(var i=0; i<tab.length; i++){
		if(tab[i] == val){
			return true;
		}
	}
return false;
}

// booleen : Vérifit que la clef key existe dans le tableau tab
function is_array_key(key, tab){
	if(tab[key] != undefined) {
		return true;
	}
	else{
		return false;
	}
}
/*********************************/





/**************** URLs ***********/

// Retourne l'url [Qstr] en attribuant [val] à [champ]
function BuildUrl(Qstr, champ, val){
	if(Qstr.indexOf('#') > -1){ Qstr = Qstr.substr(0, Qstr.indexOf('#')); }

	if(typeof(param = GetVal(champ, Qstr)) != 'boolean'){
		return Qstr.replace(champ+'='+param, champ+'='+val);
	}
	else{
		var sep = '?';
		if(Qstr.indexOf(sep)>-1){
			sep = '&';
		}
	return Qstr+=sep+champ+'='+val;
	}
}


/*
Retourne la valeur de [val] passé en GET
False si la variable n'existe pas
*/
function GetVal(val){
	args = GetVal.arguments;
	if(args.length > 1){
		var Turl = args[1];
	}
	else{
		var Turl = self.document.location.href +'';
	}
	var deb = Turl.indexOf('&'+val+'=');
	if(deb == -1){
		var deb = Turl.indexOf('?'+val+'=');
	}


	var fin = 0;
	if(deb > -1)	{
		var sub1 = Turl.substring(deb+1,Turl.length+1)
		fin	 = sub1.indexOf('&');
		if (fin == -1)	fin = sub1.length+1;
		sub2 = sub1.substring(0,fin)
		return sub2.replace(val+'=','');
	}
	else {
		return false;
	}
}

function getLcheck(ifra, name){
	tth = "";
	for (var i = 0; i < ifra.elements.length; i++){
	  if ( (ifra.elements[i].type == 'checkbox') && (ifra.elements[i].name == name) )
	   {if (ifra.elements[i].checked) {tth += ifra.elements[i].value + ":";}}
	}
	
	if ((tth).length > 1) {tth = (tth).substr(0, (tth).length-1);}

	return tth;
}



/*********************************/






function update_url(obj){
	var id = obj.options[obj.selectedIndex].value;
	var url = self.document.location.href + '';
	var sel = GetVal('sel');
	var val = GetVal('val');

	sep = (sel && sel.indexOf(obj.name) == -1)? ':' : '';
	if(sep == ''){sel = '';val='';}
	
	sel += sep + obj.name;
	val += sep + id;

	url = BuildUrl(url, 'sel', sel);
	url = BuildUrl(url, 'val', val);

	self.document.location.href = url;

}


function getExtension(file){
	var t_file = file.split('.');
	return t_file[t_file.length-1];
}

/********************************/
/* LIBRAIRIE DE PAGES DES LISTE */
/********************************/
PAGE_FORM_NAME = 'pageForm';

RUBRIQUE_GESTION_BLOCKS = 299;
RUBRIQUE_GESTION_MEDIAS = 289;


/********* PARAMETRES **********/


/*******************************/



function hlTR(oTR,hover){
	if(! (BROWSER == 'IE')){
		if(hover){
			oTR.className = 'TRover';
		}else{
			oTR.className = 'TRout';
		}
	}
}

function liste_select(obj, id){
	var url = document.location.href + '';
	url = 'coche.asp?rub='+ GetVal('rub') +'&id='+ id +'&cochename='+ obj.name + '&cocheval='+ obj.options[obj.selectedIndex].value 
	url += (GetVal('orderby')) ? '&orderby='+ GetVal('orderby') : '';
	url += (GetVal('sel')) ? '&sel='+ GetVal('sel') : '';
	url += (GetVal('val')) ? '&val='+ GetVal('val') : '';

//	waitLayer(true);

	self.document.location.href = url;


}

// Fonctions de création de l'URL GET des tris
//[MODIF JU]
function jsFormFiltre(obj){ 
	PAGE_FORM_NAME = 'formEdit';
	LISTE_FILTRES = FORM_LISTE_FILTRES;
	jsFiltre(obj);
}


//[MODIF HUGUES}
function traitementLot(champ, params, form){
	idz = getPageLotChecked();
	if(idz == ''){
		alert("Choisissez au moin un élément à modifier");
	}
	else{
		url = 'index.asp?op=edit_lot&rub='+ GetVal('rub') +'&champ='+champ+'&form='+ form +'&id=0&idz='+ idz
		pop(url, params);
	}
}


function MailLot(champ_id){
	idz = getPageLotChecked();
	if(idz == ''){
		alert("Choisissez au moin un élément");
	}
	else{

		tid = idz.split(':');
		str_mailto = '';
		sep = '';

		for(var i=0; i<tid.length; i++){
			lien = MM_findObj('MAIL_'+ tid[i]);
			if(lien != null ){
				str_mailto += sep + lien.href.replace('mailto:', '');
				sep = ',';
			}
		}
		self.document.location.href = 'mailto:'+ str_mailto;
	}
}



function change_filtre(alias, id){
	oSel = MM_findObj(alias);
	if(oSel){
		oSel.selectedIndex = get_option_value_index(oSel, id);
		LISTE_FILTRES = FORM_LISTE_FILTRES;
		jsFiltre(oSel);
	}else{
		var url = self.document.location.href + '';
		url = BuildUrl(url, 'sel', alias);
		url = BuildUrl(url, 'val', id);
		url = BuildUrl(url, 'op', 'liste');
		url = BuildUrl(url, 'page', 1);
		self.document.location.href = url;
	}
}


function filtre_lettres(id){
	oSel = MM_findObj('LETTRE');
	oSel.selectedIndex = get_option_value_index(oSel, id);
	PAGE_FORM_NAME = 'formEdit';
	MM_findObj('research').value = '';
	change_filtre('LETTRE', id);
}




function coche_present(champ){
	idz = getPageLotChecked();
	if(idz == ''){
		alert("Choisissez au moin un élément");
	}
	else{
		var obj = new Object;

		var url = self.document.location.href + '';

		var oop = GetVal('op');

		url = BuildUrl(url , 'op', 'coche');	
		url = BuildUrl(url , 'oop', oop);
		url = BuildUrl(url , 'idz', idz);
		url = BuildUrl(url, 'cochename', champ);
		url = BuildUrl(url, 'cocheval', 1);
		
		self.document.location.href = url;	}
}



function jsFiltre(obj){
	var research = '';

	idoc = MM_findObj(PAGE_FORM_NAME);
	research = '';
	if(idoc != null){
		if(idoc.research != null){
			research = trim(idoc.research.value);
		}
	}
	else{
	idoc = MM_findObj('formEdit');
	}

	if(GetVal('op') == 'ifra_asso_select'){
		var tsel = FORM_LISTE_FILTRES.split(":");
	}
	else{
		var tsel = LISTE_FILTRES.split(":");
	}
	
	turlsel = ""; turlval = "";
	for (i=0; i<=tsel.length-1; i++){
		var ps = idoc[tsel[i]].selectedIndex;
		var tps = idoc[tsel[i]].options[ps].value;
		turlsel += tsel[i] + ":";
		turlval += tps + ":";
	}
	
	turlsel = strim(turlsel, ":");
	turlval = strim(turlval, ":");
	
	turl = document.location.href + '';
	Tturl = turl.split("?");
	turl = '?' + Tturl[1];

	turl = BuildUrl(turl, 'sel', turlsel);
	turl = BuildUrl(turl, 'val', turlval);
	turl = BuildUrl(turl, 'research', escape(research));
	turl = BuildUrl(turl, 'focus', 'liste');
	turl = BuildUrl(turl, 'page', 1);
	
	self.document.location.href = Tturl[0] + turl;
}

//* Change de pages 1/n
function topageget(num){
	idoc = MM_findObj(PAGE_FORM_NAME);
	if (idoc != null){
		if(idoc.research != null){
			var research = trim(idoc.research.value);
			research = escape(research);
		}else{
			research = '';
		}
	}
	
	turl = self.document.location.href+ '';
	qs = turl.split('?');


	turl = BuildUrl('?'+qs[1], 'page', num);
	turl = BuildUrl(turl, 'focus', 'liste');

	if (idoc != null){
		turl = BuildUrl(turl, 'research', escape(research));
	}

//	self.document.location.href = qs[0] + turl;
	setTimeout("self.document.location.href = '"+  qs[0] + turl +"';", 0);
}


// Tris la liste par orderby sens
function pgorderby(orderby, sens){
	var research = '';
	idoc = MM_findObj(PAGE_FORM_NAME);
	
	if(idoc.research != null){
		research = trim(idoc.research.value);
	}

	var url = self.document.location.href+ '';

	url = BuildUrl(url, 'orderby', orderby+ ":" + sens);
	url = BuildUrl(url, 'research', escape(research));
	setTimeout("self.document.location.href = '"+ url+"';", 0);
//	self.document.location.href = url;
}


function listeOp(obj){

	tt = obj.id.split('_');
	var op = tt[0];
	var id = tt[1];
//	alert(op);
	var url = self.document.location.href + '';

	switch(op){
		case 'SUPP' :
			url = BuildUrl(url, 'op', 'supp');
			url = BuildUrl(url, 'id', id);
			pgsupp(url, listeOp.arguments[1]);
			break;

		case 'NEW' :
			if(listeOp.arguments.length == 2){
				url = listeOp.arguments[1];
			}
			//url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'edit');
			url = BuildUrl(url, 'id_'+ table, id);
			pop(url, pop_param, "new");
			break;

		case 'MODIF' :
			if(listeOp.arguments.length >= 2){
				url = listeOp.arguments[1];
			}
			if(listeOp.arguments.length >= 3){
				pop_param = listeOp.arguments[2];
			}
			//url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'edit');
			url = BuildUrl(url, 'id_'+ table, id);
			pop(url, pop_param);
			break;
			
		case 'MODIFASSOMUL' :
				url = 'index.asp?op=edit&rub='+ listeOp.arguments[1] + '&'+ listeOp.arguments[3] + '='+ listeOp.arguments[4];
				pop(url, listeOp.arguments[2]);
			break;

		case 'POP' : 
			//alert('Cette fonctionalité n\'est pas encore disponible');

			url = BuildUrl(url, 'op', 'preview');
			url = BuildUrl(url, 'sel', 'ID');
			url = BuildUrl(url, 'val', id);
			url = BuildUrl(url, 'ba', listeOp.arguments[1]);
			pop(url, prev_param);


			break;

		case 'POPURL' :
			if(listeOp.arguments.length == 2){
				url = listeOp.arguments[1];
			}
			//url = BuildUrl(url, 'rub', rub);
			//url = BuildUrl(url, 'op', 'edit');
			//url = BuildUrl(url, 'id_'+ table, id);
			pop(url, prev_param);
		
		break;
		

		case 'SUPPASSOMEDIA' :

			url = BuildUrl(url, 'op', 'suppasso');
			url = BuildUrl(url, 'id_'+ GetVal('ftable'), id);
		//	url = BuildUrl(url, 'id_'+ GetVal('table'),  GetVal('id'));
			url = BuildUrl(url, 'prev_op', GetVal('op'));
			url = BuildUrl(url, 'prev_rub', GetVal('rub'));
			if(confirm(tx_page_supp)){
				setTimeout("self.document.location.href = '"+url+"'", 0);
			}
			break;

		case 'MODIFASSO' :
			id_table = GetVal('id_'+ GetVal('table'));
			if(!id_table){id_table =  GetVal('id');}

			url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'edit');
			url = BuildUrl(url, GetVal('champ'), id);
			url = BuildUrl(url, 'id',  id_table);
			url = BuildUrl(url, 'id_'+GetVal('table'), id_table);
			url = BuildUrl(url, 'table',  GetVal('ftable'));
			url = BuildUrl(url, 'ftable',  GetVal('table'));

			parent.highlight_small_ong(GetVal('champ'), 'EDIT', ONGLETS_GEST_MEDIA);

			setTimeout("self.document.location.href = '"+ url +"';", 0);
			break;


		case 'SUPPASSOMUL' :
/*
			url = BuildUrl(url, 'op', 'suppassomul');
			url = BuildUrl(url, 'id_'+ GetVal('asso'), id);
			url = BuildUrl(url, 'prev_op', GetVal('op'));
*/
			if(confirm(tx_page_supp)){
				window.parent.submitit('formEdit');

			//	setTimeout("self.document.location.href = '"+url+"'", 0);
			}
			break;


		case 'COPY' :
			url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'edit');
			url = BuildUrl(url, 'id_'+ table, id);
			url = BuildUrl(url, 'copi', id);
			setTimeout("pop('"+ url +"', '"+ pop_param +"');", 0);
			
			break;

		case 'PAGE' :
			url = BuildUrl(url, 'rub', 312);
			url = BuildUrl(url, 'op', 'page');
			url = BuildUrl(url, 'sel', 'ARBO');
			url = BuildUrl(url, 'val', id);
			setTimeout("self.document.location.href = '"+url+"'", 0);
			break;
		
		case 'ASC' :
			url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'ordre');
			url = BuildUrl(url, 'id', id);
			url = BuildUrl(url, 'sens', op);
			setTimeout("self.document.location.href = '"+url+"'", 0);
			break;

		case 'DESC' :
			url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'ordre');
			url = BuildUrl(url, 'id', id);
			url = BuildUrl(url, 'sens', op);
			setTimeout("self.document.location.href = '"+url+"'", 0);
			break;

		case 'COUNT' :
			url = BuildUrl(url, 'rub', rub);
			url = BuildUrl(url, 'op', 'ordre');
			url = BuildUrl(url, 'id', id);
			url = BuildUrl(url, 'sens', op);
			setTimeout("self.document.location.href = '"+url+"'", 0);
			break;

		case 'SUPPLOT' :
				url = BuildUrl(url, 'op', 'supp');

				idz = getPageLotChecked();

				if(window.parent){
					if (confirm(tx_page_supp)){
								supp_lot_hidden(idz);
								window.parent.submitit('formEdit');
					}
				}
				else{
					url = BuildUrl(url, 'ccoche', idz);
					pgsupp(url, 0)
				}
			break;

	}
}


function supp_lot_hidden(idz){
	tidz = idz.split(':');
	narr = Array();
	j = 0;

	hidden_name = window.name.substr(1, window.name.length);

	// Verification de l'existance d'un hidden dans une fenetre parente
	if(input = window.parent.MM_findObj(hidden_name)){
		
		// Récupération des id de la table "associée" à partir des id de la table d'asso
		ftv = Array();
		for(var i=0; i<tidz.length; i++){
			ftv[i] = MM_findObj(hidden_name +':'+ tidz[i]).value;
		}

		T_vals = input.value.split(',');

		for(var k=0; k<T_vals.length; k++){
			if(!inList(ftv, T_vals[k])){
				narr[j] = T_vals[k];
				j++;
			}
		}
		input.value = narr.join(',');
//		alert(hidden_name + ' '+ input);
	}
}





function getPageLotChecked(){

	var idz = '';
	var sep = '';

	if(getPageLotChecked.arguments.length > 0){

		if(getPageLotChecked.arguments[0].contentDocument == null){
			var cbx = getPageLotChecked.arguments[0].document.getElementsByTagName("INPUT");
		}
		else{
			var cbx = getPageLotChecked.arguments[0].contentDocument.getElementsByTagName("INPUT");
		}
	}
	else{
		var cbx = document.getElementsByTagName("INPUT");
	}

	for(var i=0; i<cbx.length; i++){
		if(cbx[i].type == 'checkbox' && cbx[i].name == 'LOT' && cbx[i].checked){
			idz += sep + cbx[i].value;
			sep = ':';
		}
	}
return idz;
}







function selection_liste(obj){
	var url = self.document.location.href + '';
	var id = obj.id;
	id = id.replace('SEL_', '');

	url = BuildUrl(url, 'op', 'asso');
	url = BuildUrl(url, 'id_'+ GetVal('ftable'), id);
	url = BuildUrl(url, 'id', id);

	if(GetVal("rub") == RUBRIQUE_GESTION_MEDIAS){
		parent.highlight_small_ong(GetVal('champ'), 'IFRA', ONGLETS_GEST_MEDIA);
	}
		setTimeout("self.document.location.href = '"+url+"'", 0);
}

function ModifBlock(obj, zone, id_block_t_arbo, type){
	var url = self.document.location.href + '';
		url = BuildUrl(url, 'rub', RUBRIQUE_GESTION_BLOCKS);
		url = BuildUrl(url, 'op', 'edit');
		url = BuildUrl(url, 'sel', '');
		url = BuildUrl(url, 'val', '');
		url = BuildUrl(url, 'id_block_t_arbo', id_block_t_arbo);
		url = BuildUrl(url, 'id_t_arbo', GetVal('val'));
		url = BuildUrl(url, 'id_block', obj.id);
		url = BuildUrl(url, 'zone', zone);
		url = BuildUrl(url, 'type', type);
		url = BuildUrl(url, 'ong', 0);
		pop(url, pop_param);
}

function SelectBlock(obj, zone){
	var url = self.document.location.href + '';
		url = BuildUrl(url, 'rub', RUBRIQUE_GESTION_BLOCKS);
		url = BuildUrl(url, 'op', 'selection');
		url = BuildUrl(url, 'sel', '');
		url = BuildUrl(url, 'val', '');
		url = BuildUrl(url, 'id_t_arbo', GetVal('val'));
	//	url = BuildUrl(url, 'id_block', obj.id);
		url = BuildUrl(url, 'id', obj.id);
		url = BuildUrl(url, 'zone', zone);
		url = BuildUrl(url, 'ftable', 'block');
		url = BuildUrl(url, 'table', 't_arbo');
		pop(url,  "width=670, height=560,scrollbars=yes");
}

function supp_block(obj){

	if(confirm('Supprimer ce block de la page ?')){
		var url = self.document.location.href + '';
		url = BuildUrl(url, 'prev_rub', GetVal('rub'));
		url = BuildUrl(url, 'prev_op', GetVal('op'));
		url = BuildUrl(url, 'op', 'suppasso');
		url = BuildUrl(url, 'rub', RUBRIQUE_GESTION_BLOCKS);
		url = BuildUrl(url, 'id_block', obj.id);
		url = BuildUrl(url, 'id_t_arbo', GetVal("val"));
		url = BuildUrl(url, 'table', 'block');
		url = BuildUrl(url, 'ftable', 't_arbo');

		setTimeout("self.document.location.href = '"+url+"'", 0);
	}
}


var ID_CURRENT_BLOCK = 0;
var ID_CURRENT_BLOCK_T_ARBO = 0;
var HL_TimeOut;

function ini_deplace_block(obj, id_block_t_arbo){
	ID_CURRENT_BLOCK = obj.id;
	ID_CURRENT_BLOCK_T_ARBO = id_block_t_arbo;
	

	HL_TimeOut = window.setTimeout('Highlight_Zones()', 500);

}

function Highlight_Zones(){
	var zones = document.getElementsByTagName("label");
	for(var i=0; i<zones.length; i++){
		if(zones[i].className == 'zone' && Highlight_Zones.arguments.length == 0){
			zones[i].className = 'hlzone';
		}else{
			if(zones[i].className == 'hlzone'){
				zones[i].className = 'zone';
			}
		}
	}
	if( Highlight_Zones.arguments.length == 0){HL_TimeOut = window.setTimeout('Highlight_Zones()', 500);}
}

function deplace_block(obj, zone){
	if(ID_CURRENT_BLOCK > 0){
		zo = obj;
		zo.className = 'deplace';
		Highlight_Zones(false);
		window.clearTimeout(HL_TimeOut);
//		setTimeout("zo.className = 'zone'", 500);

		var url = self.document.location.href + '';
		url = BuildUrl(url, 'op', 'deplace_block');
		url = BuildUrl(url, 'id_block_t_arbo', ID_CURRENT_BLOCK_T_ARBO);
		url = BuildUrl(url, 'zone', zone);

		setTimeout("self.document.location.href = '"+url+"'", 0);

		ID_CURRENT_BLOCK = 0;
		ID_CURRENT_BLOCK_T_ARBO = 0;
	}


}



function ordre_block(id_block_t_arbo, sens){
	var url = document.location.href + '';
	url = BuildUrl(url, 'op', 'ordre_block');
	url = BuildUrl(url, 'id_block_t_arbo', id_block_t_arbo);
	url = BuildUrl(url, 's', sens);
	setTimeout("self.document.location.href = '"+url+"'", 0);
}


/*
// Ouvre une pop up et met le focus dessus après 250 milisecondes
function pop(url, param){
	if (url){
		var jour = new Date();		
		var name = 'pop_'+jour.getHours()+''+jour.getMinutes()+''+jour.getSeconds();
		var raz = false;
		if(pop.arguments.length == 3)
			name = window.name;
			
		eval(name+" = window.open('"+url+"','"+name+"','"+param+"');");
  		eval("setTimeout('"+name+".focus();',250);");
	}
}
*/

// Envoi vers la page de suppression [url] si cpt = 0
function pgsupp(url, cpt){
	//alert(url);
	if (cpt == 0)	{
		if (confirm(tx_page_supp)){
			setTimeout("self.document.location.href = '"+url+"'", 0);
		}
	}
	else{
		alert(lang['CANT_DELETE'] + cpt + lang['ELEM_ASSOCIES']);
	}
}

// Envoi vers la page de traitement des <select> de liste
function liste_select(obj, champ, id, table){
	var url = self.document.location.href + '';
	url = BuildUrl(url, 'op', 'cocheSel');
	url = BuildUrl(url, 'id', id);
	url = BuildUrl(url, 'selname', champ);

	if(table != ''){
		url = BuildUrl(url, 'id_'+table, table);
		url = BuildUrl(url, 'table', table);
		url = BuildUrl(url, 'ap', 1);

	}

	if(liste_select.arguments.length > 4){
		url = BuildUrl(url, 'sval', liste_select.arguments[4]);
		url = BuildUrl(url, 'schamp', liste_select.arguments[5]);
		url = BuildUrl(url, 'ar_alias', liste_select.arguments[6]);
		
	}

	url = BuildUrl(url, 'selval', obj.options[obj.selectedIndex].value);
	
	self.document.location.href = url;

}


// Envoi vers la page de traitement des cases a cocher
function coche(obj, champ, id){
	var url = self.document.location.href + '';

	var oop = GetVal('op');

	url = BuildUrl(url , 'op', 'coche');	
	url = BuildUrl(url , 'oop', oop);
	url = BuildUrl(url , 'id', id);
	url = BuildUrl(url, 'cochename', champ);
	url = BuildUrl(url, 'cocheval', obj.value);
	
	self.document.location.href = url;
}



//
function buildcoche(valcoche){
	idoc = MM_findObj(PAGE_FORM_NAME);
	tcoche = getLcheck(idoc, 'LOT');

	if (tcoche.length == 0){
		tcoche = (valcoche).toString();
	}
	else{
		var tlcoche = tcoche.split(":");
		if (valcoche != '')	{
			if (!inList(tlcoche, (valcoche).toString())){
				tcoche += ":"+ valcoche;
			}
		}
	}
return tcoche;
}


//
function supp_lot(val){
    	tcoche = buildcoche(val);

    	var ttlcoche = tcoche.split(":");
		
		if (ttlcoche.length <= 1) {tph = tx_js_supp;}
		else {tph = tx_js_supp_lot.replace("_#_", ttlcoche.length);}
		
		if (confirm(tph)) {

		var	url = document.location.href+'';
			url = url.replace('index.asp', 'supp.asp');
			url = BuildUrl(url, 'ccoche', tcoche);

		self.document.location.href = url;
		}
}


// un peu trop en dur ca !
function mGroup(rub){
	tcoche = buildcoche('');
	if (tcoche != ''){
			alert('En développement !');

		url = "../_groupe_edit/edit.asp?rub=" + rub + "&ccoche=" + tcoche;
	//	pop(url, 'width=600,height=300');
	}
	else{
		alert(lang['SELECTIONNE']);
	}
}

function LotCheckAll(op){
	var elements = document.getElementsByTagName('input');
	for(i=0; i<elements.length; i++){
		if(elements[i].type == 'checkbox' && elements[i].name == 'LOT'){
			elements[i].checked = op;
		}
	}
}

function checkall(ifra, val){
	for(var i = 0; i < ifra.elements.length; i++){
		if ((ifra.elements[i].type == 'checkbox') && (ifra.elements[i].name == 'ccase')){
			ifra.elements[i].checked = val;
		}
	}
}


function submitrech(){
	if(submitrech.arguments.length > 0){
		PAGE_FORM_NAME = submitrech.arguments[0];
	}
	var url = document.location + '';
	var idoc = MM_findObj(PAGE_FORM_NAME);
//	alert(PAGE_FORM_NAME);

	var research = trim(idoc.research.value);
	research = escape(research);
	
//	turl = JSR;
//	if (research != '') {
		url = BuildUrl(url, 'research', research);
//	}
	self.document.location.href = url;
	setTimeout("self.document.location.href = '"+  url +"';", 0);
}

// Chemin de l'arbo
function check_onedir(ifra, thch)
{
	for(var i = 0; i < ifra.elements.length; i++)
	{
		if ((ifra.elements[i].type == 'checkbox') && (ifra.elements[i].name == 'ccase'))
		{
			if (ifra.elements[i] != thch)
			{
				ifra.elements[i].checked = false;
			}
		}
	}
}


function k_export(exp_type){
	var page = GetVal('page');
	var url = self.document.location.href + '';
	url = BuildUrl(url, 'op', 'export');
	url = BuildUrl(url, 'exp_type', exp_type);
	
	if(page != -1){
		if(confirm("Voulez-vous étendre l'export à tous les résultats satisfaisant vos critères ?")){
			url = BuildUrl(url, 'page', -1);
		}
	}

//	alert(url);
	window.open(url, '');

}

// Fonction un peu en dur...
function ini_block_options(){
	if(GetVal('id_block') != false){
		Update_block_options(MM_findObj('id_block_type'), 'id_modele');
		
	}
}

// Restreint les options affichées aux templates qui commencent par les 4 premieres lettres du type de block.
function Update_block_options(obj, select_name){
	var prefix = obj.options[obj.selectedIndex].innerHTML.substr(0, 4).toUpperCase() + '_';
	var select = MM_findObj(select_name);

	if(select.options[select.selectedIndex].innerHTML.indexOf(prefix) !=0){
		select.selectedIndex = 0;
	}
	for(var i=0; i<select.options.length; i++){
		if(select.options[i].innerHTML.indexOf(prefix) != 0){
			select.options[i].style.display = 'none';
		}else{
			select.options[i].style.display = 'block';
		}
	}
}


function ini_media_onglets(){
	op = GetVal('op').toUpperCase();
	champ = GetVal('champ');
	if(op == 'IFRA'){
		check_media_liste_not_empty(op, champ);
	}

	idz = GetVal('value');
	idz = (idz)? idz : '';


	window.parent.highlight_small_ong(champ, op, ONGLETS_GEST_MEDIA, GetVal('max_media'));
	window.parent.MM_findObj(champ).value = idz;
//	alert(window.parent.MM_findObj(champ).value);

}

function check_media_liste_not_empty(op, champ){
	oTable = MM_findObj('admin_liste');
	
	childs = oTable.childNodes;
	for(i=0; i<childs.length; i++){
	//	alert(childs[i].innerHTML);
	}

}



function suppAssoMulId(champ, id){
	var fid;

	if(id){
		Tid = id.split('_');
		fid = Tid[1];

	}
	else{
		Tid = suppAssoMulId.arguments[2].split('_');
		fid = MM_findObj(champ +':'+ Tid[1]).value;
	}


	tvals = window.parent.MM_findObj(champ).value.split(',');
	nvals = Array();

	for(var i=0; i<tvals.length; i++){
		if(tvals[i] != fid){
			nvals[nvals.length] = tvals[i];
		}
	}

	window.parent.MM_findObj(champ).value = nvals.join(',');


}


/*** Calendrier combobox */

var CALjour, CALmois, CALannee;



// La possibilité de ne pas specifier de jour complique le code...
function gen_input_date(champ){

	var ini = Array(1, 1, 1);
	var use_jour = true; // Par defaut on presume qu'un jour est utilisé

	if(gen_input_date.arguments.length > 1){ // Si un second argument est passé (valeur prérenseignée)
		ini = gen_input_date.arguments[1].split('/');

		ini_jour = ini[0]; // Si le jour vaux 0 c'est qu'on ne le specifie pas,
		if(ini[0] == 0){ 
			ini_jour = 1; // on initialise qd meme la date au premier du mois.
			use_jour = false;
		}

		var today = new Date(ini[2], ini[1]-1, ini_jour); // Instanciation d'un objet date avec pour valeur la date passée en scond param
	}
	else{// Instanciation d'un objet date avec pour valeur la date actuelle
		var today = new Date(); 
	}

	
	// Mes selects
	oJour = MM_findObj(champ + '_j');
	oMois = MM_findObj(champ + '_m');
	oAnnee = MM_findObj(champ + '_a');

	// Si on a deja des options et 1 seul argument la fonction a été appellée sur onchange
	if(oJour.options.length > 0 && gen_input_date.arguments.length == 1){
		if(oJour.options[oJour.selectedIndex].value == 0 || ini[1] == 0){
			use_jour = false;
		}
		today.setFullYear(oAnnee.options[oAnnee.selectedIndex].value);
		today.setMonth(oMois.options[oMois.selectedIndex].value);
		if(use_jour){today.setDate(oJour.options[oJour.selectedIndex].value);}
	}

	// Si on a deja des options et 1 seul argument la fonction a été appellée sur onchange
	if(oJour.options.length > 0 && gen_input_date.arguments.length == 1){
	}

	// Fixe les valeurs séléctionnées
	if(use_jour){ CALjour = today.getDate();}
	CALmois = today.getMonth();
	CALannee = today.getFullYear();


	// Retire les options déjà présentes
	videOptions(oJour.name); 
	videOptions(oMois.name);
	videOptions(oAnnee.name);

	// Ajoute les nouvelles options
	gen_select_box(champ + '_j', gen_valeurs(0, dernier_jour_du_mois(CALmois, CALannee), 'jour'), CALjour);
	gen_select_box(champ + '_m', gen_valeurs(0, 11, 'mois'), CALmois);

	// Pour les années on propose l'année en cours + les 10 suivantes
	var oDate = new Date();
	an_deb = oDate.getFullYear() - 2000;

	gen_select_box(champ + '_a', gen_valeurs(an_deb, an_deb+10, 'annee'), CALannee);

	if(!use_jour){
		oJour.selectedIndex = 0;
	}
}


// Génére le tableau de valeurs pour les select
function gen_valeurs(min, max, typeval){
	var vals = Array();

	for(var i=min; i<=max; i++){

		switch(typeval){
			case 'jour' :
			//	var oDate = new Date(CALannee, CALmois, i);
				vals[i] = (i == 0)? '--' : i;
			break;

			case 'mois' :
				vals[i] = TAB_mois[i];
			break;

			case 'annee' :
				vals[2000 + i] = 2000 + i;
			break;
		}
	}
return vals;
}


// Affecte les options de champA à champB
function meme_date(champA, champB){

	oJour = MM_findObj(champA + '_j');
	oMois = MM_findObj(champA + '_m');
	oAnnee = MM_findObj(champA + '_a');

	mdate = oJour.options[oJour.selectedIndex].value + '/'+ (parseInt(oMois.options[oMois.selectedIndex].value)+1) + '/'+ oAnnee.options[oAnnee.selectedIndex].value;

	videOptions(champB+'_j');
	videOptions(champB+'_m');
	videOptions(champB+'_a');

	gen_input_date(champB, mdate);
}



function gen_select_box(nom, valeurs, selected){
	addOptionsArray(nom, valeurs, selected);
}


function dernier_jour_du_mois(val_mois, val_annee){
	var mois = val_mois + 0;
	var annee = val_annee + 0;

	for(var i=1; i<=31; i++){
		oDate = new Date(annee, mois, i);
		
		cDate = oDate.getDate() +'/'+ oDate.getMonth() +'/'+ oDate.getFullYear();
		cString = i +'/'+ mois +'/'+ annee;

		if(cDate != cString){
			return i-1;
			break;
		}
	}
	return i-1;
}

function addOptionsArray(destination, tableau, selected){
//	alert(destination +"\n" + tableau);
	oDestination = MM_findObj(destination);
	var j = 0;
	for(key in tableau){
		if(tableau[key] != ''){
			// C'est pas du DOM mais c'est la seule technique qui fonctionne sous ie 5.2 MAC !
			oDestination.options[j] = new Option(tableau[key], key, (key == selected));
			if(key == selected){ sel = j;} // Pour IE il faut affecter le selectedIndex à la fin de la boucle...
			j++;
		}
	}
	oDestination.selectedIndex = sel;
}

function videOptions(source){
	oSource = MM_findObj(source);
	for(var i=0; i<oSource.options.length; i++){
		oSource.options[i] = null; // C'est pas du DOM mais c'est la seule technique qui fonctionne sous ie 5.2 MAC !
	}
//	while(oSource.options.length > 0){ videOptions(source); } // il ne vide pas tout du premier coup ...
}




function second_date(obj, champA, champB){
	if(obj.checked){
		MM_findObj(champB + '_j').disabled = false;
		MM_findObj(champB + '_m').disabled = false;
		MM_findObj(champB + '_a').disabled = false;
		meme_date(champA, champB);
		MM_findObj('div_'+ champB).style.display = 'block';
	}
	else{
		MM_findObj(champB + '_j').disabled = true;
		MM_findObj(champB + '_m').disabled = true;
		MM_findObj(champB + '_a').disabled = true;
		MM_findObj('div_'+ champB).style.display = 'none';
	}
}


/******* LIBRAIRIE DE CONTROLES DES SAISIES ***********
	
	SOMMAIRE :

	- PARAMETRES
	- MOTEUR DES CONTRÔLES DE SAISIE
	- CONTRÔLES DE SAISIE
	- CONTRÔLES SUR LES VALEURS
	- FONCTIONS DHTML DIVERSES POUR LES FORMS
	- "POUBELLE"

/**************************************/

/*********** PARAMETRES *********************************************************/

	var T_erreur = Array();
	var listeMsgErreur = Array(lang['msgchamp'], lang['msgerreurDATE'], lang['msgerreurSELECT'], lang['msgerreurMAIL']);
	var T_objects = Array();


	// Liste des extensions acceptées
	var K_UPLOAD_EXTENSIONS = Array();
	
	// Images
	K_UPLOAD_EXTENSIONS[1] = Array('gif', 'jpg', 'jpe', 'jpeg', 'png', 'tiff', 'bmp');

	// Documents
	K_UPLOAD_EXTENSIONS[2] = Array("ppt", "doc", "pdf", "xls", "txt", "rtf", "zip", "rar", "ace", "gz", "tar", "htm", "html", "swf", "sql", "psd", "wnv", "mpg", "mpe","mpeg", "mp4", "avi", "rm", "ram", "mov", "qt", "asf", "vob", "ogm", "m1v", "mpa", "ivf", "wma", "wav", "mp3", "rm", "ogg", "mid", "mp2", "ra", "aif");
/*******************************************************************************/




/************************** MOTEUR DES CONTRÔLES DE SAISIE *********************/


	/**
	 Objet champ Kcontain, permet de faire suivre les PROPRIÉTÉES PROPRIÉTAIRES Kcontain avec les prop standards.
	 La propriété ref est une référence à l'objet DOM du champ
	*/
	function kChamp(nom){
		
		if(is_array_key(nom, T_objects)){

			this.ref			= T_objects[nom].ref;			
			this.name			= T_objects[nom].name;			
			this.type			= T_objects[nom].type;			
			this.value			= T_objects[nom].value;			
			this.options		= T_objects[nom].options;		
			this.selectedIndex	= T_objects[nom].selectedIndex;	
			this.checked		= T_objects[nom].checked;		
			this.selected		= T_objects[nom].selected;		
			this.length			= T_objects[nom].length;			
			this.className		= T_objects[nom].className;		
			this.Ktype			= T_objects[nom].Ktype;			
			this.Ks_type		= T_objects[nom].Ks_type;		
			this.inputs			= T_objects[nom].inputs;			
			this.req			= T_objects[nom].req;			
			this.label			= T_objects[nom].label;			
			this.error			= T_objects[nom].error;			
			this.init_value		= T_objects[nom].init_value;
			this.old_style		= T_objects[nom].init_value; 
			this.old_req		= T_objects[nom].old_req; 
			this.erreur_message = T_objects[nom].erreur_message; 

		}
		else{
			// recherche de l'index du champ dans les tableaux générés coté serveur.
			for(var index=0; index<k_champs_liste.length; index++){
				if(k_champs_liste[index] == nom){ break; }
			}
			//alert(nom);
			
			// Affectation de propriétés propriétaires et standard
			this.ref			= MM_findObj(nom);									
			this.name			= nom;
			this.type			= this.ref.type;
			this.value			= this.ref.value;
			this.options		= this.ref.options;
			this.selectedIndex	= this.ref.selectedIndex;
			this.checked		= this.ref.checked;
			this.selected		= this.ref.selected;
			this.length			= this.ref.length;
			this.className		= this.ref.className;
			this.Ktype			= k_champs_type[index];
			this.Ks_type		= k_champs_s_type[index];
			this.inputs			= k_asso_mul_inputs[index];
			this.req			= k_champs_req[index];
			this.label			= k_champs_nom[index];
			this.error			= false;
			this.init_value	= '';
			this.old_style	= '';
			this.old_req	= false; 
			this.erreur_message = ''; 

			T_objects[nom] = this;

			var test = 1;

		}

	}


	/**
	 Se charge de changer l'apparence des champs selon la validité renseignée par `err` (true|false)
	*/
	function displayErreur(obj, err){
		
		// Passage au statut "erreur"
		if(err){ 

			// Modification de la class CSS
			if(obj.className){
				obj.ref.className = obj.ref.className.replace('erreur', '');
				obj.ref.className += 'erreur';
			}

			switch(obj.Ktype){
				case "ASSO_SIM" :
					switch(obj.Ks_type){
						case "SELECT" : 
							obj.init_value = obj.ref.options[0].value;
							obj.ref.options[0].value = lang['msg_err_'+ obj.Ktype];

						break;

						case "RADIO" :
						break;
					}

				break;

				case "ASSO_MUL" :
				break;

				case "UPLOAD" :
				break;

				default :
					//alert(obj.Ktype);
					obj.init_value = (obj.ref.value == lang['msg_err_'+ obj.Ktype])? obj.init_value : obj.ref.value;				
					obj.ref.value = lang['msg_err_'+ obj.Ktype];
				break;
			}
		}

		// Sortie du statut "erreur"
		else{ 

			// Modification de la class CSS
			if(obj.className){
				obj.ref.className = obj.ref.className.replace('erreur', '');
			}

			switch(obj.Ktype){
				case "ASSO_SIM":
					switch(obj.Ks_type){
						case "SELECT" : 
							obj.ref.options[0].value = obj.init_value;
						break;

						case "RADIO" :
						break;
					}
				break;

				case "ASSO_MUL" :
				break;

				case "UPLOAD" :
				break;

				default :
					if(obj.ref.value == lang['msg_err_'+ obj.Ktype]){ obj.ref.value = obj.init_value; }
				break;
			}
		}
	T_objects[obj.name] = obj;
	return !err;
	}


	/**
	 Effectue sur chaque champ le contrôle de saisie qui lui est propre
	 retourne TRUE si le formulaire peut être posté, FALSE dans le cas contraire
	 L'appel aux controles de saisie déclanche les modifications dapparence des champs
	*/
	function valid(){
		var err = false;
		var exclus = Array();
		var x=0;
		for(var i=0; i<k_champs_liste.length; i++){
			if (is_array_key(k_champs_liste[i], k_asso_mul_inputs))
			{
				for(var j=0; j<k_champs_liste.length; j++){
					if (in_array_bool(k_champs_liste[j], k_asso_mul_inputs[k_champs_liste[i]]))
					{
						exclus[x] = k_champs_liste[j];						
						x++;
					}
				}
			}
		}

		for(var i=0; i<k_champs_liste.length; i++){
			if (!in_array_bool(k_champs_liste[i], exclus))
			{
				T_erreur[i] = !eval('verif'+ k_champs_type[i] +'(new kChamp(k_champs_liste[i]))');
				if(T_erreur[i]){
					err = true;
				}
			}
		}
		return !err;
	}


	/**
	 Post le formulaire `formname`, 
	 si l'argument optionnel `ong` est passé en parametre, modifit l'action du form pour que la validation redirrige sur un autre onglet.
	 Ce qui permet soit de changer d'onglet apres une validation normale, soit de valider le form en cours quand on change d'onglet.
	*/

	var FORM_IS_SUBMITABLE = false;
	var CURRENT_SUBMITED_FORM;
	var FORM_STOPED = false;
	function submitit(formname){
	//	alert(formname+' - '+FORM_STOPED+' - '+FORM_IS_SUBMITABLE);
		window.CURRENT_SUBMITED_FORM = formname;

		if(FORM_IS_SUBMITABLE){

			FORM_IS_SUBMITABLE = false;
			MM_findObj('mySubmit').className = 'bouton bouton_disabled';

			if(submitit.arguments.length > 1){
				ong = submitit.arguments[1];
				//alert(MM_findObj(formname).action);
				MM_findObj(formname).action += '&next='+ ong;
			}
			
			if(valid(formname)){
				//alert(MM_findObj(formname).action);
				if(!FORM_STOPED){
					waitLayer(true);
					MM_findObj(formname).submit();// meme chose
				}

			}
			else{
				alert_form();
				FORM_IS_SUBMITABLE = true;
				MM_findObj('mySubmit').className = 'bouton bouton_vert';
				if(window.parent != null){
					window.parent.FORM_IS_SUBMITABLE = true;
					MM_findObj('mySubmit', window.parent.document).className = 'bouton bouton_vert';
				}
			}
		}
	}

	/**
	 Affiche une alert explicative sur les erreurs (liste des champs)
	*/
	function alert_form(){
		var chaine = '';
		for(var i=0; i<k_champs_liste.length; i++){
			if(T_erreur[i]){
				chaine += "\n - " + k_champs_nom[i];
				if(T_objects[k_champs_liste[i]].erreur_message != ''){
					chaine +="\n\t"+ T_objects[k_champs_liste[i]].erreur_message;
				}
			}
		}
		alert(lang['champs_incorects'] +' :'+ chaine);
	}


	/**
	 EVENT exécutée `onfocus` : Rétabli la valeur saisie si obj.value contient un message d'arreur
	 N'est utilisé que sur certains types de champs (TXT & dérivés, TXTAREA...)
	*/
	function resetchamp(obj){
		if(obj.ref.value == lang['msg_err_'+ obj.Ktype]){
			obj.ref.value = obj.init_value;
			obj.ref.className = obj.ref.className.replace('erreur', '');
		}
	}

/*******************************************************************************/




/************************** CONTRÔLES DE SAISIE ********************************/

	function verif(obj){
		//alert('verif : ' + obj.name);
	}

	function verifHIDDEN(obj){
		return true;
	}

	function verifORDRE(obj){
		return true;
	}


	function verifTXT(obj){
		if(verifTXT.arguments.length > 1){
			if(inList(k_uniques[obj.name], obj.ref.value)){
				alert('Cette valeur existe déjà dans la base !');
				return displayErreur(obj, true);
			}
		}
		//alert(obj.ref.value);
		if( obj.req && (trim(obj.ref.value) == '' || trim(obj.ref.value) == lang['msg_err_'+ obj.Ktype])){
			return displayErreur(obj, true);
		}
		else{
			return displayErreur(obj, false);
		}
	}

	
	function verifCOLOR_PIKER(obj){
		return verifTXT(obj);
	}



	function verifPWD(obj){
		var err = false;
		var champ_confirm = MM_findObj(obj.name +'_confirm');

		err = (obj.req && obj.ref.value == '');

	//	alert(champ_confirm.value +' != '+obj.ref.value);

		if(!err && champ_confirm != null ){
			err = (champ_confirm.value != obj.ref.value);
		}

		return !err;
	}


	function verifTXTAREA(obj){
		return verifTXT(obj);
	}


	function verifINT(obj){
		var val = trim(obj.value);
		if( obj.req && (val != '' && val != lang['msg_err_'+ obj.Ktype])){
			return displayErreur(obj, isInteger(val));
		}
		else{
			return displayErreur(obj, false);
		}
	}


	function verifASSO_MUL(obj){
		//alert(obj.name);
		switch(obj.Ks_type){
			case 'HIDDEN':
				break;

			case 'IFRAME':
				break;

			case 'COCHE':
				//getASSO_MUL_vals(obj.name, k_asso_mul_inputs[obj.name]);
				error = true;
				if(!obj.req){
					error = false;
				}else{
					for(var i=0; i<obj.ref.length; i++){
						if(obj.ref[i].checked){
							error = false;
						}
					}
				}
				return displayErreur(obj, error);
				break;
		}
/*
		if(trim(MM_findObj(obj.name).value) == '' && obj.req){
			return displayErreur(obj, true);
		}
		else{
			return displayErreur(obj, false);
		}
*/
	return true;
	}

	function verifDOCSIMPLE(obj){
		if(trim(MM_findObj(obj.name).value) == '' && obj.req){
			return displayErreur(obj, true);
		}
		else{
			return displayErreur(obj, false);
		}
	}

	function verifASSO_SIM(obj){
		//alert(obj.name);
		if (document.getElementById(obj.name + "_input")){
			//alert("ok");
			var input_obj = new kChamp(obj.name + "_input");
			input_obj.req = obj.req;
			input_obj.Ktype = "TXT";
			return verifTXT(input_obj);
		}
		else{
			switch(obj.Ks_type){
				case "SELECT" :
					return verifSELECT(obj);
				break;

				case "RADIO" :
					return verifRADIO(obj);
				break;
				
				default: 
					return verifSELECT(obj);
				break;
			}
		}
	}

	function verifASSO_SIM_R(obj){
		return verifSELECT(obj);
	}

	function verifASSO_SELECT(obj){
		return displayErreur(obj, false);
	}


	function verifhidden(obj){
		return false;
	}




	// Commune à ASSO_SIM->SELECT et à ASSO_SIM_R
	function verifSELECT(obj){
		//alert(obj.name+' '+ obj.type);
		if(!obj.ref){obj = new KChamp(obj);}
		if(obj.ref.options[obj.ref.selectedIndex].value == 0 && obj.req){
			return displayErreur(obj, true);
		}
		else{
			return displayErreur(obj, false);
		}
		//alert('ok');
	}


	function verifRADIO(obj){
		error = true;
		for(var i=0; i<obj.ref.length; i++){
			if(obj.ref[i].checked){
				error = false;
			}
		}
	return displayErreur(obj, error);
	}

	// CONTROLE DES CHAMPS "MAIL"
	function verifMAIL(obj){
		if(obj.ref.value == '' && !obj.req){
			return displayErreur(obj, false);
		}
		else{
			if(!isValidEmail(obj.ref.value)){
				return displayErreur(obj, true);
			}
			else {
				return displayErreur(obj, false);
			}
		}
	}


	// CONTROLE DES CHAMPS "EURO"
	function verifEURO(obj){
		var error = false;
		for(var i=0; i < obj.ref.value.length; i++)  {
			if(!ismonetaire(obj.ref.value.charAt(i))) {
				return displayErreur(obj, true);
			}
		}
		if (obj.ref.value == '' && obj.req)
			return displayErreur(obj, true);	
		else
			return displayErreur(obj, false);
	}

	// CONTROLE DES CHAMPS "FLOAT"
	function verifFLOAT(obj){
		var error = false;
		for(var i=0; i < obj.ref.value.length; i++)  {
			if(!ismonetaire(obj.ref.value.charAt(i))) {
				return displayErreur(obj, true);
			}
		}
		if (obj.ref.value == '' && obj.req)
			return displayErreur(obj, true);	
		else
			return displayErreur(obj, false);
	}




	// CONTROLE DES CHAMPS "DATE" & "DATETIME"
	function verifDATE(obj){
		if(obj.ref.value == '' && obj.req){			
			return displayErreur(obj, true);
		}
		else{			
			if(isDateValid(obj.ref.value)){				
				return displayErreur(obj, false);
			}
			else{				
				if( obj.req){					
					return displayErreur(obj, true);
				}
				else return displayErreur(obj, false);

			}
		}
	}

	function verifDATETIME(obj){
		return displayErreur(obj, false);
	}


	// CONTROLE DES CHAMPS "DATETIME"
	function verifHEURE(obj, required){


		var val = obj.ref.value;
		var error = false;
		var dstr = val.split('');
		if( (!isNumber(dstr[0])) || (!isNumber(dstr[1])) || (dstr[2] != ':') || (!isNumber(dstr[3])) || (!isNumber(dstr[4]))  ){
			error = true;
		}
		else{
			var heure = dstr[0]+''+dstr[1];
			if(heure > 23){
				error = true;
			}
			var minute = dstr[3]+''+dstr[4];
			if(minute > 59){
				error = true;
			}
		}

		if(error){
			obj.value = msgerreurHEURE;
			obj.className += 'erreur';
			return false;
		}
		else{
			obj.className = obj.className.replace('erreur', '');
			return true;
		}
	}

	// CONTROLE DES CHAMPS "MULTI_CHAMP"
	function verifMULTI_CHAMP(obj){
		if (obj.ref.value == '' && obj.req)
			return displayErreur(obj, true);	
		else
			return displayErreur(obj, false);
	}

	// EVENT exécutée `onkeyup` sur l'un des deux champs constituant un "DATETIME" Concatene les valeurs date et heure
	function datetime_upd(name){
		MM_findObj(name).value = MM_findObj(name+'_date').value +' '+MM_findObj(name+'_heure').value;
	}

	var verifMEDIA_TIMER;
	function verifMEDIA(obj){
		var submit_normal = true;

		ifra = eval('i'+obj.name);
		
		// Vérification de l'etat de l'iframe
		file = ifra.document.forms[0].med_path;

		
		
		// Si on est sur le formulaire d'ajout
		if(file != null){
			// Si il y a un fichier en attente
			if(file.value != ''){
				submit_normal = false;
				hidden_value = obj.ref.value+'';

				if(confirm(lang['confirm_effectuer_upload'])){
					ifra.submitit('formEdit');

					FORM_STOPED = true;

					if(ifra.FORM_IS_SUBMITABLE == false){
						verifMEDIA_TIMER = setInterval('CB_verifMEDIA("'+hidden_value+'","'+obj.name+'")', 500);
					}

					return true;
				}
				else{
					clearInterval(verifMEDIA_TIMER);
				}
			}
			else{
				FORM_STOPED = false;
			}
		}
		// Vérification standard sur le hidden
		if(submit_normal){
			return verifTXT(obj);
		}
	}

		function CB_verifMEDIA(val_ini, name){
			champ = new kChamp(name);
			if(val_ini != champ.ref.value){
				//alert('ok');
				FORM_STOPED = false;
				FORM_IS_SUBMITABLE = true;
				submitit(CURRENT_SUBMITED_FORM);
				clearInterval(verifMEDIA_TIMER);
			}
		}

	function verifDOC_SIMPLE_UNIQUE(obj){
		return verifTXT(obj);
	}

	function verifUPLOAD(obj){
		// Vérification du type de fichier basée sur l'extension
		if(obj.ref.value != ''){
			var ext = getExtension(obj.ref.value);
			var type_attendu = GetVal('type_media');
			if(!inList(K_UPLOAD_EXTENSIONS[type_attendu], ext)){
				obj.erreur_message = lang['extension_de_fichier_non_acceptee'] + K_UPLOAD_EXTENSIONS[type_attendu].join(', ');
				return displayErreur(obj, true);
			}
		}

		if( obj.req && trim(obj.ref.value) == ''){
			return displayErreur(obj, true);
		}
		else{
			return displayErreur(obj, false);
		}
	}

	function verifLINK(obj){
		vlink = isValidLink(obj.ref.value);
		if(vlink === false){
			return displayErreur(obj, true);
		}
		else{
			if(vlink !== true){
				obj.value = vlink;
				obj.ref.value = vlink;
			}
			return displayErreur(obj, false);
		}
	}

	function verifCODE_POSTAL(obj){
		return verifTXT(obj);
	}


	function verifCOCHE(obj){
		return true;
	}


/*******************************************************************************/


	function get_option_value_index(oSel, val){
		for(var i=0; i<oSel.options.length; i++){
			if(oSel.options[i].value == val){
				return i;
			}
		}
		return false;
	}


/******************** CONTRÔLES SUR LES VALEURS ********************************/

	/**
		Vérifit que `chaineDate`est une date valide.
		Retourne un booleen
	*/
	function isDateValid(chaineDate) {

	   if (chaineDate == "") return false;
	   if (chaineDate.length != 10) return false;
	   // date formatée en JJ/MM/AAAA
	   var ladate = (chaineDate).split("/"); 
		// Si je n'ai pas récupéré trois éléments ou bien s'il ne s'agit pas d'entiers, pas la peine d'aller plus loin
	   if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) return false;
		// Sinon, on créer la date correspondante. Attention, les mois sont étalonnés de 0 à 11
	   var unedate = new Date(eval('"'+ladate[2]+'"'), eval('"'+ladate[1]+'"')-1, eval('"'+ladate[0]+'"'));
		// Bug de l'an 2000 oblige, lorsque je récupère l'année, je n'ai pas toujours 4 chiffres selon les navigateurs, je rectifie donc ici le tir.
	   var annee = unedate.getYear()
	   if ((Math.abs(annee)+"").length < 4) annee = annee + 1900
		// Il ne reste plus qu'à vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
	   return ((unedate.getDate() == eval(ladate[0])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[2])))
	}




	/**
		Vérifit que `val` exprime un montant monétaire
		Retourne un booleen
	*/
	function ismonetaire(val){
		var string = "1234567890,.";
		if(string.indexOf(val) != -1){return true;}
		return false;
	}


	function isDigitDate(num) {
		var string="1234567890/";
		if (string.indexOf(num) != -1) {return true;}
		return false;
	}

	function isInteger(val){
		for (var i=0; i < val.length; i++) 
		  {if (!isNumber(val.charAt(i))) {return false;}}
		return true;
	}

	function isNumber(num){
		var string="1234567890";
		if (string.indexOf(num) != -1) {return true;}
		return false;
	}



	/**
		Vérifit que `emailStr` est une adresse mail valide : 
		La fonction originale documentée est dispo sur http://javascript.internet.com/forms/check-email.html
		This is an e-mail address validation function.
		It allows the usual user@domain syntax, but in addition allows user@[ip] format as well as "User with Spaces"@domain or [ip],
		all of which are legal syntax, according to W3C.
		It also checks that the user hasn't done anything silly like having multiple @'s or continuous .'s in the address (e.g. jim@b@c.com and jim@c..b.co.uk).

		Retourne un booleen
	*/
	function isValidEmail(emailStr){

		var emailPat=/^(.+)@(.+)$/
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
		var validChars="\[^\\s" + specialChars + "\]"
		var quotedUser="(\"[^\"]*\")"
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom=validChars + '+'
		var word="(" + atom + "|" + quotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		var matchArray=emailStr.match(emailPat)
		if (matchArray==null){return false;}
		var user=matchArray[1];
		var domain=matchArray[2];
		if (user.match(userPat)==null) {return false;}
		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null){for(var i=1;i<=4;i++){if(IPArray[i]>255){return false;}}return true;}
		var domainArray=domain.match(domainPat)
		if (domainArray==null){return false;}
		var atomPat=new RegExp(atom,"g");
		var domArr=domain.match(atomPat);
		var len=domArr.length;
		if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {return false;}
		if (len<2) {return false;}
	return true;
	}


	/**
		Vérifit qu'une adresse internet est valide :
		Retourne true si l'adresse est valide
		Si l'adresse n'est pas valide la function tente de concatener le protocole par defaut, 
		si le résultat est une adresse valide cette nouvelle adresse est retournée,
		sinon la fonction retourne false.
	*/
	function isValidLink(linkStr){
		var default_protocole = 'http';

		var pattern = /^(http|ftp|irc|udp)(:\/\/)([a-zA-Z0-9\.])*([\.])+[a-zA-Z0-9]+[a-zA-Z0-9]+$/
		matchArray = linkStr.match(pattern);
		if (matchArray==null){

			val = default_protocole + '://' + linkStr;
			matchArray = val.match(pattern);
			if (matchArray==null){
				return false;
			}
			else{

				return val;
			}
		}
		else{

			return true;
		}


	}



/*******************************************************************************/






/******************** FONCTIONS DHTML DIVERSES POUR LES FORMS **********/

	/**
	Affiche une image representant le fichier selectionné dans un input de type file.
	*/
	function previewUPLOAD(obj, type){
		img = MM_findObj('PREV_'+ obj.name);

		switch(type){
			case 1 :
				previewUPLOAD_IMG(obj, img);
				break;

			case 2 :
				previewUPLOAD_DOC(obj, img);
				break;
		}

	}

	function previewUPLOAD_IMG(obj, img){
		if(obj.value == ''){
			img.src = '../_pics/noimage.gif';
		}
		else{
			img.src = '../_pics/uploadimage.gif';
		}
	}

	function previewUPLOAD_DOC(obj, img){

		if(img != null){
			if(obj.value == ''){
				img.src = '../_pics/nodoc.gif';
			}
			else{
				typedoc = obj.value.split('.');
				img.src = '../_pics/doc_'+ typedoc +'.gif';
			}
		}
	}


	/**
	 Créer un lien mailto: a partir de la valeur du champ `nch`
	*/
	function icomailto(obj, nch){
		var txmail = MM_findObj(nch).value;
		if(isValidEmail(txmail)){
			obj.href = 'mailto:'+txmail;
		}else{
			alert(lang['msg_err_MAIL']);
		}
	}


	function icoLINK(obj, nch){
		var txLINK = MM_findObj(nch).value;
		vlink = isValidLink(txLINK) 
		if(vlink === false){
			alert(lang['msg_err_LINK']);
		}
		else{
			if(vlink !== true){
				MM_findObj(nch).value = vlink;
				txLINK = vlink;
			}
			pop(txLINK, '');
		}
	}

	
	/**
		Post un document dans les champs de type  UPLOAD_DOC_SIMPLE_xxxx
	*/
	function upload_simple(formname,champ){
		if( MM_findObj(champ).value != ''){
			MM_findObj('info_'+ champ).innerHTML = lang['loading_file']	;
			MM_findObj(formname).submit();
		}
		else{
			alert(lang['chosse_file']);
		}
	}


	function refreshListeCBX(champ){
		elems = MM_findObj('formulaire').elements;
		var error = true;

		for(var i=0; i<elems.length; i++){

			if(elems[i].type == 'checkbox' && elems[i].name.indexOf(champ) > -1 ){

				var id			= CBX_id(elems[i], champ);
				var tbody		= MM_findObj('tb_'+ id);
				var id_parent	= CBX_parent(tbody);

				if(id_parent != 0){
					if(MM_findObj(champ +'['+ id_parent +']').checked){
						switchTBODY('tb_'+ id, true);
						
					}
					else{
						elems[i].checked = false;
						switchTBODY('tb_'+ id, false);
					}
				}

				if(elems[i].checked){error = false;}
			}
		}

		if(error){
			MM_findObj('div_'+ champ).className = 'ifraLikeerreur';
			return false;
		}
		else{
			MM_findObj('div_'+ champ).className = 'ifraLike';
			return true;
		}

	}


	function CBX_id(obj, champ){
		var id = obj.name + '';
		id = id.replace(champ, '');
		id = id.replace('[', '');
		id = id.replace(']', '');

	return id;
	}

	function CBX_parent(tbody){
		id_parent = tbody.align;
		if(id_parent == ''){
			id_parent = tbody.parent;
		}
	return id_parent;
	}



	function switchTBODY(id, statut){
		var show = (statut)? '' : 'none';
		MM_findObj(id).style.display = show;
	}




	function asso_mul_inputs(obj){
		if(obj.checked){
			MM_findObj("tr_"+ obj.value).className = 'AssoMulRow1';
			MM_findObj("inputs_"+ obj.value).style.display = 'block';

		}else{
			MM_findObj("tr_"+ obj.value).className = 'AssoMulRow0';
			MM_findObj("inputs_"+ obj.value).style.display = 'none';
		}

	}

	function getASSO_MUL_vals(champ_name, inputs){
		var sep = '';
		var idz = '';
		var oth = Array;

		Tinput = inputs.split(':');
		Tinput = inputs.split(':');
		for(var j=0; j<Tinput.length; j++){
			oth[Tinput[j]] = '';
		}
		var ifra = eval('i'+ champ_name);
		var oForm = ifra.document.forms[0];

		for(var i=0; i<oForm.elements.length; i++){
			if(oForm.elements[i].type == 'checkbox' && oForm.elements[i].name == 'c_'+ champ_name){
				if(oForm.elements[i].checked){
					idz += sep + oForm.elements[i].value

					for(var j=0; j < Tinput.length; j++){
						nom = Tinput[j] +'['+ oForm.elements[i].value +']';
						elem = ifra.MM_findObj(nom);
						if(elem != null){
							switch(elem.type){
								case 'select-one' :
									oth[Tinput[j]] += sep + elem.options[elem.selectedIndex].value;
									break;
								default:
									oth[Tinput[j]] += sep + elem.value;
									break;
							}	
						}
					}
				sep = ':';
				}
			}
		}

		MM_findObj(champ_name).value = idz;
		for(i=0; i<Tinput.length; i++){
			MM_findObj(champ_name +':'+ Tinput[i]).value = oth[Tinput[i]];
		}


	}

	function ASSO_MUL_ASSOaddElement(champ){
		var sel = MM_findObj('sel_'+ champ);
		var id = sel.options[sel.selectedIndex].value;
		var ie = true;
		if(id == 0){ alert(lang['msgerreurSELECT']); }

		else{
			ifra = MM_findObj('i'+ champ)
			var url = ifra.src;
			if(!url){ie = false; url = ifra.document.location.href + ''; }

			url = BuildUrl(url, 's_op', 'add');
			url = BuildUrl(url, 'add', id);

			if(ie){
				ifra.src = url;
			}else{
				ifra.document.location.href = url;
			}

			sel.options[sel.selectedIndex] = null;

		}
	}


	function cocheASSO_MUL(obj){

		var input_stock = window.top.MM_findObj(obj.name);
		var oForm = obj.form;
		var nval = '';
		var sep = '';

		for(var i=0; i<oForm.elements.length; i++){
			if(oForm.elements[i].type == 'checkbox' && oForm.elements[i].name == obj.name && oForm.elements[i].checked){
				nval += sep + oForm.elements[i].value
					sep = ':'
			}
		}
		input_stock.value = nval;
	}


	function ini_ASSO_MUL(champ){
//		var input_stock = window.top.MM_findObj(champ);
		var oForm = document.forms[0];
//		var vals = input_stock.value.split(':');
		for(var i=0; i<oForm.elements.length; i++){
			if(oForm.elements[i].type == 'checkbox' && oForm.elements[i].name == champ && in_array(oForm.elements[i].value, vals) !== false ){
				oForm.elements[i].checked = true;
			}
		}
	}



	/**
		Active le bouton de validation du formaulaire une fois la page chargée
	*/
	function FormLoaded(libelle){
	//	alert('test');
		FORM_IS_SUBMITABLE = true;
		//alert(typeof(k_champs_onload));
		if (MM_findObj('mySubmit') != null) //[MODIF JU]
		{
			MM_findObj('mySubmit').innerTXT = ' - ' + libelle + ' - ';
			MM_findObj('mySubmit').className = 'bouton bouton_vert';
		}

		if((apos = in_array('CALENDRIER', k_champs_s_type)) !== false ){
			
			initCalendrier(5, 5, 0, MM_findObj(k_champs_liste[apos]).value);
		}
		if(k_champs_condition.length > 0){
			refreshCondition();
/*
			for(var i=0; i<k_champs_condition.length; i+=2){
				form_condition(new kChamp(k_champs_condition[i][0]), k_champs_condition[i][1], k_champs_condition[i][2], k_champs_condition[i][3]);
			}
*/
		}
		if (typeof(k_champs_onload) != 'undefined'){
			if(k_champs_onload.length > 0){
				for(var i=0; i<k_champs_onload.length; i++){
					if (k_champs_onload[i] != '')					
						eval(k_champs_onload[i]);				
				}
			}
		}
		waitLayer(false);
}


	/* Encapsulation de la lib tooltip (tooltip.js) */
	function AideContext(obj, op){
		if(op){
			tooltip.show(obj);
		}
		else{
			tooltip.hide(obj);
		}
	}


	/****************************************************************************/
	/* Fonctions de gestion des champs de type 'MULTI_CHAMP' */
	/****************************************************************************/

	// Séparateurs
	var MC_SEP_LIGNE = "||";
	var MC_SEP_CHAMP = "_&|";
	var MC_SEP_IDVAL = "|:_";

	/* Affiche la valeur sélectionnée (dans un select) dans l'input associé */
	function SelectToInput(obj){
		var form = document.forms[0];
		var cible = form.elements[obj.id + "_input"];		
		var i_selected = 0;
		for (var i=0; i < obj.options.length; i++)
		{
			if (obj.options[i].selected)			
				i_selected = i;			
		}
		if (obj.options[i_selected].value != "0")
			cible.value = obj.options[i_selected].innerHTML;
	}

	/* Fonctions de gestion de la liste dynamique */
	/**********************************************/
	var MCHAMP_SELECTED = ""; //id de la ligne sélectionnée (utile pour la modif & la suppr)
	var MCHAMP_DISABLE_SUPPR = true; //spécifie si le bouton supprimer est actif
	
	function MchampSubmit(key, bouton){
		if(MchampValid(key)){
			if (MCHAMP_SELECTED == "" && !MchampExist(key, k_asso_mul_inputs[key]))
				MchampAjout(key, k_asso_mul_inputs[key]);	
			else if (MCHAMP_SELECTED != ""){	
				if (bouton.id == 'ajout_modif')
					MchampModif(key, k_asso_mul_inputs[key]);
				else
					MchampSuppr(key, k_asso_mul_inputs[key]);
			}
		}
		MchampRefreshTab(key);
		MchampRazLigne(key + "_table", "");
	}

	function MchampInit(key){
		for(var i=0; i<k_asso_mul_inputs[key].length; i++){
			MchampReset(document.getElementById(k_asso_mul_inputs[key][i]), "");
		}
		MchampRazLigne(key + "_table", "");
	}

	/* Vérifie si les champs sont valides */
	function MchampValid(key){
		var err = false;
		for(var i=0; i<k_asso_mul_inputs[key].length; i++){
			//alert(k_asso_mul_inputs[key][i]);
			T_erreur[i] = !eval('verif'+ k_asso_mul_type[key][i] +'(new kChamp(k_asso_mul_inputs[key][i]))');
			if(T_erreur[i]){
				err = true;
			}
		}
		return !err;
	}

	//Vérifie si la nouvelle entrée existe déjà
	function MchampExist(hid, liste_champs){
		var input_list = new Array();
		var exist = false;
		for (var i=0 ; i < liste_champs.length ; i++)
		{
			if (k_asso_mul_type[hid][i] != "EURO")
			{
				var tag = document.getElementById(liste_champs[i]).tagName
				var recup_input;
				var id_input;
				switch (tag)
				{
					case "SELECT":
						id_input = liste_champs[i] + "_input";																	
						break;
					case "INPUT":
						id_input = liste_champs[i];
						break;
					default:
						alert("tag non géré: " + tag);
						break;
				}			
				recup_input = document.getElementById(id_input);
				if(recup_input)
					input_list[i] = recup_input.value;
			}			
		}
		
		var input_hidden = document.getElementById(hid);
		var lignes = (new String(input_hidden.value)).split(MC_SEP_LIGNE);

		for (var i=0; i<lignes.length; i++)
		{
			var ligne = new String(lignes[i]);
			ligne = ligne.substr(ligne.indexOf("]")+1);
			var cells = ligne.split(MC_SEP_CHAMP);
			for (var j=0; j < input_list.length; j++)
			{
				if (cells[j]){
				var cell = cells[j].substr(cells[j].indexOf(MC_SEP_IDVAL)+1); 
				if (cell == input_list[j] && (exist || j == 0))
					exist = true;
				else
					exist = false;
				}
			}
			if (exist){
				alert("Cette entrée existe déjà.");
				return exist;
			}
		}
		return exist;
	}

	//Ajoute une ligne dans le tableau
	function MchampAjout(hid, liste_champs){
		var input_hidden = document.getElementById(hid);
		var hid_value_tmp = "";
		var hid_l_separ = "";
		var input_list = new Array();
		var id_ligne = 'a' + Math.round((10000*(Math.random()/Math.random())));
		if (input_hidden.value != "")
			hid_l_separ = MC_SEP_LIGNE;
		
		for (var i=0 ; i < liste_champs.length ; i++)
		{
			if (document.getElementById(liste_champs[i]))
			{
				input_list[liste_champs[i] + "_[id]"] = MchampGetValue(liste_champs[i], "id");
				input_list[liste_champs[i] + "_[value]"] = MchampGetValue(liste_champs[i], "value");

				//Insertion des couples id:valeur des champs dans le hidden
				if (i > 0)
					hid_value_tmp += MC_SEP_CHAMP;		
				hid_value_tmp += input_list[liste_champs[i] + "_[id]"] + MC_SEP_IDVAL + input_list[liste_champs[i] + "_[value]"];

				MchampReset(document.getElementById(liste_champs[i]), "id_fr_critere");
			}
		}
		input_hidden.value = input_hidden.value + hid_l_separ + "[" + id_ligne + "]" + hid_value_tmp;
	}

	//Modifie une ligne du tableau
	function MchampModif(hid, liste_champs){
		var input_list = new Array();
		for (var i=0 ; i < liste_champs.length ; i++)
		{
			input_list[liste_champs[i] + "_[id]"] = MchampGetValue(liste_champs[i], "id");
			input_list[liste_champs[i] + "_[value]"] = MchampGetValue(liste_champs[i], "value");	
			MchampReset(document.getElementById(liste_champs[i]), "id_fr_critere");
		}
		var input_hidden = document.getElementById(hid);
		var lignes = (new String(input_hidden.value)).split(MC_SEP_LIGNE);
		var nb_lignes = lignes.length;
		input_hidden.value = "";


		//Parcours du hidden et mise à jour
		for (var i=0; i<lignes.length; i++){
			var ligne = new String(lignes[i]);
			var id_ligne = 'TR_'+ ligne.slice(ligne.indexOf("[")+1, ligne.indexOf("]"));
			ligne =  ligne.substr(ligne.indexOf("]")+1);

			if (i > 0)
				input_hidden.value += MC_SEP_LIGNE;	
			
			if (id_ligne == MCHAMP_SELECTED){
				input_hidden.value += "[" + id_ligne.replace('TR_', '') + "]";
				for (var j=0; j<liste_champs.length; j++){
					if (j > 0)
						input_hidden.value += MC_SEP_CHAMP;					
					input_hidden.value += input_list[liste_champs[j] + "_[id]"] + MC_SEP_IDVAL + input_list[liste_champs[j] + "_[value]"];
				}					
			}
			else input_hidden.value += lignes[i];
		}


	}	
	
	//Supprime une ligne du tableau
	function MchampSuppr(hid, liste_champs){
		var input_hidden = document.getElementById(hid);
		var lignes = (new String(input_hidden.value)).split(MC_SEP_LIGNE);
		var nb_lignes = lignes.length;
		var suppr_i = -1;
		input_hidden.value = "";

		for (var i=0 ; i < liste_champs.length ; i++)
			MchampReset(document.getElementById(liste_champs[i]), "id_fr_critere");

		//Parcours du hidden et mise à jour
		for (var i=0; i<lignes.length; i++){
			var ligne = new String(lignes[i]);
			var id_ligne = 'TR_' + ligne.slice(ligne.indexOf("[")+1, ligne.indexOf("]"));
			ligne = ligne.substr(ligne.indexOf("]")+1);
			
			if (id_ligne != MCHAMP_SELECTED){
				if (i > 0 && (suppr_i != i-1 || suppr_i != 0))
					input_hidden.value += MC_SEP_LIGNE;	
				input_hidden.value += lignes[i];
			}else
				suppr_i = i;
		}
		//alert(input_hidden.value);
	}

	//Renvoie les données des input
	function MchampGetValue(champ, type){
		var tag = document.getElementById(champ).tagName
		curr_input = document.getElementById(champ);
	//	alert(champ + ' '+ curr_input +' '+type);

		switch (tag)
		{
			case "SELECT":
				var id_input = champ + "_input";

				input_text_lie = document.getElementById(id_input);


				var select_id = 0;						
				if (input_text_lie != null){
					var select_txt = document.getElementById(id_input).value;
					for (var j=0; j < curr_input.options.length ; j++){
						if (curr_input.options[j].innerHTML == select_txt)
							//select_id = j;
							select_id = curr_input.options[j].value;
					}
				}
				else{
					select_id = curr_input.options[curr_input.selectedIndex].value;
				}

				if (type == "id"){
					return select_id;
				}
				else{
					if (input_text_lie != null){
						return select_txt;
					}else{
						return curr_input.options[curr_input.selectedIndex].innerHTML;
					}
				}
			break;

			case "INPUT":
				if (type == "id")
					return 0;
				else
					return document.getElementById(champ).value;
				break;
			default:
				alert("tag non géré: " + tag);
				break;
		}
	}

	//Rafraichit le tableau dynamique par rapport au contenu du hidden
	function MchampRefreshTab(hid){
		if (!hid)
			var hid = "id_t_arbo_profil";
		
		//source
		var input_hidden = document.getElementById(hid);
		var lignes = (new String(input_hidden.value)).split(MC_SEP_LIGNE);

		//alert(input_hidden.value);
		//sortie
		var view_table = document.getElementById(hid + "_table");
		
		var nb_lignes = lignes.length;
		if ((view_table.getElementsByTagName("TR")).length > 1){	
			if ((view_table.getElementsByTagName("TR")).length > nb_lignes)
				nb_lignes = (view_table.getElementsByTagName("TR")).length;			
			for (var i=1; i<nb_lignes; i++){
				view_table.deleteRow(1);
			}
		}
		
		if (lignes[0] != "")
		{
			//Création des lignes dans le tableau
			for (var i=0; i<lignes.length; i++)
			{
				var ligne = new String(lignes[i]);
				var id_ligne = "TR_"+ ligne.slice(ligne.indexOf("[")+1, ligne.indexOf("]"));
				ligne = ligne.substr(ligne.indexOf("]")+1);
				var new_tr = view_table.insertRow(i+1);
				var cells = ligne.split(MC_SEP_CHAMP);
				new_tr.setAttribute("id",  id_ligne);
				for (var j=0; j<cells.length; j++)
				{	
					var infos = cells[j].split(MC_SEP_IDVAL);
					var td = document.createElement("td");
					td.setAttribute("style", "");
					td.className = "pointeur";
					td.id_ligne = id_ligne;
					td.id = infos[0];
					td.onclick = function() {
						MchampSelectLigne(this.id_ligne, hid, k_asso_mul_inputs[hid]);
					}
					//cells[j] = cells[j].substr(cells[j].indexOf(":")+1); 
					if (k_asso_mul_type[hid][j] == "EURO" && infos[1] != ""){
						td.style.color = "#D64F41";
						td.style.textAlign = "right";
						infos[1] += " €";
					}
					var td_txt = document.createTextNode(infos[1]);
					td.appendChild(td_txt);
					new_tr.appendChild(td);
				}
			}
		}
	}

	//Vide tous les champs et réinitialise le select
	function MchampReset(champ, except){
		var tag = champ.tagName
		if (champ.id != except)
		{
			switch (tag)
			{
				case "SELECT":
					var id_input = champ.id + "_input";
					var select_input = document.getElementById(id_input);
					if (select_input){
						select_input.value = "";
					}
					champ.selectedIndex = 0;
					break;
				case "INPUT":
					champ.value = "";
					break;
				default:
					champ.value = "";
			}
		}
	}

	//Switche entre les boutons "Ajouter" et "Modifier"
	function MchampSwitchBouton(mode){
		var bouton_am = document.getElementById("ajout_modif");
		var bouton_s = document.getElementById("suppr");

		if (mode == "modif"){		
			bouton_am.innerHTML = "Modifier";
			bouton_s.className = "bouton bouton_rouge";
		//alert(bouton_s.className);
			MCHAMP_DISABLE_SUPPR = false;
		}else{
			//alert("ajout");
			bouton_am.innerHTML = "Ajouter";										
			bouton_s.className = "bouton bouton_disabled";
			MCHAMP_DISABLE_SUPPR = true;
		}
	}

	//Traitements lorsque une ligne du tableau dynamique est sélectionnée
	function MchampSelectLigne(id_ligne, key, liste_champs){
		var ligne = document.getElementById(id_ligne);
		MchampRazLigne(key + "_table",id_ligne);
	//	alert(id_ligne);
		if (MchampHighlightLigne(ligne, false)){
			MchampPutData(ligne, liste_champs, key);
			MchampSwitchBouton("modif");
			MCHAMP_SELECTED = id_ligne;
		}
		else{ 
			MchampSwitchBouton("ajout");
			MchampInit(key);
			MCHAMP_SELECTED = "";
		}
	}

	//Enlève les highlight des lignes
	function MchampRazLigne(id_table, id_ligne){
		table = document.getElementById(id_table);
		var ligne_list = table.getElementsByTagName("TR");
		for (var i=1; i<ligne_list.length; i++){	
			if (ligne_list[i].id != id_ligne){

				MchampHighlightLigne(ligne_list[i], true);
			}
		}	
		if (id_ligne == "")
			MchampSwitchBouton("ajout");
		MCHAMP_SELECTED = "";
	}

	//Surligne la ligne sélectionnée
	function MchampHighlightLigne(ligne, init){
		var cells = ligne.getElementsByTagName("TD");

		if (!cells[0].style.backgroundColor && !init)
		{
			for (var i=0; i<cells.length; i++)
				cells[i].style.backgroundColor = "#FAF9B9";
			return true;
		}
		else{
			for (var i=0; i<cells.length; i++)
				cells[i].style.backgroundColor = "";	
			return false;
		}
	}

	//Renseigne les champs avec les valeurs de la ligne sélectionnée
	function MchampPutData(ligne, liste_champs, key){
		var cells = ligne.getElementsByTagName("TD");

		for (var i=0; i<liste_champs.length; i++)
		{
			var tag = document.getElementById(liste_champs[i]).tagName
			switch (tag)
			{
				case "SELECT":
					var id_input = liste_champs[i] + "_input";
					var select_input = document.getElementById(id_input);
					if(select_input != null){
						select_input.value = cells[i].innerHTML;
					}else{
						//alert(document.getElementById(liste_champs[i]));
						curr_input = document.getElementById(liste_champs[i]);
						s_index = 0;
						for(var m=0; m<curr_input.options.length; m++){
							if(curr_input.options[m].value == cells[i].id){
								s_index = m;
								break;
							}
						}
						curr_input.selectedIndex = s_index;
					}
					break;
				case "INPUT":
					var input = document.getElementById(liste_champs[i]);
					if (k_asso_mul_type[key][i] == "EURO"){
						var val = new String(cells[i].innerHTML);
						input.value = val.substring(0,val.length - 2);
					}
					else
						input.value = cells[i].innerHTML;
					break;
				default:
					alert("tag non géré: " + tag);
					break;
			}			
		}
	}



	/*
		Copie un noeud et ses enfant, comme le fait cloneNode à la différence qu'ici la methode createElement est utilisée
		Ca ralentit enormement le traitement mais c'est necessaire pour IE qui ne permet d'inserrer des noeuds dans une iframe, que si ils viennent de cette même iframe.
		l'arborescence du noeud est donc copiée element par enfants par enfant, attribut par attribut...
	*/

	function duplicate_DOM(obj){
		myDoc = (duplicate_DOM.arguments.length > 1) ? duplicate_DOM.arguments[1] : self.document ;

		var elem = myDoc.createElement(obj.nodeName);
		elem.innerText = this_node_text(obj);
		
		// Attributs
		for(var i=0; i<obj.attributes.length; i++){
			// Certains attributs / propriétés dont on a pas besoin ici provoquent des erreurs
			try{
				if(obj.getAttribute( obj.attributes[i].nodeName ) != null && obj.getAttribute( obj.attributes[i].nodeName ) != ''){
						elem.setAttribute(obj.attributes[i].nodeName, obj.getAttribute( obj.attributes[i].nodeName ) );
				}
			}
			catch(err){
				//alert('Erreur : '+ err.description +' '+ obj.attributes[i].nodeName);
			}
		}
			
		
		/* Cas particuliers : class et style
			- l'attribut class correspond à la propriété className
			- l'attribut style correspond à la propriété style qui est en fait un objet
		*/
		if(obj.className != ''){ elem.className = obj.className; }
		if(typeof(obj.style) == 'object'){
			
			for(prop in obj.style ){
				if(eval('obj.style.'+ prop) != ''){
					eval('elem.style.'+ prop +' = obj.style.'+prop);
				}
			}
		}

		// Noeuds enfants		
		if(obj.hasChildNodes()){
			for(var i=0; i<obj.childNodes.length; i++){
				if(obj.childNodes[i].nodeName != '#text'){
					elem.appendChild( duplicate_DOM( obj.childNodes[i], myDoc ) );
				}
			}
		}

	return elem;
	}


	// Ne retient de la propritété innerText que le text appartenant directement au noeud courant, la propriété innerText reprenant également le contenu des element enfants.
	function this_node_text(obj){
		wo = obj.cloneNode(true);
		var curr_text = wo.innerText + '';

		for(var i=0; i<wo.childNodes.length; i++){
			if(wo.childNodes[i].innerText != ''){
				curr_text = curr_text.replace(wo.childNodes[i].innerText, '');
			}
		}
		return curr_text;
	}



	/**********************************************************************************/

/*******************************************************************************/

	/**********************************************************************************/
	/* Fonctions de gestion des champs de type 'ASSO_SIM''RADIO' ou 'ASSO_MUL''COCHE' avec 'CHILD' activé  */
	/**********************************************************************************/

	function AssoXChild(id_liste, id_cur, input_type){	
		//alert("id_liste: " + id_liste + "; id_cur: " + id_cur);
		var liste = document.getElementById(id_liste); //ul parent
		var cur = document.getElementById(id_cur); //li contenant l'input

		var childs_liste = liste.getElementsByTagName("INPUT");
		var childs_liste_txt = liste.getElementsByTagName("SPAN");
		var childs_cur = cur.getElementsByTagName("INPUT");
		var childs_cur_txt = cur.getElementsByTagName("SPAN");
		var input_niveau = childs_cur[0].alt; //récupère le niveau d'imbrication de l'input courant dans l'arborescence
		var input_name = childs_cur[0].name;

		if (input_type == "COCHE" && childs_cur[0].checked == "")
			childs_cur_txt[0].style.color = "";
		else
			childs_cur_txt[0].style.color = "#D72E2E";

		//alert(input_name);
		if (input_type == "COCHE")
		{
			if (childs_cur[0].checked == "") //on decoche tous les fils
			{
				for (var i=0; i < childs_cur.length ; i++)
				{
					//alert(childs_cur[i].checked);
					if (childs_cur[i].checked && childs_cur[i].name != input_name)
					{
						childs_cur[i].checked = "";
						childs_cur_txt[i].style.color = "";
					}
				}
			}
			else if (childs_cur.length > 1) //on coche le 1er fils par défaut (fils obligatoire)
			{
				fils_checked = false;
				for (var i=1; i < childs_cur.length ; i++) //on vérifie s'il y a des fils déjà cochés (childs_cur[0] représente le 1er input)
				{					
					if (childs_cur[i].checked)
						fils_checked = true;
				}
				//alert("taille: " + childs_cur.length + "; input_name: " + input_name);
				if (!fils_checked && childs_cur[1].name != input_name)
				{
					childs_cur[1].checked = "checked";
					childs_cur_txt[1].style.color = "#D72E2E";				
				}
			}
		}

		//alert("childs_liste: " + childs_liste.length + "; childs_cur: " + childs_cur.length);
		if (childs_liste && input_type == "RADIO") //parcours de tous les li parents pour décocher les input fils (sauf celui sélectionné)
		{
			for (var i=0; i < childs_liste.length ; i++)
			{
				var id_compar = childs_liste[i].value + "_" + childs_cur[0].name;
				//alert("id_cur: " + id_cur + "; id_compar: " + id_compar);
				if (id_cur != id_compar && childs_liste[i].alt == input_niveau)
				{
					//alert(childs_liste[i].value);
					childs_liste[i].checked = "";
					childs_liste_txt[i].style.color = "";
				}else if (childs_liste[i].alt > input_niveau)
				{
					isChild = false;
					//alert(child_test.id);
					for (var j=0; j < childs_cur.length; j++)
					{
						//alert(childs_cur[j].value);
						if (childs_cur[j].value == childs_liste[i].value)
							isChild = true;						
					}
					if (!isChild)
					{
						//alert("not child:" + childs_liste[i].alt);
						childs_liste[i].checked = "";
						childs_liste_txt[i].style.color = "";
					}
					else if (childs_liste[i].name == childs_cur[0].name)
					{
						childs_liste_txt[i].style.color = "";
					}
				}
			}
		}
	}

	function AssoXChildChild(id_ul, id_li_parent, id_li_cur, input_type){
		li_parent = document.getElementById(id_li_parent);
		li_cur = document.getElementById(id_li_cur);
		input_parent = li_parent.getElementsByTagName("INPUT");
		input_cur = li_cur.getElementsByTagName("INPUT");
		txt_parent = li_parent.getElementsByTagName("SPAN");
		txt_cur = li_cur.getElementsByTagName("SPAN");

		var fils_checked = false;
		for (var i=1; i < input_parent.length; i++) //vérifie si il y a des input fils cochés
		{
			if (input_parent[i].checked)
				fils_checked = true;
		}

		if (fils_checked)
		{
			if (input_parent[0].name != input_cur[0].name)
				input_parent[0].checked = "checked"; //coche le radio parent

			txt_parent[0].style.color = "#D72E2E";		
			txt_cur[0].style.color = "#D72E2E";
		}
		else if(input_parent[0].name != input_cur[0].name){
			input_parent[0].checked = "";
			txt_parent[0].style.color = "";		
			txt_cur[0].style.color = "";
		}
		//alert(input_parent[0].innerHTML);

		input_parent[0].onclick(); 
		AssoXChild(id_ul, id_li_cur, input_type);
	}

	//Colore les radio/checkbox sélectionnés lors de l'édition
	function AssoXChildInit(id_ul_racine){		
		racine = document.getElementById(id_ul_racine);
		input_liste = racine.getElementsByTagName("INPUT");
		for (var i=0; i < input_liste.length; i++)
		{
			if (input_liste[i].checked != "")
				input_liste[i].onclick();				
		}
	}

	/********************************************************************************************/
	/* Fonctions de gestion des champs de case a cocher recursif sans child activé */
	/********************************************************************************************/

	/*
	Affiche ou masque et décoche les case à cocher filles de la case à cocher `obj`
	*/
	function ASSO_MUL_CHILDS(obj){
		// Recherche d'une liste fille
		if(fils = MM_findObj(obj.name + '_'+ obj.value)){

			// Si la case est cochée on affiche la liste fille
			if(obj.checked){
				fils.style.display = 'block';
			}
			else{
				// Si la case n'est pas cochée on cache la liste fille
				fils.style.display = 'none';
				//  et on décoche toutes les checkbox qu'elle contient
				cbx = fils.getElementsByTagName('input');
				for(var i=0; i<cbx.length; i++){
					cbx[i].checked = false;
					// Appel récursif pour décocher les cases 'filles des filles'
					ASSO_MUL_CHILDS(cbx[i]);
				}
			}
		}
	}

	/*
	Affiche les listes filles si le parent est coché
	@oName string : attribut id d'un élément <ul> contenant des checkbox
	La focntion parcours toutes les checkbox de la liste ce qui n'est pas optimal,
	il suffirait de ne parcourir que les listes de premier niveau
	*/
	function init_ASSO_MUL_CHILDS(oName){
		var obj = MM_findObj(oName);
		var cbx = obj.getElementsByTagName('input');
		for(var i=0; i<cbx.length; i++){
			ASSO_MUL_CHILDS(cbx[i]);
		}
	}

/*******************************************************************************/




/*************** "POUBELLE" ****************************************************/

	function isSelected(l){
		var i = l.selectedIndex;
		var il = l.options[i].value;
		
		return il;
	}


	// Affecte une variable et soumet le formulaire (idoc est declaré globalement dans le doc deja...)
	function setrubpost(val){
		idoc = document.forms[0];
		idoc.newrub.value = val;
		submitit(idoc.name);
	}

/*******************************************************************************/




function get_CHECKED(obj){
	var elems = document.getElementsByTagName('input');
	var rs = Array();
	var index = 0;

	for(var i=0; i<elems.length; i++){
		if(elems[i].type == 'checkbox' && elems[i].name == obj.name){
			if(elems[i].checked){
				rs[index] = elems[i].value;
				index++;
			}
		}
	}
	return rs;
}


function refreshCondition(){
	//	alert(k_champs_condition);
	for(var i=0; i<k_champs_condition.length; i++){
		form_condition(new kChamp(k_champs_condition[i][0]), k_champs_condition[i][1], k_champs_condition[i][2], k_champs_condition[i][3]);
	}
}

function form_condition(obj, input_name, val, statut){
	

	if(obj.Ktype == 'undefined'){
		obj = new kChamp(obj.name);
	}

	switch(obj.Ktype){
		case 'ASSO_MUL' :
				switch(obj.Ks_type){
					case 'COCHE' :
					//alert("toto");
						var match = (in_array(val, get_CHECKED(obj)) !== false);
					break;
				}
			break;
		case 'ASSO_SIM' :
			var match = (obj.ref.options[obj.ref.selectedIndex].value == val);
			break;

		case 'ASSO_SIM_R' :
			var match = (obj.ref.options[obj.ref.selectedIndex].value == val);
			break;
	}
	
	oInput = new kChamp(input_name);
//	oDiv1 = oInput.ref.parentNode;
	oDiv = document.getElementById('conteneur_'+ input_name);




	switch(statut){
		case 'show' :
			if(match){
				oDiv.style.display = (oInput.old_style) ? oInput.old_style : 'block' ;
				oInput.req = (oInput.old_req) ? oInput.old_req : false ;
			}
			else{
				if(!oInput.old_style){oInput.old_style = oDiv.style.display;}
				oDiv.style.display = 'none';
				oInput.req = false ;
			}
			break;
	}

}

/*******************************************************************************/

	/**********************************************************************************/
	/* Fonctions d'ajout de valeur à un input d'association  */
	/**********************************************************************************/

function ajoutFromForm(params, rub, table, desc, champ){
	var url = 'index.asp?rub='+ rub +'&op=edit&id_'+ table +'=0&edit_redirect=opened_from_form&desc='+desc+'&champ='+champ;
	pop(url, params, "pop");
}

function addASSO_VALUE(qs, id, table, desc, champ){
	input = new kChamp(champ);
	var val = GetVal(desc, qs);

//	alert(val + ' '+ desc + '\n'+ qs);

	switch(input.Ktype){

		case 'ASSO_SIM':
			opt = document.createElement("OPTION")
			opt.setAttribute("value", id);
			opt.innerHTML = val;
			input.ref.appendChild(opt);

			if(document.all){
				input.ref.selectedIndex = (input.ref.options.length + 0);
			}

			for(var i=0; i<input.ref.options.length; i++){
				if(input.ref.options[i].value == id){input.ref.selectedIndex = i;break;}
			}
		break;
	}
}
/*******************************************************************************/


	/**********************************************************************************/
	/* ASSO SELECT  */
	/**********************************************************************************/


//Retourne l'objet select
function getSelectObjet(context, id){
	var select_list = context.getElementsByTagName("SELECT");
	
	for (var j=0; j < select_list.length ; j++)
	{
		if (select_list[j].id == id)
			return select_list[j];
	}
	return null;
}

//Initialisation de la liste réceptrice (init de la valeur de l'hidden à partir de la liste)
function MyImpExp_init_hidden(id_liste){
	var liste = getSelectObjet(document, id_liste + "_m");
	var hid = document.getElementById(id_liste);

	var sep = "";
	for (var i=0; i < liste.options.length; i++){
		hid.value += sep + liste.options[i].value;
		sep = ",";
	}

}

//Initialisation de la liste contenue dans l'Iframe (désactivation des enregistrements déjà associés)
function MyImpExp_init_option(id_source, id_dest){
	var source = getSelectObjet(document, id_source);
	var dest = getSelectObjet(parent.document, id_dest + "_m");

	for (var i=0; i < source.options.length; i++)
	{
		if (inSelect(dest.options, source.options[i].value)){
			source.options[i].selected = "";
			source.options[i].disabled = true;
			source.options[i].style.color = "#ACA899";
		}
	}
}

//Fonction pour les boutons d'import/export entre 2 select multiple (export = iframe_2_parent)
function MyImpExp(id_source, id_dest, mode){
	switch (mode)
	{
		case "export":
			var src_context = document;
			var dest_context = parent.document;

			var hid = dest_context.getElementById(id_dest);			
			id_dest = id_dest + "_m";
			break;

		case "import":
			var src_context = parent.document;
			//var dest_context = window.frames[0].document;
			var dest_context = document;

			var hid = src_context.getElementById(id_source);
			id_source = id_source + "_m";
			break;
	}

	var source = getSelectObjet(src_context, id_source);
	var dest = getSelectObjet(dest_context, id_dest);

	switch (mode)
	{
		case "export":
			for (var i=0; i < source.options.length; i++)
			{
				if (source.options[i].selected && dest != null)
				{
					if (!inSelect(dest.options, source.options[i].value))
					{
						var new_option = dest_context.createElement("option");
						new_option.setAttribute("value", source.options[i].value);
						new_option.text = source.options[i].innerHTML;
									
						if (navigator.appName!="Microsoft Internet Explorer")				
							dest.add(new_option, null);
						else
							dest.add(new_option);						
						
						source.options[i].selected = "";
						source.options[i].disabled = true;
						source.options[i].style.color = "#ACA899";
					}
				}
			}
			//alert(dest);
			MyImpExp_maj_hid(hid, dest);
			break;

		case "import":
			for (var i=source.options.length - 1; i >= 0; i--)
			{
				if (source.options[i].selected && dest != null)
				{
					for (var x=0; x < dest.options.length; x++)
					{
						if (dest.options[x].value == source.options[i].value)
						{
							dest.options[x].disabled = false;
							dest.options[x].style.color = "";
						}
					}
					source.remove(i);	
				}
			}
			MyImpExp_maj_hid(hid, source);
			break;
	}
	
}

//Mise à jour du hidden contenant les id du select multiple
function MyImpExp_maj_hid(hid, select_m){
	var sep = ",";
	
	hid.value = "";
	for (var i=0; i < select_m.options.length; i++)
	{
		if (i > 0) 
			hid.value = hid.value + sep;		
		hid.value = hid.value + select_m.options[i].value;
	}
	//alert(hid.value);
}




function submit(){
	document.forms[0].submit();
}


function version_imprimable(){
	var url = self.document.location.href + '';
	url = BuildUrl(url, 'imprimer', 1);
	imprim = window.open(url, 'imprim', 'width=670,height=600,menubar=yes,resizable=yes,scrollbars=yes');
	imprim.focus();
}



function submitForm(form){
	oForm = MM_findObj(form);

	if(valid(form)){
		oForm.submit();
	}
	else{
		alert(lang['fields_not_correct']);
	}
}

function navSelect(obj, param){
	var url = document.location.href + '';
	sel = obj.options[obj.selectedIndex].value;
	url = BuildUrl(url, param, sel);

	document.location.href = url;
}


function nospam(adresse){
	adresse = adresse.replace(SPAM_AT, '@');
	while(adresse.indexOf(SPAM_DOT) > -1){	adresse = adresse.replace(SPAM_DOT, '.'); }

//	adresse_aff = truncateBR(adresse, 40);
	adresse_aff = adresse;

	document.open();
	document.write(adresse_aff.link('mailto:'+adresse));
	document.close();
}

function truncate(val, len){
	if(val.length > len){
		val = val.substr(0, len)+ '...';
	}
return val;
}

function truncateBR(str, len){
	val = str + '';

	tval = Array();
	tlen = 0;
	vlen = val.length;
	i = 0;

	while (tlen < vlen){
		tval[i] = val.substr(0, len);
		tlen += tval[i].length;
		val = val.substr(len, val.length);
		i++;
	}

	val = tval.join('<br />');

return val;
}


/*** Librairie / boutique **/
function btq_Add(item){
	oForm = MM_findObj(item);
	oForm.submit();
}

function btq_update_qte(item){
	oForm = MM_findObj(item);
}


function recherche(form){
	oForm = MM_findObj(form);
	if(oForm.research){
		if(oForm.research.value != ''){
			oForm.submit();
		}
	}
	else{
		alert("Saisissez une expression à rechercher");
	}

}





/*
Retourne l'objet XMLHttpRequest quel que soit le navigteur, ou false si les fonctionalités ne sont pas disponnibles 
Source & doc : http://openweb.eu.org/articles/objet_xmlhttprequest/
*/
function getHTTPObject()
{
  var xmlhttp = false;

  /* Compilation conditionnelle d'IE */
  /*@cc_on
  @if (@_jscript_version >= 5)
     try
     {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     }
     catch (e)
     {
        try
        {
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (E)
        {
           xmlhttp = false;
        }
     }
  @else
     xmlhttp = false;
  @end @*/

  /* on essaie de créer l'objet si ce n'est pas déjà fait */
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
  {
     try
     {
        xmlhttp = new XMLHttpRequest();
     }
     catch (e)
     {
        xmlhttp = false;
     }
  }

  if (xmlhttp)
  {
	  /*
     // on définit ce qui doit se passer quand la page répondra
     xmlhttp.onreadystatechange=function()
     {
        if (xmlhttp.readyState == 4) // 4 : état "complete"
        {
           if (xmlhttp.status == 200) // 200 : code HTTP pour OK 
           {
              //     Traitement de la réponse.
              //Ici on affiche la réponse dans une boîte de dialogue.
              
             xmlhttp.responseXML = xmlhttp.responseXML;
           }
        }
     }
	 */
  }
  return xmlhttp;
}

/// http://forum.alsacreations.com/topic-3-11805-1.html
function XSLTtransform(xml, xsl, id){

  try {

    // navigateur basé sur Gecko

    if (window.XSLTProcessor)

    {

      var fragment;
      var xsltProcessor = new XSLTProcessor();

	  xsltProcessor.importStylesheet(xsl);

      fragment = xsltProcessor.transformToFragment(xml, document);

      var target = document.getElementById(id);

      target.appendChild(fragment);

      document.appendChild(target);

      // ActiveX pour Internet Explorer

    }
	else if (window.ActiveXObject) {

      var target = document.getElementById(id);
      return xml.transformNode(xsl);
    }

  } catch (e) {

    return e;

  }
}


function fill_element(url, element_id){
	var xmlhttp = getHTTPObject(); 
	xmlhttp.onreadystatechange= function(){
        if (xmlhttp.readyState == 4){ // 4 : état "complete"
          if (xmlhttp.status == 200){ // 200 : code HTTP pour OK 
			//purgeDOM(MM_findObj(element_id).childNodes)
			//MM_findObj(element_id).innerHTML = xmlhttp.responseText;

			replaceNodeContent(MM_findObj(element_id), xmlhttp.responseText);
			//replaceNodeContent(MM_findObj(element_id), nodeCleaner(xmlhttp.responseXML.documentElement));
		   }
		}
	}
	xmlhttp.open("GET", url ,true); 
	xmlhttp.send(null); 
}


function replaceNodeContent(obj, xmlData){

	childs = obj.childNodes;
	if(BROWSER == 'IE' && obj.tagName == 'SELECT'){
		//obj2 = duplicate_DOM(obj);
		obj2 = obj.cloneNode(true);
		obj2.innerHTML = xmlData;
		obj.outerHTML = obj2.outerHTML;
	}
	else{
		obj.innerHTML = xmlData;
	}
}



function donneOption(source, destination){
	oSource			= MM_findObj(source);
	oDestination	= MM_findObj(destination);
	

	if(oSource.selectedIndex > -1 ){
		var oOption = document.createElement("OPTION");
		oDestination.options.add(oOption);

		oOption.innerHTML	= oSource.options[oSource.selectedIndex].innerHTML;
		oOption.value		= oSource.options[oSource.selectedIndex].value;

		oSource.remove(oSource.selectedIndex);
	}
	if(oSource.selectedIndex > -1 ){
		donneOption(source, destination);
	}
}

function updateSelectOptions(obj, destination, ifra){
	var url = 'hidsrc.php?op=questions_liees&th='+ obj.options[obj.selectedIndex].value;
	MM_findObj(ifra).src = url;
}


function videOptions(source){
	destination = false;
	if(videOptions.arguments.length >1){
		destination = videOptions.arguments[1];
	}


	oSource = MM_findObj(source);
	for(var i=0; i<oSource.options.length; i++){
		if(destination){
			oSource.options[i].selected = true;
		}
		else{
			oSource.remove(i);
		}
	}
//	while(oSource.options.length > 0){ videOptions(source); } // il ne vide pas tout du premier coup ...
	if(destination){
		donneOption(source, destination);
	}else{
		while(oSource.options.length > 0){ videOptions(source); } // il ne vide pas tout du premier coup ...
	}
}


function addOptionsArray(destination, tableau){
	oDestination = MM_findObj(destination);

	for(key in tableau){
		var oOption = document.createElement("OPTION");
		oDestination.options.add(oOption);
		oOption.innerHTML	= tableau[key];
		oOption.value = key;
	}
}



function reactive_event_listener(obj){
	var a = obj.attributes;
	for(var i=0; i<a.length; i++){
		if(a[i].type === 'function'){
		alert(a[i].name+ ' '+ a[i].value + ' '+ a[i].type);
		}
	}
}

/**
	Fonction pour parer aux pb de gestion de memoire sous IE
	Source : http://www.crockford.com/javascript/memory/leak.html
*/

function purgeDOM(d) {
    var a = d.attributes, i, l, n;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            purge(d.childNodes[i]);
        }
    }
}


function nodeCleanerGo(c){
	if(!c.data.replace(/\s/g,''))
		c.parentNode.removeChild(c);
}

function nodeCleaner(d){
	var bal=d.getElementsByTagName('*');
	for(i=0;i<bal.length;i++){
		a=bal[i].previousSibling;
		if(a && a.nodeType==3)
			nodeCleanerGo(a);
		b=bal[i].nextSibling;
		if(b && b.nodeType==3)
			nodeCleanerGo(b);
	}
	return d;
}



var AJAX_SELECTED_LOADED_ARRAY = Array();

function ajax_load_combo(obj, alias){

	if(!in_array_bool(obj.name, AJAX_SELECTED_LOADED_ARRAY)){
		AJAX_SELECTED_LOADED_ARRAY[AJAX_SELECTED_LOADED_ARRAY.length] = obj.name + '';

		curr_index_value = obj.options[obj.selectedIndex].value;


			var oOption = document.createElement("OPTION");
			obj.options.add(oOption);
			oOption.innerHTML	= 'Chargement...';
			oOption.value		= 0;

	//	window.open ("index.asp?op=free-block&var=ajax_load_combo&rub="+ alias, "", "");

		objName = (ajax_load_combo.arguments.length == 3) ? ajax_load_combo.arguments[2] : alias
		
	//	var url = "index.asp?op=free-block&var=ajax_load_combo&rub="+ alias;
		var sel = (GetVal("sel")) ? GetVal("sel") : '';
		var val = (GetVal("val")) ? GetVal("val") : '';
		var url = 'combo.asp?alias='+ alias +'&sel='+ sel +"&val="+ val +"&browser="+ BROWSER;

		fill_element(url, objName);

		for(var i=0; i<obj.options.length; i++){
			if(obj.options[i].value = curr_index_value){
				obj.selectedIndex = i;
				obj.options[i].selected = true;
			}
		}
	}


}


function ajax_load_coche(obj, alias){

	if(!in_array_bool(obj.name, AJAX_SELECTED_LOADED_ARRAY)){
		AJAX_SELECTED_LOADED_ARRAY[AJAX_SELECTED_LOADED_ARRAY.length] = obj.name + '';
		
	//	window.open ("index.asp?op=free-block&var=ajax_load_combo&rub="+ alias, "", "");

		objName = (ajax_load_coche.arguments.length >= 3) ? 'ul_' + ajax_load_coche.arguments[2] : alias
		id_employeur  = (ajax_load_coche.arguments.length >= 4) ? ajax_load_coche.arguments[3] : ""
		id_nl  = (ajax_load_coche.arguments.length >= 5) ? ajax_load_coche.arguments[4] : ""

		var cont = self.document.getElementById(objName);
			
		cont.innerHTML	= '<li>Chargement...</li>';

	//	var url = "index.asp?op=free-block&var=ajax_load_combo&rub="+ alias;
		var sel = (GetVal("sel")) ? GetVal("sel") : '';
		var val = (GetVal("val")) ? GetVal("val") : '';
		var url = 'coche.asp?alias='+ alias +'&sel='+ sel +"&val="+ val +"&browser="+ BROWSER +"&ids=" +id_employeur +"&id_fr_newsletter_envoi="+ id_nl;

		fill_element(url, objName);


/*
		for(var i=0; i<obj.options.length; i++){
			if(obj.options[i].value = curr_index_value){
				obj.selectedIndex = i;
				obj.options[i].selected = true;
			}
		}
*/

	}


}
/* DECOCHE LES AUTRES CASES QUAND ON COCHE LA CASE "-- Tous --" */
function decocheAll(champ){
	cases = MM_findObj(champ);
	moi = MM_findObj(champ+"_tous");
	if (moi.checked) {
		for(i = 0; i <cases.length; i++){
			if (cases[i].checked) {
				cases[i].checked = false;
			}
		}
	}
//	alert(moi.checked);	
//	alert(cases[0].checked);
}

/* DECOCHE LA CASE "-- Tous --"  */
function decocheTous(champ, val){
	nous = MM_findObj(champ);
	for(i=0; i <nous.length; i++){
		if(nous[i].value == val) moi = nous[i];
	}
	//alert(moi);
	tous = MM_findObj(champ+"_tous");
	if (moi.checked) {
			if (tous.checked) {
				tous.checked = false;
			}}	
//	alert(moi.checked);	
//	alert(cases[0].checked);
}


function decocheTousLoad(champ){
	cases = MM_findObj(champ);
	moi = MM_findObj(champ+"_tous");
	bool = false;
	for(i=0; i< cases.length; i++){
		if (cases[i].checked) {
		bool = true;
		}
	}
	if(bool) moi.checked = false;
}

/** FORMULAIRE DES CONTACT -> Adresse utilisée ***/
function secteur_organisme(oSel){

	var id_org = oSel.options[oSel.selectedIndex].value;
	// Mise à jour de la liste des secteurs
	fill_element("index.asp?op=free-block&var=ajax_secteur_organisme_combo&rub=598&sel=ORGANISME&val="+ id_org, 'id_secteur');

	// mise a jour du champ adresse 
	update_adresse_src();

}

function adresse_organisme(id_org){
	if(id_org > 0){
		fill_element("index.asp?op=free-block&var=ajax_secteur_organisme_adresse&rub=598&sel=ORGANISME&val="+id_org, 'adresse_org');
	}
}

function adresse_secteur(oSel){
	use_addr = get_adresse_type();
	if(use_addr == 3 && oSel.options[oSel.selectedIndex].value > 0){
		fill_element("index.asp?op=free-block&var=ajax_secteur_organisme_adresse&rub=598&sel=SECTEUR&val="+ oSel.options[oSel.selectedIndex].value, 'adresse_org');
	}
}


function update_adresse_src(){

	MM_findObj('adresse_org').innerHTML = '';
	use_addr = get_adresse_type();
	switch(parseInt(use_addr)){
		case 1 :
			MM_findObj('adresse_org').innerHTML = MM_findObj('ct_adresse').value + "<br />"+ MM_findObj('ct_cp').value + ' '+ MM_findObj('ct_ville').value;
			break;

		case 2 :
			adresse_organisme(MM_findObj('id_organisme').options[MM_findObj('id_organisme').selectedIndex].value);
			break;

		case 3 :
			adresse_secteur(MM_findObj('id_secteur'));
			break;
	}
}


function get_adresse_type(){
	var addr_typ = MM_findObj('id_adresse_type');
	var use_addr = 1;

	for(var i=0; i<addr_typ.length; i++){
		if(addr_typ[i].checked){
			use_addr = addr_typ[i].value;
			break;
		}
	}
	return use_addr;
}


/*******************************/



/**** FORMULAIRE DES SESSIONS > LISTE DES STAGIAIRES **/
var ARRAY_ajax_liste_texte = Array();

function ajax_liste_text_blur(obj, url, data_type_check_func){
	obj.className = 'ajaxtxt_blur';

	valeur_ok = (data_type_check_func)? eval(data_type_check_func+'(obj)') : true;
		

	if(ARRAY_ajax_liste_texte[obj.name] != obj.value && valeur_ok ){

		MM_findObj('div_' + obj.name).innerHTML = 'Chargement...';
		Tid_asso = obj.name.split('[');
		id_asso = Tid_asso[1].replace(']', '');

		fill_element(url + id_asso +"&value="+ obj.value, 'div_' + obj.name);
	}
}

function ajax_liste_text_focus(obj){
	obj.className = 'ajaxtxt_focus';
	ARRAY_ajax_liste_texte[obj.name] = obj.value;
}




function verifEuroListe(obj){
	for(var i=0; i < obj.value.length; i++)  {
		if(!ismonetaire(obj.value.charAt(i))) {
			alert(lang['msg_err_EURO']);
			return false;
		}
	}
return true;
}


/*******************************/



function launch_export(url){
	var deb = MM_findObj('datededebut');
	var fin = MM_findObj('datedefin');

	url += '&datedeb='+ deb.value;
	url += '&datefin='+ fin.value;

	window.open(url, '', '');
	return false;
}


function exp_stagiaires(get_ckd, url, nom, params){
	var ckd = getPageLotChecked(MM_findObj('iid_contact'));
	
	
	if(get_ckd == true && ckd != ''){
		window.open(url +'&idz='+ ckd, nom, params);
	}
	else if(get_ckd == true && ckd == ''){
		alert('Sélectionnez au moins un contact');
	}
	else{
		window.open(url, nom, params);
	}
}


function post_codeCompta(){
	var deb = MM_findObj('datededebut');
	var fin = MM_findObj('datedefin');
	var lettre = MM_findObj('code_lettre');
	var start = MM_findObj('code_start');
	
	url = self.document.location.href + '';
	url = BuildUrl(url, 'datedeb', deb.value);
	url = BuildUrl(url, 'datefin', fin.value);
	url = BuildUrl(url, 'code_lettre', lettre.value);
	url = BuildUrl(url, 'start', start.value);



	self.document.location.href = url;
}

function export_codeCompta(){
	var deb = MM_findObj('datededebut');
	var fin = MM_findObj('datedefin');
	var lettre = MM_findObj('code_lettre');
	var start = MM_findObj('code_start');
	
	url = self.document.location.href + '';
	url = BuildUrl(url, 'datedeb', deb.value);
	url = BuildUrl(url, 'datefin', fin.value);
	url = BuildUrl(url, 'code_lettre', lettre.value);
	url = BuildUrl(url, 'start', start.value);
	url = BuildUrl(url, 'op', 'export-xls');
	url = BuildUrl(url, 'rub', 607);
	url = BuildUrl(url, 'feuille', 'codecompta');


	pop(url, "width=500,height=300");
}


function save_codeCompta(){

	if(confirm("Attention ! \n Cette opération écraser les codes comptabilité de la base de donnée \n Voulez vous continuer ?")){

		sess = Array();
		cc = Array();
		k = 0;
		var curid;

		table = self.document.getElementById('admin_liste');
		trz = table.getElementsByTagName('tr');
		
		for(var i=0; i<trz.length; i++){
			curid = parseInt(trz[i].id.replace('TR_', ''));
			inputs = trz[i].getElementsByTagName('input');
			for(var j=0; j<inputs.length; j++){
				if(inputs[j].type == 'checkbox' && inputs[j].name == 'LOT' && inputs[j].checked === true){

					cc_field = self.document.getElementById('code_compta['+ curid +']');
					sess[k] = curid;
					cc[k] = cc_field.value
					k++;
					break;
				}
			}
		}
/*
		inputs = self.document.getElementsByTagName("input");
		for(var i=0; i<inputs.length; i++){
			if(inputs[i].type == 'text' && inputs[i].name.indexOf('code_compta[') == 0){
				sess_id = inputs[i].name.replace('code_compta[', '');
				sess_id = sess_id.replace(']', '');

				sess[j]	= sess_id;
				cc[j]	= inputs[i].value;
				j++;
			}
		}
*/
		var url = self.document.location.href + '';
		url = BuildUrl(url, 'op', 'sauvecodecompta');
		url = BuildUrl(url, 'sess', sess.join(':'));
		url = BuildUrl(url, 'cc',  cc.join(':'));
		//var url = 'index.asp?rub=613&op=sauvecodecompta&sess='+  sess.join(':') +'&cc='+ cc.join(':');
		self.document.location.href = url;
	//	alert(url);
	}
}



function quantite_presta_frs(obj){
	if(obj.value <1){
		obj.value = 1;
	}
}


//fonction spécifique pour le 1er onglet de l'envoi de newsletter, vérifie si au moins un champ des destinataires a été remplit.
function valid_nl_envoi(){
	is_ok = false;	
	//On vérifie si au moins un des champs a été remplit
	
	//pour les 2 checkboxs "inscriptions par le site"
/*	inscrits = MM_findObj("is_inscrit_site");
	if(inscrits.checked){is_ok = true;}
	selects = MM_findObj("is_seulement_selec");
	if(selects.checked){is_ok = true;}
*/
	//pour le textarea
	autres = MM_findObj("nl_emails_liste");
	if(autres.value != ""){is_ok = true;}

	//pour le select non ajax
	thematiques= self.document.getElementsByTagName("input");
	for(var i=0; i<thematiques.length; i++){
		if(thematiques[i].type == "checkbox" & thematiques[i].checked) {
	//		alert(thematiques[i].value);
			is_ok="true";
			break;	
		}
	}
	//Si un des champs a été remplit on soumet le form
	if(is_ok){
		submitit('formEdit');
	}else{
		alert('Veuillez choisir au moins un destinataire.');
	}
}

/**
 *
 * Can show a tooltip over an element
 * Content of tooltip is the title attribute value of the element
 * copyright 2004 Laurent Jouanneau. http://ljouanneau.com/soft/javascript
 * release under LGPL Licence
 * works with dom2 compliance browser, and IE6. perhaps IE5 or IE4.. not Nestcape 4
 *
 * To use it :
 * 1.include this script on your page
 * 2.insert this element somewhere in your page
 *       <div id="tooltip"></div>
 * 3. style it in your CSS stylesheet (set color, background etc..). You must set
 * this two style too :
 *     div#tooltip { position:absolute; visibility:hidden; ... }
 * 4.the end. test it ! :-)
 *
 */


// create the tooltip object
function tooltip(){}

// setup properties of tooltip object
tooltip.id="tooltip";
tooltip.offsetx = 10;
tooltip.offsety = 10;
tooltip.x = 0;
tooltip.y = 0;
tooltip.snow = 0;
tooltip.tooltipElement=null;
tooltip.title_saved='';
tooltip.saveonmouseover=null;
tooltip.ie4 = (document.all)? true:false;		// check if ie4
tooltip.ie5 = false;
if(tooltip.ie4) tooltip.ie5 = (navigator.userAgent.indexOf('MSIE 5')>0 || navigator.userAgent.indexOf('MSIE 6')>0);
tooltip.dom2 = ((document.getElementById) && !(tooltip.ie4||tooltip.ie5))? true:false; // check the W3C DOM level2 compliance. ie4, ie5, ns4 are not dom level2 compliance !! grrrr >:-(


/**
* Open ToolTip. The title attribute of the htmlelement is the text of the tooltip
* Call this method on the mouseover event on your htmlelement
* ex :  <div id="myHtmlElement" onmouseover="tooltip.show(this)"...></div>
*/
tooltip.show = function (htmlelement) {

   if ( this.ie4 || this.dom2 ) {
      // we save text of title attribute to avoid the showing of tooltip generated by browser
      text=htmlelement.getAttribute("title");
      this.title_saved=text;
      htmlelement.setAttribute("title","");
   }
	if(this.dom2){
		this.tooltipElement = document.getElementById(this.id);
      this.saveonmouseover=document.onmousemove;
		document.onmousemove = this.mouseMove;
	}else if ( this.ie4 ) {
      this.tooltipElement = document.all[this.id].style;
      this.saveonmouseover=document.onmousemove;
      document.onmousemove = this.mouseMove;
	}

   if ( this.ie4 || this.dom2 ) {
      if(this.ie4) document.all[this.id].innerHTML = text;
      else if(this.dom2) document.getElementById(this.id).innerHTML=text;

      this.moveTo(this.x + this.offsetx , this.y + this.offsety);

      if(this.ie4) this.tooltipElement.visibility = "visible";
      else if(this.dom2) this.tooltipElement.style.visibility ="visible";
   }
   return false;
}

/**
* hide tooltip
* call this method on the mouseout event of the html element
* ex : <div id="myHtmlElement" ... onmouseout="tooltip.hide(this)"></div>
*/
tooltip.hide = function (htmlelement) {
	if ( this.ie4 || this.dom2 ) {
      htmlelement.setAttribute("title",this.title_saved);
      this.title_saved="";

		if(this.ie4) this.tooltipElement.visibility = "hidden";
      else if(this.dom2) this.tooltipElement.style.visibility = "hidden";

      document.onmousemove=this.saveonmouseover;
	}
}



// Moves the tooltip element
tooltip.mouseMove = function (e) {
   // we don't use "this", but tooltip because this method is assign to an event of document
   // and so is dreferenced

   if(tooltip.ie4 || tooltip.dom2){

      if(tooltip.dom2){
         tooltip.x = e.pageX;
         tooltip.y = e.pageY;
      }else{
         if(tooltip.ie4) { tooltip.x = event.x; tooltip.y = event.y; }
         if(tooltip.ie5) { tooltip.x = event.x + document.body.scrollLeft;
               tooltip.y = event.y + document.body.scrollTop; }
      }
      tooltip.moveTo( tooltip.x +tooltip.offsetx , tooltip.y + tooltip.offsety);
   }
}

// Move the tooltip element
tooltip.moveTo = function (xL,yL) {
	if(this.dom2){
		this.tooltipElement.style.left = xL +"px";
      this.tooltipElement.style.top = yL +"px";
	}else if(this.ie4){
      this.tooltipElement.left = xL;
      this.tooltipElement.top = yL;
   }
}

/*** GnooCalendar */
var CLtab = new Array();
var CLtab_idz = new Array();

function initCalendrier(min, max , indice, val)
{

//	alert(val);

	var itab = 1;
	var iDate;
	var motif = /date/;

	if(!indice)
	{
		indice = 0;
	}
		//	CLtab_idz[0] = "ok";
/*------ Modif pour Kcontain */
	for(var i=0; i<k_champs_s_type.length; i++){

		if(k_champs_s_type[i] == 'CALENDRIER'){
			if ( !min )
				min = 2;
			if ( !max )
				max = 10;
			CLtab[itab] = new GnooCalendar(itab, "CLtab["+itab+"]", min, max, val);
			CLtab[itab].init("div_CL"+itab, MM_findObj(k_champs_liste[i]), val);
			CLtab[itab].isDragable(false);
			CLtab[itab].setTitle("Calendrier");
			CLtab_idz[CLtab_idz.length] = itab;
			itab++;
		}
	}

/*
	if (document.forms[indice])
	{
		for (var i=0; i < document.forms[indice].length; i++)
		{
			if (motif.test(document.forms[indice].elements[i].name) && document.forms[indice].elements[i].type != 'hidden')
			{
				if ( !min )
					min = 2;
				if ( !max )
					max = 10;
				CLtab[itab] = new GnooCalendar(itab, "CLtab["+itab+"]", min, max);
				CLtab[itab].init("div_CL"+itab, document.forms[indice].elements[i]);
				CLtab[itab].isDragable(false);
				CLtab[itab].setTitle("Calendrier");
				itab++;
			}
		}
	}
	*/

/*------ /modif pour Kcontain */
}

function closeOthersCld(tab, curr_id)
{ //alert(tab);
	for (var i=0; i<tab.length; i++)
	{
		if(curr_id != tab[i]){
			var div_tmp = "div_CL" + tab[i]; 
			if(document.getElementById(div_tmp).style.visibility == 'visible')
			{
				CLtab[tab[i]].hide();
			}
		}
	}
	return;
}

function GnooCalendar(id, n, min, max, val)
{


	// Ajout Hugues 06/01/2006 : Pour affecter une date donnée à un objet gnnoCalendar 
	this.gnoo_affect_date = function (val){
	//	alert(val);
		if(val != false && val != ''){
			tval = val.split('/');
			this.date.setFullYear(tval[2],tval[1]-1,tval[0]);
		}
		this.curYear = new Number(this.date.getFullYear());
		this.curMonth= new Number(this.date.getMonth());
		return;
	}
	
	this.target= null;
	this.id = id;
	this.name =  new String(n);
	this.boutName = new String("bout_CL"+id);
	this.tag =  new String();
	this.title =  new String("GnooCalendar");
	this.date	= new Date();
	// Modif Hugues 06/01/2006
	this.gnoo_affect_date(val);
	this.moving = new Boolean(false);
	this.vis = new Boolean(false);
	this.free = new Boolean(false);
	this.maxYear = new Number(this.curYear+max);
	this.minYear = new Number(this.curYear-min);

//	alert(this.curYear + ' / '+ this.curMonth );



/*
* GnooCalendar.setFree(Boolean vis)
* affiche ou non des jours feries
*/
	this.setFree=function(vis)
	{
		this.free=vis;
		if(this.vis==true)
			this.show();
		return;
	}
/*
* GnooCalendar.IsDragable(Boolean drag)
* active/desactive l'option drag&drop 
*/
	this.isDragable=function(drag)
	{
		if(drag==true && !document.layers)
		{
			document.onmousemove=this.getMouse;
			document.getElementById(this.div).root=this;
			document.getElementById(this.div).onmousedown=this.startMove;
			document.getElementById(this.div).onmouseup=this.endMove;
		}
		return;
	}
/*
* GnooCalendar.startMove()
* initialise le drag & drop
*/
	this.startMove=function(evt)
	{
		var event;
		var tmp;
		if(this.root.vis!=true)
			return;
		if(document.all)
		{
			event = window.event;
			tmp = event.srcElement;
			if(tmp.tagName!="SELECT" )
			{
				this.root.fixX = tmp.offsetLeft+event.offsetX;
				this.root.fixY = event.offsetY;
				while(tmp.parentElement!=document.getElementById(this.root.div) && tmp.parentElement!=null )
				{
					this.root.fixX += tmp.parentElement.offsetLeft;
					this.root.fixY += tmp.parentElement.offsetTop;
					tmp = tmp.parentElement;
				}
				this.root.moving=true;
				self.movingCalendar = this.root;
			}
		}
		else
		{
			event = evt;
			tmp = event.target;
			if(tmp.tagName!="SELECT" && tmp.tagName!="OPTION"  && tmp.tagName!="scrollbar" )
			{			
				this.root.fixX = event.layerX;
				this.root.fixY = event.layerY;
				this.root.moving=true;
				self.movingCalendar = this.root;
			}
		}
		return false;
	}
/*
* GnooCalendar.endMove()
* termine le drag & drop
*/
	this.endMove=function()
	{
		if(self.movingCalendar!=null)
		{
			self.movingCalendar.moving=false;
		}
		return false;
	}
/*
* GnooCalendar.getMouse(Event evt)
* change la liste des jours feriés jours feries
*/
	this.getMouse=function(evt)
	{
		
		var event;
		if(document.all)
		{
			event = window.event;
			var scrollObj = (document.documentElement) ? document.documentElement : document.body;
			this.posX = self.event.clientX+scrollObj.scrollLeft;
			this.posY = self.event.clientY+scrollObj.scrollTop;
		}
		else
		{
			event = evt;
			this.posX = evt.pageX ;
			this.posY = evt.pageY ;
		}
		if(self.movingCalendar!=null)
		{
			if(self.movingCalendar.moving==true && self.movingCalendar.vis==true )
				self.movingCalendar.move(this.posY-self.movingCalendar.fixY, this.posX-self.movingCalendar.fixX);
		}
		return false;
	}
/*
* GnooCalendar.move(Number x, Number y)
* déplace le calendrier
*/
	this.move=function(x, y)
	{
		if(!document.layers)
		{
			document.getElementById(this.div).style.top = x+"px";
			document.getElementById(this.div).style.left = y+"px";
		}
		return false;
	}

/*
* GnooCalendar.setFreeDay(Array fd)
* change la liste des jours feriés jours feries
*/
	this.setFreeDay=function(fd)
	{
		this.freeday.length=0;
		for(var i=0; i<fd.length; i++)
			this.freeday[i] = new String(fd[i]);
		if(this.vis==true)
			this.show();
		return;
	}
/*
* GnooCalendar.isFreeDay(d,m)
* true si jour ferié
*/
	this.isFreeDay=function(d,m)
	{
		var tmp = this.checkDate(d)+"/"+this.checkDate(parseInt(m)+1);
		if(this.free==false)
			return false;
		for(var i=0; i<this.freeday.length; i++)
			if( tmp == this.freeday[i])
				return true;
		return false;
	}
/*
* GnooCalendar.setTitle(t)
* change le titre du calendrier
*/
	this.setTitle=function(t)
	{
		this.title = t;
		if(this.vis==true)
			this.show();
		return;
	}
/*
* GnooCalendar.mList()
* retourne la liste des mois 
*/
	this.mList=function()
	{

		var tmp = "<table cellpadding='0' cellspacing='0' class='Gtab'>";
	
		tmp += "<tr><td align='center' colspan='2' class='Gname'>";
		if(document.layers)
		{
			tmp += "<table width='100%'>";
			tmp += "<tr>";
			tmp += "<td class='Gname' align='center'>"+this.title+"</td>";
			tmp += "<td><a href='#' onclick='"+this.name+".hide();' class='Gname'>X</a></td>";
			tmp += "</tr>";
			tmp += "</table>";
		}
		else
		{
			tmp += "<span style='float:left; text-indent:20px;'>"+this.title+"</span>";
			tmp += "<span style='float:right;'>";
			tmp += "<a href='javascript://' onclick='"+this.name+".hide();' class='Gname'>X</a>";
			tmp += "</span>";
		}
		tmp += "</td></tr>";
		tmp += "<tr>";
		tmp += "<td class='Gtxt'><select name='"+this.name+"month' style='width:90px' class='Gtxt' ";
		tmp += "onchange='"+this.name+".setMonth(this[this.selectedIndex].value)' >\n";
		for(var i=0; i<this.month.length; i++)
		{			
			tmp += "<option value='"+i+"'";
			if(this.curMonth==i)
				tmp += " selected";
			tmp += ">"+ this.month[i] +"</option>\n";
		}
		tmp += "</select></td><td class='Gtxt'>\n";
		tmp += this.yList();
		tmp += "</td></tr></table>";
		tmp += this.dList();
		return tmp;
	}
/*
* GnooCalendar.yList()
* retourne la liste des années 
*/
	this.yList=function()
	{
		var tmp = "<select name='"+this.name+"year' style='width:55px' class='Gtxt' ";
		tmp += "onchange='"+this.name+".setYear(this[this.selectedIndex].value);' >\n";
		for(var i=this.minYear; i<=this.maxYear; i+=1)
		{
			tmp += "<option value='"+i+"'";
			if(this.curYear==i){
				tmp += " selected";
				}
			tmp += ">"+ i +"</option>\n";
		}
		tmp += "</select>\n";
		return tmp;
	}

	this.dayCell=function(d,n)
	{
		var tmp = new String("");
		if(this.isFreeDay(d,this.curMonth))
			tmp += "<td class='Gfree'";
		else
			tmp += "<td class='Gc"+n+"'";
		if(!document.layers)
		{
			tmp += "title='"+this.checkDate(d)+" "+this.month[this.curMonth]+" "+this.curYear+"'";
			tmp += " onmousedown='"+this.name+".getDate(\"";
			tmp += this.checkDate(d)+"/";
			tmp += this.checkDate(1+parseInt(this.curMonth))+"/";
			tmp += this.curYear+"\"";
			tmp += ");' ";
			tmp += " onmouseover='this.className=this.className+\"on\";' ";
			tmp += " onmouseout='this.className= this.className.substring(0,this.className.indexOf(\"on\"));'";
		}
		else
			tmp += " width='22' height='16' ";
		tmp += ">";
		return tmp;
	}
/*
* GnooCalendar.dList()
* retourne le tableau des jours
*/
	this.dList=function()
	{
		var cur=new Number(1);
		var tmpDate = new Date();
		var tmp = new String("<table cellpadding='0' cellspacing='0' class='Gtab'>");
		tmpDate.setDate(cur);
		tmpDate.setMonth(this.curMonth);
		tmpDate.setFullYear(this.curYear);
		tmp += "<tr>\n";
		for(var i=1; i<this.day.length; i++)
			tmp += "<td class='Gh"+i+"'>"+ this.day[i] +"</td>\n";
		tmp += "<td class='Gh0'>"+ this.day[0] +"</td>\n";
		tmp += "</tr>\n";
		for(var j=0; j<6; j++)
		{
			tmp += "<tr>\n";
			for(var i=1; i<this.day.length; i++)
			{
				tmpDate.setDate(cur);			
				if( cur<=31 && i==tmpDate.getDay() && this.curMonth==tmpDate.getMonth())
				{
					tmp += this.dayCell(cur,i);
					tmp += this.getLink(cur);
					cur+=1;
				}
				else
				{
					tmp += "<td class='Gc"+i+"'";
					tmp += ">&nbsp;";
				}
				tmp += "</td>\n";
				tmpDate.setDate(cur);
			}
			if( cur==tmpDate.getDate() && this.curMonth==tmpDate.getMonth())
			{
				tmp += this.dayCell(cur,0);
				tmp += this.getLink(cur);
				cur+=1;
			}
			else
			{
				tmp += "<td class='Gc0'";
				tmp += ">&nbsp;";
			}
			tmp += "</td>\n</tr>\n";
		}
		tmp += "</table>\n";
		return tmp;
	}
/*
* GnooCalendar.getLink(c)
* retourne la balise d'un lien
*/
	this.getLink = function(c)
	{
		var tmp = new String("");
		if(document.layers)
		{
			tmp = "<a href='javascript://' ";
			tmp += "onclick='"+this.name+".getDate(\"";
			tmp += this.checkDate(c)+"-";
			tmp += this.checkDate(1+parseInt(this.curMonth))+"-";
			tmp += this.curYear+"\"";
			tmp += ");' class='NSday'>"+(c)+"</a>";
		}
		else
		{
			tmp = (c);
		}
		return tmp;
	}
/*
* GnooCalendar.setMonth( Integer m )
* modifie le mois à afficher
*/
	this.setMonth = function(m)
	{
		this.curMonth = m;
		this.show();
		return;
	}
/*
* GnooCalendar.getYear( Integer y )
* modifie l'année à afficher
*/
	this.getYear = function (y)
	{
		if(document.layers)
		{
			for(var i=0; i<document.layers[this.div].document.forms[this.name+"_form"][this.name+"year"].length; i++)
			{
				if(document.layers[this.div].document.forms[this.name+"_form"][this.name+"year"][i].value==y)
				{
					document.layers[this.div].document.forms[this.name+"_form"][this.name+"year"].selectedIndex=i;
					this.setYear(y);
					return;
				}
			}
		}
		else
		{
			for(var i=0; i<document.forms[this.name+"_form"].elements[this.name+"year"].length; i++)
			{
				if(document.forms[this.name+"_form"].elements[this.name+"year"][i].value==y)
				{
					document.forms[this.name+"_form"].elements[this.name+"year"].selectedIndex=i;
					this.setYear(y);
					return;
				}
			}
		}
		return;
	}
/*
* GnooCalendar.getMonth( Integer m )
* modifie le mois à afficher
*/
	this.getMonth = function (d)
	{
		if(document.layers)
		{
			for(var i=0; i<document.layers[this.div].document.forms[this.name+"_form"][this.name+"month"].length; i++)
			{
				if(document.layers[this.div].document.forms[this.name+"_form"][this.name+"month"][i].value==d)
				{
					document.layers[this.div].document.forms[this.name+"_form"][this.name+"month"].selectedIndex=i;
					this.setMonth(d);
					return;
				}
			}
		}
		else
		{
			for(var i=0; i<document.forms[this.name+"_form"].elements[this.name+"month"].length; i++)
			{
				if(document.forms[this.name+"_form"].elements[this.name+"month"][i].value==d)
				{
					document.forms[this.name+"_form"].elements[this.name+"month"].selectedIndex=i;
					this.setMonth(d);
					return;
				}
			}
		}
		return;
	}
/*
* GnooCalendar.setYear( Integer y )
* modifie l'année à afficher
*/
	this.setYear = function (y)
	{
		this.curYear = y;
		this.show();
		return;
	}
/*
* GnooCalendar.setTarget( Object obj )
* change le champs cible d'affichage de la date
* BUG OPERA!
*/
	this.setTarget = function (obj)
	{
		this.target = obj;
		return;
	}
/*
* GnooCalendar.hide()
* masque le calendrier
*/
	this.hide = function()
	{
		if(document.layers)
			document.layers[this.div].visibility='hide';
		else
		{
			document.getElementById(this.div).style.visibility = 'hidden';
			document.getElementById(this.div).style.display = 'none';
		}
		this.vis = false;
		this.endMove();
		return;
	}

/*
* GnooCalendar.getDate()
* retourne la date selectionnée dans le champs cible
*/
	this.getDate = function(d)
	{
		//alert(this.target.name);
		if(this.target!=null)
		{
			this.target.value=d;	
			this.hide();
			// modif Damien
			// pour les capteurs
			if ( this.target.onchange )
				this.target.onchange();
		}
		// Modif hugues 06/01/2006
			var j = 0;
			var oth;
			if(this.id = 1){
				for(var i=0; i<k_champs_liste.length; i++){
					if(k_champs_s_type[i] == 'CALENDRIER'){
						if(k_champs_liste[i] == 'datedeb'){
							j++;
							oth = MM_findObj('datefin');
						}
					}
				}
			}
			if(oth != null){
				if(oth.value == ''){
					oth.value = d;
				}
			}
		return;
	}

/*
* GnooCalendar.show()
* affiche le calendrier
*/
	this.show = function()
	{
		this.vis = true;
		this.tag = "<form name='"+this.name+"_form' method='post'>\n";
		this.tag += this.mList();
		this.tag += "</form>\n";
		if(document.layers)
		{
			with(document.layers[this.div])
			{				
				document.open("text/html");
				document.write(this.tag);
				document.close();
				visibility='show';
			}
		}
		else
		{
			document.getElementById(this.div).innerHTML = ""+this.tag;
			document.getElementById(this.div).style.visibility = 'visible';
			document.getElementById(this.div).style.display = 'block';
		}
		return;
	}

	this.openClose = function(champ)
	{
		if(this.vis == false)
		{	
			// Modif Hugues 06/01/2006 : Récupération de la date courante pour initialiser le calendrier
			
			// Modif Hugues 06/01/2006
			this.gnoo_affect_date(MM_findObj(champ).value);
			this.show();
		}
		else
		{
			if(this.openClose.arguments.length > 1){
				this.methode = this.openClose.arguments[1];
			}
			this.hide();
		}
		return;
	}

	//Défini l'endroit ou le calendrier doit apparaitre
	this.placement = function(e)
	{
		var divId="div_CL"+this.name;
		var pictoId="picto_CL"+this.name;

		if(document.images[pictoId] && navigator.appName!=="Microsoft Internet Explorer")
		{
			var y_CL = document.images[pictoId].y + 3 + "px";
			var x_CL = document.images[pictoId].x + document.images[pictoId].width + 5 + "px";
			document.getElementById(divId).style.top = y_CL;
			document.getElementById(divId).style.left = x_CL;
		}
		else
		{
			x = (navigator.appName.substring(0,3) == "Net") ? e.pageX : event.x+document.body.scrollLeft;
			y = (navigator.appName.substring(0,3) == "Net") ? e.pageY : event.y+document.body.scrollTop;
			document.getElementById(divId).style.top = (y+20)+"px";
			document.getElementById(divId).style.left = (x-70)+"px";
		}
	}

	this.init = function(d, obj, val)
	{
		var bout;
		this.div=d;
		this.target = obj;
		this.date=new Date();
		this.date.setDate(1);	
		// Modif Hugues 06/01/2006
		this.gnoo_affect_date(val);
		this.curMonth = this.date.getMonth();
		this.curYear = this.date.getFullYear();
		if(!self.movingCalendar)
			self.movingCalendar=null;
		document.getElementById(this.boutName).onclick=this.placement;
		return;
	}

/*
* GnooCalendar.checkDate( Integer d )
* paramêtre : le jour d'une date
*/
	this.checkDate = function(d)
	{
		if(parseInt(d)<=9)
			return "0"+parseInt(d);
		return parseInt(d);
	}



	return this;

}
/******************************/
GnooCalendar.prototype.day = ["D", "L", "M", "M", "J", "V", "S" ];
GnooCalendar.prototype.month = ["Janvier", 
				"F&eacute;vrier", 
				"Mars", 
				"Avril", 
				"Mai", 
				"Juin", 
				"Juillet", 
				"Ao&ucirc;t", 
				"Septembre", 
				"Octobre", 
				"Novembre", 
				"D&eacute;cembre"];
/* jours feriés français */
GnooCalendar.prototype.freeday= ["01/01","01/05","08/05","14/07","15/08","01/11","11/11","25/12"];
/******************************/



/*** / GnooCalendar */


var COLOR_PIKER_COLORS = new Array("#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099","#3300CC",
							"#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099",
							"#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066",
							"#FF0099","#FF00CC","#FF00FF","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333",
							"#333366","#333399","#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300",
							"#993333","#993366","#993399","#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF",
							"#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#006600","#006633","#006666","#006699","#0066CC",
							"#0066FF","#336600","#336633","#336666","#336699","#3366CC","#3366FF","#666600","#666633","#666666","#666699",
							"#6666CC","#6666FF","#996600","#996633","#996666","#996699","#9966CC","#9966FF","#CC6600","#CC6633","#CC6666",
							"#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699","#FF66CC","#FF66FF","#009900","#009933",
							"#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999","#3399CC","#3399FF","#669900",
							"#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999","#9999CC","#9999FF",
							"#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999","#FF99CC",
							"#FF99FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99",
							"#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66",
							"#99CC99","#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33",
							"#FFCC66","#FFCC99","#FFCCCC","#FFCCFF","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00",
							"#33FF33","#33FF66","#33FF99","#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF",
							"#99FF00","#99FF33","#99FF66","#99FF99","#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC",
							"#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99","#FFFFCC","#FFFFFF");


function color_piker(){
	txt = '<table>';
	for(var i=0; i<COLOR_PIKER_COLORS.length; i++){
		if(i% 10 == 0){txt += '<tr>';}
		txt += '<td style="background-color:'+ COLOR_PIKER_COLORS[i]  +'"></td>';
		if(i% 10 == 0){txt += '</tr>';}

	}
	txt = '</table>';



}