String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

/*
 * permet de soumettre un formuaire
 * et d'asigner field avec value avant.
 * */
function submitForm(node,button)
{
	button.click();
}

function browserInfos()
{
	var ret = new Object();
	if (window.innerWidth) //if browser supports window.innerWidth
	{
		ret.width = window.innerWidth;
		ret.height = window.innerHeight;
		ret.left = window.pageXOffset;
		ret.top = window.pageYOffset
	}
	else if (document.all) //else if browser supports document.all (IE 4+)
	{
		ret.width = document.body.clientWidth;
		ret.height = document.body.clientHeight;
		ret.left = document.body.scrollLeft
		ret.top = document.body.scrollTop
	}
	
	return ret;
}

function mouseX(evt) {
	if (evt.pageX) return evt.pageX;
	else if (evt.clientX)
	   return evt.clientX + (document.documentElement.scrollLeft ?
	   document.documentElement.scrollLeft :
	   document.body.scrollLeft);
	else return null;
}
function mouseY(evt) {
	if (evt.pageY) return evt.pageY;
	else if (evt.clientY)
	   return evt.clientY + (document.documentElement.scrollTop ?
	   document.documentElement.scrollTop :
	   document.body.scrollTop);
	else return null;
}

function parentForm(node)
{
	while(node && node.nodeName)
	{
		if (node.nodeName.toUpperCase()=='BODY') return null;
		if(node.nodeName.toUpperCase()=='FORM')
			return node;
		node = node.parentNode;
		
	}
	return null;
}

function idF(id) //un raccourci de document.getElementById
{
	return document.getElementById(id);
}

function gotoURL(target,url,addHTTP)
{
	if (!url) return;
	if (addHTTP) url='http://'+url;
	window.open(url,target,'');
	return;
}

function firstTR(table)
{
	var tr = firstChildType1(table);
	if (!tr) return null;
	while (tr.nodeName != 'TBODY') tr = nextSiblingType1(tr);
	return firstChildType1(tr);
}

function firstChildType1(n)
{
	var f = n.firstChild;
	if (!f) return null;
	while(f && f.nodeType != 1) f = f.nextSibling;
	return f;
}

function firstChildOfType(n,tp)
{
	var f = n.firstChild;
	if (!f) return null;
	while(f && (f.nodeType != 1 || f.nodeName!=tp)) f = f.nextSibling;
	return f;	
}

function nextSiblingType1(n)
{
	if (!n) return null;
	do{
		 n = n.nextSibling;
	}
	while(n && n.nodeType != 1);
	return n;
}

/*
 * overture fermeture d'une div
 * */
function openCloseDiv(f , divid,modifyHeight)
{
	if (!f) return;
	if (divid=='') return;
	var d =idF(divid);
	if (!d) return;
	var img = f.firstChild;
	var oval = f.getAttribute('opened');
	if (oval != 'yes')
	{
		f.setAttribute('opened','yes');
		img.src='images/fleche-b.png';
		d.style.visibility='visible';
		if (modifyHeight)
		{
			d.style.height='';
		}
	}
	else
	{
		f.setAttribute('opened','no');
		img.src='images/fleche-dr.png';
		d.style.visibility='hidden';
		if (modifyHeight)
		{
			d.style.height='1px';
		}
	}
}
function fieldValue(o)
{
	if (!o) return false;
	var nm = o.nodeName.toLowerCase();
	
	if (o.value) return o.value;
	
	if (nm=='textarea')
	{
		return nm.value;
	}
	
	if (nm=='select')
	{
		return o.options[o.selectedIndex].value;
	}
	return o.value;

}
//pour les champs qui doivent etre posés
function errTest(champ,fonction,errBool,errMessage)
{
	var v = fieldValue(champ);
	


	if (errBool == fonction(v))
	{
		
		alert(errMessage);
		champ.focus();
		return false;
	}
	return true;
}
//pour les champs vides ou posés
function emptyOrErr(champ,fonction,errBool,errMessage)
{
	var v = fieldValue(champ);
	if (v=='') return true;
	return errTest(champ,fonction,errBool,errMessage);
}

function chaineVide(s)
{
	if (s=='') return true;
	return false
}

function validPassword(caracteres, taillemin,taillemax,valeur)
{
	if (taillemin == 0) taillemin = 6;
	if (taillemax == 0) taillemax = 16;
	if (taillemax < taillemin) taillemax = taillemin;
	if (valeur.length < taillemin)
	{
		alert('Le mot de passe doit faire au moins '+taillemin+' caractères.');
		return false;
	}
	if (valeur.length > taillemax)
	{
		alert('Le mot de passe doit faire moins de ' + taillemax + ' caractères.');
		return false;
	}
	if (caracteres=='') caracteres='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!&#$+';
	var ret=true;
	var i=0; var c=''; var forbid='';
	for (i=0; i < valeur.length; i++)
	{
		c = valeur.charAt(i);
		if (valeur.indexOf(c,0)==-1)
		{
			if (forbid.indexOf(c,0)==-1)forbid = forbid + c;
		}
	}
	if (forbid != '') ret = forbid;
	return ret;
}

function isInteger(n)
{
	var rg = new RegExp('^[+-]?[0-9]+$');
	return rg.test(n);
}

function isPositiveInteger(n)
{
	var rg = new RegExp('^[+]?[0-9]+$');
	return rg.test(n);
}

function isNegativeInteger(n)
{
	var rg = new RegExp('^[-][0-9]+$');
	return rg.test(n);
}

function isPositiveFloat(n)
{
	var rg = new RegExp('^[+]?[0-9]+([,.][0-9]+)?$');
	return rg.test(n);
}

function isNegativeFloat(n)
{
	var rg = new RegExp('^[-][0-9]+([,.][0-9]+)?$');
	return rg.test(n);
}

function isFloat(n)
{
	var rg = new RegExp('^[-+]?[0-9]+([,.][0-9]+)?$');
	return rg.test(n);
}

function codepostal_fr(c)
{
	var rg = new RegExp('^[0-9]{5}$');
	return rg.test(c);
}

function telephone_fr(t,international_needed)
{
	//international_needed = true => obligatoire
	var s = '';
	if (international_needed)
	{
		s='^[+]33 +[0-9]{9}$';
	}
	else
	{
		s='^([+]33 +|0)[0-9]{9}$';
	}
	var rg = new RegExp(s);
	return rg.test(t);
}

function siret_fr(v)
{
	var s='^[0-9]{14}$';
	var rg = new RegExp(s);
	return rg.test(v);
}

function telephone_national_fr(t)
{
	return telephone_fr(t,false);
}

function isEmail(e)
{
	var validRegExp = '^[^@]+@[^@]+.[a-z]{2,}$';
	var rg = new RegExp(validRegExp);
	return rg.test(e);
}

function isDate_fr(d)
{
	var validRegExp = '^[0-3]?[0-9][/][01]?[0-9][/][0-9]{4}$';
	var rg = new RegExp(validRegExp);
	return rg.test(d);
}
