//document.write('<link href="javascript/TestCalendar.css" rel="stylesheet" type="text/css"/>');
//Use arrays for month and weekday strings so that they can be internationalized
var months = new Array ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var weekDays = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var currentCalDay = getCurrentDate('day');
var currentCalMonth = getCurrentDate('month');
var currentCalYear = getCurrentDate('year');

function setDateDisabled(elementID,disabledState)
{
    if (document.getElementById(elementID + '_month'))
    {
        document.getElementById(elementID + '_month').disabled = disabledState;
        document.getElementById(elementID + '_day').disabled = disabledState;
        document.getElementById(elementID + '_year').disabled = disabledState;
    }
}

function setDatePickerState(dateElementId,state)
{
    setDateDisabled(dateElementId,state);
}

function blankDate(dateValID){
    if (document.getElementById(dateValID)){
        document.getElementById(dateValID).value = "";
    }
}

function setUse(elementID,checkedState)
{
    if (document.getElementById(elementID + "_Use")){
        document.getElementById(elementID + "_Use").checked = checkedState;
    }
    setDateDisabled(elementID,!checkedState);
}

function getCurrentDate(datePart){
	var currentDate = new Date();
	if (datePart == 'day'){
		return currentDate.getDate();
	} else if (datePart == 'month'){
		return currentDate.getMonth();
	} else if (datePart == 'year'){
		return currentDate.getFullYear();
	} else {
		return null;
	}
}

function isNotBeforeToday(theForm,name,dateFormat){
    var rtnVal = true;
    for(var i=0; i<theForm.elements.length; i++) {
        var element = theForm.elements[i];
        if(element.name == name) {
            var date1 = element.value;
            var geToday = compareDates(date1,'',dateFormat,"GE");  
            break;
        }
    }
    var rtnVal = geToday;
    return rtnVal;
}

function compareDates(date1,date2,dateFormat,operator){  //all parameters must be present, even if ''
    var rtnVal;
    var ldate1 = date1;
    var ldate2 = date2;
    var ldateFormat = dateFormat;
    if (ldate1 == ''){
        ldate1 = formatCurrentDate(ldateFormat);
    }
    if (ldate2 == ''){
       ldate2 = formatCurrentDate(ldateFormat);
    }
    switch (operator) {
        case 'GT':
            rtnVal = (ldate1 > ldate2)?true:false;
            break;
        case 'GE':
            rtnVal = (ldate1 >= ldate2)?true:false;
            break;
        case 'LT':
            rtnVal = (ldate1 < ldate2)?true:false;
            break;
        case 'LE':
            rtnVal = (ldate1 <= ldate2)?true:false;
            break;
        case 'EQ':
            rtnVal = (ldate1 == ldate2)?true:false;
            break;
        default:
            rtnVal = false;
    }
    return rtnVal;
}

function formatCurrentDate(dateFormat){
    var rtnDate = '';
    var ldateFormat = dateFormat;
	var currentDate = new Date();
	var day = currentDate.getDate().toString();
	var month = (currentDate.getMonth() + 1).toString();
	var year = currentDate.getFullYear();
    if (ldateFormat.toUpperCase() == "YYYY-MM-DD"){
        rtnDate = year + '-' + padZero(month) + '-' + padZero(day);
    } 
    else {
        rtnDate = padZero(month) + '\/' + padZero(day) + '\/' + year;
    }
    return rtnDate;
}

function getDateValue(elementID,dateFormat){
    if (dateFormat && dateFormat != '' && dateFormat.toUpperCase() == "YYYY-MM-DD")
    {
        rtnDate = document.getElementById(elementID + '_yearValue').value + '-'
            + padZero(document.getElementById(elementID + '_monthValue').value) + '-'
            + padZero(document.getElementById(elementID + '_dayValue').value);
    }
    else
    {
        rtnDate = padZero(document.getElementById(elementID + '_monthValue').value) + '\/'
            + padZero(document.getElementById(elementID + '_dayValue').value) + '\/'
            + document.getElementById(elementID + '_yearValue').value;
    }
	return rtnDate;
}

function checkLeapYear(year){
	return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) ? true : false;
}

function stripZero(strVal)
{
	var rtnStr = strVal;
	if (strVal.length == 2 && strVal.substr(0,1) == '0'){rtnStr = strVal.substr(1,1)}
	return rtnStr;
}
function padZero(strVal)
{
	var rtnStr = strVal;
	if (strVal.length == 1) {rtnStr = '0' + strVal;}
	return rtnStr;
}

function DatePicker(elementID,date,returnElementID,rtnDateFormat,hasUseBox){
	var day = '';
	var month12 = '';
	var year = '';
    var rtnElementId = (typeof(returnElementID) == 'undefined') ? '' : returnElementID;
	if (typeof(date) != 'undefined'){
		var dateParts = date.split('\/');
		if (dateParts.length == 3){
			month12 = parseInt(stripZero(dateParts[0]));
			day = parseInt(stripZero(dateParts[1]));
			year = parseInt(dateParts[2]);
		}
	}
    var dateFormat = (typeof(rtnDateFormat) == 'undefined') ? '' : rtnDateFormat; 
	if (typeof(dateFormat) != ''){
        if (dateFormat.toUpperCase() == 'YYYY-MM-DD')
        {
            var dateParts = date.split('-');
            if (dateParts.length == 3){
                month12 = parseInt(stripZero(dateParts[1]));
                day = parseInt(stripZero(dateParts[2]));
                year = parseInt(dateParts[0]);
            }
        }
	}
    
	if (day == '' || day == null || typeof(day)!= 'number' || day > 31 || day < 0 ) {day=getCurrentDate('day');}
	if (month12 == '' || month12 == null || typeof(month12) != 'number' || month12 < 1 || month12 > 12) {month12=getCurrentDate('month') + 1;}
	if (year == '' || year == null || typeof(year) != 'number' || year.toString().length != 4 ) {year=getCurrentDate('year');}
	DatePicker12(elementID,month12,day,year,rtnElementId,dateFormat,hasUseBox);
}

function DatePicker12(elementID,month12,day,year,rtnElementId,dateFormat,hasUseBox)
{
    var paramStr = rtnElementId + '\',\'' + dateFormat;
	var changeDayStr = 'onchange = "updateDayValue(this.name,\'' + paramStr + '\')"';
	var changeMonthStr = 'onchange = "updateMonthValue(this.name,\'' + paramStr + '\')"';
	var changeYearStr = 'onchange = "updateYearValue(this.name,\'' + paramStr + '\')"';
	var clickYearUpStr = 'onclick = "increaseYearValue(this.name,\'' + paramStr + '\')"';
	var clickYearDownStr = 'onclick = "decreaseYearValue(this.name,\'' + paramStr + '\')"';
	var clickCalendarStr = 'onclick = "calendarClick(this.name,event)"';
	var clickPrevStr = 'onclick = "prevMonth(this.name)"';
	var clickNextStr = 'onclick = "nextMonth(this.name)"';
	var clickCellStr = 'onclick = "selectDay(event,this.innerHTML,\'' + paramStr + '\')"';
	var closeCalStr = 'onclick = "closeCalendar(event)"';
	
	var lintCurDay = day;
	var lintCurMonth = month12 - 1;
	var lintCurYear = year;
	
	var numMonthDays = (lintCurMonth ==1 && checkLeapYear(lintCurYear)) ? monthDays[lintCurMonth] + 1 : monthDays[lintCurMonth];
	
	document.write('<table><tr>');
    if (hasUseBox){
        var useID = elementID + '_Use';
        var clickUseStr = 'onclick = "setDatePickerState(\'' + elementID + '\',!this.checked)"';
        document.write('<td><input type="checkbox" id="' + useID + '" name="' + useID + '" ' + clickUseStr + '><span class="body">&nbsp;&nbsp;&nbsp;<span></input>');
    }
    document.write('<td><select style="width:120px;" id="' + elementID + '_month" name="' + elementID + '" ' + changeMonthStr + ' style="width:80px;>');
	for (var optCnt = -1; optCnt < 12; optCnt++)
	{
		document.write('<option value="' + (optCnt + 1) + '"');
		if (lintCurMonth != null && lintCurMonth == optCnt){
			document.write(' selected  ');
		}
		document.write('>' + months[optCnt] + '</option>');
	}
	document.write('</select></td>');
	
	document.write('<td><select style="width:60px;"  id="' + elementID + '_day" name="' + elementID + '" ' + changeDayStr + '>');
	for (var optCnt = 1; optCnt <= numMonthDays; optCnt++)
	{
		document.write('<option value="' + optCnt + '"');
		if (lintCurDay != null && lintCurDay == optCnt){
			document.write(' selected  ');
		}
		document.write('>' + optCnt + '</option>');
	}
	document.write('</select></td>');
	
	document.write('<td><input type="text" id="' + elementID + '_year" name="' + elementID + '" readonly ' + changeYearStr + 'value="' + lintCurYear + '" size="4"/></td>');
	document.write('<td><span><img src="images/icons/up.gif" class="IncDecBtn" id="' + elementID + '_yearup" name="' + elementID + '" ' + clickYearUpStr + '/></span><br />');
	document.write('<span><img src="images/icons/down.gif" class="IncDecBtn" id="' + elementID + '_yeardown" name="' + elementID + '" ' + clickYearDownStr + '/></span></td>');

	document.write('<td>&nbsp;<img src="images/icons/calendar.gif" id="' + elementID + '_calendarImg" title="Calendar" name="' + elementID + '" width="20" height="20" border="0" valign="middle" ' + clickCalendarStr + ' style="cursor: hand; cursor: pointer;"/></td>');
	
	document.write('<input id="' + elementID + '_dayValue" name="' + elementID + '" type="hidden" value="' + day + '"/>');
	document.write('<input id="' + elementID + '_monthValue" name="' + elementID + '" type="hidden" value="' + month12 + '"/>');
	document.write('<input id="' + elementID + '_yearValue" name="' + elementID + '" type="hidden" value="' + year + '"/>');
	document.write('<input id="' + elementID + '_dateValue" name="' + elementID + '" type="hidden" value=""/>');
	document.write('</tr></table>');
	
	document.write('<input id="' + elementID + '_curCalDay" name="' + elementID + '" type="hidden" value="testday"/>');
	document.write('<input id="' + elementID + '_curCalMonth" name="' + elementID + '" type="hidden" value="testmonth"/>');
	document.write('<input id="' + elementID + '_curCalYear" name="' + elementID + '" type="hidden" value="testyear"/>');
	
	document.write('<iframe id="' + elementID + '_calBlockSelect" style="display:none;position:absolute; top:0; left:0; z-index:1; width:182px; height:223px;"></iframe>');
	document.writeln('<div id="' + elementID + '_calendardiv" style="display:none;position:absolute; left:20; top: 10; z-index:2; width:182px; height:223px;" class="calendar_container">');				
	document.writeln('<table style="font-size:10pt;" id="' + elementID + '_calendar" border="0" cellpadding="0" cellspacing="0">');

	document.write('<tr>');
	document.write('<td class="heading" ><img src="images/icons/prev.gif"  id="' + elementID + '_prev" name="' + elementID + '" ' + clickPrevStr + 'style="cursor: hand; cursor: pointer;"/>');
	document.write('<td class="heading" colspan="5" align="center"><span id="' + elementID + '_heading" >heading</span></td>');
	document.write('<td class="heading" ><img src="images/icons/next.gif"  id="' + elementID + '_next" name="' + elementID + '" ' + clickNextStr + 'style="cursor: hand; cursor: pointer;"/></td>');
	document.write('<td rowspan="8" valign="middle"></td>');
	document.write('</tr>');

	document.write('<tr>');
	document.write('<td><div id="' + elementID + '_sun" class="weekDays">' + weekDays[0].substr(0,1) + '</div></td>');
	document.write('<td><div id="' + elementID + '_mon" class="weekDays">' + weekDays[1].substr(0,1) + '</div></td>');
	document.write('<td><div id="' + elementID + '_tues" class="weekDays">' + weekDays[2].substr(0,1) + '</div></td>');
	document.write('<td><div id="' + elementID + '_wed" class="weekDays">' + weekDays[3].substr(0,1) + '</div></td>');
	document.write('<td><div id="' + elementID + '_thurs" class="weekDays">' + weekDays[4].substr(0,1) + '</div></td>');
	document.write('<td><div id="' + elementID + '_fri" class="weekDays">' + weekDays[5].substr(0,1) + '</div></td>');
	document.write('<td><div id="' + elementID + '_sat" class="weekDays">' + weekDays[6].substr(0,1) + '</div></td>');										
	document.write('</tr>');


	document.write('<tr>');
	for (var colCnt = 0; colCnt < 7; colCnt++)
	{
		var lstrID = elementID + '_cell_' + colCnt;
		document.write('<td valign="middle"><div id="'+lstrID+'" class="dateOff" '+clickCellStr+'>&nbsp;</div></td>');
	}
	document.write('</tr>');

	document.write('<tr>');
	for (var colCnt = 7; colCnt < 14; colCnt++)
	{
		var lstrID = elementID + '_cell_' + colCnt;
		document.write('<td valign="middle"><div id="'+lstrID+'" class="dateOff" '+clickCellStr+'>&nbsp;</div></td>');
	}
	document.write('</tr>');

	document.write('<tr>');
	for (var colCnt = 14; colCnt < 21; colCnt++)
	{
		var lstrID = elementID + '_cell_' + colCnt;
		document.write('<td valign="middle"><div id="'+lstrID+'" class="dateOff" '+clickCellStr+'>&nbsp;</div></td>');
	}
	document.write('</tr>');
	
	document.write('<tr>');
	for (var colCnt = 21; colCnt < 28; colCnt++)
	{
		var lstrID = elementID + '_cell_' + colCnt;
		document.write('<td valign="middle"><div id="'+lstrID+'" class="dateOff" '+clickCellStr+'>&nbsp;</div></td>');
	}
	document.write('</tr>');

	document.write('<tr>');
	for (var colCnt = 28; colCnt < 35; colCnt++)
	{
		var lstrID = elementID + '_cell_' + colCnt;
		document.write('<td valign="middle"><div id="'+lstrID+'" class="dateOff" '+clickCellStr+'>&nbsp;</div></td>');
	}
	document.write('</tr>');

	document.write('<tr>');
	for (var colCnt = 35; colCnt < 42; colCnt++)
	{
		var lstrID = elementID + '_cell_' + colCnt;
		document.write('<td valign="middle"><div id="'+lstrID+'" class="dateOff" '+clickCellStr+'>&nbsp;</div></td>');
	}
	document.write('</tr>');
	document.write('</table>');
	document.write('<div align="right" class="builder_text_bold" id="' + elementID + '_closeCal" ' + closeCalStr + 'style="cursor: hand; cursor: pointer; padding-right:4px;">Close</div>');
	document.write('</div>');

	populateCalendar(elementID,document.getElementById(elementID + '_monthValue').value - 1,document.getElementById(elementID + '_dayValue').value,document.getElementById(elementID + '_yearValue').value);
	updateDateValue(elementID,rtnElementId,dateFormat);
}

function updateDateSelect(elementID,month,day,year,rtnElementId,dateFormat)
{
	document.getElementById(elementID + '_day').value = day;
	document.getElementById(elementID + '_month').value = month;
	document.getElementById(elementID + '_year').value = year;
	document.getElementById(elementID + '_day').selectedIndex = parseInt(day) - 1;
	document.getElementById(elementID + '_month').selectedIndex = month;
	document.getElementById(elementID + '_year').value = year;
	updateDayValue(elementID,rtnElementId,dateFormat)
	updateMonthValue(elementID,rtnElementId,dateFormat)
	updateYearValue(elementID,rtnElementId,dateFormat)
	
}
function findX(obj) {
	var x = 0;
    var containerOffset = 0;
	while (obj) {
		x += obj.offsetLeft;
        if (obj.id == "containerDiv" || obj.id == "multiColumnDiv1" || obj.id == "multiColumnDiv2" || obj.id == "multiColumnDiv3")
        {
            containerOffset += obj.offsetLeft;
        }
		obj = obj.offsetParent;
	}
    if (containerOffset != 0 && (document.getElementById("multiColumnDiv1") || document.getElementById("multiColumnDiv2") || document.getElementById("multiColumnDiv3"))) {
       x -= containerOffset;
    }
	return x;
}
function findY(obj) {
	var y = 0;
    var containerOffset = 0;
	while (obj) {
        y += obj.offsetTop;
        if (obj.id == "containerDiv" || obj.id == "multiColumnDiv1" || obj.id == "multiColumnDiv2" || obj.id == "multiColumnDiv3")
        {
            containerOffset += obj.offsetTop;
        }
		obj = obj.offsetParent;
	}
    if (containerOffset != 0 && (document.getElementById("multiColumnDiv1") || document.getElementById("multiColumnDiv2") || document.getElementById("multiColumnDiv3"))) {
       y -= containerOffset;
    }
	return y;
}

function calendarClick(elementID,e){
    if (!document.getElementById(elementID + '_year').disabled)
	{
        var posx = 0;
        var posy = 0;
        
        var clickSrc = (e.target) ? e.target : event.srcElement;
        document.getElementById(elementID + '_calendardiv').style.display = '';
        
        //var intBorder = parseInt(document.getElementById(elementID + '_calendardiv').style.borderWidth);
        var intBorder = 0;
        var intHt = parseInt(document.getElementById(elementID + '_calendardiv').offsetHeight) + intBorder;
        var intWidth = parseInt(document.getElementById(elementID + '_calendardiv').offsetWidth) + intBorder;
        var strHt = intHt + "px";
        var strWidth = intWidth + "px";
        posx = findX(clickSrc) - intWidth + parseInt(clickSrc.offsetWidth) + "px";
        posy = (findY(clickSrc) + parseInt(clickSrc.offsetHeight)) + "px";
        
        document.getElementById(elementID + '_calendardiv').style.left = posx;
        document.getElementById(elementID + '_calendardiv').style.top = posy;
        //Turn on iframe to block selects in IE
        if (navigator.appName == 'Microsoft Internet Explorer') {
            document.getElementById(elementID + '_calBlockSelect').style.left = posx;
            document.getElementById(elementID + '_calBlockSelect').style.top = posy;
            document.getElementById(elementID + '_calBlockSelect').style.width = strWidth;
            document.getElementById(elementID + '_calBlockSelect').style.height = strHt;
            document.getElementById(elementID + '_calBlockSelect').style.display = '';
        }
        populateCalendar(elementID,document.getElementById(elementID + '_monthValue').value - 1,document.getElementById(elementID + '_dayValue').value,document.getElementById(elementID + '_yearValue').value);
    }
}

function updateDayValue(elementID,rtnElementId,dateFormat){
	document.getElementById(elementID + '_dayValue').value = document.getElementById(elementID + '_day').value;
	updateDateValue(elementID,rtnElementId,dateFormat);
}

function updateMonthValue(elementID,rtnElementId,dateFormat){
	document.getElementById(elementID + '_monthValue').value = document.getElementById(elementID + '_month').value;
	updateDayCount(elementID,rtnElementId,dateFormat);
	updateDateValue(elementID,rtnElementId,dateFormat);
}

function updateYearValue(elementID,rtnElementId,dateFormat){
	updateDayCount(elementID,rtnElementId,dateFormat);
	document.getElementById(elementID + '_yearValue').value = document.getElementById(elementID + '_year').value;
	updateDateValue(elementID,rtnElementId,dateFormat);
}

function updateDateValue(elementID,rtnElementId,dateFormat){
	document.getElementById(elementID + '_dateValue').value = getDateValue(elementID);
    if (rtnElementId != '' && document.getElementById(rtnElementId))
    {
       document.getElementById(rtnElementId).value = getDateValue(elementID,dateFormat); 
    }
}

function increaseYearValue(elementID,rtnElementId,dateFormat){
    if (!document.getElementById(elementID + '_year').disabled)
	{
        document.getElementById(elementID + '_year').value++;
        updateYearValue(elementID,rtnElementId,dateFormat);
    }
}

function decreaseYearValue(elementID,rtnElementId,dateFormat){
    if (!document.getElementById(elementID + '_year').disabled)
	{
        if (parseInt(document.getElementById(elementID + '_year').value) > 1900){
            document.getElementById(elementID + '_year').value--;
            updateYearValue(elementID,rtnElementId,dateFormat);
        }
    }
}

function selectDay(e,day,rtnElementId,dateFormat){
	var elementIDstr = (navigator.appName == "Netscape")? e.target.id : event.srcElement.id;
	var elementID = elementIDstr.split("_cell")[0];
	var month = parseInt(document.getElementById(elementID + '_curCalMonth').value);
	var year = parseInt(document.getElementById(elementID + '_curCalYear').value);
	updateDateSelect(elementID,month,day,year,rtnElementId,dateFormat);
	//close the dialog
	document.getElementById(elementID + '_calendardiv').style.display = 'none';
	document.getElementById(elementID + '_calBlockSelect').style.display = 'none';
}

function prevMonth(elementID){
	var day = document.getElementById(elementID + '_curCalDay').value
	var curMonth = parseInt(document.getElementById(elementID + '_curCalMonth').value);
	var month = (curMonth == 0) ? 11 : curMonth - 1;
	var year = (month == 11) ? parseInt(document.getElementById(elementID + '_curCalYear').value)-1 : document.getElementById(elementID + '_curCalYear').value;
	populateCalendar(elementID,month,day,year)
}

function nextMonth(elementID){
	var day = document.getElementById(elementID + '_curCalDay').value
	var curMonth = parseInt(document.getElementById(elementID + '_curCalMonth').value);
	var month = (curMonth == 11) ? 0 : curMonth + 1;
	var year = (month == 0) ? parseInt(document.getElementById(elementID + '_curCalYear').value)+1 : document.getElementById(elementID + '_curCalYear').value;
	populateCalendar(elementID,month,day,year)
}

function closeCalendar(e){
	var elementIDstr = (navigator.appName == "Netscape")? e.target.id : event.srcElement.id;
	var elementID = elementIDstr.split("_close")[0];
	document.getElementById(elementID + '_calendardiv').style.display = 'none';
	document.getElementById(elementID + '_calBlockSelect').style.display = 'none';
}

function updateDayCount(elementID,rtnElementId,dateFormat){
	var curID = elementID;
	var lintselMonth = document.getElementById(curID + '_month').selectedIndex;
	var lintselYear = document.getElementById(curID + '_year').value;
	var lintselDay = document.getElementById(curID + '_day').value;
	var numMonthDays = (lintselMonth == 1 && checkLeapYear(lintselYear)) ? monthDays[lintselMonth] + 1 : monthDays[lintselMonth];
	var curNumDayOptions = document.getElementById(curID + '_day').options.length;
	if (curNumDayOptions > numMonthDays){
		for (var optNum = numMonthDays; optNum < curNumDayOptions; optNum++)
		{
			document.getElementById(curID + '_day').options[numMonthDays] = null;
		}
	}
	else if (curNumDayOptions < numMonthDays){
		for (var optNum = curNumDayOptions; optNum < numMonthDays; optNum++)
		{
			var option = new Option(optNum + 1,optNum+1);
			document.getElementById(curID + '_day').options[optNum] = option;
		}
	
	}
	if (lintselDay > numMonthDays) {document.getElementById(curID + '_day').selectedIndex = numMonthDays - 1;updateDayValue(curID,rtnElementId,dateFormat);}
}

function populateCalendar(elementID,selMonth,selDay,selYear)
{
	var intYear;
	var curDate;
	var startOnDay = new Array();
	var curMonth = selMonth;
	var curDay = selDay;
	var curYear = selYear;
	intYear = curYear;
	var curEl;
	
	for (var mth=0; mth < 12; mth++)
	{
		var tempDate = new Date (intYear, mth, 1);
		startOnDay[mth] = tempDate.getDay();
	}
	var numDays = (curMonth == 1 && checkLeapYear(curYear)) ? 29 : monthDays[curMonth];
	calendarDay = 1;
	currentDay=0;
	
	document.getElementById(elementID + '_heading').innerHTML = months[curMonth] + ' ' + curYear;
	document.getElementById(elementID + '_curCalDay').value = curDay;
	document.getElementById(elementID + '_curCalMonth').value = curMonth;
	document.getElementById(elementID + '_curCalYear').value = intYear;
	
	//hide unused cells at the start of the month
	for (var hideStartOfDays = 0; hideStartOfDays < startOnDay[curMonth]; hideStartOfDays++)
	{
		curEl = document.getElementById(elementID + '_cell_' + hideStartOfDays);
		curEl.style.visiblity = 'visible';
		curEl.innerHTML = '';
		curEl.className='dateOff';
	}
	for (var day=startOnDay[curMonth]; calendarDay <= numDays; day++)
	{
		curEl = document.getElementById(elementID + '_cell_' + day);
		curEl.style.visibility = 'visible';
		curEl.innerHTML = calendarDay;
		if (calendarDay == curDay){curEl.className='today';}
		else {curEl.className='dateOn';} 
		calendarDay++;
		currentDay = day+1;
	}
	calendarDay++; // move to next cell so we can start hiding unused ones.

	//hide unused cells at end of the month
	if (currentDay <= 28) {lastCell = 28;}
	else if (currentDay <= 35) {lastCell = 35;}
	else {lastCell = 42;}
	for (var hideRestOfDays = currentDay; hideRestOfDays < 42; hideRestOfDays++)
	{
		curEl = document.getElementById(elementID + '_cell_' + hideRestOfDays);
		var strVisible = (hideRestOfDays < lastCell)? 'visible' : 'hidden';
		curEl.style.visibility = strVisible;
		curEl.className='dateOff';
		curEl.innerHTML = '';
	}
}


    


