	var allMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var allNameOfWeekDays=["Lu","Ma", "Me", "Je", "Ve", "Sa", "Di"];
	var allNameOfMonths=["Janvier ","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"];
	var newDate=new Date();
	var yearZero=newDate.getFullYear();
	var monthZero=newDate.getMonth();
	var day=newDate.getDate(); // date du jour ou date inscrite dans le champ date à l'origine de l'appel de la fonction
	var jour=newDate.getDate(); // pour grisee les jour avant aujourd'hui
	var currentDay=0, currentDayZero=0;
	var month=monthZero, year=yearZero;
	var yearMin=yearZero, yearMax=(yearMin+3);
	var target='';
	var hoverEle=false;
	var nom_form ='';
	var tab_pdt_cplt =new Array();
	function setTarget(e){
		if(e) return e.target;
		if(event) return event.srcElement;
	}
	function newElement(type, attrs, content, toNode) {
		var ele=document.createElement(type);
		if(attrs) {
			for(var i=0; i<attrs.length; i++) {
				eval('ele.'+attrs[i][0]+(attrs[i][2] ? '=\u0027' :'=')+attrs[i][1]+(attrs[i][2] ? '\u0027' :''));
			}
		}
		if(content) ele.appendChild(document.createTextNode(content));
		if(toNode) toNode.appendChild(ele);
		return ele;
	}
	function setMonth(ele){month=parseInt(ele.value);calender()}
	function setYear(ele){year=parseInt(ele.value);calender()}
	function setValue(ele){
		if(ele.parentNode.className=='week' && ele.firstChild){
			var yearZero=newDate.getFullYear();
			var monthZero=newDate.getMonth();
			var jour=newDate.getDate();
			var dayOut=ele.firstChild.nodeValue;
			if((dayOut>=jour && month==monthZero && year==yearZero) || (month>monthZero && year>=yearZero) || year>yearZero){ // control pour empeché de changer la date si la date choisi est inférieur au jour j
				if(dayOut < 10) dayOut='0'+dayOut;
				var monthOut=month+1;
				if(monthOut < 10) monthOut='0'+monthOut;
				target.value=dayOut+'/'+monthOut+'/'+year;
				removeCalender();
				change_date_retour_moteur(nom_form,target.name);
				if (compare_datejour_datedepart(nom_form)){
					calcul_nb_jour(nom_form,tab_pdt_cplt);
					reinitialise_pdt_cplt(nom_form,tab_pdt_cplt);
				}else{
					target.value="";
				}
			}
		}
	}
	function removeCalender() {
		var parentEle=document.getElementById("calender");
		while(parentEle.firstChild) parentEle.removeChild(parentEle.firstChild);
		document.getElementById('basis').parentNode.removeChild(document.getElementById('basis'));
	}		
	function calender() {
		var parentEle=document.getElementById("calender");
		parentEle.onmouseover=function(e) {
			var ele=setTarget(e);
			if(ele.parentNode.className=='week' && ele.firstChild && ele!=hoverEle) {
				if(hoverEle) hoverEle.className=hoverEle.className.replace(/hoverEle ?/,'');
				hoverEle=ele;
				ele.className='hoverEle '+ele.className;
			} else {
				if(hoverEle) {
					hoverEle.className=hoverEle.className.replace(/hoverEle ?/,'');
					hoverEle=false;
				}
			}
		}
		while(parentEle.firstChild) parentEle.removeChild(parentEle.firstChild);
		function check(){
			if(year%4==0&&(year%100!=0||year%400==0))allMonth[1]=29;
			else allMonth[1]=28;
		}
		
		function addClass (name) { if(!currentClass){currentClass=name} else {currentClass+=' '+name} };
		
		if(month < 0){month+=12; year-=1}
		if(month > 11){month-=12; year+=1}
		if(year==yearMax-1) yearMax+=1;
		//if(year==yearMin) yearMin-=1;
		check();
		var control=newElement('div',[['id','control',1]],false,parentEle);
		var controlPlus=newElement('span', [['href','javascript:month--;calender()',1],['className','controlPlus',1]], '<', control);
		var select=newElement('select', [['onchange',function(){setMonth(this)}],['className','mois',1]], false, control);
		
		for(var i=0; i<allNameOfMonths.length; i++) newElement('option', [['value',i,1]], allNameOfMonths[i], select);
		
		select.selectedIndex=month;
		select=newElement('select', [['onchange',function(){setYear(this)}]], false, control);
		for(var i=yearMin; i<yearMax; i++) newElement('option', [['value',i,1]], i, select);
		select.selectedIndex=year-yearMin;
		controlPlus=newElement('span', [['href','javascript:month++;calender()',1],['className','controlPlus',1]], '>', control);
		check();
		currentDay=1-new Date(year,month,1).getDay();
		if(currentDay > 0) currentDay-=7;
		currentDayZero=currentDay;
		var newMonth=newElement('table',[['cellSpacing',0,1],['onclick',function(e){setValue(setTarget(e))}]], false, parentEle);
		var newMonthBody=newElement('tbody', false, false, newMonth);
		var tr=newElement('tr', [['className','head',1]], false, newMonthBody);
		tr=newElement('tr', [['className','weekdays',1]], false, newMonthBody);
		
		for(i=0;i<7;i++) td=newElement('td', false, allNameOfWeekDays[i], tr);
			
		tr=newElement('tr', [['className','week',1]], false, newMonthBody);
		for(i=0; i<allMonth[month]-currentDayZero; i++){
			var currentClass=false;			
			currentDay++;
			//if(currentDay==day && month==monthZero && year==yearZero) addClass ('today');
			if(currentDay==day && month==monthZero && year==yearZero) addClass ('today');
			if(currentDay<jour && month<=monthZero && year==yearZero) addClass ('grisee');
			if(month<monthZero && year<=yearZero) addClass ('grisee');
			if(currentDay <= 0 ) {
				if(currentDayZero!=-7) td=newElement('td', false, false, tr);
			}
			else {
				if((currentDay-currentDayZero)%7==0) addClass ('holiday');
				td=newElement('td', (!currentClass ? false : [['className',currentClass,1]] ), currentDay, tr);
				if((currentDay-currentDayZero)%7==0) tr=newElement('tr', [['className','week',1]], false, newMonthBody);
			}
			if(i==allMonth[month]-currentDayZero-1){
				i++;
				while(i%7!=0){i++;td=newElement('td', false, false, tr)};
			}
		}
	}
	
	function showCalender(ele,form,tab_pdt) {
		nom_form = form;
		tab_pdt_cplt = tab_pdt;
		if(document.getElementById('basis')) { removeCalender() }
		else {
			champ=document.getElementById(ele.id.replace(/for_/,''));
			target=document.forms[nom_form].elements[champ.name];
			var basis=ele.parentNode.insertBefore(document.createElement('div'),ele);
			basis.id='basis';
			basis.style.zIndex = 2;
			tab_champ_date = champ.value.split('/');
			if (tab_champ_date[0] > 0){
				month = tab_champ_date[1]-1;
				day = Math.abs(tab_champ_date[0]);
				year = tab_champ_date[2];
			}
			
			basis.style.height = '500px';
			newElement('div', [['id','calender',1]], false, basis);
			calender();
		}
	}
