function createDateCtrl(sID, sSelMonth, sSelDay, sSelYear, idxYearLo, idxYearUp, idxAllowNotSelected) {
	var ctx = new Object;
	window["inst"+sID] = ctx;
	ctx.selMonth = document.all[sSelMonth];
	ctx.selDay = document.all[sSelDay];
	ctx.selYear = document.all[sSelYear];
	ctx.idxYearLo = idxYearLo;
	ctx.idxYearUp = idxYearUp;
	ctx.idxAllowNotSelected = idxAllowNotSelected;
	_DateCtrl_populateDays(ctx);
	ctx.selYear.onchange = new Function("_DateCtrl_populateDays(inst"+sID+")");
	ctx.selMonth.onchange = new Function("_DateCtrl_populateDays(inst"+sID+")");
}
function _DateCtrl_populateDays(ctx) {
	var cb = _DateCtrl_in_month(ctx.selYear.selectedIndex+ctx.idxYearLo,ctx.selMonth.selectedIndex, ctx.idxAllowNotSelected);
	var oldIdx = ctx.selDay.selectedIndex;
	var ref, idx;
	
	if (ctx.idxAllowNotSelected)
		cb++;
		
	while( (idx=ctx.selDay.options.length)<cb ) {
		ctx.selDay.options.add(ref=document.createElement("option"));
		if (ctx.idxAllowNotSelected)
			ref.innerText = (idx++);
		else
			ref.innerText = (++idx);
			
	}

	while( (idx=ctx.selDay.options.length)>cb )
		ctx.selDay.options.remove(--idx);
	if( oldIdx>(--idx) )
		ctx.selDay.selectedIndex = idx;
}

var _DateCtrl_days = [31,28,31,30,31,30,31,31,30,31,30,31];
function _DateCtrl_isLeap(year) {
	return ((year%4 == 0) && (year%100 != 0)) || (year%400 == 0);
}
function _DateCtrl_in_month (year,month, AllowNotSelected) {
	if (AllowNotSelected){
		month --;
		year --;
	}	
	if (month==1) return (_DateCtrl_isLeap(year))?29:28;
	return _DateCtrl_days[month];
}

function _DateCtrl_SetValue(DateCtrl, DateValue) {
	if (!DateCtrl) return;
	var bAllowNotSelected = DateCtrl.idxAllowNotSelected;
	DateCtrl.selYear.selectedIndex = DateValue.getFullYear() - DateCtrl.idxYearLo + (bAllowNotSelected?1:0);
	DateCtrl.selMonth.selectedIndex = DateValue.getMonth() + (bAllowNotSelected?1:0);
	_DateCtrl_populateDays(DateCtrl);
	DateCtrl.selDay.selectedIndex = DateValue.getDate() - 1 + (bAllowNotSelected?1:0);
}
