// Procédures globales du projet
// EXE_ExtraitChaine
// ------------------------------------------------------------------------------------------------
// Paramètres :
//	c : chaine de base
//	p : position de la sous-chaine recherchée
//	s : séparateur utilisé
//	n : sens de parcours	1 => sens inverse, autre (inclus undenfined) => sens normal

// Variables locales :
//	d : position de début de la chaine à extraire
//	f : position de fin de la chaine à extraire
//	i : compteur de boucle
function _EC(c,p,s,n)
{
	// on passe toujours par un tableau de chaînes
	var t=new Array();
	if(typeof(s)!=typeof(t))t[0]=s;else t=s;
	if (!(n == 1))
	{
		var d=0;
		// on recherche la position du p-1 ème séparateur
		for(var i=0;i<p-1;i++)
		{
			// on cherche la position de la prochaine occurrence du premier séparateur trouvé dans le tableau des séparateurs
			var m=-1;
			var l=0;
			for(var j=0;j<t.length;j++)
			{
				s=t[j];
				var k=c.indexOf(s,d);
				if((k>-1)&&((m<0)||(k<m)))
				{
					m=k;
					l=s.length;
				}
			}
			d=m+l;
			// si on ne trouve pas de séparateur, on renvoie soit tout, soit rien en fontion de la position demandée
			if(d==-1)return(p==1?c:"\b");
		}
		// on cherche le séparateur suivant parmi ceux du tableau des séparateurs
		var f=-1;
		for(var j=0;j<t.length;j++)
		{
			var k=c.indexOf(t[j],d);
			if((k>-1)&&((f<0)||(k<f)))f=k;
		}
		// si f a dépassé, on se place à la fin de la chaine
		if(f==-1)f=c.length;
		// finalement, on extrait et on retourne la sous chaine
		return c.substring(d,f);
	}
	else
	{
		var d = c.length;
		// on recherche la position du p-1 ème séparateur
		for(var i=0;i<p-1;i++)
		{
			// on cherche la position de la prochaine occurrence du premier séparateur trouvé dans le tableau des séparateurs
			var m=-1;
			for(var j=0;j<t.length;j++)
			{
				var k=c.lastIndexOf(t[j],d-1);
				if(k>m)m=k;
			}
			d=m;
			// si on ne trouve pas de séparateur, on renvoie soit tout, soit rien en fontion de la position demandée
			if (d == -1)	return (p==1?c:"\b");
		}
		// on cherche le séparateur suivant parmi ceux du tableau des séparateurs
		var f=-1;
		var l=0;
		for(var j=0;j<t.length;j++)
		{
			s=t[j];
			var k=c.lastIndexOf(s,d-1);
			if(k>f)
			{
				f=k;
				l=s.length;
			}
		}
		f+=l;
		// si f a dépassé, on se place au début de la chaine
		if (f == -1)return c.substr(0, d);
		// finalement, on extrait et on retourne la sous chaine
		return c.substr(f, d - f);
	}
}
// EXE_SansEspace
// ------------------------------------------------------------------------------------------------
// Paramètres :
//	c : chaine à traiter
//	o : option indiquant de quel côté on doit retirer les espaces
//						  1 = à gauche , 2 = à droite , 3 = les deux
// Variables locales :
//	d : position de début de la chaîne résultat désirée
//	f : position de fin de la chaîne résultat désirée
function _SAE(c,o)
{
	var d=0;
	// On force la conversion en chaine
	c += ""
	var f=c.length-1;
	// Si on a demandé sans espace à gauche
	if(o&1)while(c.charAt(d)==" ")d++;
	// Si on a demandé sans espace à droite
	if(o&2)while(c.charAt(f)==" ")f--;
	// Sécurité si la chaine n'ets faite que d'espaces
	if (f < d) f= d;
	// On découpe la sous chaine
	return c.substring(d,f+1);
}
function PROCEDURESGLOBALESDECOMMERCENAVIGATEUR_BVERIFEMAIL(VPSEMAIL, VPSLISTEEX)
{
	{
	var VSEMAIL=VPSEMAIL.toUpperCase();
	if((Position(VSEMAIL,"@",null)==0))
	{
		return(false);
	}
	var VSSUFFIXE=_EC(VSEMAIL,2,"@",0);
	if((Position(VSSUFFIXE,".",null)==0))
	{
		return(false);
	}
	var VNDEBUT=0;
	var VNPOS=0;
	while(true)
	{
		VNDEBUT=Position(VSSUFFIXE,".",(VNDEBUT+1));
		if((VNDEBUT==0))
		{
			break;
		}
		VNPOS=VNDEBUT;
	}
	VSSUFFIXE=(VSSUFFIXE + "").substr((VNPOS+1)-1);
	if((_SAE(VSSUFFIXE,3).toUpperCase()==_SAE("",3).toUpperCase()))
	{
		return(false);
	}
	VSSUFFIXE=(("."+_SAE(VSSUFFIXE,3))+"|");
	if((Position(VPSLISTEEX,VSSUFFIXE,null)==0))
	{
		return(false);
	}
	return(true);
}
}
