//##############################


//Cette fonction renvoie la longueur d'une chaine
function length(A)
{
	return A.length
}

//Fonction TRIM enleve les espaces avant et aprés
function trim(myString){ 
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'') 
} 

//Impose un nombre de décimale à une valeur
function decimal(valeur,nbrdecimal){

	var nbrzero=""
	for (i=1; i<=nbrdecimal; i++){ 
		nbrzero = nbrzero + "0"
	} 
	Diviseur = parseInt("1" + nbrzero)
	
	return Math.round(Diviseur*parseFloat(valeur))/Diviseur;
	 
	
}
function HeureDiff(heuredeb,heurefin){
	hd=heuredeb.split(":");
	hf=heurefin.split(":");
	hd[0]=eval(hd[0]);
	hd[1]=eval(hd[1]);
	if (hd[2] != undefined){
		hd[2]=eval(hd[2]);
	}
	hf[0]=eval(hf[0]);
	hf[1]=eval(hf[1]);
	if (hf[2] != undefined){
		hf[2]=eval(hf[2]);
	}
	if (hf[2] != undefined){
		if(hf[2]<hd[2]){
			hf[1]=hf[1]-1;
			hf[2]=hf[2]+60;
		}
	}
	if(hf[1]<hd[1]){
		hf[0]=hf[0]-1;
		hf[1]=hf[1]+60;
	}
	if(hf[0]<hd[0]){
		hf[0]=hf[0]+24;
	}
	heure1 = hf[0]-hd[0]
	heures = "00"+heure1.toString(10)
	minute1 = hf[1]-hd[1]
	minutes = "00"+minute1.toString(10)
	if (hf[2] != undefined){
		seconde1 = hf[2]-hd[2]
		secondes = "00"+seconde1.toString(10)
	}
	if (hf[2] != undefined){
		return Right(heures,2) + ":" + Right(minutes,2) + ":" + Right(secondes,2);
	}else{
		return Right(heures,2) + ":" + Right(minutes,2);
	}

}

function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}


//##############################
//Cette fonction permet de déterminé si une chaine est vide
function IsEmpty(A) 
{
 
 var B = "";
 for(i=0;i<=A.length;i++)
 {

  c=A.charAt(i); 
  if(c!=" ")
   B+=c;
  
 }
 return (B.length==0);
}
//#############################
//fonction permettant de déterminer si la chaine est numérique et/ou un réel
//Format 0.25 ou +100 ou -10.5 mais pas .5 ou E+1.10 ou 10,5
function IsNumeric(A) {
	Digit="1234567890";
	coma=false;
	if (A.length==0) return false;
	c=A.charAt(0);
	if ((A.length==1) && ((c == "+") || (c =="-"))) return false;
	if ((Digit.indexOf(c) != -1) || (c == "+") || (c =="-"))
	{
		for (i = 1;i<=A.length;i++)
		{
			c=A.charAt(i);
			if (c==".")
			{
				if (coma) 
					return false;
				else
					coma=true;
			}
			else
			{				
				if (Digit.indexOf(c) == -1)
					return false;
			}
			
		}
		return true;
	}
	return false;
}

//#############################
//fonction permettant de déterminer si la chaine est un entier numérique
function IsInteger(A)
{

 Digit="1234567890";
 if (A.length==0) return false;
 c=A.charAt(0);
 if ((A.length==1) && ((c == "+") || (c =="-"))) return false;
 if ((Digit.indexOf(c) != -1) || (c == "+") || (c =="-"))
 {
	 for(i=1;i<=A.length;i++)
	 {
	  	if (Digit.indexOf(A.charAt(i))==-1)
	   	return false;
	 }
	return true;
 }
 return false;
}


//Verification de la validité d'une date avec plusieurs format possible
function IsDate3(Q,format){
		var f;
		switch(format) {
			case 0 : u="jj/mm/aaaa";break;
			case 4 : u="mm/aaaa";break;
			case 5 : u="aaaa";break;
			case 6 : u="[jj/]mm/aaaa";break;
			case 7 : u="[jj/mm/]aaaa";break;
		}
		//f="<%=Label(457,session("CodeLangue"))%> "+u 
		Datestr=Q.value;	
		switch (format) {
			case 4 : {
				if (Datestr.length==7)
					Datestr='15/'+Datestr;
				break;
			}
			
			case 5 : {
				if (Datestr.length==4)
					Datestr='15/06/'+Datestr;
				break;
			}
			
			case 6 : {
				if (Datestr.length==7)
					Datestr='15/'+Datestr;
				break;
			}

			case 7 : {
				if (Datestr.length==4)
					Datestr='15/06/'+Datestr;
				else if (Datestr.length==7)
					Datestr='15/'+Datestr;
				break;
			}
		}
		
		if (IsEmpty(Datestr))
			return false;

		if ((!IsDate1(Datestr)) || (Datestr.length<10) || (Datestr.substr(2,1)!='/') || (Datestr.substr(5,1)!='/'))
		{
			//alert(f);
			Q.value=Q.oldValue;
			return false;
		}
		return true;	
}






//#############################
//Fonction permettant de savoir si la champs est une date valide de type JJ/MM/AAAA (ex : 05/02/2000)
function IsDate1(DateData) {
	correct = true;
		//alert("tt");

if ( (DateData.length < 11) && (DateData.length > 7) ) {

		j = DateData.substring(0,2);
		m = DateData.substring(3,5);
		a = DateData.substring(6,DateData.length);
		if (!IsInteger(a)) return false;
			
		bi = ((parseInt(a) % 4) == 0);


		if (  ( (m == "01") || (m == "03") || (m == "05") || (m == "07") || (m == "08") || (m == "10") || (m == "12") ) && ( (Math.round(j) >= 1) && (Math.round(j) <= 31) ) ) {
			correct = true;
		}
		else {
			if (  ( (m == "04") || (m == "06") || (m == "09") || (m == "11") ) && ( (Math.round(j) >= 1) && (Math.round(j) <= 30) ) ) {
				correct = true;
			}
			else {
				if (bi)  {
					correct = (  ( (Math.round(j) >= 1) && (Math.round(j) <= 29) ) && (m == "02") );
				}
				else {
					correct = ( ( (Math.round(j) >= 1) && (Math.round(j) <= 28) ) && (m == "02")  );
				}
			}
		}
		if ((Math.round(a)<=1900) || (Math.round(a)>=2100)) 
			correct = false;
	}
	else {
		correct = false;
	}
	return correct;
}

//#############################
//Fonction permettant de savoir si le champs est une heure valide du type HH:MM (ex : 14:02)
function IsHeure1(HeureData) {
	if (HeureData.length == 5)	{
		h = HeureData.substring(0,2);
		m = HeureData.substring(3,5);
		return ((HeureData.substring(2,3)==":") && (h<24) && (m<60) && (h>=0) && (m>=0) && (IsInteger(h)) && (IsInteger(m)))
	}
	return false
}

//#############################
//Fonction permettant de savoir si le champs est une heure valide du type HH:MM:SS (ex : 14:02:00)
function IsHeure2(HeureData) 
{
	if (HeureData.length == 8) 
	{
		h = HeureData.substring(0,2);
		m = HeureData.substring(3,5);
		s = HeureData.substring(6,8);
		return ((HeureData.substring(2,3)==":") && (HeureData.substring(5,6)==":") && (h<24) && (m<60) && (h>=0) && (m>=0) && (s<60) && (s>=0) && (IsInteger(h)) && (IsInteger(m)) && (IsInteger(s)))
	
	}
	return false
}
//############################
function IsDate2(j,m,a)
//Fonction permettant de savoir si le champs contient une date valide de type J/M/AAAA (5/1/2000) 
{

	D=new Date(m+"/"+j+"/"+a);

	if (parseInt(m)!=D.getMonth()+1) return false
	if (parseInt(j)!=D.getDate()) return false
	if (a.substr(0,2)=="19")
		if (parseInt(a.substr(2,2))!=D.getYear()) return false
	else
		if (parseInt(a.substr(0,4))!=D.getYear()) return false

return true
}

//#############################
// function permettant de déterminé si la viariable A est compris entre D et F
function InNumRange(A,D,F)
{
return (parseFloat(A)>=parseFloat(D)&&parseFloat(A)<=parseFloat(F));
}

//#############################
// fonction permettant de déterminé si la date A est compris entre les dates D et F
function InDateRange(A,D,F)
{

DateA= new Date(A)
DateD=new Date(D)
DateF=new Date(F)
return (DateA.getTime()>=DateD.getTime()&&DateA.getTime()<=DateF.getTime())
}

//#############################
// fonction permettant de déterminé le nombre de jour entre 2 dates de type "JJ/MM/AAAA" ou "MM/AAAA"

function DateDiff(D1,D2) {

	 if ((D1.length==7) || (D2.length==7)) {
	 	if (D1.length==7)
	 		D1='15/'+D1
		else if (D1.length==10)
	 		D1='15/'+D1.substring(3,10)

		if (D2.length==7)
	 		D2='15/'+D2
		else if (D2.length==10)
	 		D2='15/'+D2.substring(3,10)
	 }

	if ((!(IsDate1(D1))) || (!(IsDate1(D2)))) 
		return 'A'; //astuce pour que la comparaison de l'expression de niveau superieur soit toujours false

	 var j1 = D1.substring(0,2);
	 var m1 = D1.substring(3,5);
	 var a1 = D1.substring(6,D1.length);

	 var j2 = D2.substring(0,2);
	 var m2 = D2.substring(3,5);
	 var a2 = D2.substring(6,D2.length);

    var tD1 = new Date(m1+"/"+j1+"/"+a1);
    var tD2 = new Date(m2+"/"+j2+"/"+a2);
	
    var compYearD1 = (tD1.getYear()>99 && tD1.getYear()<1970) ? tD1.getYear()+1900 : tD1.getYear();
	var compYearD2 = (tD2.getYear()>99 && tD2.getYear()<1970) ? tD2.getYear()+1900 : tD2.getYear();
	
    var dd1 = Date.UTC (compYearD1,tD1.getMonth(),tD1.getDate(),0,0,0);
    var dd2 = Date.UTC (compYearD2,tD2.getMonth(),tD2.getDate(),0,0,0);
    //alert(compYearD2);alert(tD2.getMonth());alert(tD2.getDate())
	return (Math.ceil(((dd1-dd2)/(24*3600000))));
	
}


//#############################
// fonction permettant de déterminé le nombre de jour entre 2 dates de type "JJ/MM/AAAA"

function DateDiffold (D1,D2) {
    var tD1 = new Date(D1);
	var tD2 = new Date(D2);
	
    var compYearD1 = (tD1.getYear()>99 && tD1.getYear()<1970) ? tD1.getYear()+1900 : tD1.getYear();
	var compYearD2 = (tD2.getYear()>99 && tD2.getYear()<1970) ? tD2.getYear()+1900 : tD2.getYear();
	
    var dd1 = Date.UTC (compYearD1,tD1.getMonth(),tD1.getDate(),0,0,0);
    var dd2 = Date.UTC (compYearD2,tD2.getMonth(),tD2.getDate(),0,0,0);
    //alert(compYearD2);alert(tD2.getMonth());alert(tD2.getDate())
	return (Math.ceil(((dd1-dd2)/(24*3600000))));
}

//############################
//fonction permettant de savoir si la chaine contient une adresse e-mail
function IsMail2(MailData) {
	correct = true;
	p = MailData.indexOf("@");
	if (p != -1) {
		correct = (MailData.indexOf(".",p) != -1);
	}
	else {
		correct = false;
	}
	return correct;
}
//######################################################################################################################
//### IsMail V.2 inclant le domaine .info
//######################################################################################################################

	function IsMail(mail) {
	  var ret = true;
	  var car = "";
	  var carAfter = "";
	  var carBefore = "";
	  var nbrcar = mail.length;
	  var nbrarobase = 0;
	  var nbrpoint = 0;
	  var goodcar = "@0123456789.-_abcdefghijklmnopqrstuvwxyz";

		var recherche = mail.lastIndexOf(".");
		Resultat = mail.substring(recherche+1, String(mail).length);
		nbrext = nbrcar - recherche-1;
		if ((nbrext>=4) && (Resultat.toLowerCase()!='info')){
			ret = false;
		  return ret;

		}
	  
	  
	  for(cnt=0;cnt<nbrcar;cnt++) {
		var car = mail.substr(cnt,1).toLowerCase();
		if(goodcar.indexOf(car) >= 0) {
		  carAfter = "";
		  carBefore = "";
		  if(car == "@") {
			if((cnt-1) >= 0) {
			  carBefore = mail.substr((cnt-1),1);
			}
			if((cnt+1)<nbrcar) {
			 carAfter = mail.substr((cnt+1),1);
			}
			if(cnt>0 && nbrarobase==0 && cnt<(nbrcar-4) && !(carBefore==".") && !(carAfter==".") && !(carBefore=="-") && !(carAfter=="-") && !(carBefore=="_") && !(carAfter=="_")) {
			  nbrarobase++;
			} else {
			 ret = false;
			 break;
			}
		  }
		  if(car == ".") {
			if((cnt-1) >= 0) {
			  carBefore = mail.substr((cnt-1),1);
			}
			if((cnt+1)<nbrcar) {
			 carAfter = mail.substr((cnt+1),1);
			}
			if(cnt>0 && cnt<(nbrcar-2) && !(carBefore==".") && !(carAfter==".")) {
			  nbrpoint++;
			} else {
			  ret = false;
			  break;
			}
		  }
		} else {
		  ret = false;
		  break;
		}
	  }
	  if(nbrarobase == 0 || nbrpoint == 0 || mail.substr(0,1) == "." || mail.substr(0,1) == "-" || mail.substr(0,1) == "_" || mail.substr((nbrcar-1),1) == "." || mail.substr((nbrcar-1),1) == "-" || mail.substr((nbrcar-1),1) == "_") {
		ret = false;
	  }
	  return ret;
	}

//###############################################################################################################
//####  DateDiff_annee : Fonnction permetant de connaitre le nombre d'année entre deux dates incluant les années 
//####  				 bisextiles.
//###############################################################################################################


function DateDiff_annee(date_debut,date_fin){
	var reg=new RegExp("[/]+", "g");
	var tableau_date_debut=date_debut.split(reg);

	var reg=new RegExp("[/]+", "g");
	var tableau_date_fin=date_fin.split(reg);
	
	var nbj=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	// Attention, en javascript les mois commencent à zéro
	var datedeb=new Date(tableau_date_debut[2],tableau_date_debut[1],tableau_date_debut[0],00,00,00); // Année, Mois, Jour, Heure, Minutes, Secondes
	var datefin=new Date(tableau_date_fin[2],tableau_date_fin[1],tableau_date_fin[0],00,00,00); // Vous pouvez prendre la date du jour : var datefin=new Date();
	aad=datedeb.getYear();mmd=datedeb.getMonth()+1;jjd=datedeb.getDate();hhd=datedeb.getHours();mnd=datedeb.getMinutes();ssd=datedeb.getSeconds();
	aaf=datefin.getYear();mmf=datefin.getMonth()+1;jjf=datefin.getDate();hhf=datefin.getHours();mnf=datefin.getMinutes();ssf=datefin.getSeconds();
	if(aaf<1900){aaf=aaf+1900;}
	if(aad<1900){aad=aad+1900;}
	if(aaf%4==0){nbj[2]=29;}
	if((aaf%100==0)&&(aaf%400!=0)){nbj[2]=28;}
	if(ssf<ssd){ssf=ssf+60;mnf=mnf-1;}
	if(mnf<mnd){mnf=mnf+60;hhf=hhf-1;}
	if(hhf<hhd){hhf=hhf+24;jjf=jjf-1;}
	if(jjf<jjd){jjf=jjf+nbj[mmf];mmf=mmf-1;}
	if(mmf<mmd){mmf=mmf+12;aaf=aaf-1;}



//	representation = affiche.toLowerCase();
//	alert("representation " +representation)
//	switch (representation){ 
//		case 'y': 
			return (aaf-aad);
//			break;
//		case 'a': 
//			return (aaf-aad);
//			break;
		//case 'm': 
//			return (mmf-mmd);
//			break;
//		case 'd': 
//			return (jjf-jjd);
//			break;
//		case 'j': 
//			return (jjf-jjd);
//			break;
//		default: 
//			return (aaf-aad)+" ans "+(mmf-mmd)+" mois "+(jjf-jjd)+" jours "+(hhf-hhd)+" heures "+(mnf-mnd)+" minutes "+(ssf-ssd)+" secondes";
//			break;
//	} 
}
//########################################################################################################################
//################################################ TOUCHE INTERDITE ######################################################
//########################################################################################################################
// interdit la frappe d'un code touche mis en parametre. e corespond toujours à event.
// exemple :  onKeyPress="javascript:Touche_interdite(event,13);" // 13 = code touche "Entrée"

function Touche_interdite(CodeTouche){
	if(e.keyCode == CodeTouche){
		e.returnValue = false;
	}else if(e.which == CodeTouche){ 
		e.preventDefault();
	}
}

function dateFormat(format,date)
{
        if(date == undefined)
        {
                date = new Date();
        }
        if(typeof date == 'number')
        {
                time = new Date();
                time.setTime(date);
                date = time;
        }
        else if(typeof date == 'string' )
        {
                date = new Date(date);
        }
        var fullYear = date.getYear();
        if (fullYear < 1000)
        {
                fullYear = fullYear + 1900;
        }
        var hour = date.getHours();
        var day = date.getDate();
        var month = date.getMonth()+1;
        var minute = date.getMinutes();
        var seconde = date.getSeconds();
        var milliSeconde = date.getMilliseconds();
        var reg = new RegExp('(d|m|Y|H|i|s)','g');
        var replacement = new Array();
        replacement['d'] = day < 10 ? '0'+ day+"/" : day+"/";
        replacement['m'] = month < 10 ? '0'+ month+"/" : month+"/";
        replacement['Y'] = fullYear;
        replacement['Y'] = fullYear;
        replacement['H'] = hour < 10 ? '0'+ hour : hour;
        replacement['i'] = minute < 10 ? '0'+ minute : minute;
        replacement['s'] = seconde < 10 ? '0'+ seconde : seconde;
        mydate = format.replace(reg,function ($0){return ($0 in replacement) ? replacement[$0] : $0.slice(1, $0.length - 1);});
		var reg=new RegExp("( )", "g");
		return mydate.replace(reg,"");
}


