var arrHiddenFields = new Array();
function InitializeCalendar(sTargetId, sLanguage)
{
	if (document.getElementById('calendar'))
	{
		HideCalendar();
		document.body.removeChild(document.getElementById('calendar'));
	}
	var dNow = new Date();
	var iMonth = dNow.getMonth();
	var iYear = dNow.getUTCFullYear();
	var textObject = document.createTextNode('\u00A0');
	var calendarDiv = document.createElement('div');
	calendarDiv.setAttribute('id','calendar');
	calendarDiv.style.left = getLeft(sTargetId) + "px";
	var iCalendarTop = getTop(sTargetId) + 22;
	calendarDiv.style.top = iCalendarTop + "px";
	calendarDiv.className = "calendar";
	var oDiv = document.createElement('div');
	var oLink = document.createElement('a');
	var oText = document.createTextNode('X');
	oLink.appendChild(oText);
	oLink.onclick = function () {HideCalendar();return false;};
	oDiv.appendChild(oLink);
	calendarDiv.appendChild(oDiv);
	var previousButton = document.createElement('input');
	previousButton.setAttribute('type','button');
	previousButton.setAttribute('value','\u00AB');
	previousButton.onclick = function () {for (var i = 0; i < document.getElementById('month').options.length; i ++){if (document.getElementById('month').options[i].selected){if (i > 0){document.getElementById('month').options[i-1].selected = true;CreateCalendar(i-1,document.getElementById('year').value,sTargetId,sLanguage);}else{document.getElementById('month').options[11].selected = true;document.getElementById('year').value--;CreateCalendar(11,document.getElementById('year').value,sTargetId,sLanguage);}break;}}};
	previousButton.className = "button";
	calendarDiv.appendChild(previousButton);
	calendarDiv.appendChild(textObject);
	var monthSelect = document.createElement('select');
	monthSelect.setAttribute('id','month');
	var arrMonths = GetMonths(sLanguage);
	for (var i = 0; i < arrMonths.length; i++)
	{
		monthSelect.options[i] = new Option(arrMonths[i],i);
		if (i == iMonth)
		{
			monthSelect.options[i].selected = true;
		}
	}
	monthSelect.onchange = function () {CreateCalendar(this.value,document.getElementById('year').value,sTargetId,sLanguage);};
	calendarDiv.appendChild(monthSelect);
	calendarDiv.appendChild(textObject);
	var yearSelect = document.createElement('input');
	yearSelect.setAttribute('id','year');
	yearSelect.setAttribute('value',iYear);
	yearSelect.onblur = function(){if(isNaN(this.value)){var now = new Date();this.value = now.getUTCFullYear();}for (var i = 0; i < document.getElementById('month').options.length; i ++){if (document.getElementById('month').options[i].selected){CreateCalendar(i, this.value, sTargetId,sLanguage);break;}}}
	calendarDiv.appendChild(textObject);
	calendarDiv.appendChild(yearSelect);
	var nextButton = document.createElement('input');
	nextButton.setAttribute('type','button');
	nextButton.setAttribute('value','\u00BB');
	nextButton.onclick = function () {for (var i = 0; i < document.getElementById('month').options.length; i ++){if (document.getElementById('month').options[i].selected){if (i < 11){document.getElementById('month').options[i+1].selected = true;CreateCalendar(i+1,document.getElementById('year').value,sTargetId,sLanguage);}else{document.getElementById('month').options[0].selected = true;document.getElementById('year').value++;CreateCalendar(0,document.getElementById('year').value,sTargetId,sLanguage);}break;}}};
	nextButton.className = "button";
	calendarDiv.appendChild(nextButton);
	document.body.appendChild(calendarDiv);
	CreateCalendar(iMonth,iYear,sTargetId,sLanguage);
}
function CreateCalendar(iMonth, iYear, sTargetId, sLanguage)
{
	var oCalendar = document.getElementById('calendar');
	var oOldTable = document.getElementById('tableCalendar');
	if (oOldTable)
	{
		oCalendar.removeChild(oOldTable);
	}
	var oTable = document.createElement('table');
	oTable.id = 'tableCalendar';
	var tbodyObject = document.createElement('tbody');
	var rowObject = document.createElement('tr');

	var arrDays = GetDays(sLanguage);
	for (var i = 0; i < arrDays.length; i++)
	{
		var headerObject = document.createElement('th');
		var textObject = document.createTextNode(arrDays[i]);
		headerObject.appendChild(textObject);
		rowObject.appendChild(headerObject);
	}
	tbodyObject.appendChild(rowObject);
	oTable.appendChild(tbodyObject);
	oCalendar.appendChild(oTable);

	var cellObject;
	var linkObject;
	var linkText;
	var i = 1;
	while (i <= daysInMonth(iMonth,iYear))
	{
		rowObject = document.createElement('tr');
		for (var j = 0; j < 7; j++)
		{
			if (j == 0 || j == 6)
			{
				cellObject = document.createElement('td');
				cellObject.className = 'weekend';
			}
			else
			{
				cellObject = document.createElement('td');
			}
			if (i <= daysInMonth(iMonth,iYear))
			{
				if (dayOfTheWeek(i,iMonth,iYear) == j)
				{
					textObject = document.createTextNode(i);
					linkObject = document.createElement('a');
					linkObject.setAttribute('href', '');
					sDay = i.toString();
					if (sDay.length == 1)
					{
						sDay = '0' + i;
					}
					sMonth = (parseInt(iMonth)+1).toString();
					if (sMonth.length == 1)
					{
						sMonth = '0' + sMonth;
					}
					sYear = iYear.toString();
					while (sYear.length < 4)
					{
						sYear = '0' + sYear;
					}
					sSelectedDate = sDay + '/' + sMonth + '/' + sYear;
					linkObject.setAttribute('href', sSelectedDate);
					linkObject.onclick = function(){document.getElementById(sTargetId).value=this.href.substring(this.href.length, this.href.length-10);HideCalendar();return false;};
					linkObject.appendChild(textObject);
					cellObject.appendChild(linkObject);
					i++;
				}
			}
			rowObject.appendChild(cellObject);
		}
		tbodyObject.appendChild(rowObject);
		oTable.appendChild(tbodyObject);
	}
}
function DisplayCalendar()
{
	var iCalendarTop = getTop('calendar');
	var iCalendarLeft = getLeft('calendar');
	var iCalendarHeight = document.getElementById('calendar').offsetHeight;
	var iCalendarWidth = document.getElementById('calendar').offsetWidth

	if (document.getElementById('calendar'))
	{
		document.getElementById('calendar').style.visibility='visible';
		if(!window.XMLHttpRequest)
		{

            var intCount = 0;
			for (var i = 0; i < document.forms[0].elements.length;i++)
			{
				if (document.forms[0].elements[i].tagName.toLowerCase() == 'select')
				{
					var iSelectTop = getTop(document.forms[0].elements[i].id);
					var iSelectLeft = getLeft(document.forms[0].elements[i].id);
					
					if(document.forms[0].elements[i].style.visibility == 'hidden')
					{
					    arrHiddenFields[intCount] = document.forms[0].elements[i].id;
					    ++intCount;
					}
					
					if ((iSelectTop > iCalendarTop && iSelectTop < (iCalendarTop + iCalendarHeight)) || (iSelectLeft > iCalendarLeft && iSelectLeft < (iCalendarLeft + iCalendarWidth)))
					{
						document.forms[0].elements[i].style.visibility = 'hidden';
					}					
					
				}
			}
		}
	}
}

function HideCalendar()
{
	if (document.getElementById('calendar'))
	{
		document.getElementById('calendar').style.visibility='hidden';
		if(!window.XMLHttpRequest)
		{
			for (var i = 0; i < document.forms[0].elements.length;i++)
			{
			    var blnChange = true;
			    for(var intHidden = 0; intHidden < arrHiddenFields.length; ++intHidden)
			    {
			        if(document.forms[0].elements[i].id == arrHiddenFields[intHidden])
			        {
			            blnChange = false;
			            break;
			        }
			    }
			    
				if (blnChange && document.forms[0].elements[i].tagName.toLowerCase() == 'select')
				{
					document.forms[0].elements[i].style.visibility = 'visible';
				}
			}
		}
	}
}
function dayOfTheWeek(day, month, year)
{
	var dateGiven = new Date(year, month, day);
	var dayOfWeek = dateGiven.getDay();
	return dayOfWeek;
}
function daysInMonth(month, year)
{
	var arrDays = new Array(12);
	arrDays[0] = 31;
	arrDays[1] = (year % 4 == 0) ? 29 : 28;
	arrDays[2] = 31;
	arrDays[3] = 30;
	arrDays[4] = 31;
	arrDays[5] = 30;
	arrDays[6] = 31;
	arrDays[7] = 31;
	arrDays[8] = 30;
	arrDays[9] = 31;
	arrDays[10] = 30;
	arrDays[11] = 31;
	return arrDays[month];
}
function GetDays(sLanguage)
{
	var arrDays = new Array();
	switch (sLanguage)
	{
		case "english":
			arrDays[0] = "Sun";
			arrDays[1] = "Mon";
			arrDays[2] = "Tue";
			arrDays[3] = "Wed";
			arrDays[4] = "Thu";
			arrDays[5] = "Fri";
			arrDays[6] = "Sat";
			break;
		case "french":
			arrDays[0] = "Dim";
			arrDays[1] = "Lun";
			arrDays[2] = "Mar";
			arrDays[3] = "Mer";
			arrDays[4] = "Jeu";
			arrDays[5] = "Ven";
			arrDays[6] = "Sam";
			break;
	}
	return arrDays;
}
function GetMonths(sLanguage)
{
	var arrMonths = new Array();
	switch (sLanguage)
	{
		case "english":
			arrMonths[0] = "January";
			arrMonths[1] = "February";
			arrMonths[2] = "March";
			arrMonths[3] = "April";
			arrMonths[4] = "May";
			arrMonths[5] = "June";
			arrMonths[6] = "July";
			arrMonths[7] = "August";
			arrMonths[8] = "September";
			arrMonths[9] = "October";
			arrMonths[10] = "November";
			arrMonths[11] = "December";
			break;
		case "french":
			arrMonths[0] = "Janvier";
			arrMonths[1] = "F\u00E9vrier";
			arrMonths[2] = "Mars";
			arrMonths[3] = "Avril";
			arrMonths[4] = "Mai";
			arrMonths[5] = "Juin";
			arrMonths[6] = "Juillet";
			arrMonths[7] = "Ao\u00FBt";
			arrMonths[8] = "Septembre";
			arrMonths[9] = "Octobre";
			arrMonths[10] = "Novembre";
			arrMonths[11] = "D\u00E9cembre";
			break;
	}
	return arrMonths;
}
function getLeft(id)
{
	    var oNode = document.getElementById(id);
	    var iLeft = 0;

	    while(oNode.tagName != "BODY" && oNode.tagName != "HTML") {
	        iLeft += oNode.offsetLeft;
	        oNode = oNode.offsetParent;
	    }

	    return iLeft;
}
function getTop(id)
{
    var oNode = document.getElementById(id);
    var iTop = 0;

    while(oNode.tagName != "BODY" && oNode.tagName != "HTML") {
        iTop += oNode.offsetTop;
        oNode = oNode.offsetParent;
    }

    return iTop;

}
function setValue(newValue, id)
{
	document.getElementById(id).value = newValue;
}

function moveOption(idFrom, idTo) 
{
	var selectFrom = document.getElementById(idFrom);
	var selectTo = document.getElementById(idTo);
	var lengthFrom = selectFrom.options.length;
	
	for (var i = lengthFrom - 1; i >= 0; i--)
	{
		if (selectFrom.options[i].selected) 
		{
			selectTo.options[selectTo.options.length] = new Option(selectFrom.options[i].text, selectFrom.options[i].value);
			selectFrom.options[i] = null;
		}
	}
}

function selectAll(idSelect)
{
	var selectBox = document.getElementById(idSelect);
	
	for (var i = 0; i < selectBox.options.length; i++)
	{
		selectBox.options[i].selected = true;
	}
}