// This variable defines if in an error or non error case the text is set/deleted var setErrorText = true; /* ========================================================= PURPOSE This page contains all functions needed for Javascript based field validation SPECIAL NOTES HISTORY Who When What MIG-FIEW-K. Nies 28.11.2007 Initial version EnTeCo-M. Bierl 11.12.2007 Added seperate field description ========================================================= */ function validateFields(currDoc, mDoc, fieldList) { /* ========================================================= PURPOSE This function does field validation PASSED currDoc document object mDoc form object with fields to validate fieldList array of field objects, contains "fieldName~checkType~fieldDescription" checkType can be "empty" - checks for empty fields "numeric" - checks for valid numbers "numericnotnull" - checks for numeric and not 0 "date" - checks for valid date "email" - checks for valid email address RETURNS True, False SPECIAL NOTES Uses function isDateCorrect(dateString) for validation of dates HISTORY Who When What MIG-FIEW-K. Nies 28.11.2007 Initial version ========================================================= */ var result = true; for (var i = 0; i < fieldList.length; i++) { var checkField = fieldList[i].value; var checkArray = checkField.split('~'); var objectField = mDoc.elements[checkArray[0]]; var error = ''; var fieldType = ''; var fieldValue = new Array(); if (typeof(objectField.type) == 'string') { fieldType = objectField.type; } else { fieldType = objectField[0].type; } switch (fieldType) { case "select-one": if (objectField.selectedIndex == -1) { fieldValue.push(''); } else { fieldValue.push(objectField.options[objectField.selectedIndex].value); } break; case "select-multiple": for (var j = 0; j < objectField.options.length; j++) { if (objectField.options[j].selected == true) { fieldValue.push(objectField.options[j].value); } } // end for break; case "radio": for (var j = 0; j < objectField.length; j++) { if (objectField[j].checked == true) { fieldValue.push(objectField[j].value); break; } } //end for break; case "checkbox": if (objectField.length) { for (var j = 0; j < objectField.length; j++) { if (objectField[j].checked == true) { fieldValue.push(objectField[j].value); } } // end for } else { if (objectField.checked == true) { fieldValue.push(objectField.value); } } break; default: fieldValue.push(objectField.value); break; } if ((fieldValue.length == 0) && (checkArray[1] == "empty")) { error = getErrorMessage(checkArray[2], checkArray[1]); // error = checkArray[2] + ' is empty. Please enter a value'; } else { for (var k = 0; k < fieldValue.length; k++) { switch(checkArray[1]) { case "empty": if (fieldValue[k] == '') { error = getErrorMessage(checkArray[2], checkArray[1]); } break; case "numeric": if (isNaN(fieldValue[k])) { error = getErrorMessage(checkArray[2], checkArray[1]); } break; case "numericnotnull": if (isNaN(fieldValue[k])) { error = getErrorMessage(checkArray[2], checkArray[1]); } else { if (fieldValue[k] == 0) { error = getErrorMessage(checkArray[2], checkArray[1]); } } break; case "date": if (!isDateCorrect(fieldValue[k])) { error = getErrorMessage(checkArray[2], checkArray[1]); } break; case "email": if (!isValidEMail(fieldValue[k])) { error = getErrorMessage(checkArray[2], checkArray[1]); } break; default: if (function_exists('specialValidation')) { if (!specialValidation(checkArray[0], fieldValue[k], checkArray[1], checkArray[2])) { error = getErrorMessage(checkArray[2], checkArray[1]); } } break; } } //end for } //end if if (error == '') { with (currDoc.getElementById(checkArray[0] + 'Err')) { if (setErrorText == true) { firstChild.nodeValue = error; } className = "errortexthidden"; /* style.visibility = "hidden"; style.position = "absolute";*/ } result = result && true; } else { with (currDoc.getElementById(checkArray[0] + 'Err')) { if (setErrorText == true) { firstChild.nodeValue = error; } className = "errortextvisible"; /* style.visibility = "visible"; style.position = "relative";*/ } result = false; } } // end for return result; } //end function function isDateCorrect(str_Date) { /* ========================================================= PURPOSE This function checks for correct date format PASSED String with date-value to check RETURNS True, False SPECIAL NOTES Currently only checks for German date format HISTORY Who When What EnTeCo Consulting-Mathias Bierl 28.11.2007 Initial version MIG-FIEW-K. Nies 28.11.2007 Checks for empty string, returns true if checkstring is empty ========================================================= */ var s_Day; var s_Month; var s_Year; // Check if str_Date is empty if (str_Date == '') { return true; } // First try to get a german date var a_Date = str_Date.split('.'); // If we have just one element then it was not a german date or no date if (a_Date.length == 1) { return false; } // Otherwise we have a german date, so save the values else { if (a_Date.length != 3) { return false; } s_Day = a_Date[0]; s_Month = a_Date[1]; s_Year = a_Date[2]; } // Now check if we only have numbers for (i = 0;i<3;i++) { var n_Temp = Number(a_Date[i]); if (isNaN(n_Temp)) { return false; } } // And last check if the range is ok // First the month and the year var n_Month = Number(s_Month); if ((n_Month < 1) || (n_Month > 12)) { return false; } // And the year var n_Year = Number(s_Year); // If the user enters a value lower than hundred we have to add the century if (n_Year < 100) { if (n_Year < 70) { n_Year = n_Year + 2000; } else { n_Year = n_Year + 1900; } } //if ((n_Year < 1970) || (n_Year > 2069)) { // return false; //} // And last the days because there are some specialties var n_Day = Number(s_Day); if ((n_Day < 1) || (n_Day > 31)) { return false; } // Depending on the month check the count of days switch (n_Month) { case 4,6,9,11 : if (n_Day > 30) { return false; } break; case 2 : if ((n_Year % 4) == 0) { if (n_Day > 29) { return false; } } else { if (n_Day > 28) { return false; } } break; } return true; } function getErrorMessage(str_FieldName, str_Error) { /* ========================================================= PURPOSE This function returns the needed error message for the given error and field If no application specific function is defined an default value will be returned PASSED String with with field name String with error name RETURNS String SPECIAL NOTES HISTORY Who When What EnTeCo Consulting-Mathias Bierl 17.01.2008 Initial version ========================================================= */ if (function_exists('getErrorMessageApp')) { return getErrorMessageApp(str_FieldName, str_Error); } else { switch(str_Error) { case "empty": error = str_FieldName + ' is empty. Please enter a value'; break; case "numeric": error = str_FieldName + ' is not numeric. Please enter a valid number'; break; case "numericnotnull": error = str_FieldName + ' is not a valid value. Please enter a valid number'; break; case "date": error = str_FieldName + ' is not a valid date !'; break; case "email": error = str_FieldName + ' is not a valid e-mail-address !'; break; default: error = str_FieldName + ' has not passed validation !'; break; } return error; } } function function_exists(fName, pObj) { /* ========================================================= PURPOSE This function checks if the given function exists PASSED String, function name Object, where to search for the function RETURNS true, false SPECIAL NOTES HISTORY Who When What EnTeCo Consulting-Mathias Bierl 17.01.2008 Initial version ========================================================= */ if(!pObj) pObj = window; return (typeof pObj[fName] == 'function') ? true : false; } function isValidEMail(s) { var a = false; var res = false; if(typeof(RegExp) == 'function') { var b = new RegExp('abc'); if(b.test('abc') == true){a = true;} } if(a == true) { reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+ '(\\@)([a-zA-Z0-9\\-\\.]+)'+ '(\\.)([a-zA-Z]{2,4})$'); res = (reg.test(s)); } else { res = (s.search('@') >= 1 && s.lastIndexOf('.') > s.search('@') && s.lastIndexOf('.') >= s.length-5) } return(res); }