document.jtDateActive = true;

var kDays = Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var kMonths = Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var kYearOffset = (navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf('Opera') == -1) ? 0 : 1900; 

document.jtToggleDate = function (which) {
	var dateDiv = document.getElementById(which);
	var saveEl = document.getElementById(dateDiv.getAttribute('saveID'));
	var dateDisplayDiv = document.getElementById(dateDiv.getAttribute('dateDisplayID'));

	if(dateDiv.style.display == 'none') {
		dateDiv.startDate = new Date();
		var matches = saveEl.value.match(/([0-9]{4})\-([0-9]{2})\-([0-9]{2})/);
		if(matches) {
			// year, month, day, (some time stuff)
			dateDiv.startDate = new Date(matches[1], (matches[2]-1), matches[3], 0,0,0,0);
		} else {
			dateDiv.startDate.setYear(0);
		}

		if(dateDiv.startDate.getYear() <= 0) {
			dateDiv.currentDate = new Date();
		} else {
			dateDiv.currentDate = new Date(dateDiv.startDate);
		}
		dateDisplayDiv.innerHTML = document.jtGenerateMonth(which, new Date(dateDiv.currentDate));
		
		var enclosingDiv;
		if(dateDiv.getAttribute('enclosingID')) {
			enclosingDiv = document.getElementById(dateDiv.getAttribute('enclosingID'));
		} else {
			enclosingDiv = document.getElementById('dcDetailScroll');
		}
		
		dateDiv.style.display = 'block';
		document.showIFrame(which);
	} else {
		dateDiv.style.display = 'none';
		document.hideIFrame(which);
	}

	document.toggleDateCloseBox(which);
}

document.jtDeltaMonth = function (which, delta) {
	var dateDiv = document.getElementById(which);
	var dateDisplayDiv = document.getElementById(dateDiv.getAttribute('dateDisplayID'));
	
	dateDiv.currentDate.setDate(1);	// do this prior to setting the month, so we don't have complications (like being on the 30th and trying to switch to February)
	dateDiv.currentDate.setMonth(dateDiv.currentDate.getMonth() + delta);
	dateDisplayDiv.innerHTML = document.jtGenerateMonth(which, new Date(dateDiv.currentDate));
	// we'll need to readjust the Iframe blocker for IE now
	document.showIFrame(which);
}

document.jtSaveDate = function (which, year, month, day) {
	var dateDiv = document.getElementById(which);
	var displayID = dateDiv.getAttribute('displayID');
	var saveID = dateDiv.getAttribute('saveID');
	var displayEl = document.getElementById(displayID);
	var saveEl = document.getElementById(saveID);

	if(year) {
		displayEl.value = (month+1 > 9 ? month+1 : '0'+(month+1))+'/'+(day > 9 ? day : '0'+day)+'/'+(year+kYearOffset < 100 ? year+kYearOffset+1900 : year+kYearOffset);
		if(displayEl.onchange) {
			displayEl.onchange();
		}
		// the behind-the-scenes data field needs to be saved in Y-m-d format 
		saveEl.value = (year+kYearOffset < 100 ? year+kYearOffset+1900 : year+kYearOffset)+'-'+(month+1 > 9 ? month+1 : '0'+(month+1))+'-'+(day > 9 ? day : '0'+day);
	} else {
		displayEl.value = '';
		saveEl.value = '';
	}

	dateDiv.style.display = 'none';
	document.hideIFrame(which);
	document.toggleDateCloseBox(which);
}

document.jtGenerateMonth = function (which, date) {
	var dateDiv = document.getElementById(which);
	var currentMonth = date.getMonth();
	var currentYear = date.getYear();
	date.setDate(1);
	var dayOffset = date.getDay();
	date.setDate(31);
	var maxDays = date.getDate();
	if(maxDays != 31)
		maxDays = 31 - maxDays;
	var showNever = dateDiv.getAttribute('showNever');
	var showToday = dateDiv.getAttribute('showToday');
	
	var data = "";
	data += "<iframe id='"+which+"_iframeBlocker' class='iframeBlocker' src='blank.html' ></iframe>";
	data += '<table id="'+which+'_DisplayTable" class="calendarDisplayTable" border="0" cellpadding="0" cellspacing="0">';
	data += '<tr><td colspan="7" align="center" class="monthYearDisplay" ><div style="float: left; cursor: pointer;" onclick="document.jtDeltaMonth(\''+which+'\', -1)"><img src="images/calendar/arrow_left.gif" onmouseover="this.src=\'images/calendar/arrow_left_on.gif\';" onmouseout="this.src=\'images/calendar/arrow_left.gif\';" width="8" height="11"></div><div style="float: right; cursor: pointer;" onclick="document.jtDeltaMonth(\''+which+'\', 1)"><img src="images/calendar/arrow_right.gif" onmouseover="this.src=\'images/calendar/arrow_right_on.gif\';" onmouseout="this.src=\'images/calendar/arrow_right.gif\';" width="8" height="11"></div>'+kMonths[currentMonth]+'&nbsp;'+(currentYear+kYearOffset < 100 ? currentYear+kYearOffset+1900 : currentYear+kYearOffset)+'</td><td class="monthYearDisplay" style="padding: 0px;">&nbsp;</td></tr>';
	data += '<tr>';
	for(var i=0; i < 7; i++) {
		data += '<td align="center" class="daysHeaderDisplay" >'+kDays[i].substr(0,1)+'</td>';
	}
	data += '<td class="daysHeaderDisplay" style="padding: 0px;">&nbsp;</td></tr>';	

	data += '<tr>';
	var curDayOffset;
	for(curDayOffset = 0; curDayOffset < dayOffset; curDayOffset++) {
		data += '<td></td>';
	}
	
	// Don't show any dates prior to today as a link
	var minDate = new Date();
	// see if we're overriding this minimum date with something else
	var minDateOverride = dateDiv.getAttribute('minDate');
	if (minDateOverride) {
		// split out the parts
		var year = "";
		var month = "";
		var day = "";
		var matches = minDateOverride.match(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/);

		if (matches && matches.length > 0) {
			month = matches[1];
			day = matches[2]; 
			year = matches[3];
		
			minDate = new Date(matches[3], (matches[1]-1), matches[2], 0,0,0,0);//new Date(year, month, day);

			//alert('now minDate is ' + minDate);
		}
	}

	var curDay = 1;
	while(curDay <= maxDays) {
		if(curDayOffset > 6) {
			data += '<td class="dateCell" style="padding: 0px;">&nbsp;</td></tr>';
			data += '<tr><td colspan="8" class="dividerCell"><div class="divider"></div></td></tr>';
			curDayOffset = 0;
		}
		if(curDayOffset == 0)
			data += '<tr>';
		
		if(currentMonth == dateDiv.startDate.getMonth() && curDay == dateDiv.startDate.getDate() && currentYear == dateDiv.startDate.getYear()) {
			data += '<td align="center" class=\'dateCellHover\' onclick="document.jtSaveDate(\''+which+'\', '+currentYear+', '+currentMonth+', '+curDay+')">'+curDay+'</td>';
		} else {
			if(currentYear < minDate.getYear() || (currentYear == minDate.getYear() && currentMonth < minDate.getMonth()) || (currentYear == minDate.getYear() && currentMonth == minDate.getMonth() && curDay < minDate.getDate()) ) {
				data += '<td align="center" class=\'dateCell\' style="color: gray;">'+curDay+'</td>';
			}
			else {
				data += '<td align="center" class=\'dateCell\' onmouseover="hover(this, \'dateCell\', true);" onmouseout="hover(this, \'dateCell\', false);" onclick="document.jtSaveDate(\''+which+'\', '+currentYear+', '+currentMonth+', '+curDay+')">'+curDay+'</td>';
			}
		}
		
		curDay++;
		curDayOffset++;
	}
	while(curDayOffset <= 6) {
		data += '<td></td>';
		curDayOffset++;
	}
	data += '<td class="dateCell">&nbsp;</td></tr></table>';
	if(showNever || showToday) {
		var today = new Date();
		data += '<div style="position: absolute; bottom: 0px; text-align: center; width: 100%;">';
		if(showNever) {
			data += '<a href="javascript:void(0);" onclick="document.jtSaveDate(\''+which+'\', 0, 0, 0); return false;" style="font-family: verdana,arial,helvetica; font-size: 8.75pt;">No Expiration</a> ';
		}
		if(showToday) {
			data += '<a href="javascript:void(0);" onclick="document.jtSaveDate(\''+which+'\', '+today.getYear()+', '+today.getMonth()+', '+today.getDate()+'); return false;" style="font-family: verdana,arial,helvetica; font-size: 8.75pt;">Today</a>';
		}
		data += '</div>';
	}
		
	// output the bottom drop shadows
	data +=" <table class='bottomShadowTable' cellpadding='0' cellspacing='0' border='0' width='188'>";
	data +=" 	<tr>";
	data +=" 		<td valign='top' align='left' width='20'><div class='bottomLeft'>&nbsp;</div></td>";
	data +=" 		<td valign='top' align='left'><div class='bottom'>&nbsp;</div></td>";
	data +=" 		<td valign='top' align='left' width='20'><div class='bottomRight'>&nbsp;</div></td>";
	data +=" 	</tr>";
	data +=" </table>";
	
	return data;
}

document.jtTranslateDateToSaveField = function (fromFieldID, toSaveID) {
	var fromField = document.getElementById(fromFieldID);
	var saveField = document.getElementById(toSaveID);

	// we're expecting it to come from the format of m/d/Y, 
	// and we want to save it in the format of Y-m-d
	var originalDate = fromField.value;
	var translatedDate = document.jtTranslateDateToYMD(originalDate);
	saveField.value = translatedDate;
};

document.jtTranslateDateToYMD = function(originalDate) {
	var translatedDate = originalDate;

	if (originalDate) {
		// we're expecting it to come from the format of m/d/Y, 
		// and we want to return it in the format of Y-m-d
		var year = "";
		var month = "";
		var day = "";
		var matches = originalDate.match(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/);

		if (matches && matches.length > 0) {
			month = matches[1];
			day = matches[2]; 
			year = matches[3];
		}
		
		translatedDate = year+"-"+month+"-"+day;
	}
	
	return translatedDate;
};

document.showIFrame = function (calendarID) {
	var theIFrame = document.getElementById(calendarID+'_iframeBlocker');
	
	if (theIFrame && Browser.Engine.trident) {
		var theCalendar = document.getElementById(calendarID+'_DisplayTable');
		
		// position the IFrame in the same spot as the balloon
		theIFrame.style.left = theCalendar.offsetLeft+"px";
		theIFrame.style.top = theCalendar.offsetTop+"px";
		// and size it to match the balloon's dimensions too
		theIFrame.style.width = theCalendar.offsetWidth+"px";
		theIFrame.style.height = theCalendar.offsetHeight+"px";
	}
};

document.hideIFrame = function (calendarID) {
	var theIFrame = document.getElementById(calendarID+'_iframeBlocker');
	if (theIFrame && Browser.Engine.trident) {
		// position the IFrame in the upper left, with no size
		theIFrame.style.left = "0px";
		theIFrame.style.top = "0px";
		theIFrame.style.width = "0px";
		theIFrame.style.height = "0px";
	}
};

document.toggleDateCloseBox = function (which) {	
	var dateCloseBox = document.getElementById(which+'_closeBox');
	if(dateCloseBox) {
		dateCloseBox.style.display = dateCloseBox.style.display == 'block' ? 'none' : 'block';
	}
};

