function dateselect(container) {
	dateselect.container = container;

	dateselect.d = document.createElement('select');
	dateselect.m = document.createElement('select');
	dateselect.y = document.createElement('select');

	dateselect.d.onchange = function() {
		dateselect.setDateField();
	}
	dateselect.m.onchange = function() {
		dateselect.populateDays();
		dateselect.setDateField();
	}
	dateselect.y.onchange = function() {
		dateselect.populateDays();
		dateselect.setDateField();
	}

	dateselect.populateYears();
	dateselect.populateMonths();
	dateselect.populateDays();

	container.parentNode.appendChild(dateselect.d);
	container.parentNode.appendChild(document.createTextNode(' '));
	container.parentNode.appendChild(dateselect.m);
	container.parentNode.appendChild(document.createTextNode(' '));
	container.parentNode.appendChild(dateselect.y);

	if(dateselect.container.value != '') {
		var parts = dateselect.container.value.split('-');
		for(var i=0;i<dateselect.y.options.length;i++) {
			if(dateselect.y.options[i].value == parts[0]) {
				dateselect.y.options.selectedIndex = i;
				break;
			}
		}
		for(var i=0;i<dateselect.m.options.length;i++) {
			if(dateselect.m.options[i].value == parts[1]-1) {
				dateselect.m.options.selectedIndex = i;
				break;
			}
		}
		for(var i=0;i<dateselect.d.options.length;i++) {
			if(dateselect.d.options[i].value == parts[2]) {
				dateselect.d.options.selectedIndex = i;
				break;
			}
		}
	}
}
dateselect.setDateField = function() {
	var d = new Number(dateselect.d.options[dateselect.d.selectedIndex].value)
	var m = new Number(dateselect.m.options[dateselect.m.selectedIndex].value);
	var y = new Number(dateselect.y.options[dateselect.y.selectedIndex].value);

	dateselect.container.value = y+'-'+(m+1)+'-'+d;
}
dateselect.getDaysInMonth = function(m,y) {
	var dim = new Array();
	dim[0] = 31; // Jan
	dim[1] = (y % 4 == 0 ? 29 : 28); // Feb
	dim[2] = 31; // Mar
	dim[3] = 30; // Apr
	dim[4] = 31; // May
	dim[5] = 30; // Jun
	dim[6] = 31; // Jul
	dim[7] = 31; // Aug
	dim[8] = 30; // Sep
	dim[9] = 31; // Oct
	dim[10] = 30; // Nov
	dim[11] = 31; // Dec
	return(dim[m]);
}
dateselect.populateDays = function() {
	var si = dateselect.d.options.selectedIndex;
	while(dateselect.d.lastChild) {
		dateselect.d.removeChild(dateselect.d.lastChild);
	}

	var m = dateselect.m.options[dateselect.m.selectedIndex].value;
	var y = dateselect.y.options[dateselect.y.selectedIndex].value;
	var dim = dateselect.getDaysInMonth(m,y);
	for(var i=1;i<=dim;i++) {
		dateselect.d.appendChild(document.createElement('option'));
		dateselect.d.lastChild.appendChild(document.createTextNode(i));
		dateselect.d.lastChild.setAttribute('value',i);
	}
	if(si > 0 && dateselect.d.options[si]) {
		dateselect.d.options.selectedIndex = si;
	}
}
dateselect.populateMonths = function() {
	var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	for(var i=0;i<=11;i++) {
		dateselect.m.appendChild(document.createElement('option'));
		dateselect.m.lastChild.appendChild(document.createTextNode(months[i]));
		dateselect.m.lastChild.setAttribute('value',i);
	}
}
dateselect.populateYears = function() {
	var date = new Date;

	for(var i=date.getFullYear()-10;i>=date.getFullYear()-100;i--) {
		dateselect.y.appendChild(document.createElement('option'));
		dateselect.y.lastChild.appendChild(document.createTextNode(i));
		dateselect.y.lastChild.setAttribute('value',i);
	}
}
dateselect(document.getElementById('date-select'));