// how reliable is this test?
isIE = (document.all ? true : false);
isDOM = (document.getElementById ? true : false);

// Initialize arrays.
var months = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet",
"Août", "Septembre", "Octobre", "Novembre", "Décembre");
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var displayMonth = new Date().getMonth();
var displayYear = new Date().getFullYear();
var displayDivName;
var displayElement;

var fonction_callback="";
	
function getDays(month, year)
{
   // Test for leap year when February is selected.
   if (1 == month)
      return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
   else
      return daysInMonth[month];
}

function getToday()
{
   // Generate today's date.
   this.now = new Date();
   this.year = this.now.getFullYear();
   this.month = this.now.getMonth();
   this.day = this.now.getDate();
}

// Start with a calendar for today.
today = new getToday();

function newCalendar(eltName,attachedElement,fct_callback)
{
	
	if (fct_callback!="")
	{
		fonction_callback=fct_callback;

	}
         	
	    if (attachedElement) {
	       if (displayDivName && displayDivName != eltName) hideElement(displayDivName);
	       displayElement = attachedElement;
	    }
	    displayDivName = eltName;
            today = new getToday();
            var parseYear = parseInt(displayYear + '');
            var newCal = new Date(parseYear,displayMonth,1);
            var day = -1;
            var startDayOfWeek = newCal.getDay();
            if ((today.year == newCal.getFullYear()) &&
                  (today.month == newCal.getMonth()))
	    {
               day = today.day;
            }
            var intDaysInMonth =
               getDays(newCal.getMonth(), newCal.getFullYear());
            var daysGrid = makeDaysGrid(startDayOfWeek,day,intDaysInMonth,newCal,eltName)
	    if (isIE) {
	       var elt = document.all[eltName];
	       elt.innerHTML = daysGrid;
            } else if (isDOM) {
	       var elt = document.getElementById(eltName);
	       elt.innerHTML = daysGrid;
	    } else {
	       var elt = document.layers[eltName].document;
	       elt.open();
	       elt.write(daysGrid);
	       elt.close();
	    }
}

function incMonth(delta,eltName)
{
	displayMonth += delta;
	if (displayMonth >= 12) {
	  displayMonth = 0;
	  incYear(1,eltName);
	} else if (displayMonth <= -1) {
	  displayMonth = 11;
	  incYear(-1,eltName);
	} else {
	  newCalendar(eltName);
	}
}

function incYear(delta,eltName)
{
	displayYear = parseInt(displayYear + '') + delta;
	newCalendar(eltName);
}

	 function makeDaysGrid(startDay,day,intDaysInMonth,newCal,eltName) {
	    var daysGrid;
	    var month = newCal.getMonth();
	    var year = newCal.getFullYear();
	    var isThisYear = (year == new Date().getFullYear());
	    var isThisMonth = (day > -1)
	    daysGrid = '<table border=1 cellspacing=0 cellpadding=2><tr><td bgcolor=#ffffff nowrap>';
	    daysGrid += '<font face="courier new" style="font-size:11px;">';
	    daysGrid += '<a href="javascript:hideElement(\'' + eltName + '\')">x</a>';
	    daysGrid += '&nbsp;&nbsp;';
	    daysGrid += '<a href="javascript:incMonth(-1,\'' + eltName + '\')">&laquo;</a> ';

	    daysGrid += '<b>';
	    if (isThisMonth) { daysGrid += '<font color="#C85E2C">' + months[month] + '</font>'; }
	    else { daysGrid += months[month]; }
	    daysGrid += '</b>';

	    daysGrid += ' <a href="javascript:incMonth(1,\'' + eltName + '\')">&raquo;</a>';
	    daysGrid += '&nbsp;&nbsp;&nbsp;';
	    daysGrid += '<a href="javascript:incYear(-1,\'' + eltName + '\')">&laquo;</a> ';

	    daysGrid += '<b>';
	    if (isThisYear) { daysGrid += '<font color="#C85E2C">' + year + '</font>'; }
	    else { daysGrid += ''+year; }
	    daysGrid += '</b>';

	    daysGrid += ' <a href="javascript:incYear(1,\'' + eltName + '\')">&raquo;</a><br>';
	    daysGrid += '&nbsp;Di Lu Ma Me Je Ve Sa&nbsp;<br>&nbsp;';
	    var dayOfMonthOfFirstSunday = (7 - startDay + 1);
	    for (var intWeek = 0; intWeek < 6; intWeek++) {
	       var dayOfMonth;
	       for (var intDay = 0; intDay < 7; intDay++) {
	         dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
		 if (dayOfMonth <= 0) {
	           daysGrid += "&nbsp;&nbsp; ";
		 } else if (dayOfMonth <= intDaysInMonth) {
		   var color = "#0380b7";
		   if (day > 0 && day == dayOfMonth) color="#C85E2C";
		   daysGrid += '<a href="javascript:setDay(';
		   daysGrid += dayOfMonth + ',\'' + eltName + '\' ';

		  daysGrid +=' )" ';
		   daysGrid += 'style="color:' + color + '">';
		   var dayString = dayOfMonth + "</a> ";
		   if (dayString.length == 6) dayString = '0' + dayString;
		   daysGrid += dayString;
		 }
	       }
	       if (dayOfMonth < intDaysInMonth) daysGrid += "<br>&nbsp;";
	    }
	    return daysGrid + "</td></tr></table>";
	 }

function setDay(day,eltName)
{
	var txt_mois=(displayMonth + 1)+"";
	if (txt_mois.length==1)
		txt_mois="0"+txt_mois;
	
	displayElement.value =  day + "/" + txt_mois +"/" + displayYear;
	hideElement(eltName);
	
	if (fonction_callback)
		alert(fonction_callback);
}

// fixPosition() attaches the element named eltname
// to an image named eltname+'Pos'
//
function fixPosition(divname)
{
	 divstyle = getDivStyle(divname);
	 positionerImgName = divname + 'Pos';
	 // hint: try setting isPlacedUnder to false
	 isPlacedUnder = false;
	 if (isPlacedUnder) {
	  setPosition(divstyle,positionerImgName,true);
	 } else {
	  setPosition(divstyle,positionerImgName)
	 }
}

function toggleDatePicker(eltName,formElt)
{
  var x = formElt.indexOf('.');
  var formName = formElt.substring(0,x);
  var formEltName = formElt.substring(x+1);
  newCalendar(eltName,document.forms[formName].elements[formEltName]);
  toggleVisible(eltName);
}

// fixPositions() puts everything back in the right place after a resize.
function fixPositions()
{
 // add a fixPosition call here for every element
 // you think might get stranded in a resize/reflow.
 fixPosition('daysOfMonth');
 fixPosition('daysOfMonth2');
}
