/////////////////////////////////////////////////////////////////////
//                  FormLib v1.01 ©2002, Leblanc                   //
//                  Last modif BC 2005                             //
/////////////////////////////////////////////////////////////////////
function testInputRadioRequired(radioArray, erreur)
{
	if (radioArray.length > 0)
	{
		for (i=0; i < radioArray.length; i++)
		{
			if(radioArray[i].checked)
				return true;
		}

		alert(erreur);
		radioArray[0].focus();
		return false;
	}
	return true;
}

function testInputRIB(code_banque, code_agence, no_compte, cle_rib, erreur)
{
	if (rib=verifie_cle_rib(code_banque.value, code_agence.value, no_compte.value, cle_rib.value))
	{
		code_banque.value=rib.substr(0,5);
		code_agence.value=rib.substr(5,5);
		no_compte.value=rib.substr(10,11);
		cle_rib.value=rib.substr(21,2);
		return true;
	}
	else
	{
		alert(erreur);
		code_banque.focus();
		return false;
	}
}

function testInputCleInterne(code_agence, no_compte, cle_interne, erreur)
{
	if (compte = verifie_cle_interne(code_agence.value, no_compte.value, cle_interne.value))
	{
		code_agence.value = compte.substr(0,5);
		no_compte.value = compte.substr(5,6);
		cle_interne.value = compte.substr(11,2);
		return true;
	}
	else
	{
		alert(erreur);
		code_agence.focus();
		return false;
	}
}

correspondances=new Array(	1, 2, 3, 4, 5, 6, 7, 8, 9,
							1, 2, 3, 4, 5, 6, 7, 8, 9,
							2, 3, 4, 5, 6, 7, 8, 9)

function verifie_cle_rib(code_banque, code_agence, no_compte, cle_rib)
{
	code_banque=""+code_banque;
	code_agence=""+code_agence;
	no_compte=""+no_compte;
	cle_rib=parseInt(stripZeroes(cle_rib));

	for (i=code_banque.length; i < 5; i++)
	{
		code_banque="0"+code_banque;
	}

	for (i=code_agence.length; i < 5; i++)
	{
		code_agence="0"+code_agence;
	}

	for (i=no_compte.length; i < 11; i++)
	{
		no_compte="0"+no_compte;
	}

	temp=code_banque+code_agence+no_compte;

	temp=temp.toUpperCase();

	lettreA="A";
	bla2=lettreA.charCodeAt(0);
	temp2="";
	for (i=temp.length-1; i >= 0; i--)
	{
		if (temp.charAt(i) > '9')
		{
			bla=temp.charCodeAt(i);
			temp2=""+correspondances[bla-bla2]+temp2;
		}
		else
		{
			temp2=temp.charAt(i)+temp2;
		}
	}

	A=parseInt(temp2.substr(0, 5), 10);
	B=parseInt(temp2.substr(5, 5), 10);
	C=parseInt(temp2.substr(10, 11), 10);
//alert(C);
	A=8*A % 97;
	B=97-(15*B % 97);
	C=97-(3*C % 97);
//alert(A+" "+B+" "+C);
	D=(A+B+C) % 97;

	if (D==0)
	{
		D=97;
	}

	//alert(D);
	
	if (D == cle_rib)
	{
		cle_rib=""+cle_rib;
		for (i=cle_rib.length; i < 2; i++)
		{
			cle_rib="0"+cle_rib;
		}
		return temp+cle_rib;
	}
	else
	{
		return false;
	}
}

function verifie_cle_interne(code_siege, compte, cle)
{
	temp = (parseInt(code_siege, 10) * 1000000 + parseInt(compte, 10)) * 100;
	quotient = Math.floor(temp / 97);

	reste = temp - quotient * 97;

	cle_calculee = 97 - reste;

	cle = parseInt(cle, 10);
	if (cle_calculee == cle)
	{
		temp = temp + cle;
		temp = new String(temp);
		for (i = temp.length; i < 13; i++)
		{
			temp = "0" + temp;
		}
		return temp;
	}
	else
	{
		return false;
	}
}

function stripZeroes(str)
{
	for (i=0; i < str.length; i++)
	{
		if (str.charAt(i) != "0")
			break;
	}

	if (i == str.length)
	{
		return "0";
	}
	else
	{
		return str.substr(i);
	}
}

function testInputCurrency(input, errorMsg)
{
	cur=input.value.replace(",", ".")
	temp=cur.indexOf(".");
	temp=(temp != -1) ? temp: cur.length;

	part1=cur.substr(0, temp);
	part2=cur.substr(temp+1);
	
	if (!isNumber(part1) || !isNumber(part2))
	{
		alert(errorMsg);
		input.focus();
		return false;
	}

	if (part1 == "")
	{
		part1="0";
	}

	if (part2 == "")
	{
		part2="00";
	}
	else if (parseInt(part2) < 10)
	{
		part2=part2+"0";
	}

	input.value=part1+"."+part2.substr(0, 2);
	return true;
}

function testInputSignedCurrency(input, errorMsg)
{
		cur2=input.value.replace("+", "");
		cur=cur2.replace(",", ".");
		
		deb=cur.indexOf("-");
		
		if(deb>0)
		{	alert(errorMsg);
			input.focus();
			return false;
		}
		else 
		{	deb=(deb == -1) ? 0:1;
			signe=(deb == 1) ? "-":"";
			
		}
		
		temp=cur.indexOf(".");
		temp=(temp != -1) ? temp: cur.length;
	
		part1=cur.substr(deb, temp-deb);
		part2=cur.substr(temp+1);
				
		if (!isNumber(part1) || !isNumber(part2))
		{
			alert(errorMsg);
			input.focus();
			return false;
		}
	
		if (part1 == "")
		{
			part1="0";
		}
	
		if (part2 == "")
		{
			part2="00";
		}
		else if (parseInt(part2) < 10)
		{
			part2=part2+"0";
		}
	
		if(part1=="0"&&part2=="00")
		{
			signe=""; //Pas de -0
		}
	
		input.value=signe+part1+"."+part2.substr(0, 2);
		return true;
}

function compareDates(date1, date2)
{
	year1=date1.substr(6, 4);
	year2=date2.substr(6, 4);
	if (year1 != year2)
	{
		return year2-year1;
	}

	month1=date1.substr(3, 2);
	month2=date2.substr(3, 2);

	if (month1 != month2)
	{
		return month2-month1;
	}

	day1=date1.substr(0, 2);
	day2=date2.substr(0, 2);

	if (day1 != day2)
	{
		return day2-day1;
	}
	return 0;
}


function testInputRequired(input, errorMsg)
{
	if (input.value == "")
	{
		alert(errorMsg);
		input.focus();
		return false;
	}

	return true;
}

function testInputEmail(input, errorMsg, restrictDomain)
{
	email=isEmail(input.value, restrictDomain);
	if (email != false)
	{
		input.value=email;
		return true;
	}
	else
	{
		if (errorMsg)
		{
			alert(errorMsg);
			input.focus();
		}
		return false;
	}
}


function isEmail(email, restrictDomain)
{
	temp=email.indexOf("@")
	if ( temp == -1)
	{
		if (restrictDomain && email.length > 0)
		{
			return email+"@"+restrictDomain;
		}
		else
		{
			return false;
		}
	}

	nom=email.substr(0, temp);
	domaine=email.substr(temp+1);

	temp=domaine.indexOf(".");

	if (temp==-1 || domaine.charAt(domaine.length-1)==".")
	{
		return false;
	}

	var badChars=new Array("é", "è", "ê", "ê", "ë", "à", "â", "ï", "î", "û", "ü", "ç");
	var equiv	=new Array("e", "e", "e", "e", "e", "a", "a", "i", "i", "u", "u", "c");

	for (i=0; i < badChars.length; i++)
	{
		while (email.indexOf(badChars[i])!= -1)
		{
			email=email.replace(badChars[i], equiv[i]);
		}
	}

	if(restrictDomain)
	{
		return (restrictDomain == domaine) ? email: false;
	}

	return email;
}


// **************************************************************** //
// fonction testInputDate											//
// Permet de tester un champ de formulaire de type text devant		//
// contenir une date. De plus si la date est dans un format			//
// que le script comprend mais pas le format idéal alors le script  //
// remplace la date tapée par celle équivalente dans le format		// 
// idéal jj/mm/aaaa.												//
// Argument : une référence sur l'input et [optionnel] le message   //
//	  d'erreur à afficher à l'utilisateur en cas d'erreur de date   //
// Retour : false ou la date bien formatée							//
// **************************************************************** //

function testInputDate(input, errorMsg)
{
	if( (d=isDate(input.value)) != false)
	{
		input.value=d;
		return d;
	}
	else
	{
		if(errorMsg)
		{
			alert(errorMsg);
			input.focus();
		}
		return false;
	}
}

function testInputNumber(input, errorMsg)
{
	if(!isNumber(input.value))
	{
		alert(errorMsg);
		input.focus();
		return false;
	}
	return true;
}

// **************************************************************** //
// Fonction de test isDate                                       	//
// Permet de valider une date saisie par l'utilisateur            	//
// dans le format francais jj/mm/aaaa                             	//
// Arguments : chaine de caractère contenant la date               	//
// Retour : false si date non valide, la date dans le format idéal  //
//     jj/mm/aaaa													//
// ****************************************************************	//
function isDate(date)
{
	var separators=new Array("-", "\\", " ", ".");
	for (separator in separators)
	{
		c=separators[separator];
		while (date.indexOf(c) != -1)
		{
			date=date.replace(c, "/");
		}
	}

	temp=date.indexOf("/");

	day=date.substr(0, temp);

	date=date.substr(temp+1);
	temp=date.indexOf("/");

	month=date.substr(0, temp);

	year=date.substr(temp+1);

	if (day.length > 2 || month.length > 2 || (year.length != 4 && year.length != 2))
	{
		return false;
	}

	if (day.charAt(0) == '0')
	{
		day=parseInt(day.charAt(1));
	}
	else
	{
		day=parseInt(day);
	}

	if (month.charAt(0)=='0')
	{
		month=parseInt(month.charAt(1));
	}
	else
	{
		month=parseInt(month);
	}

	if (year.charAt(0) == '0' && year.length == 2)
	{
		year=parseInt(year.charAt(1));
	}
	else
	{
		year=parseInt(year);
	}

	if (isNaN(day) || isNaN(month) || isNaN(year))
	{
		return false;
	}

	if (month > 12 || month < 1)
	{
		return false;
	}

	switch (month)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
		{
			nbjours=31;
			break;
		}
		case 4:
		case 6:
		case 9:
		case 11:
		{
			nbjours=30;
			break;
		}
		case 2:
		{
			if (year%4==0)
			{
				nbjours=29;
			}
			else
			{
				nbjours=28;
			}
		}			
	}

	if (day < 1 || day > nbjours)
	{
		return false;
	}

	day=(day < 10) ? "0"+day: ""+day;
	month=(month < 10) ? "0"+month: ""+month;

	if (year<100 && year>39)
	{
		year=""+(year+1900);
	}
	else if(year < 40)
	{
		year=""+(year+2000);
	}
	else
	{
		year=""+year
	}

	return day+"/"+month+"/"+year;
}

function isNumber(number)
{
	for (isNumberCpt=0; isNumberCpt < number.length; isNumberCpt++)
	{
		if (!isDigit(number.charAt(isNumberCpt)))
		{
			return false;
		}
	}
	return true;
}

function isDigit(c)
{
	return c<='9' && c>='0' 
}

function go_back()
{
	history.go(-1);
}


// Action de redirection appelé par un select Ajout BC 05/02/2003

function chgpage(formulaire)
{
if (formulaire.listepages.selectedIndex != 0)
{
location.href = formulaire.listepages.options[formulaire.listepages.selectedIndex].value;
}
}


/*** Ajoute à gauche d'une chaine de caractères un caractère 'car'
     jusqu'à ce que cette chaine est 'length' caractères
	 @params : input -> champs text pour lequel on veut ajouter des caractères
	 @params : length -> longueur max de la chaîne de caractères
	 @params : car -> carctère qui va être répété pour compléter la chaîne de caractères
****/
function lpad(input, length, car)
{
	if(input.value.length < length)
	{
		val = length - input.value.length;
		var fill = "";
		
		var forbidden = "";
		for(i=0;i<length;i++)
		{
			forbidden += car;
		}
		
		for(i=0;i<val;i++)
		{
			fill += car;
		}
		
		input.value = fill + input.value;
		if(input.value == forbidden )
		{
			input.value = '';
		}
	}
}



/*** Ajoute à droite d'une chaine de caractères un caractère 'car'
     jusqu'à ce que cette chaine est 'length' caractères
	 @params : input -> champs text pour lequel on veut ajouter des caractères
	 @params : length -> longueur max de la chaîne de caractères
	 @params : car -> carctère qui va être répété pour compléter la chaîne de caractères	 
****/
function rpad(input,length,car)
{
	if(input.value.length < length)
	{
		val = length - input.value.length;
		var fill = "";
		for(i=0;i<val;i++)
		{
			fill += car;
		}
		
		var forbidden = "";
		for(i=0;i<length;i++)
		{
			forbidden += car;
		}

		
		input.value = input.value + fill;
		
		if(input.value == forbidden )
		{
			input.value = '';
		}

	}
}



/*** Supprime les espaces de début de chaine
	 @params : input -> champs text pour lequel on veut supprimer les espaces
****/
function ltrim(input)
{			
		j=0;
		tmp = '';
		for(j=0; j<input.length && input.charAt(j) == ' ';j++)
		{
		}
		if(j < input.length)
		{
			for(j; j<input.length; j++)
			{
				tmp += input.charAt(j);
			}
		}

		return tmp;
}

/*** Formate un nombre (arrondi au plus proche)
	 @params :  in: float nombre à formater
	 			in: integer precision
				in: String  sep_decimal
				in: String  sep_milliers
***/
function number_format( nombre, precision, sep_decimal,sep_milliers )
{
  nombre = Math.round( nombre * Math.pow(10, precision) ) / Math.pow(10, precision);
  str_nombre = nombre+"";
  arr_int = str_nombre.split(".");
  if(!arr_int[0]) arr_int[0] = "0";
  if(!arr_int[1]) arr_int[1] = "";
  
  if(arr_int[1].length < precision){
    apres_virgule = arr_int[1];
    for(i=arr_int[1].length+1; i <= precision; i++){  apres_virgule += "0";  }
    arr_int[1] = apres_virgule;
  }
  if(sep_milliers != "" && arr_int[0].length > 3){
    avant_virgule = arr_int[0];
    arr_int[0] = "";
    for(j = 3; j < avant_virgule.length ; j+=3){
      Extrakt = avant_virgule.slice(avant_virgule.length - j, avant_virgule.length - j + 3);
      arr_int[0] = sep_milliers + Extrakt +  arr_int[0] + "";
    }
    str_first = avant_virgule.substr(0, (avant_virgule.length % 3 == 0)?3:(avant_virgule.length % 3));
    arr_int[0] = str_first + arr_int[0];
  }
 
  if(arr_int[1] != "")
	  return arr_int[0]+sep_decimal+arr_int[1];
  else
  	 return arr_int[0];
}

/**
 * Checks/unchecks all rows
 *
 * @param   string   the form name
 * @param   boolean  whether to check or to uncheck the element
 * @param   string   basename of the element
 * @param   integer  min element count
 * @param   integer  max element count
 *
 * @return  boolean  always true
 */
// modified 2004-05-08 by Michael Keck <mail_at_michaelkeck_dot_de>
// - set the other checkboxes (if available) too 
// changed by Bert on 2005-08-12 to check only the unchecked

function setCheckboxesRange(the_form, do_check, basename, min, max)
{
	for (var i = min; i < max; i++) {
		if(document.forms[the_form].elements[basename + i].checked) {
			max++;
		}
		else {
	        if (typeof(document.forms[the_form].elements[basename + i]) != 'undefined') {
	            document.forms[the_form].elements[basename + i].checked = do_check;
	        }
		}
    }

    return true;
} // end of the 'setCheckboxesRange()' function
