function dSetDateDropDowns(cboName, strDate){
	if(strDate.length == 0){
		var dteDate = new Date()
	}else{
		var dteDate = new Date(strDate)
	}
	var fullYear = dGetFullYear(dteDate)
	document.getElementById(cboName + 'day')[dteDate.getDate()-1].selected = true
	document.getElementById(cboName + 'month')[dteDate.getMonth()].selected = true
	for (i=0;i<document.getElementById(cboName + 'year').length;i++){
		if (document.getElementById(cboName + 'year')[i].value==fullYear){
			document.getElementById(cboName + 'year')[i].selected=true
		}
	}
	dAssembleDate(cboName)
}
function dDisplayDateInputCbo(cboName, yearcount,noDisplay) {
	return dDateTimecbo(cboName, yearcount, false,noDisplay)
}
function dDisplayDateTimeInputCbo(cboName, yearcount, noDisplay) {
	return dDateTimecbo(cboName, yearcount, true, noDisplay)
}

function dDateTimecbo(cboName, yearcount, showtime, noDisplay){
	var html = ""
	var minutestep = 5
	var weekday_showing = false
	var dayofweek_returned_as_number = false
	var month_returned_as_number = false
	var cur = new Date() //dateToday;
	var min_year = dGetFullYear(cur) - yearcount 			// defines lowest year in year menu
	var max_year = dGetFullYear(cur) + 1	// defines highest year in the year menu
	months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
	//months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	html+="<input name=\"" + cboName + "\" id=\"" + cboName + "\" type=\"hidden\" "
	html+=" value='"+cur.getDate()+" "+months[cur.getMonth()]+" "+dGetFullYear(cur)+"T00:00:00'"
	html+="/>"
	// write day element
	html+="<select class=\"listBorders\" name=\"" + cboName + "day\" id=\"" + cboName +"day\" onChange='dChangeDays(\"" + cboName + "\")' size=1>"
	for (i=1;i<=dNumDaysIn(cur.getMonth(),dGetFullYear(cur));i++){
		html+="<option"+(cur.getDate()==i?" selected":"")+ " value="+i+">"+i+"\n"
	}
	html+="</select>"
// write month element
	html+="<select class=\"listBorders\" name=\"" + cboName + "month\" id=\"" + cboName + "month\" onChange='dChangeDays(\"" + cboName + "\")' size=1>"
	for (i=0;i<12;i++){
		html+="<option"+(month_returned_as_number?" value="+i:"")+(cur.getMonth()==i?" selected":"")+">"+months[i]+"\n"
	}
	html+="</select>"
	// write year element
	html+="<select class=\"listBorders\" name=\"" + cboName + "year\" id=\"" + cboName + "year\" onChange='dChangeDays(\"" + cboName + "\")' size=1>"
	for (i=min_year;i<max_year;i++){
		html+="<option"+(dGetFullYear(cur)==i?" selected":"")+ " value="+i+">"+i+"\n"
	}
	html+="</select>"

	if(showtime){
		html+="   "
		// write hour element
		html+="<select class=\"listBorders\" name=\"" + cboName + "hour\" id=\"" + cboName + "hour\" onChange='dAssembleDate(\"" + cboName + "\")' size=1>"
		for (i=0;i<24;i++){
			html+="<option value="+(String(i).length==1?"0"+i:i)+">"+(String(i).length==1?"0"+i:i)+"\n"
		}
		html+="</select>"
		html+=":"
		// write min element
		html+="<select class=\"listBorders\" name=\"" + cboName + "minute\" id=\"" + cboName + "minute\" onChange='dAssembleDate(\"" + cboName + "\")' size=1>"
		for (i=0;i<60;i=i+minutestep){
			html+="<option value="+(String(i).length==1?"0"+i:i)+">"+(String(i).length==1?"0"+i:i)+"\n"
		}
		html+="</select>"
	}
	if(noDisplay){
		return html
	}else{
		document.write(html)
		dAssembleDate(cboName)
	}
}
function dNumDaysIn(mth,yr) {
	if (mth==3 || mth==5 || mth==8 || mth==10) return 30;
	else if ((mth==1) && dLeapYear(yr)) return 29;
	else if (mth==1) return 28;
	else return 31;
}

function dLeapYear(yr) {
	if (((yr % 4 == 0) && yr % 100 != 0) || yr % 400 == 0)
		return true;
	else
		return false;
}
function dChangeDays(cboName) {
	var day;
	var mth;
	var yr;
	day = document.getElementsByName(cboName + "day")[0]
	mth = document.getElementsByName(cboName + "month")[0].selectedIndex
	yr =document.getElementsByName(cboName + "year")[0].options[document.getElementsByName(cboName + "year")[0].selectedIndex].text
	numDays = dNumDaysIn(mth,yr);
	day.options.length = numDays;
	for (i=27;i<numDays;i++) {
		day.options[i].text = i+1;
		day.options[i].value = i+1;
	}
	day = day.selectedIndex+1;
	dAssembleDate(cboName)
}
function dAssembleDate(cboName){
//xx
try{
		document.getElementById(cboName).value = document.getElementsByName(cboName + "day")[0].value + " " + document.getElementsByName(cboName + "month")[0].options[document.getElementsByName(cboName + "month")[0].selectedIndex].text+ " " + document.getElementsByName(cboName + "year")[0].options[document.getElementsByName(cboName + "year")[0].selectedIndex].text
		if(document.getElementsByName(cboName + "hour").length>0){
			document.getElementById(cboName).value = document.getElementById(cboName).value + "T" + document.getElementsByName(cboName + "hour")[0].value + ":" + document.getElementsByName(cboName + "minute")[0].value + ":00"
		}
	} catch(err){}
}
function dGetWeekDay(mth,day,yr) {
	first_day = dFirstDayOfYear(yr);
	for (num=0;num<mth;num++) {
		first_day += numDaysIn(num,yr);
	}
	first_day += day-1;
	return first_day%7;
}

function dFirstDayOfYear(yr) {
	diff = yr - 401;
	return parseInt((1 + diff + (diff / 4) - (diff / 100) + (diff / 400)) % 7);
}

// fixes a Netscape 2 and 3 bug
function dGetFullYear(d) { // d is a date object
	yr = d.getYear();
	if (yr < 1000)
	yr+=1900;
	return yr;
}
function dDatePast(theDate) {
	var d1 = new Date(theDate); 
	var d2 = new Date(); 
	if (d1.getTime() < d2.getTime()) { 
		return true
	}else{return false}
} 
function dDateInPeriod(d,startdate,enddate){
	var d1 = new Date(d)
	var dStart = new Date(startdate)
	var dEnd = new Date(enddate)
	if (d1.getTime() <= dEnd.getTime() && d1 >= dStart.getTime())
		return true
	else
		return false
}
