// Librairie jQuery de sélection de date par calendrier pop-up.
// Version : 	1.1
// Créer par : 	Marc-André Lamothe
// Copyright 2009 Vortex Solution.

var calendarField = '';
var month_fr = new Array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
var month_en = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var weekdays_fr = new Array('D','L','M','M','J','V','S');
var weekdays_en = new Array('S','M','T','W','T','F','S');

function getFullYear(date)
{
	if (date.getFullYear)
		return date.getFullYear();
	var Year = date.getYear() % 100;
	return Year + (Year < 38 ? 2000 : 1900);
}
	
function daysInMonth(date)
{
	var Year = getFullYear(date);
	var Month = date.getMonth();
	var Values = [31,28,31,30,31,30,31,31,30,31,30,31];
	if (Month == 1 && ((Year % 4 == 0 && Year % 100 != 0) || (Year % 4 == 0 && Year % 100 == 0 && Year % 400 == 0)))
		return 29;
	return Values[Month];
}

function dateSelected(date)
{
	// Change the associated field's value
	$('#'+calendarField).val(date);
	// Hide the calendar
	$('#Calendar').slideUp();
}

function loadCalendarContent()
{
	var content = $('#CalendarContent');
	if (content)
	{
		content.empty();
		var today = new Date();
		var month = parseInt($("#CalendarMonth").val());
		var year = parseInt($("#CalendarYear").val());
		var nbOfDays = daysInMonth(new Date(year, month, 1));
		var firstWeekday = new Date(year, month, 1).getDay();
		var lastWeekday = (firstWeekday+nbOfDays)%7;
		var days = $("<div></div>").attr('className','days').css('margin','0px auto');
		for (var i = 1-firstWeekday; i <= nbOfDays+(lastWeekday > 0 ? 7-lastWeekday : 0); i++)
			if (i <= 0 || i > nbOfDays)
				days.append($("<div></div>").html('&nbsp;').css('float','left').css('padding','4px 0 4px 0').css('width',(168/7)+'px'));
			else
				days.append($("<a></a>").attr('href','javascript:dateSelected(\''+year+'-'+((month+1) < 10 ? '0'+(month+1) : (month+1))+'-'+(i < 10 ? '0'+i : i)+'\')').text(i).addClass((year == getFullYear(today) && month == today.getMonth() && i == today.getDate() ? 'today' : '')).css('float','left').css('padding','4px 0 4px 0').css('text-align','center').css('vertical-align','middle').css('width',(168/7)+'px'));
		content.append(days);
	}
}

function toggleCalendar(fieldId,lang)
{
	// Find or create the calendar container
	var calendar = $('#Calendar');
	if (calendar.length == 0)
	{
		calendar = $("<div></div>").attr('id','Calendar').css('display','none').css('padding','5px').css('position','absolute').css('text-align','center').css('width','180px').css('z-index','1000');
		$(document.body).append(calendar);
	}
	if (calendar.children().length == 0)
	{
		// Create the calendar's content
		var d = new Date();
		var form = $("<div></div>").attr('className','controls').css('margin','0 0 5px 0').css('text-align','center');
		var button = $("<input>").attr('type','button').val('<').css('font-size','.78em').css('padding','0').css('vertical-align','top').click(function () { var month = parseInt($("#CalendarMonth").val());var year = parseInt($("#CalendarYear").val());$('#CalendarYear').val(month > 0 ? year : year-1);$('#CalendarMonth').val(month > 0 ? month-1 : 11);loadCalendarContent(); });
		form.append(button);
		var select = $("<select></select>").attr('id','CalendarMonth').css('font-size','1em').css('margin','0 2px 0 2px').change(function () {loadCalendarContent();});
		for (var i=0; i < 12; i++)
			select.append($("<option></option>").val(i).attr('text',(lang == 'fr' ? month_fr[i] : month_en[i])).attr('selected',(i == d.getMonth() ? true : false)));
		form.append(select);
		var select = $("<select></select>").attr('id','CalendarYear').css('font-size','1em').css('margin','0 2px 0 2px').change(function () {loadCalendarContent();});
		for (var i=getFullYear(d)-50; i < getFullYear(d)+50; i++) 
			select.append($("<option></option>").val(i).attr('text',i).attr('selected',(i == getFullYear(d) ? true : false)));
		form.append(select);
		var button = $("<input>").attr('type','button').val('>').css('font-size','.78em').css('padding','0').css('vertical-align','top').click(function () { var month = parseInt($("#CalendarMonth").val());var year = parseInt($("#CalendarYear").val());$('#CalendarYear').val(month < 11 ? year : year+1);$('#CalendarMonth').val(month < 11 ? month+1 : 0);loadCalendarContent();});
		form.append(button);
		calendar.append(form);
		var weekdays = $("<div></div>").attr('className','weekdays').css('margin','0px auto').css('padding','0 0 0 4px');
		for (var i=0; i < 7; i++)
			weekdays.append($("<div></div>").html((lang == 'fr' ? weekdays_fr[i] : weekdays_en[i])).css('float','left').css('padding','0').css('text-align','center').css('width',(168/7)+'px'));
		calendar.append(weekdays);
		calendar.append($("<div></div>").attr('id','CalendarContent').css('padding','0 0 0 4px'));
		loadCalendarContent();
	}
	// Toggle the calendar display
	if (fieldId != calendarField && calendar.is(":visible"))
		calendar.hide();
	if (calendar.is(":hidden"))
		calendar.css('top',($('#'+fieldId).offset().top+$('#'+fieldId).outerHeight())+'px').css('left',$('#'+fieldId).offset().left+'px');
	calendar.slideToggle(100);
	calendarField = fieldId;
}
