diff --git a/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js b/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js
index c2174407a..faecd500d 100644
--- a/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js
+++ b/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js
@@ -1,271 +1,271 @@
/**
* @projectDescription The Date Constraint controller (GUI-only controller).
* @inherits i2b2.CRC.ctrlr
* @namespace i2b2.CRC.ctrlr.dateConstraint
* @author Nick Benik, Griffin Weber MD PhD
* @version 1.3
* ----------------------------------------------------------------------------------------
* updated 9-15-08: RC4 launch [Nick Benik]
*/
console.group('Load & Execute component file: CRC > ctrlr > Dates');
console.time('execute time');
// ================================================================================================== //
i2b2.CRC.ctrlr.dateConstraint = {
defaultStartDate: '12/01/1979',
defaultEndDate: '12/31/2006',
currentPanelIndex: false,
// ================================================================================================== //
showDates: function(panelControllerIndex) {
var dm = i2b2.CRC.model.queryCurrent;
var panelIndex = i2b2.CRC.ctrlr.QT.panelControllers[panelControllerIndex].panelCurrentIndex;
if (undefined==dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][panelIndex]) return;
var qn = dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][panelIndex];
this.currentPanelIndex = panelIndex;
// only build the prompt box 1 time
if (!i2b2.CRC.view.modalDates) {
var handleSubmit = function(){
var closure_pi = i2b2.CRC.ctrlr.dateConstraint.currentPanelIndex;
// save the dates
if (i2b2.CRC.ctrlr.dateConstraint.doProcessDates(closure_pi)) {
// saved and validated, close modal form
this.submit();
}
};
var handleCancel = function(){
this.cancel();
}
i2b2.CRC.view.modalDates = new YAHOO.widget.SimpleDialog("constraintDates", {
width: "400px",
fixedcenter: true,
constraintoviewport: true,
modal: true,
zindex: 700,
buttons: [{
text: "OK",
isDefault: true,
handler: handleSubmit
}, {
text: "Cancel",
handler: handleCancel
}]
});
$('constraintDates').show();
i2b2.CRC.view.modalDates.render(document.body);
}
i2b2.CRC.view.modalDates.show();
// load our panel data
var DateRecord = new Object;
if (qn.dateFrom) {
DateRecord.Start = padNumber(qn.dateFrom.Month,2)+'/'+padNumber(qn.dateFrom.Day,2)+'/'+qn.dateFrom.Year;
} else {
DateRecord.Start = this.defaultStartDate;
}
$('constraintDateStart').value = DateRecord.Start;
if (qn.dateTo) {
DateRecord.End = padNumber(qn.dateTo.Month,2)+'/'+padNumber(qn.dateTo.Day,2)+'/'+qn.dateTo.Year;
} else {
// DateRecord.End = this.defaultEndDate;
var curdate = new Date();
DateRecord.End = padNumber(curdate.getMonth()+1,2)+'/'+padNumber(curdate.getDate(),2)+'/'+curdate.getFullYear();
}
$('constraintDateEnd').value = DateRecord.End;
if (qn.dateFrom) {
$('checkboxDateStart').checked = true;
$('constraintDateStart').disabled = false;
} else {
$('checkboxDateStart').checked = false;
$('constraintDateStart').disabled = true;
}
if (qn.dateTo) {
$('checkboxDateEnd').checked = true;
$('constraintDateEnd').disabled = false;
} else {
$('checkboxDateEnd').checked = false;
$('constraintDateEnd').disabled = true;
}
},
// ================================================================================================== //
toggleDate: function() {
if ($('checkboxDateStart').checked) {
$('constraintDateStart').disabled = false;
setTimeout("$('constraintDateStart').select()",150);
} else {
$('constraintDateStart').disabled = true;
}
if ($('checkboxDateEnd').checked) {
$('constraintDateEnd').disabled = false;
setTimeout("$('constraintDateEnd').select()", 150);
} else {
$('constraintDateEnd').disabled = true;
}
},
// ================================================================================================== //
doShowCalendar: function(whichDate) {
// create calendar if not already initialized
if (!this.DateConstrainCal) {
this.DateConstrainCal = new YAHOO.widget.Calendar("DateContstrainCal","calendarDiv");
this.DateConstrainCal.selectEvent.subscribe(this.dateSelected, this.DateConstrainCal,true);
}
this.DateConstrainCal.clear();
// process click
if (whichDate=='S') {
if ($('checkboxDateStart').checked==false) { return; }
var apos = Position.cumulativeOffset($('dropDateStart'));
var cx = apos[0] - $("calendarDiv").getWidth() + $('dropDateStart').width + 3;
var cy = apos[1] + $('dropDateStart').height + 3;
$("calendarDiv").style.top = cy+'px';
$("calendarDiv").style.left = cx+'px';
$("constraintDateStart").select();
var sDateValue = $('constraintDateStart').value;
} else {
if ($('checkboxDateEnd').checked==false) { return; }
var apos = Position.cumulativeOffset($('dropDateEnd'));
var cx = apos[0] - $("calendarDiv").getWidth() + $('dropDateEnd').width + 3;
var cy = apos[1] + $('dropDateEnd').height + 3;
$("calendarDiv").style.top = cy+'px';
$("calendarDiv").style.left = cx+'px';
$("constraintDateEnd").select();
var sDateValue = $('constraintDateEnd').value;
}
var rxDate = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
if (rxDate.test(sDateValue)) {
var aDate = sDateValue.split(/\//);
this.DateConstrainCal.setMonth(aDate[0]-1);
this.DateConstrainCal.setYear(aDate[2]);
} else {
alert("Invalid Date Format, please use mm/dd/yyyy or select a date using the calendar.");
}
// save our date type on the calendar object for later use
this.whichDate = whichDate;
// display everything
$("calendarDiv").show();
var w = window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth);
var h = window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight);
$("calendarDivMask").style.top = "0px";
$("calendarDivMask").style.left = "0px";
$("calendarDivMask").style.width = (w - 10) + "px";
$("calendarDivMask").style.height = (h - 10) + "px";
$("calendarDivMask").show();
this.DateConstrainCal.render(document.body);
},
// ================================================================================================== //
dateSelected: function(eventName, selectedDate) {
// function is event callback fired by YUI Calendar control
// (this function looses it's class scope)
var cScope = i2b2.CRC.ctrlr.dateConstraint;
if (cScope.whichDate=='S') {
var tn = $('constraintDateStart');
} else {
var tn = $('constraintDateEnd');
}
var selectDate = selectedDate[0][0];
tn.value = selectDate[1]+'/'+selectDate[2]+'/'+selectDate[0];
cScope.hideCalendar.call(cScope);
},
// ================================================================================================== //
hideCalendar: function() {
$("calendarDiv").hide();
$("calendarDivMask").hide();
},
// ================================================================================================== //
doProcessDates: function(panelIndex) {
// push the dates into the data model
var sDateError = false;
//^(0[1-9]|1[012])(\\|\-)(0[1-9]|[12][0-9]|3[01])(\\|\-)(19|20)\d\d$
///^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
- var rxDate = /^(0[1-9]|1[012])(\/|\-)(0[1-9]|[12][0-9]|3[01])(\/|\-)(19|20)\d\d$/;
+ var rxDate = /^([1-9]|0[1-9]|1[012])(\/|\-)([1-9]|0[1-9]|[12][0-9]|3[01])(\/|\-)(19|20)\d\d$/;
var DateRecord = {};
var startChecked = $('checkboxDateStart').checked;
var endChecked = $('checkboxDateEnd').checked;
var startDate, endDate;
var dm = i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup][panelIndex];
this.currentPanelIndex = panelIndex;
// start date
if (startChecked) {
DateRecord.Start = {};
startDate = $('constraintDateStart').value;
if (rxDate.test(startDate)) {
var aDate = startDate.split(/\//);
DateRecord.Start.Month = padNumber(aDate[0],2);
DateRecord.Start.Day = padNumber(aDate[1],2);
DateRecord.Start.Year = aDate[2];
} else {
sDateError = "Invalid Start Date\n";
}
}
// test the end date.
if (endChecked) {
DateRecord.End = {};
endDate = $('constraintDateEnd').value;
if (rxDate.test(endDate)) {
var aDate = endDate.split(/\//);
DateRecord.End.Month = padNumber(aDate[0]);
DateRecord.End.Day = padNumber(aDate[1]);
DateRecord.End.Year = aDate[2];
} else {
sDateError = "Invalid End Date\n";
}
}
//make sure dates are in proper order.
if(startDate && endDate) {
var start = new Date(startDate);
var end = new Date(endDate);
if(start.valueOf() >= end.valueOf()) {
sDateError = "Invalid Date Range\n";
}
}
//must check
//add an additional if statement that ensures start date is smaller than the end date.
//if(sDate)
// check for processing errors
if (sDateError) {
sDateError += "\nPlease use the following format: mm/dd/yyyy";
alert(sDateError);
return false;
} else {
// attach the data to our panel data
if (DateRecord.Start) {
dm.dateFrom = DateRecord.Start;
} else {
delete dm.dateFrom;
}
if (DateRecord.End) {
dm.dateTo = DateRecord.End;
} else {
delete dm.dateTo;
}
// clear the query name and set the query as having dirty data
var QT = i2b2.CRC.ctrlr.QT;
QT.doSetQueryName.call(QT,'');
}
// redraw buttons if needed
var panelctrlFound = false;
var pd = i2b2.CRC.ctrlr.QT;
for (var i=0; i