var nbdays = new Array(12);
nbdays[0] = 31;
nbdays[1] = 28;
nbdays[2] = 31;
nbdays[3] = 30;
nbdays[4] = 31;
nbdays[5] = 30;
nbdays[6] = 31;
nbdays[7] = 31;
nbdays[8] = 30;
nbdays[9] = 31;
nbdays[10] = 30;
nbdays[11] = 31;

// Créé par ABS 
//renvoie le jour de la semaine 
// iddiv le id de div (le jour )
 
function getjour(frm,iddiv) {

	var jj = Number(frm.value.substr(0, 2));
	var mm = Number(frm.value.substr(3, 2));
	var yyyy = Number(frm.value.substr(6, 4));
	Displayday(yyyy,mm,jj,iddiv);
	
}

function gooddate(val,sep,len,pivot,withctrl)
{
 	var jma;
	
	if(sep=="") jma=val;
	else 
	{
		jma=val.substring(0,2) + val.substring(3,5);
		if(len==6) jma=jma+val.substring(6,8);
		else jma=jma+val.substring(6,10);
	}
	if(len==6) 
	{
		if(jma.substring(4,6)>pivot)
		{
			if(jma.substring(4,6)-pivot<5) an="20";
			else an="19";
		}
		else 
		{
			if(pivot-jma.substring(4,6)<5) an="20";
			else an="19";
		}
		jma=jma.substring(0,4) + an + jma.substring(4,6);
	}
	if(withctrl)
	{
		// controle de la date
		if(isNaN(jma)) val="-1";
		else
		{
			jj=parseInt(jma.substring(0,2),10);
			mm=parseInt(jma.substring(2,4),10);
			an=parseInt(jma.substring(4,8),10); 
			if(mm<1 || mm>12) jma="-1";
			
			if(mm!=2)
			{
				if(jj>nbdays[mm-1]) jma="-1";
			}
			else
			{
				if(jj>29) jma="-1";
				else if(jj>28 && (an / 4)!=Math.floor(an / 4)) jma="-1";
			}
		}	
	}
	if(jma!="-1") jma=jma.substring(0,2)+"/"+jma.substring(2,4)+"/"+jma.substring(4,8);
	return jma;
}

function SetDate(ctrl,jma,withctrl,oblig)

{
	
	val="-1";
	
		
	if(jma.length>8) an=jma.substring(8,10);
	else an=jma.substring(6,8);
	
	if(ctrl.value.length==1 || ctrl.value.length==2) 
	{
		switch(ctrl.value)
		{
			case 'l':
			case 'L': ctrl.value = nextdatefromday(1,jma);
				break;			
			case 'ma':
			case 'MA': ctrl.value = nextdatefromday(2,jma);
				break;	
			case 'm':
			case 'M': ctrl.value = nextdatefromday(3,jma);
				break;
			case 'j':
			case 'j': ctrl.value = nextdatefromday(4,jma);
				break;	
			case 'v':
			case 'v': ctrl.value = nextdatefromday(5,jma);
				break;
			case 's':
			case 's': ctrl.value = nextdatefromday(6,jma);
				break;
			case 'd':
			case 'D': ctrl.value = nextdatefromday(0,jma);
				break;		
		}
	}
	anpropose = parseInt(an);
	
	if(!isNaN(ctrl.value) && (ctrl.value.length==2 || ctrl.value.length==4))
	{
		mm=parseInt(jma.substring(3,5));
		if(ctrl.value<jma.substring(0,2)) 
		{
			mm=mm+1;
			if(mm>12)
			{
				mm=1;	
				anpropose = anpropose + 1;
			} 
		}
		if(ctrl.value.length==2)
		{
			// Ajoute le mois
			mm = new String(mm);
			if(mm.length<2) mm = "0" + mm;
			ctrl.value = ctrl.value + mm;
			mm=parseInt(mm);
		}
	}

	if(!isNaN(ctrl.value) && ctrl.value.length==4)
	{
		if(parseInt(ctrl.value.substring(2,4))<mm) anpropose=anpropose +1; 
		anpropose = new String(anpropose);
		if(anpropose.length<2) anpropose = "0" + anpropose;
	
		ctrl.value = ctrl.value + "20" + anpropose;
	}
	
	switch(ctrl.value.length)
	{
		case 0: if(!oblig) val="";
			break; 
		case 6: if(!isNaN(ctrl.value)) val = gooddate(ctrl.value,"",6,an,withctrl);
			break;	
		case 8: // Cherche les spérateurs
			if(ctrl.value.charAt(2)=='/' && ctrl.value.charAt(5)=='/') val = gooddate(ctrl.value,"/",6,an,withctrl);
			else 
			{
				if(ctrl.value.charAt(2)=='-' && ctrl.value.charAt(5)=='-') val = gooddate(ctrl.value,"-",6,an,withctrl);
				else val = gooddate(ctrl.value,"",8,an,withctrl);
			}
			break;
		case 10:if(ctrl.value.charAt(2)=='/' && ctrl.value.charAt(5)=='/') val = gooddate(ctrl.value,"/",8,an,withctrl);
			else if(ctrl.value.charAt(2)=='-' && ctrl.value.charAt(5)=='-') val = gooddate(ctrl.value,"-",8,an,withctrl);
			break;
	}
	if(val!="-1") ctrl.value=val;
	else if(withctrl)
	{
		alert("la date saisie n'est pas correcte");
		//ctrl.focus();
	}
	
}



function Displayday(aa,mm,jj,iddiv)
{
	// 2 dimensions en prévision des langues étrangères
	jours = new Array(7);
	
	jours[0]="Dimanche";
	jours[1]="Lundi";
	jours[2]="Mardi";
	jours[3]="Mercredi";
	jours[4]="Jeudi";
	jours[5]="Vendredi";
	jours[6]="Samedi";

	dt = new Date(aa,mm-1, jj);
	iddiv.style.visibility = 'hidden';
	if (NS4)	
	{
		with(document.iddiv.document)
		{
			write(jours[dt.getDay()]);
			close();
		}

	}
	else iddiv.innerHTML = jours[dt.getDay()];
	iddiv.style.visibility = 'visible';
}

// le même fonctionnement que Displayday avec un test sur l'année, 
// si le mois de départ est supérieur au mois d'arrivé alors on prend l'annee prochaine
function Displayday2(aa,mmaller,mm,jjaller,jj,iddiv) 
{
	// 2 dimensions en prévision des langues étrangères
	jours = new Array(7);
	
	jours[0]="Dimanche";
	jours[1]="Lundi";
	jours[2]="Mardi";
	jours[3]="Mercredi";
	jours[4]="Jeudi";
	jours[5]="Vendredi";
	jours[6]="Samedi";

	dateItems = new Date();
	jour = dateItems.getDate();
	if ((mmaller>mm) || (mmaller==mm && jj<jjaller))
		dt = new Date(aa+1,mm-1, jj);
	else
		dt = new Date(aa,mm-1, jj);
	iddiv.style.visibility = 'hidden';
	if (NS4)	
	{
		with(document.iddiv.document)
		{
			write(jours[dt.getDay()]);
			close();
		}
		
	}
	else iddiv.innerHTML = jours[dt.getDay()];
	iddiv.style.visibility = 'visible';
}


//Ajoute date de n (jours) jours
function Ajout_date(d_day,d_month,d_year,jours){
	var tempday = new Date(d_year,1,29);
	if(tempday.getMonth()==1) 	nbdays[1]=29;
	else				nbdays[1]=28;
	
	var C_Day   = Number(d_day) + Number(jours);
	var C_Month = Number(d_month);
	var C_Year  = Number(d_year);
	
	while(C_Day - nbdays[C_Month - 1] > 0){
		C_Day = C_Day - nbdays[C_Month - 1];
		C_Month ++;
		if(C_Month > 12){
			C_Month = 1
			C_Year++;
		}	
	}
	return return_formatdate(C_Day, C_Month, C_Year);	
}

//--------------------------------
// Soustrait nbjour à une date et retourne la nouvelle date calculée
//--------------------------------
function Substract_date(d_day,d_month,d_year,jours){
	var tempday = new Date(d_year,1,29);
	if(tempday.getMonth()==1) 	nbdays[1]=29;
	else				nbdays[1]=28;
	
	var C_Day   = Number(d_day) - Number(jours);
	var C_Month = Number(d_month);
	var C_Year  = Number(d_year);
	//alert(jours);
	while(C_Day < 0){
		C_Month --;
		
		//alert(C_Day)
		if(C_Month <= 0){
			C_Month = 12
			C_Year--;
		}
		C_Day = nbdays[C_Month - 1] + C_Day;
	}
	return return_formatdate(C_Day, C_Month, C_Year);	
}

//--------------------------------
// Compte le nombre de jours entre 2 dates
//--------------------------------
function CountDays(d1,m1,y1, d2,m2,y2){
	var D_1 = Number(d1);
	var M_1 = Number(m1);
	var Y_1 = Number(y1);
	var D_2 = Number(d2);
	var M_2 = Number(m2);
	var Y_2 = Number(y2);
	
	if((Y_2 < Y_1) || (Y_1 == Y_2 && M_2 < M_1) || (Y_1 == Y_2 && M_1 == M_2 && D_2 < D_1))
		return -1;
		
	var v1 = Date.parse(Y_1 + "/" + M_1 + "/" + D_1)
	var v2 = Date.parse(Y_2 + "/" + M_2 + "/" + D_2)
	
	var t = v2 - v1;
	var nbjours = parseInt(t / 1000 / 60 / 60 / 24); 
	return(nbjours)
}

function return_formatdate(d, m, y){
	var tmpd='';
	var tmpm='';
	var tmpy='';
	var x;
	if(d==null||d=='')	return('');
	if(m==null) { 
		tmpstr=d;
		tmpd=tmpstr.substr(0,tmpstr.indexOf('/'))
		tmpstr=tmpstr.substr(tmpstr.indexOf('/')+1);
		tmpm=tmpstr.substr(0,tmpstr.indexOf('/'))
		tmpy=tmpstr.substr(tmpstr.indexOf('/')+1);
	}
	else{
		tmpd+=d;
		tmpm+=m;
		tmpy+=y;
	}
	if(tmpd.length==1) tmpd = "0"+tmpd;
	if(tmpm.length==1) tmpm = "0"+tmpm;
	return(tmpd+"/"+tmpm+"/"+tmpy);
}

//------------------------------------------------------
// Check la validité du format d'une date
//  - dte est une une chaine de caractere au format (jj/mm/aaaa)
//------------------------------------------------------
function isValidDate(dte){
	
	var strDte = new String(dte);
	
	if(strDte.length > 10 || strDte.length < 8) return false;	
	
	// Création d'un objet qui adapte la date  selon la langue
	dateAdaptee = new _dateAdapter(strDte);
	
	if (isNaN(dateAdaptee.jour) || isNaN(dateAdaptee.mois) || isNaN(dateAdaptee.annee)) return false;
		
	// Jour	
	if(dateAdaptee.jour<1) return false;
	
	// Mois	
	if(dateAdaptee.mois>12 || dateAdaptee.mois<1) return false;

	// Check année bisextile - vérification sur février
	var tempday = new Date(dateAdaptee.annee,1,29);
	if(tempday.getMonth()==1) 	nbdays[1] = 29;
	else				nbdays[1] = 28;

	// Check nb de jours par mois
	if(dateAdaptee.jour > nbdays[dateAdaptee.mois - 1]) return false;

	if(dateAdaptee.annee<1000) return(false);	

	return(true);
}


function getJour(dte)
{
	var strDte = new String(dte);
	
	if(strDte.length > 10 || strDte.length < 8) return false;	
	
	// Création d'un objet qui adapte la date  selon la langue
	dateAdaptee = new _dateAdapter(strDte);
	
	return dateAdaptee.jour; 
}

function getMois(dte)
{
	var strDte = new String(dte);
	
	if(strDte.length > 10 || strDte.length < 8) return false;	
	dateAdaptee = new _dateAdapter(strDte);
	
	return dateAdaptee.mois; 
}

function getAnnee(dte)
{
	var strDte = new String(dte);
	
	if(strDte.length > 10 || strDte.length < 8) return false;	
	dateAdaptee = new _dateAdapter(strDte);
	
	return dateAdaptee.annee; 
}


//dte est une une chaine de caractere au format (jj/mm/aaaa)
function strdte_getDay(dte){
	return(Number(dte.substr(0, dte.indexOf('/'))));
}

//dte est une une chaine de caractere au format (jj/mm/aaaa)
function strdte_getMonth(dte){
	//jour
	var tmpstr=dte;
	var pos_slash=tmpstr.indexOf('/');
	var dte_part=tmpstr.substr(0,pos_slash);
	
	//mois
	tmpstr=tmpstr.substr(pos_slash+1);
	pos_slash=tmpstr.indexOf('/');
	dte_part=tmpstr.substr(0,pos_slash);
	//alert(dte_part)
	return(Number(dte_part));
}

//dte est une une chaine de caractere au format (jj/mm/aaaa)
function strdte_getYear(dte){
	// jour
	var tmpstr=dte;
	var pos_slash=tmpstr.indexOf('/');
	var dte_part=tmpstr.substr(0,pos_slash);
	
	// mois
	tmpstr=tmpstr.substr(pos_slash+1);
	pos_slash=tmpstr.indexOf('/');
	dte_part=tmpstr.substr(0,pos_slash);
	
	// annee
	dte_part=tmpstr.substr(pos_slash+1);
	if(dte_part.length == 2){
		return(2000 + Number(dte_part));
	}
	else{
		return(Number(dte_part));
	}
}
// Fonction qui ajoute un nombre(jour, mois, annee, heure, minutes..) a une date
function dateadd(per,n,d) {
   switch(per) {
      case "yyyy": d.setYear(d.getFullYear()+n); break
      case "m": d.setMonth(d.getMonth()+n); break
      case "ww": n*=7
      case "d": d.setDate(d.getDate()+n); break
      case "h": d.setHours(d.getHours()+n); break
      case "n": d.setMinutes(d.getMinutes()+n); break
      case "s": d.setSeconds(d.getSeconds()+n)
   }
   return d
}
