isIE = (document.all ? true : false);
isDOM = (document.getElementById ? true : false);

// Initialize arrays.
var months = new Array("Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec");
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;

function getDays(month, year) {
	if (1 == month)
		return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
	else
		return daysInMonth[month];
}

function getToday() {
	this.now = new Date();
	this.year = this.now.getFullYear();
	this.month = this.now.getMonth();
	this.day = this.now.getDate();
}

today = new getToday();

function newCalendar(eltName,attachedElement) {
	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, courier" size="2">';
	daysGrid += '<a style="text-decoration:none;" href="#" onclick="hideElement(\'' + eltName + '\'); return true;">x</a>';
	daysGrid += '&nbsp;&nbsp;';
	daysGrid += '<a style="text-decoration:none;" href="#" onclick="incMonth(-1,\'' + eltName + '\'); return true;">&laquo; </a>';

//	daysGrid += '<b>';
/*	if (isThisMonth) {
		daysGrid += '<font color=red>' + months[month] + '</font>';
	} else {
		daysGrid += months[month];
	}*/
    daysGrid += '<select style="padding:0px; font-size:10px;" onchange="incMonth(parseInt(this.options[this.selectedIndex].value, 10),\'' + eltName + '\');">';
//    daysGrid += '<select onchange="alert(' + eltName + ');">';
    for (i=0; i<12; i++) {
        monthValue = i - month;
        if (i==month) {
            monthSelectedAff = ' selected="selected" ';
        } else {
            monthSelectedAff = '';
        }
        if (i==today.month) {
            monthSelectedCol = ' style="color:red;" ';
        } else {
            monthSelectedCol = '';
        }
        daysGrid += '<option value="' + monthValue + '" ' + monthSelectedAff + monthSelectedCol + '>' + months[i];
    
    }
    daysGrid += '</select>';
//	daysGrid += '</b>';

	daysGrid += '<a style="text-decoration:none;" href="#" onclick="incMonth(1,\'' + eltName + '\'); return true;"> &raquo;</a>';
	daysGrid += '&nbsp;&nbsp;&nbsp;';
	daysGrid += '<a style="text-decoration:none;" href="#" onclick="incYear(-1,\'' + eltName + '\'); return true;">&laquo; </a>';

//	daysGrid += '<b>';
    daysGrid += '<select style="padding:0px; font-size:10px;" onchange="incYear(parseInt(this.options[this.selectedIndex].value, 10),\'' + eltName + '\');">';
//    daysGrid += '<select onchange="alert(' + eltName + ');">';
    for (i=1900; i<2005; i++) {
        yearValue = i - year;
        if (i==year) {
            yearSelectedAff = ' selected="selected" ';
        } else {
            yearSelectedAff = '';
        }
        if (i==today.year) {
            yearSelectedCol = ' style="color:red;" ';
        } else {
            yearSelectedCol = '';
        }
        daysGrid += '<option value="' + yearValue + '" ' + yearSelectedAff + yearSelectedCol + '>' + i;
    
    }
    daysGrid += '</select>';
    
/*	if (isThisYear) {
		daysGrid += '<font color=red>' + year + '</font>';
	} else {
		daysGrid += ''+year;
	}
	daysGrid += '</b>';
*/
	daysGrid += '<a style="text-decoration:none;" href="#" onclick="incYear(1,\'' + eltName + '\'); return true;"> &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 = "blue";
				if (day > 0 && day == dayOfMonth) color="red";
				daysGrid += '<a style="text-decoration:none;" href="#" onclick="setDay(';
				daysGrid += dayOfMonth + ',\'' + eltName + '\'); return true;" '
				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) {
//	displayElement.value = (displayMonth + 1) + "/" + day + "/" + displayYear;
	if (day<10) day = '0' + day;
	mois = (displayMonth + 1);
	if (mois<10) mois = '0' + mois;
	displayElement.value = day + "/" + mois + "/" + displayYear;
	hideElement(eltName);
}

function getAbsX(elt) { return (elt.x) ? elt.x : getAbsPos(elt,"Left"); }
function getAbsY(elt) { return (elt.y) ? elt.y : getAbsPos(elt,"Top"); }
function getAbsPos(elt,which) {
	iPos = 0;
	while (elt != null) {
		iPos += elt["offset" + which];
		elt = elt.offsetParent;
	}
	return iPos;
}

function getDivStyle(divname) {
	var style;
	if (isDOM) {
		style = document.getElementById(divname).style;
	} else {
		style = isIE ? document.all[divname].style : document.layers[divname];
	}
	return style;
}

function hideElement(divname) {
	getDivStyle(divname).visibility = 'hidden';
}

function moveBy(elt,deltaX,deltaY) {
	elt.left = parseInt(elt.left) + deltaX;
	elt.top = parseInt(elt.top) + deltaY;
}

function toggleVisible(divname) {
	divstyle = getDivStyle(divname);
	if (divstyle.visibility == 'visible' || divstyle.visibility == 'show') {
		divstyle.visibility = 'hidden';
	} else {
		fixPosition(divname);
		divstyle.visibility = 'visible';
	}
}

function setPosition(elt,positionername,isPlacedUnder) {
	var positioner;
	if (isIE) {
		positioner = document.all[positionername];
	} else {
		if (isDOM) {
			positioner = document.getElementById(positionername);
		} else {
			positioner = document.images[positionername];
		}
	}
	elt.left = getAbsX(positioner);
	elt.top = getAbsY(positioner) + (isPlacedUnder ? positioner.height : 0);
}

function fixPosition(divname) {
	divstyle = getDivStyle(divname);
	positionerImgName = divname + 'Pos';
	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);
}

