function isset(varname) { return eval('typeof(' + varname + ') != "undefined"'); }

function getRadioValue(radioName)
{
	var radioControl = document.getElementsByName(radioName);
	for (i=0; i<radioControl.length ; i++)
	{
		if (radioControl[i].checked) 
		{
			return radioControl[i].value;
		}
	}
	return "";
}

function setRadioValue(radioName, value)
{
	var radioControl = document.getElementsByName(radioName);
	var found = 0;
	for (i=0; (i<radioControl.length) && (0 == found); i++)
	{
		if (radioControl[i].value == value) 
		{
			radioControl[i].checked = true;
			found = true;
		}
	}
}

// --------------------------------------------------------------------------------------------------
// function isRibValid()
// calcul/vérification de la validité d'un RIB/RIP (Relevé d'Identité Bancaire/Postale)
// accepte 3 ou 4 arguments
// - 3 arguments : code banque (numérique)
// code guichet (numérique)
// numéro de compte (alpha)
// La fonction retourne alors la clé RIB Calculée
// - 4 arguments : Clé RIB en plus (numérique)
// La fonction retourne alors un booleen indiquant si le RIB est valide
//
// Attention : la validité des arguments (code bqe numérique, numéro de compte à 11 caractères, etc ...) n'est pas contrôlée par la fonction.
// --------------------------------------------------------------------------------------------------
function isRIBvalid()
{
   if (isRIBvalid.arguments.length>=3)
       {
       var bqe=isRIBvalid.arguments[0];
       var gui=isRIBvalid.arguments[1];
       var cpt=isRIBvalid.arguments[2].toUpperCase();
       var tab= "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
       var tab1="123456789123456789234567890123456789".split("");
       while (cpt.match(/\D/) != null)
           cpt=cpt.replace(/\D/, tab1[tab.indexOf(cpt.match(/\D/))]);
       var cp=parseInt (cpt, 10);
       
       a=bqe%97;
       a=a*100000+parseInt(gui, 10);
       a=a%97;
       a=a*Math.pow(10, 11) + cp;
       a=a%97
       a=a*100;
       a=a%97
       a=97-a;
       if (isRIBvalid.arguments.length>3)
           return isRIBvalid.arguments[3]==a;
       else
           return a;
       }
   else
       {
       return false;
       }
}

function getEmailRegexp()
{
	var userRE = "([0-9a-zA-Z]+[-._+&'])*[0-9a-zA-Z]+";
	var hostRE = "([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+"

	// Infrastructure top-level domain - only one at present
	var infraRE = "arpa";

	// Generic top-level domains RE.
	var genericRE = 
		"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
	
	// Country Code top-level domains RE
	var ccRE = 
		"ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|" +
		"bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|" +
		"ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|" +
		"hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|la|" +
		"lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|" +
		"mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|" +
		"ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|" +
		"to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";

	// Build top-level domain RE
	var a = [];
	a.push(infraRE);
	a.push(genericRE);
	a.push(ccRE);

	// Build e-mail RE
	var mailRE = userRE + "@" + hostRE;
	if (a.length > 0) {
		mailRE += "(" + a.join("|") + ")";
	}
	return mailRE;
}

function buildCall(params)
{
	var call = String(params[0])+"(";
	for(i = 1; i < params.length-1; i++)
	{
		call += "\""+params[i]+"\"";
	}
	if (params.length > 1)
	{
		call += "\""+String(params[params.length-1])+"\"";
	}
	call += ");";
	
	return call;
}

//# do something better
function callFunction(funcStr)
{
	if (funcStr.length > 0)
	{
		setTimeout(funcStr+"();",0);
	}
}

// Valable pour un appel, sans params
// Attention, inclure le JS avec la fonction à appeler en dernier
function js_include_once_wait(params)
{
	// Lance les demandes d'inclusion
	var i = 0;
	for (i=0; i< params.files.length; i++)
	{
		js_include_once(params.files[i]);
	}

	var funcTest = "";
	if (params.funcTest != null)
	{
		funcTest = params.funcTest;
	}
	else
	{
		funcTest = params.func;
	}

	// Si le fichier final n'est pas encore là,
	// on reprogramme la demande pour plus tard
	if (!isset(funcTest))
	{
		var call = "js_include_once_wait( ";
		call += " { func:\""+params.func+"\" ,";
		if (params.funcTest != null)
		{
			call += " funcTest:\""+params.funcTest+"\" ,";
		}
		call += " files: ["
		for (i=0; i< params.files.length-1; i++)
		{
			call += "\""+params.files[i]+"\",";
		}
		call += "\""+params.files[params.files.length-1]+"\"";
		call += " ] } );";
		setTimeout(call,100*params.files.length);
	}
	else // sinon on effectue l'appel
	{
		callFunction(params.func);
	}
}

function trim(str) {
	var	str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}