4
window.onload = function ()
6
var inputs = document.getElementsByName( "entryfield" )
8
for ( var i = 0, input; input = inputs[i]; i++ )
10
input.addEventListener('focus', valueFocus, false);
13
var selects = document.getElementsByName( "entryselect" );
15
for ( var i = 0, select; select = selects[i]; i++ )
17
select.addEventListener('focus', valueFocus, false);
21
function viewHistory( dataElementId )
23
window.open( 'viewHistory.action?dataElementId=' + dataElementId + '&optionComboId=' + ocId, '_blank', 'width=560,height=550,scrollbars=yes' );
27
* Display data element name in selection display when a value field recieves
29
* XXX May want to move this to a separate function, called by valueFocus.
30
* @param e focus event
31
* @author Hans S. Tommerholt
33
var customDataEntryFormExists = "false";
34
function valueFocus(e)
36
//Retrieve the data element id from the id of the field
37
var baseId = e.target.id;
42
if( baseId.indexOf(':') != -1 )
44
opId = baseId.substr( baseId.indexOf(':')+1, baseId.length );
45
str = baseId.substr( 0, baseId.indexOf(':') );
48
var match1 = /.*\[(.*)\]/.exec(str); //value[-dataElementId-]
49
var match2 = /.*\[(.*)\]/.exec(opId); //value[-optionComboId-]
59
//Get the data element name
60
var nameContainer = document.getElementById('value['+deId+'].name');
61
var opCbContainer = document.getElementById('value[option'+ocId+'].name');
62
var minContainer = document.getElementById('value['+deId+'].min');
63
var maxContainer = document.getElementById('value['+deId+'].max');
65
if ( ! nameContainer )
73
var as = nameContainer.getElementsByTagName('a');
75
if ( as.length > 0 ) //Admin rights: Name is in a link
77
name = as[0].firstChild.nodeValue;
81
name = nameContainer.firstChild.nodeValue;
86
if( opCbContainer.firstChild )
87
optionName = opCbContainer.firstChild.nodeValue;
91
if(customDataEntryFormExists == "true")
93
optionName += " - "+minContainer.firstChild.nodeValue;
94
optionName += " - "+maxContainer.firstChild.nodeValue;
97
var curDeSpan = document.getElementById('currentDataElement');
99
curDeSpan.firstChild.nodeValue = name;
101
document.getElementById("currentOptionCombo").innerHTML = optionName;
105
function keyPress( event, field )
108
if ( event.charCode )
110
key = event.charCode; /* Safari2 (Mac) (and probably Konqueror on Linux, untested) */
116
key = event.keyCode; /* Firefox1.5 (Mac/Win), Opera9 (Mac/Win), IE6, IE7Beta2, Netscape7.2 (Mac) */
122
key = event.which; /* Older Netscape? (No browsers triggered yet) */
127
if ( key == 13 ) /* CR */
129
nextField = getNextEntryField( field );
132
nextField.focus(); /* Does not seem to actually work in Safari, unless you also have an Alert in between */
137
/* Illegal characters can be removed with a new if-block and return false */
141
function getNextEntryField( field )
143
var inputs = document.getElementsByName( "entryfield" );
145
// Simple bubble sort
146
for ( i = 0; i < inputs.length - 1; ++i )
148
for ( j = i + 1; j < inputs.length; ++j )
150
if ( inputs[i].tabIndex > inputs[j].tabIndex )
153
inputs[i] = inputs[j];
160
for ( ; i < inputs.length; ++i )
162
if ( inputs[i] == field )
168
if ( i == inputs.length - 1 )
170
// No more fields after this:
177
return inputs[i + 1];
182
* Set min/max limits for dataelements that has one or more values, and no
183
* manually entred min/max limits.
185
function SetGeneratedMinMaxValues()
187
this.save = function()
189
var request = new Request();
190
request.setCallbackSuccess( handleResponse );
191
request.setCallbackError( handleHttpError );
192
request.setResponseTypeXML( 'minmax' );
193
request.send( 'minMaxGeneration.action' );
196
function handleResponse( rootElement )
198
var dataElements = rootElement.getElementsByTagName( 'dataelement' );
200
for( i = 0; i < dataElements.length; i++ )
202
var id = getElementValue( dataElements[i], 'dataelementId' );
203
setFieldValue('value[' + id + '].min', getElementValue( dataElements[i], 'minLimit'));
204
setFieldValue('value[' + id + '].max', getElementValue( dataElements[i], 'maxLimit'));
209
function handleHttpError( errorCode )
211
window.alert( i18n_saving_minmax_failed_error_code + '\n\n' + errorCode );
214
function setFieldValue( fieldId, value )
216
document.getElementById( fieldId ).innerHTML = value;
219
function getElementValue( parentElement, childElementName )
221
var textNode = parentElement.getElementsByTagName( childElementName )[0].firstChild;
225
return textNode.nodeValue;
234
function generateMinMaxValues()
236
var setGeneratedMinMaxValues = new SetGeneratedMinMaxValues();
237
setGeneratedMinMaxValues.save();
240
// -----------------------------------------------------------------------------
242
// -----------------------------------------------------------------------------
244
function validateCompleteDataSet()
246
var confirmed = confirm( i18n_confirm_complete );
250
var url = "getValidationViolations.action";
252
var request = new Request();
253
request.setResponseTypeXML( 'message' );
254
request.setCallbackSuccess( registerCompleteDataSet );
259
function registerCompleteDataSet( messageElement )
261
var type = messageElement.getAttribute( 'type' );
263
if ( type == "none" )
265
var date = document.getElementById( "dateField" ).value;
267
var url = "registerCompleteDataSet.action?date=" + date;
269
var request = new Request();
270
request.setCallbackSuccess( registerReceived );
275
window.open( 'validate.action', '_blank', 'width=800, height=400, scrollbars=yes, resizable=yes' );
279
function registerReceived( messageElement )
281
document.getElementById( "completeButton" ).disabled = true;
282
document.getElementById( "undoButton" ).disabled = false;
283
document.getElementById( "dateField" ).disabled = true;
284
document.getElementById( "dateDiv" ).style.display = "none";
287
function undoCompleteDataSet()
289
var confirmed = confirm( i18n_confirm_undo );
293
var url = "undoCompleteDataSet.action";
295
var request = new Request();
296
request.setCallbackSuccess( undoReceived );
301
function undoReceived( messageElement )
303
document.getElementById( "completeButton" ).disabled = false;
304
document.getElementById( "undoButton" ).disabled = true;
305
document.getElementById( "dateField" ).disabled = false;
306
document.getElementById( "dateDiv" ).style.display = "inline";