//-------------------------- JS UTIL CC ----------------------------------------
String.prototype.trim = function(){return 
(this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""))}

function urlencode(url){
	// url : une url

	// urlencode une url mais prend	garde que les espaces soit remplac?s par des %20
	// et non des +
	// et que les +	soient remplac?s par des %2B (bug internet explorer...)

	url_encoded=escape(url);

	kjv=0;	// indice dans la chaine encod?e...
	kjv2=0;	// indice dans la chaine finale...
	vjk=0;	// indice dans la chaine non encod?e...
	url_encoded_space=url_encoded;
	while (kjv<url_encoded.length)
	{
			curcar=url_encoded.charAt(kjv);

			if (curcar=='+'	&& url.charAt(vjk)==' ')
					url_encoded_space=url_encoded_space.substring(0,kjv2)
															+'%20'
															+url_encoded_space.substring(kjv2+1);
			else if	(curcar=='+')
					url_encoded_space=url_encoded_space.substring(0,kjv2)
															+'%2B'
															+url_encoded_space.substring(kjv2+1);
			else if	(curcar=='%')
					kjv+=2;
			else
					kjv2-=2;

			kjv2+=3;
			kjv++;
			vjk++;
	}

	return url_encoded_space;
}

//Met le layer donn? (par son id) en invisible
function setInvisible(lay) {
	try {
		if (document.getElementById) {
			document.getElementById(lay).style.display='none';
		} else if(document.all){
			document.all(lay).style.display='none';
		} else{
			document.layers[lay].document.style.display='none';
		}
	} catch(ex) {
		alert("<MSX>Une erreur est survenue sur setInvisible : layer "+lay+" introuvable</MSX>");
	}
}
//Met le layer donn? (par son id) en visible
function setVisible(lay) {
	try {
		if (document.getElementById) {
			document.getElementById(lay).style.display='';
		} else if(document.all){
			document.all(lay).style.display='';
		} else{
			document.layers[lay].document.style.display='';
		}
	} catch(ex) {
		alert("<MSX>Une erreur est survenue sur setVisible : layer "+lay+" introuvable</MSX>");
	}
}
//Indique si le layer donné est visible...
function isVisible(lay) {
	try {
		if (document.getElementById) {
			return document.getElementById(lay).style.display=='';
		} else if(document.all){
			return document.all(lay).style.display=='';
		} else{
			return document.layers[lay].document.style.display=='';
		}
	} catch(ex) {
		return false;
	}
}
//Change le texte d'un span ou d'un div donn? par son id (lay)
function changeTxt(lay,txt) {
	if(txt==null || txt=="null" || txt=="" ) txt="&nbsp;";
	try {
		if (document.getElementById && !document.all && !document.layers) {
			if(document.getElementById(lay))
				document.getElementById(lay).innerHTML=txt;
		} else if(document.all){
			if(document.all(lay))
				document.all(lay).innerHTML=txt;
		} else{
			if(document.layers[lay]) {
				document.layers[lay].document.open();
				document.layers[lay].document.writeln(txt);
				document.layers[lay].document.close();
			}
		}
	} catch(ex) {
		alert("<MSX>Une erreur est survenue sur changeTxt : layer "+lay+" introuvable</MSX>");
	}
}

//retourne le texte d'un span ou d'un div donn? par son id (lay)
function getTxt(lay) {
	if (document.getElementById ) {
		if(document.getElementById(lay))
			return document.getElementById(lay).innerHTML;
	} else if(document.all){
		if(document.all(lay))
			return document.all(lay).innerHTML;
	} else{
		if(document.layers[lay]) {
			return document.layers[lay].innerHTML;
		}
	}
}


//Remplit un champs de formulaire, quelque soit le type de champ...
// e : l'element du formulaire (exemple : document.F1.champRadio)
// value : la valeur (ou les valeurs ?ventuelles en cas de select) ? mettre dans l'?l?ment
function changeValue(e, value) {
	if(e) {
		if(value==null || value=="null") value="";
		var etag;
		var etype;
		if(e.length) {
			etag=e[0].tagName.toLowerCase();
			if(e[0].type) etype=e[0].type.toLowerCase();
		} else {
			etag=e.tagName.toLowerCase();
			if(e.type) etype=e.type.toLowerCase();
		}
		if(etag=="input") {
			if(etype=="radio") {
				var i=0;
				while(i<e.length && e[i].value!=value) {
					e[i].checked=false;
					i++;
				}
				if(i!=e.length) e[i].checked=true;
			} else if(etype=="checkbox") {
				if(typeof(e.value)!="undefined") {
					e.checked=(e.value==value);
				} else {
					var i=0;
					while(i<e.length) {
						if(e[i].value==value) e[i].checked=true;
						i++;
					}
				}
			} else {
				e.value=value;
			}
		} else if(etag=="select" || etag=="option") {
			if((typeof(value)=="array")) {
				for(var i=0;i<e.options.length;i++) {
					e.options[i].selected=false;
				}
				for(var j=0;j<value.length;j++) {
					for(var i=0;i<i<e.options.length;i++) {
						if(e.options[i].value==value) e.options[i].selected=true;
					}
				}
			} else {
				for(var i=0;i<e.options.length;i++) {
					if(e.options[i].value==value) e.options[i].selected=true;
					else e.options[i].selected=false;
				}
			}
		} else {
			e.value=value;
		}
	}
}

// permet d'obtenir le value d'un bouton appartenant ? un groupe de bouton de m?me nom
function getValuefromCheckedRadio(rad){
	if(rad){
		for(var k=0;k<rad.length;k++) {
			if(rad[k].checked) {
				return rad[k].value ;
			}
		}
	}
	return null ;
}
function getCheckedValues(e, sep) {
	if(!sep) sep="|";
	var d="";
	if(e.length) {
		for(var k=0 ; k < e.length ; k++) {
			if(e[k].checked) {
				if(d!="") d+=sep;
				d+=e[k].value ;
			}
		}
	} else {
		if(e.checked) {
			d+=e.value;
		}
	}
	return d;
}
function getValue(e, sep) {
	if(!sep) sep="|";
	if(!e) return "";
	if(e.length && isNaN(e.selectedIndex)) return getCheckedValues(e, sep);
	var etype;
	var etag=e.tagName.toLowerCase();
	var ename=e.name;
	if(e.type) etype=e.type.toLowerCase();
	var d="";
	if(ename && ename!= "") {
		if(etag=="input") {
			if(etype=="radio") {
				d=getCheckedValues(e, sep);
			} else if(etype=="checkbox") {
				d=getCheckedValues(e, sep);
			} else {
				d=e.value;
			}
		} else if(etag=="select" || etag=="option") {
			for(var i=0;i<e.options.length;i++) {
				if(e.options[i].selected) {
					if(d!="") d+=sep;
					d+=e.options[i].value;
				}
			}
		} else {
			d=e.value;
		}
	}
	return d;
}

function getFormData(f)	{
	var d="";
	if(f && f.tagName && f.tagName.toUpperCase()=="FORM") {
		for(var k=0;k<f.elements.length;k++) {
			var e = f.elements[k];
			if(!e.disabled) {
				var etype;
				var etag=e.tagName.toLowerCase();
				var ename=e.name;
				if(e.type) etype=e.type.toLowerCase();

				if(ename && ename!= "") {
					if(etag=="input") {
						if(etype=="radio") {
							if(e.checked) {
								if(d!="") d+="&";
								d+=ename+"="+urlencode(e.value);
							}
						} else if(etype=="checkbox") {
							if(e.checked) {
								if(d!="") d+="&";
								d+=ename+"="+urlencode(e.value);
							}
						} else {
							if(d!="") d+="&";
							d+=ename+"="+urlencode(e.value);
						}
					} else if(etag=="select" || etag=="option") {
						for(var i=0;i<e.options.length;i++) {
							if(e.options[i].selected) {
								if(d!="") d+="&";
								d+=ename+"="+urlencode(e.options[i].value);
							}
						}
					} else {
						if(d!="") d+="&";
						d+=ename+"="+urlencode(e.value);
					}
				}
			}
		}
	}
	return d;
}

function getValueFromKey(key, data) {
	var td=data.split("&");
	for(i=0 ; i<td.length ; i++) {
		var ttd=td[i].split("=");
		if(ttd[0]==key) return unescape(ttd[1]);
	}
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function affOk(msg) {
	var d= document.getElementById('affMsg');
	d.innerHTML=msg;
	setVisible('affMsg');
	d.style.top=document.documentElement.scrollTop+(document.documentElement.clientHeight-0)/2-(d.offsetHeight-0)/2;
	d.style.left=document.documentElement.scrollLeft+(document.documentElement.clientWidth-0)/2-(d.offsetWidth-0)/2;
	setTimeout("setInvisible('affMsg');", 2500);
}

function SaisieDate(champ)
{
	var date = champ.value;
	var nouvdate=controleDate(date);
	if (nouvdate!=null)
	{
		champ.value = nouvdate;
		return true;
	}
	// erreur de saisie
	champ.focus();
	champ.value = "";
	return false;
}


function controleDate(ladate)
{
	var jour, mois, annee;
	if (ladate.match("^$")) return("");

	if (ladate.match("^([0-9]{1,2})[-/. ][0-9]{1,2}[-/. ][0-9]{2,2}$"))
	{
		jour=parseInt(ladate.split(/[-/. ]/)[0],10);
		mois=parseInt(ladate.split(/[-/. ]/)[1],10);
		annee=parseInt(ladate.split(/[-/. ]/)[2],10);
		if (annee>=38) annee+=1900; else annee+=2000;
	}
	else if (ladate.match("^[0-9]{1,2}[-/. ][0-9]{1,2}[-/. ][0-9]{4,4}$"))
	{
		jour=parseInt(ladate.split(/[-/. ]/)[0],10);
		mois=parseInt(ladate.split(/[-/. ]/)[1],10);
		annee=parseInt(ladate.split(/[-/. ]/)[2],10);
	}
	else if (ladate.match("^[0-9]{6,6}$"))
	{
		jour=parseInt(ladate.substring(0,2),10);
		mois=parseInt(ladate.substring(2,4),10);
		annee=parseInt(ladate.substring(4),10);
		if (annee>=10)
		{
			annee+=1900;
		}
		else
		{
			annee+=2000;
		}
	}
	else if (ladate.match("^[0-9]{8,8}$"))
	{
		jour=parseInt(ladate.substring(0,2),10);
		mois=parseInt(ladate.substring(2,4),10);
		annee=parseInt(ladate.substring(4),10);
	}
	else
	{
		return null;
	}
	d=new Date(annee, mois-1, jour);
        if (d.getFullYear()!=annee || d.getMonth()!=mois-1 || d.getDate()!=jour)
        {
         return null;
        }

	return (remplir_0_2(jour)+"/"+remplir_0_2(mois)+"/"+annee);
}


function initDatePicker(selector, arg2) {
	if(arg2) {
		$(selector, arg2).datepicker({
			dateFormat: "dd/mm/yy",
			closeText:'X',
			currentText: "Selection",
			dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
			dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],
			dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],
			monthNames: ['Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin','Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre','D&eacute;cembre'],
			monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun','Jui','Aou','Sep','Oct','Nov','Dec'],
			firstDay:1,
			gotoCurrent: true,
			navigationAsDateFormat: true,
			prevText: '<MM yy',
			nextText: 'MM yy>',
			showOtherMonths: true
		});
	} else {
		$(selector).datepicker({
			dateFormat: "dd/mm/yy",
			buttonImage: 'images/calendrier.gif',
			buttonImageOnly: true,
			buttonText: "Choisir dans le calendrier",
			showOn: "button",
			closeText:'X',
			currentText: "Selection",
			dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
			dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],
			dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],
			monthNames: ['Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin','Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre','D&eacute;cembre'],
			monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun','Jui','Aou','Sep','Oct','Nov','Dec'],
			firstDay:1,
			gotoCurrent: true,
			navigationAsDateFormat: true,
			prevText: '<MM yy',
			nextText: 'MM yy>',
			showOtherMonths: true,
			showAnim:'show'
		});
	}
	$(".ui-datepicker").css("z-index", "100003");
}

function remplir_0_2(n) {
	var r="";
	if(n < 10) r="0"+n;
	else r=""+n;
	return r;
}

function stripslashesFromJson(txt) {
	return txt.replace(new RegExp("\\\\'", "g"), "'");
}

/* Retourne une date js à partir d'une date au format jj/mm/aaaa
*/
function date2js(ladate) {
	var jour, mois, annee;
	if (ladate.match("^[0-9]{1,2}[-/. ][0-9]{1,2}[-/. ][0-9]{4,4}$")) {
		jour=parseInt(ladate.split(/[-/. ]/)[0],10);
		mois=parseInt(ladate.split(/[-/. ]/)[1],10);
		annee=parseInt(ladate.split(/[-/. ]/)[2],10);
	}
	return new Date(annee, mois-1, jour);
}

/* Fonctions spécifiques aux checkbox-listes (ckliste) */
/* Lorsque la checkbox Tous est cliquée */
function cklAll(o) {
	var id=o.name.substring(0,o.name.length-3);
	if(o.checked) {
		$("#"+id+" input").attr("checked", "checked");
	} else {
		$("#"+id+" input").attr("checked", "");
	}
}
/* Lorsqu'une checkbox est cochée */
function ckl1(o) {
	var id=o.name.substring(0,o.name.length-2);
	if(!o.checked) {
		$("#"+id+"All").attr("checked", "");
	}
}
/* Pour (re)charger une checkbox-liste en dynamique */
function reloadCheckListe(id, req, titre) {
	if(!titre) titre=$("#"+id+" .title").html();
	var allowAll=$("#"+id+"All").html()!=null;
	var h=$("#"+id).css("height");
	var res=HttpReq("_utilsAjax.php", "action=getHtmlListeCheckbox&idField="+id+"&title="+titre+"&allowAll="+(allowAll?"1":"0")+"&req="+urlencode(req));
	$("#"+id).html( $('<div>').html(res).children().html() );
	$("#"+id+" .content").css("height", h);
	$("#"+id+" .content label").mouseover(function(e) { if($(this).attr("title")=="") $(this).attr("title", $(this).html()); });
	$("#"+id+" .content td:odd").addClass("even");
}