function popUpCalendar(startDay,startMonth,startYear,endDay,endMonth,endYear,daySelect,monthSelect,yearSelect,stylesheet){
	window.daySelect = daySelect;
	window.monthSelect = monthSelect;
	window.yearSelect = yearSelect;
	window.stylesheet = stylesheet;
	selectedDate = new Date(getSelectValue(yearSelect),parseInt(getSelectValue(monthSelect))-1,getSelectValue(daySelect),10);
	numberOfMonths = (endYear-startYear)*12-startMonth+endMonth+1;
	calWin = popUpWindow("","calendar","width=220,height=500,noresize,scrollbars");
	lastdayid = 0;
	writeCalendar(startDay,startMonth,startYear,numberOfMonths);
}

function writeBlankTd(colspan){
	caltext+='<td colspan='+colspan+' class="blank">&nbsp;</td>\n';
}

function writeCalendar(startDay,startMonth,startYear,numberOfMonths){
	calWin.finishedCal = false;
	calWin.document.write('<html><head><link rel="StyleSheet" href="'+stylesheet+'" type="text/css"></head><body><center><br>');
	monthsArray = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	dayArray = new Array("M","T","W","T","F","S","S");
	Date.prototype.addDay = new Function("this.setTime(this.getTime()+86400000)");
	dayid = 0;
	var startDate = new Date(startYear,startMonth-1,startDay,12);
	var dateCounter = new Date();
	dateCounter.setTime(startDate.getTime());
	for (var c=0;c<numberOfMonths;c++){
		dateCounter=writeMonth(dateCounter);
	}
	calWin.document.write('</center></body></html>');
	calWin.finishedCal = true;
	return dateCounter;
}

function writeDayOfWeek(c){
	caltext+='<th class="dayofweek" width="25">'+dayArray[c]+'</th>';
}

function writeMonth(dateCounter){
	caltext="";
	caltext+='<table width="175" border="0" cellspacing="0" cellpadding="0"><tr><td class="border">';
	caltext+='<table width="175" border="0" cellspacing="1" cellpadding="2">';
	var startMonth = dateCounter.getMonth();
	caltext+='<tr><th colspan="7" width="175" height="25" class="month">'+monthsArray[dateCounter.getMonth()]+' '+dateCounter.getFullYear()+'</th></tr>';
	
	caltext+='<tr align="center">';
	for (var c=0;c<7;c++){
		writeDayOfWeek(c)
	}
	caltext+='</tr>';
	
	while (dateCounter.getMonth()==startMonth){
		dateCounter = writeWeek(dateCounter);
	}
	caltext+='</table>';
	caltext+='</td></tr></table><br>';
	calWin.document.write(caltext);
	return dateCounter;
}

function writeWeek(dateCounter){
	var startMonth = dateCounter.getMonth();
	caltext+='<tr align="center">';
	if (dateCounter.getDay()==0) writeBlankTd(6);
	else if (dateCounter.getDay()!=1) writeBlankTd(dateCounter.getDay()-1);
	
	do {
		writeDay(dateCounter);
		dayid++;
		dateCounter.addDay();
	} while (dateCounter.getDay()!=1&&startMonth==dateCounter.getMonth())

	if (dateCounter.getDay()==0) writeBlankTd(1);
	else if (dateCounter.getDay()!=1) writeBlankTd(8-dateCounter.getDay());
	
	caltext+='</tr>\n';
	return dateCounter;
}

function writeDay(dateCounter){
	var dayclass = "day";
	if (dateCounter.getTime()>selectedDate.getTime()&&Math.abs(dateCounter.getTime()-selectedDate.getTime())<40000000){
		dayclass = "sday";
	}
	var cltext = 'if(window.finishedCal)opener.cl('+dateCounter.getDate()+','+dateCounter.getMonth()+','+dateCounter.getFullYear()+')';
	if (document.all) caltext+='<td id=d'+dayid+' onclick="'+cltext+'" class="'+dayclass+'" width="25">'+dateCounter.getDate()+'</td>\n';
	else caltext+='<td id=d'+dayid+' class="'+dayclass+'" width="25"><a href="javascript:'+cltext+'">'+dateCounter.getDate()+'</a></td>\n';
}

function cl(day,month,year){
	setSelectValue(daySelect,day);
	setSelectValue(monthSelect,month+1);
	setSelectValue(yearSelect,year);
	if (daySelect.onchange) daySelect.onchange();
	if (monthSelect.onchange) monthSelect.onchange();
	if (yearSelect.onchange) yearSelect.onchange();
	if(calWin)calWin.close();
}