// Create a date from Year/Month/Day
function sm_CreateDate(strY, strM, strD) {
	var dt = null;
	var dtNow = new Date();
	var n2DigitCutoffYear = 2049;
	var n2DigitBoundary = n2DigitCutoffYear % 100;
	var strCurrentYear = (dtNow.getFullYear() + '');
	var strThisCenturyPrefix = strCurrentYear.substring(0, strCurrentYear.length - 2);
	var strLastCenturyPrefix = ((parseInt(strThisCenturyPrefix,10) - 1) + '');
	var nFebruaryMax = 28;
	var nY = parseInt(strY,10);
	var nM = parseInt(strM,10);
	var nD = parseInt(strD,10);

	if
	(
		!(isNaN(nY) || isNaN(nM) || isNaN(nD))
		&&	(nM >= 1 && nM <= 12)
		&&	(nD >= 1 && nD <= 31)
		&&	(nY >= 0)
	)
	{
		// Convert the 2 digit year to the full year
		if (nY < 100 && strY.length == 2) {
			if (n2DigitBoundary < nY) {
				nY = strLastCenturyPrefix + ((nY < 10)? '0'+nY:nY);
			} else {
				nY = strThisCenturyPrefix + ((nY < 10)? '0'+nY:nY);
			}
		}
	
		switch (nM) {
			// 30 day Month
			case 4:
			case 9:
			case 6:
			case 11:
			{
				if (nD >= 31) {
					break;
				}
			}
			// 31 day Month
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
			{
				dt = new Date(nY, nM-1, nD);
				break;
			}
			// February and leap years
			case 2:
			{
				if
				(
					(nY % 4 == 0)
				&&	!(nY % 100 == 0 && nY % 400 != 0)
				)
				{ // Leap Year!
					nFebruaryMax = 29;
				}
				if (nD <= nFebruaryMax) {
					dt = new Date(nY, nM-1, nD);
				}
				break;
			}
		}
	}

	return dt;
}

// Parse a date out of user's input
function CalculateDate(oField)
{
	var reStandardDateFormat = /^([0-9]+)\/([0-9]+)\/([0-9]+)$/;
	var arrMatched = null;
	var strY = null;
	var strM = null;
	var strD = null;
	var dtFieldDate = null;

	dtFieldDate = Date.parse(oField.value);
	if (!isNaN(dtFieldDate)) {
		if (reStandardDateFormat.test(oField.value)) {
			// Special Handling
			arrMatched = reStandardDateFormat.exec(oField.value);
			strM = arrMatched[1];
			strD = arrMatched[2];
			strY = arrMatched[3];
			
			if(smt_PopUpCalendar_DateFormat == "US"){
				dtFieldDate = sm_CreateDate(strY, strM, strD);
			} else {
				dtFieldDate = sm_CreateDate(strY, strD, strM);
			}
			if (dtFieldDate != null) { // parse success, update to the "right" format
				strM = (dtFieldDate.getMonth()+1);
				strM = (strM < 10)? ('0'+strM):strM;
				strD = (dtFieldDate.getDate());
				strD = (strD < 10)? ('0'+strD):strD;
				if(smt_PopUpCalendar_DateFormat == "US"){
					oField.value
						= ''
						+ strM
						+ '/'
						+ strD
						+ '/'
						+ (dtFieldDate.getFullYear());
				} else {
					oField.value
						= ''
						+ strD
						+ '/'
						+ strM
						+ '/'
						+ (dtFieldDate.getFullYear());
				}
			}
		} else {
			dtFieldDate = new Date(dtFieldDate);
		}
	}

	return dtFieldDate;
}

function ShowCalendarPopup(FormName, FieldName)
{
	if (typeof(event) != "undefined") {
		//ie
		ttop = event.screenY - 50;
		tleft = event.screenX - 120;
	}
	else {
		//firefox, ???
		ttop = self.screenY + 150;
		tleft = self.screenX + 520;	
	}				
	var urlWindow = smt_PopUpCalendar_urlWindow + '&amp;FormName=' + FormName + '&amp;FormField=' + FieldName + '&amp;FieldName=' + FieldName;
	var dtFieldDate = null;

	var oField = document.forms[FormName][FieldName];
	
	if (oField != null) 
	{
		dtFieldDate = CalculateDate(oField);

		if (dtFieldDate != null && !isNaN(dtFieldDate)) {
			urlWindow += '&amp;dteSelectedDate=' + (dtFieldDate.getMonth()+1) + '%2F' + dtFieldDate.getDate() + '%2F' + dtFieldDate.getFullYear();
		} else if (oField.value.length == 0) {
			dtFieldDate = new Date();
			urlWindow += '&amp;dteSelectedDate=' + (dtFieldDate.getMonth()+1) + '%2F' + dtFieldDate.getDate() + '%2F' + dtFieldDate.getFullYear();
		}
	}
	window.open(urlWindow, 'CalendarWindow', 'location=0,width=150,height=165,scrollbars=0,toolbar=0,directories=0,status=0,menubar=0,resizable=0,top=' + ttop  + ',left=' + tleft);
}

// Update hidden datetime field based on date parts and time parts.
function UpdateDateTime(FormName, FieldName)
{
	var sDate = document.forms[FormName][FieldName + '_datepart'];
	var formHour = document.forms[FormName][FieldName + '_timeparthour'];
	var sHour = formHour.options[formHour.selectedIndex].value;
	var formMin = document.forms[FormName][FieldName + '_timepartmin'];
	var sMin = formMin.options[formMin.selectedIndex].value;
	var formMeridian = document.forms[FormName][FieldName + '_timepartmeridian'];
	var sMeridian = formMeridian.options[formMeridian.selectedIndex].value;

	if ((sDate == null) || (sHour == null) || (sMin == null) || (sMeridian == null)) return;
	
	var dtDate = CalculateDate(sDate);
	if (dtDate == null || isNaN(dtDate)) return;
	
	var nHour = parseInt(sHour,10);
	var nMin = parseInt(sMin,10);
	if (isNaN(nHour) || isNaN(nMin)) return;
	
	// Hidden field always stored as US format
	var dtResult = (dtDate.getMonth()+1) + '/' + (dtDate.getDate()) + '/' + dtDate.getYear() + ' ' + (nHour) + ':' + (nMin) + ' ' + sMeridian;
	document.forms[FormName][FieldName].value = dtResult;
}

// Update hidden time field based on time parts.
// source = 1 for hour, 2 for min, 3 for am/pm
function UpdateTime(FormName, FieldName, source)
{
	var formHour = document.forms[FormName][FieldName + '_timeparthour'];
	var sHour = formHour.options[formHour.selectedIndex].value;
	var formMin = document.forms[FormName][FieldName + '_timepartmin'];
	var sMin = formMin.options[formMin.selectedIndex].value;
	var formMeridian = document.forms[FormName][FieldName + '_timepartmeridian'];
	var sMeridian = formMeridian.options[formMeridian.selectedIndex].value;

	var dtResult = '';
	
	if ((sHour == null) || (sMin == null) || (sMeridian == null))
	{
	}
	else if ((sHour == '') || (sMin == '') || (sMeridian == ''))
	{
		if (((sHour == '') && (source == 1)) ||
			((sMin == '') && (source == 2)) ||
			((sMeridian == '') && (source == 3)))
		{
			formHour.selectedIndex = 0;
			formMin.selectedIndex = 0;
			formMeridian.selectedIndex = 0;
		}
	}
	else
	{
		var nHour = parseInt(sHour,10);
		var nMin = parseInt(sMin,10);
		if ((!isNaN(nHour)) && (!isNaN(nMin)))
		{
			dtResult = (nHour) + ':' + (nMin) + ' ' + sMeridian;
		}					
	}
	
	document.forms[FormName][FieldName].value = dtResult;
}

