﻿// JScript File

	var CalendarNode;
	var CalendarCurrentDate;
	var CalendarCurrentMonth;
	var CalendarCurrentYear;
	var CalendarFieldNode;
	
	function GetCalendar(monthIndex, Year, SelectedDate){
		var monthNames=['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'];
		var dayNames=['D','L','M','Me','J','V','S'];
		var firstDayOfWeek=1;
		var attributesHeader=' class="CalendarHeader"';
		var attributesMonth=' class="CalendarMonth"';
		var attributesYear='';
		var closeButton='<a href="#" onclick="HideCalendar(); return false;" class="CalendarCloseButton">X</a>';
		var attributesDayNames=' align="center"';
		var attributesDay='';
		var attributesSelected=' class="CalendarSelectedDay"';
		
		var originDate = new Date(Year, monthIndex, 1); //first day of month

		//table header
		var ret='<table cols="7" cellpadding="0" cellspacing="0" border="0"><tr>';
		ret+='<td colspan="7"'+attributesHeader+'><span'+attributesMonth+'><a href="#" onclick="BrowseCalendar(\'m\',11);return false">-</a>&nbsp;'+monthNames[monthIndex]+'&nbsp;<a href="#" onclick="BrowseCalendar(\'m\',1);return false">+</a></span><span'+attributesMonth+'><a href="#" onclick="BrowseCalendar(\'y\',-1);return false">-</a>'+Year+'<a href="#" onclick="BrowseCalendar(\'y\',1);return false">+</a></span>'+closeButton+'</td></tr><tr>';
		for(s=0;s<7;s++)
			ret+='<td'+attributesDayNames+'>'+dayNames[(s+firstDayOfWeek)%7]+'</td>';
		ret+='</tr>';
		//cells from previous month
		for (i=firstDayOfWeek;i!=originDate.getDay();i=(i+1)%7) {
			if (i==firstDayOfWeek) ret+='<tr>';
			ret+='<td>&nbsp;</td>';
		}
		var d; //current cell date
		var dim=[31,0,31,30,31,30,31,31,30,31,30,31]; //month lengths
		dim[1]=(((originDate.getFullYear()%100!=0)&&(originDate.getFullYear()%4==0))||(originDate.getFullYear()%400==0))?29:28; //leap year?
		//loop through each month's day
		for (i=1;i<=dim[monthIndex];i++) {
			d = new Date(Year, monthIndex, i);
			if (d.getDay()==firstDayOfWeek) ret+='<tr>';
			ret+='<td'+(((d-SelectedDate)==0)?attributesSelected:'')+'><a href="#" onclick="SelectDate(new Date('+Year+','+monthIndex+','+i+')); return false;">'+i+'</a></td>';
			if ((d.getDay()+1)%7==firstDayOfWeek) ret+='</tr>';
		}
		//cells from next month
		for (i=(d.getDay()+1)%7;i!=firstDayOfWeek;i=(i+1)%7) {
			ret+='<td>&nbsp;</td>';
			if ((i+1)%7==firstDayOfWeek) ret+='</tr>';
		}
		return ret;
	}
	
	function BrowseCalendar(DateUnit, Amount) {
		switch (DateUnit) {
			case 'm':
				CalendarCurrentMonth=(CalendarCurrentMonth+Amount)%12;
				CalendarNode.innerHTML=GetCalendar(CalendarCurrentMonth, CalendarCurrentYear, CalendarCurrentDate);
				break;
			case 'y':
				CalendarCurrentYear=CalendarCurrentYear+Amount;
				CalendarNode.innerHTML=GetCalendar(CalendarCurrentMonth, CalendarCurrentYear, CalendarCurrentDate);
				break;
		}
	}

	
	function CreateCalendarNode() {
		var cal;
		cal = document.createElement('DIV');
		cal.className='CalendarDIV';
		cal.style.display='none';
		document.getElementsByTagName('BODY')[0].appendChild(cal);
		return cal;
	}
	
	function DisplayCalendar(DateField) {
		if (!CalendarNode) CalendarNode=CreateCalendarNode();
		
		var d = ParseDate(DateField.value);
		var selectedDate
		if (d) {
			selectedDate=d;
		} else {
			selectedDate=new Date();
		}
		CalendarCurrentDate=selectedDate;
		CalendarCurrentYear=selectedDate.getFullYear();
		CalendarCurrentMonth=selectedDate.getMonth()
		
		CalendarFieldNode=DateField;
		CalendarNode.innerHTML=GetCalendar(CalendarCurrentMonth, CalendarCurrentYear, CalendarCurrentDate);
		CalendarNode.style.top=getAbsoluteTop(DateField) + DateField.offsetHeight + 1;
		CalendarNode.style.left=getAbsoluteLeft(DateField);
		CalendarNode.style.display='block';
	}
	
	function SelectDate(DateValue) {
		CalendarFieldNode.value=DateValue.getDate()+'/'+(DateValue.getMonth()+1)+'/'+DateValue.getFullYear();
		CalendarNode.style.display='none';
	}
	
	function CheckDateField(DateField) {
		if (DateField.value != '') {
			if (!ParseDate(DateField.value)) {
				DateField.value=CalendarCurrentDate.getDate()+'/'+(CalendarCurrentDate.getMonth()+1)+'/'+CalendarCurrentDate.getFullYear();
				DateField.focus();
			}
		}
	}
	
	function HideCalendar() {
		CalendarNode.style.display='none'
	}
	
	function ParseDate(DateString) {
		var ret, arr, d, m, y, dt;
		arr=DateString.split('/');
		if (arr.length==3) {
			if (!isNaN(arr[0])) d=parseInt(arr[0]);
			if (!isNaN(arr[1])) m=parseInt(arr[1]);
			if (!isNaN(arr[2])) y=parseInt(arr[2]);
			if (d && m && y) {
				dt=new Date(y, m-1, d);
				if (dt.getDate()==d && dt.getMonth()==(m-1) && ((dt.getYear()==y)||(dt.getFullYear()==y))) {
					return dt;
				}
			}
		}
	}

	//functions to handle absolute position
	function getAbsoluteLeft(object) {
		var oLeft = object.offsetLeft;
		while (object.offsetParent!=null) {
			oLeft += object.offsetParent.offsetLeft
			object = object.offsetParent
		}
		return oLeft
	}

	function getAbsoluteTop(object) {
		var oTop = object.offsetTop;
		while(object.offsetParent!=null) {
			oTop += object.offsetParent.offsetTop
			object = object.offsetParent
		}
		return oTop
	}
