// JavaScript Document
//----------------------------------------------------
// Change la classe d'une ligne d'un tableau au survol
//----------------------------------------------------
function ChangeCouleurLigne(ClassOn,ClassOff,Ligne,Focus)
{
	if (Focus==1){Ligne.className=ClassOn;}
	else{Ligne.className=ClassOff;}
}

//-------------------------------------------------------
// Formate un nombre avec décimales et séparateur millier
//-------------------------------------------------------
function Formate(valeur,decimal,separateur)
{
	var deci=Math.round( Math.pow(10,decimal)*(valeur-Math.floor(valeur)) );
	var val=Math.abs(Math.floor(valeur));
	if ((decimal==0)||(deci==Math.pow(10,decimal))) {val=Math.abs(Math.round(valeur)); deci=0;}
	var val_format=val+"";
	var nb=val_format.length;
	for (var i=1;i<4;i++) {
		if (val>=Math.pow(10,(3*i))) {
			val_format=val_format.substring(0,nb-(3*i))+separateur+val_format.substring(nb-(3*i));
		}
	}
	if (decimal>0) {
		if (deci>0) {
				if ((Math.round((valeur-Math.floor(valeur))*100)/100)>=0.1){ // si le chiffre apres la virgule n'est pas 0
				deci=deci.toString();
				} else { // si le chiffre apres la virgule est 0
				deci="0"+deci.toString();
				}
		} else {
			deci="";
			for (var j=0;j<decimal;j++) deci+="0";
		}
		val_format=val_format+"."+deci.substring(0); 
	}
	if (parseFloat(valeur)<0) {val_format="-"+val_format;}
	return val_format;
}


//---------------------------------------------------
// Fonction de vérification de la validité d'une date
//---------------------------------------------------
function VerificationDate(aDate)   
{
	var checkStr = aDate;
	var err=0;
	if (checkStr.length != 10) err=1
	Jour = checkStr.substring(0, 2)
	Separ1 = checkStr.substring(2, 3)
	Mois = checkStr.substring(3, 5)
	Separ2 = checkStr.substring(5, 6)
	Annee = checkStr.substring(6, 10)
	
	if (Mois<1 || Mois>12) err = 1
	if (Separ1 != '/') err = 1
	if (Jour<1 || Jour>31) err = 1
	if (Separ2 != '/') err = 1
	if (Annee<0 || Annee>9999) err = 1
	 
	// Mois avec 30 jours
	if (Mois==4 || Mois==6 || Mois==9 || Mois==11)
	{
		if (Jour==31) err=1
	}
	
	// Fevrier, annee Bisextile
	if (Mois==2)
	{
		var g=parseInt(Annee/4)
		if (isNaN(g)) 
		{
	        	err=1
		}
			
	        if (Jour>29) err=1
		if (Jour==29 && ((Annee/4)!=parseInt(Annee/4))) err=1
	}
		
	if (err == 1)
	{	
	        return (false);
	}
	else
	{
		return (true);
	}
}

//----------------------------------------------------------
// Calcule la différence en nombre de jours entre deux dates
//----------------------------------------------------------
function DiffDate(aDate1,aDate2)
{
	sDate1 = new Date(parseInt(aDate1.substring(6,10),10),parseInt(aDate1.substring(3,5),10)-1,parseInt(aDate1.substring(0,2),10));	// Année, Mois, Jour
	sDate2 = new Date(parseInt(aDate2.substring(6,10),10),parseInt(aDate2.substring(3,5),10)-1,parseInt(aDate2.substring(0,2),10));
	msParJour = 24 * 60 * 60 * 1000 ;
	NbJours = (sDate2.getTime() - sDate1.getTime()) / msParJour;
	NbJours = Math.round(NbJours);
	return NbJours;
}

//------------------------------------
// Ajoute un nombre de mois à une date
//------------------------------------
function AjoutMoisDate(aDateInitiale,aDate,aNbMois)
{
	var Mois=parseInt(aDate.substring(3,5),10);
	var Annee=parseInt(aDate.substring(6,10),10);
	var Delta=parseInt(aNbMois,10);
	var NewMois=Mois+Delta;
	if (NewMois<=12)
	{
		if (NewMois<10)
		{
			NewDate=aDateInitiale.substring(0,2) + "/0" + NewMois + "/" + aDate.substring(6,10);
		}
		else
		{
			NewDate=aDateInitiale.substring(0,2) + "/" + NewMois + "/" + aDate.substring(6,10);
		}
	}
	else
	{
		if (NewMois-12<10)
		{
			NewDate=aDateInitiale.substring(0,2) + "/0" + (NewMois-12) + "/" + (Annee+1);
		}
		else
		{
			NewDate=aDateInitiale.substring(0,2) + "/" + (NewMois-12) + "/" + (Annee+1);
		}
	}
	while (VerificationDate(NewDate)==false)
	{
		var Jour=parseInt(NewDate.substring(0,2),10);
		if (Jour-1<10)
		{
			NewDate="0" + (Jour-1) + "/" + NewDate.substring(3,5) + "/" + NewDate.substring(6,10);
		}
		else
		{
			NewDate=(Jour-1) + "/" + NewDate.substring(3,5) + "/" + NewDate.substring(6,10);
		}
	}
	return (NewDate);
}

//------------------------------------------------------
// Remplace une chaine par une autre dans une expression
//------------------------------------------------------
function Replace(aExpression,aChaine,aRemplacement)
{
	var PosChaine=aExpression.indexOf(aChaine);
	if (PosChaine!=-1)
	{
		return (aExpression.substring(0,PosChaine) + aRemplacement + aExpression.substring(PosChaine + aChaine.length,aExpression.length))
	}
	else
	{
		return (aExpression);
	}
}


//-----------------------------------------
// Verification de la validite d'un N°INSEE
//-----------------------------------------
 function VerificationCleINSEE(a1,a2,a3,a4,a5,a6,aCle)
 {
 	var ChaineINSEE="";
	var Corse="";
	
	//Corse 2A et 2B
	if ((a4=="2a") || (a4=="2A"))
	{
		a4="20";
		Corse="A";
	}
	if ((a4=="2b") || (a4=="2B"))
	{
		a4="20";
		Corse="B";
	}
		
	ChaineINSEE = a1 + a2 + a3 + a4 + a5 + a6
	
	if (Corse=="A") { ChaineINSEE=ChaineINSEE-1000000;}
	if (Corse=="B") { ChaineINSEE=ChaineINSEE-2000000;}
	
 	if (97 - ChaineINSEE % 97 == parseInt(aCle))
    {
        return (true);
    }
    else
    {
    	return (false);
    }
 }

//-------------------------------------
// Verification de la validite d'un RIB
//-------------------------------------
function VerificationCleRIB(aCodeEtablissement,aCodeGuichet,aNumCompte,aCle)
{
    var I;
    var A;
    var B;
    var C;
    var ChaineRIB="";
    
    //Verification de la valeur de la clé RIB
    if ((parseInt(aCle) < 1) || (parseInt(aCle) > 97))
    {
    	return (false);
    }
    
    //Remplacement des caractères éventuels dans le numéro de compte
    aNumCompte=Replace(aNumCompte,"a","1");
    aNumCompte=Replace(aNumCompte,"j","1");
    aNumCompte=Replace(aNumCompte,"b","2");
    aNumCompte=Replace(aNumCompte,"k","2");
    aNumCompte=Replace(aNumCompte,"s","2");
    aNumCompte=Replace(aNumCompte,"c","3");
    aNumCompte=Replace(aNumCompte,"l","3");
    aNumCompte=Replace(aNumCompte,"t","3");
    aNumCompte=Replace(aNumCompte,"d","4");
    aNumCompte=Replace(aNumCompte,"m","4");
    aNumCompte=Replace(aNumCompte,"u","4");
    aNumCompte=Replace(aNumCompte,"e","5");
    aNumCompte=Replace(aNumCompte,"n","5");
    aNumCompte=Replace(aNumCompte,"v","5");
    aNumCompte=Replace(aNumCompte,"f","6");
    aNumCompte=Replace(aNumCompte,"o","6");
    aNumCompte=Replace(aNumCompte,"w","6");
    aNumCompte=Replace(aNumCompte,"g","7");
    aNumCompte=Replace(aNumCompte,"p","7");
    aNumCompte=Replace(aNumCompte,"x","7");
    aNumCompte=Replace(aNumCompte,"h","8");
    aNumCompte=Replace(aNumCompte,"q","8");
    aNumCompte=Replace(aNumCompte,"y","8");
    aNumCompte=Replace(aNumCompte,"i","9");
    aNumCompte=Replace(aNumCompte,"r","9");
    aNumCompte=Replace(aNumCompte,"z","9");    
    aNumCompte=Replace(aNumCompte,"A","1");
    aNumCompte=Replace(aNumCompte,"J","1");
    aNumCompte=Replace(aNumCompte,"B","2");
    aNumCompte=Replace(aNumCompte,"K","2");
    aNumCompte=Replace(aNumCompte,"S","2");
    aNumCompte=Replace(aNumCompte,"C","3");
    aNumCompte=Replace(aNumCompte,"L","3");
    aNumCompte=Replace(aNumCompte,"T","3");
    aNumCompte=Replace(aNumCompte,"D","4");
    aNumCompte=Replace(aNumCompte,"M","4");
    aNumCompte=Replace(aNumCompte,"U","4");
    aNumCompte=Replace(aNumCompte,"E","5");
    aNumCompte=Replace(aNumCompte,"N","5");
    aNumCompte=Replace(aNumCompte,"V","5");
    aNumCompte=Replace(aNumCompte,"F","6");
    aNumCompte=Replace(aNumCompte,"O","6");
    aNumCompte=Replace(aNumCompte,"W","6");
    aNumCompte=Replace(aNumCompte,"G","7");
    aNumCompte=Replace(aNumCompte,"P","7");
    aNumCompte=Replace(aNumCompte,"X","7");
    aNumCompte=Replace(aNumCompte,"H","8");
    aNumCompte=Replace(aNumCompte,"Q","8");
    aNumCompte=Replace(aNumCompte,"Y","8");
    aNumCompte=Replace(aNumCompte,"I","9");
    aNumCompte=Replace(aNumCompte,"R","9");
    aNumCompte=Replace(aNumCompte,"Z","9");
    
    //Vérification
    ChaineRIB = aCodeEtablissement + aCodeGuichet + aNumCompte
    A = ChaineRIB.substring(0,7)
    B = ChaineRIB.substring(7,14)
    C = ChaineRIB.substring(14,21)
    
    if (97 - (62 * A + 34 * B + 3 * C) % 97 == parseInt(aCle))
    {
        return (true);
    }
    else
    {
    	return (false);
    }
}
