//Name: FieldChecker class //Author: Maikel Koolen //Created: 01-07-2004 //Adjustment(s) //29-09-2005 Added setMSGIncorrectNumeric, checkField.isNumeric; //29-09-2005 Added checkField.setForbiddenChars, checkField.checkForbiddenChars; //22-04-2005 Added setMsgIncorrectPostalCode,setMsgIncorrectPercentage, checkField.isPostalCode, checkField.isPercentage; //10-05-2005 Added use of checkFieldsEx() in JSHeader for specific fieldchecks //14-06-2005 Adjusted CheckFields for checking input radio en checkbox // Setting requiredfieldcolor for all fields // Added function for disabling the requiredfieldcolor function FieldChecker() { //Variables var msgMaxRows = "Het maximum aantal rijen voor het veld is ."; var msgMaxChars = "Het maximum aantal karakters voor het veld is ."; var msgRequired = "Het veld is een verplicht veld."; var msgIncorrectExtension = "Het uploaden van het bestand is niet toegestaan in het veld .\nDe volgende bestandtypen zijn wel toegstaan: ."; var msgIncorrectMailAddress = "Het veld bevat een ongeldig mailadres."; var msgIncorrectPostalCode = "Het veld bevat een ongeldige postcode."; var msgIncorrectPercentage = "Het veld moet een percentage bevatten tussen en ."; var msgIncorrectNumeric = "Het veld moet een numerieke waarde bevatten."; var msgContainsForbiddenChars = "Het veld mag niet een van de volgende karakters bevatten "; var msgNotInteger = "Het veld mag geen decimalen bevatten."; var RequiredFieldColor = "#ffffff"; var showRequiredFieldColor = true; var showFieldNotFoundError = true; //Properties this.Fields = new Array(75); //Used for storing checkFields this.FieldCount = 0; //Current fieldCount // initialize the member function references // for the class prototype if (typeof(_FieldChecker_prototype_called) == 'undefined') { _FieldChecker_prototype_called = true; FieldChecker.prototype.addField = _addField; FieldChecker.prototype.checkFields = _checkFields; FieldChecker.prototype.setMsgMaxRows = _setMsgMaxRows; FieldChecker.prototype.setMsgMaxChars = _setMsgMaxChars; FieldChecker.prototype.setMsgRequired = _setMsgRequired; FieldChecker.prototype.clearAllFields = _clearAllFields; FieldChecker.prototype.getFieldByName = _getFieldByName; FieldChecker.prototype.setMsgIncorrectMailAddress = _setMsgIncorrectMailAddress; FieldChecker.prototype.setMsgIncorrectPostalCode = _setMsgIncorrectPostalCode; FieldChecker.prototype.setMsgIncorrectPercentage = _setMsgIncorrectPercentage; FieldChecker.prototype.setRequiredFieldColor = _setRequiredFieldColor; FieldChecker.prototype.setShowRequiredFieldColor = _setShowRequiredFieldColor; FieldChecker.prototype.setMSGIncorrectNumeric = _setMSGIncorrectNumeric; FieldChecker.prototype.setmsgContainsForbiddenChars = _setmsgContainsForbiddenChars; FieldChecker.prototype.setmsgNotInteger = _setmsgNotInteger; FieldChecker.prototype.setshowFieldNotFoundError = _setshowFieldNotFoundError; } function _setMsgIncorrectMailAddress(Msg) { msgIncorrectMailAddress = Msg; } function _getFieldByName(Name) { for (var i = 1; i <= this.FieldCount; i++) { if (this.Fields[i].Fieldname == Name) { return this.Fields[i]; } } } function _addField(Fieldname, FriendlyName, maxRows, maxChars, Required) { if (document.getElementsByName(Fieldname).length > 0) { this.FieldCount++; FriendlyName = FriendlyName.replace("
"," "); this.Fields[this.FieldCount] = new checkField(Fieldname, FriendlyName, maxRows, maxChars, Required); if ((Required) && (showRequiredFieldColor)) { for(var j=0 ; j < document.getElementsByName(Fieldname).length ; j++) { document.getElementsByName(Fieldname)[j].style.backgroundColor = RequiredFieldColor; } } } else { if (showFieldNotFoundError) alert("The field " + Fieldname + " does not exist..."); return null; } return this.Fields[this.FieldCount]; } function _clearAllFields() { for (var i = 1; i <= this.FieldCount; i++) { document.getElementsByName(this.Fields[i].Fieldname)[0].value = ""; } } function _checkFields() { //Loop through Fields in FieldChecker for (var i = 1; i <= this.FieldCount; i++) { //Check Maximum Number of Rows if (this.Fields[i].maxRows > 0) { if (getRowCount(this.Fields[i].Fieldname) > this.Fields[i].maxRows) { var ErrorMsg = replaceSubstring(msgMaxRows, "", this.Fields[i].FriendlyName); ErrorMsg = replaceSubstring(ErrorMsg, "", "" + this.Fields[i].maxRows); alert(ErrorMsg); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } //Check Maximum Number of Characters if (this.Fields[i].maxChars > 0) { if (document.getElementsByName(this.Fields[i].Fieldname)[0].value.length > this.Fields[i].maxChars) { var ErrorMsg = replaceSubstring(msgMaxChars, "", this.Fields[i].FriendlyName); ErrorMsg = replaceSubstring(ErrorMsg, "", "" + this.Fields[i].maxChars); alert(ErrorMsg); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } //Check Field is Required/Empty if (this.Fields[i].Required == true) { var FieldType; FieldType = document.getElementsByName(this.Fields[i].Fieldname)[0].type; if ((FieldType == "checkbox") || (FieldType == "radio")) { var checked=false; for(var j=0 ; j < document.getElementsByName(this.Fields[i].Fieldname).length ; j++) { checked = checked || document.getElementsByName(this.Fields[i].Fieldname)[j].checked; } if (!checked) { var ErrorMsg = replaceSubstring(msgRequired, "", this.Fields[i].FriendlyName); alert(ErrorMsg); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } else { if (trimAll(document.getElementsByName(this.Fields[i].Fieldname)[0].value) == this.Fields[i].emptyValue) { var ErrorMsg = replaceSubstring(msgRequired, "", this.Fields[i].FriendlyName); alert(ErrorMsg); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } } //Check Field contains file with Correct Extension if (document.getElementsByName(this.Fields[i].Fieldname)[0].type == "file") { var CorrectExtension = false; var strExtensions = "" var Extension = document.getElementsByName(this.Fields[i].Fieldname)[0].value; if (Extension != "") { var Extensions = this.Fields[i].Extensions; Extension = Extension.substring(Extension.length-4,Extension.length); if (Extensions.length > 0) { for (var j=0;j", this.Fields[i].FriendlyName); ErrorMsg = replaceSubstring(ErrorMsg, "", strExtensions.substring(0,strExtensions.length-1)); ErrorMsg = replaceSubstring(ErrorMsg, "", document.getElementsByName(this.Fields[i].Fieldname)[0].value); alert(ErrorMsg); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } } } //Check correct MailAddress if (this.Fields[i].isMail == true) { var EMailVal = document.getElementsByName(this.Fields[i].Fieldname)[0].value; var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if (!filter.test(EMailVal)) { alert(replaceSubstring(msgIncorrectMailAddress, "", this.Fields[i].FriendlyName)) document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } //Check correct PostalCode if (this.Fields[i].isPostalCode == true) { var newString=""; var iError = false; for (var j=0;j= "a") & (currChar <= "z")) | ((currChar >= "0") & (currChar <= "9"))) newString += currChar.toLowerCase(); } var re = /^\d{4}[a-z]{2}$/ //Check for 4 digits folowed by 2 chars if (newString.search(re)==-1) { alert(replaceSubstring(msgIncorrectPostalCode, "", this.Fields[i].FriendlyName)) document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } else { document.getElementsByName(this.Fields[i].Fieldname)[0].value = newString.toUpperCase(); } } //Check correct Percentage if (this.Fields[i].isPercentage == true) { var Percentage = document.getElementsByName(this.Fields[i].Fieldname)[0].value; var re = /^\d{1,9999}$/ //Check for 4 digits only var iError = false; if (Percentage.search(re)!=-1) { if ((Percentage < this.Fields[i].minPercentage) | (Percentage > this.Fields[i].maxPercentage)) { iError = true } } else { iError = true; } if (iError == true) { var ErrMessage = ""; ErrMessage = replaceSubstring(msgIncorrectPercentage, "", this.Fields[i].FriendlyName); ErrMessage = replaceSubstring(ErrMessage,"","" + this.Fields[i].minPercentage); ErrMessage = replaceSubstring(ErrMessage,"","" + this.Fields[i].maxPercentage); alert(ErrMessage); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } //Check correct number if (this.Fields[i].isNumeric == true) { var ErrMessage = ""; var value = document.getElementsByName(this.Fields[i].Fieldname)[0].value; value = replaceSubstring(value, ",", "."); ErrMessage = replaceSubstring(msgIncorrectNumeric, "", this.Fields[i].FriendlyName); if (isNaN(value)) { alert(ErrMessage); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } else { if (this.Fields[i].isInteger == true) { if (value.indexOf(".") != -1) { ErrMessage = replaceSubstring(msgNotInteger, "", this.Fields[i].FriendlyName); alert(ErrMessage); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } } } //Check forbidden chars if (this.Fields[i].checkForbiddenChars == true) { var containsForbiddenChars = false; var ForbiddenChar = ""; var strForbiddenChars = ""; var ForbiddenChars = this.Fields[i].ForbiddenChars; for (var j=0;j", this.Fields[i].FriendlyName); ErrMessage = replaceSubstring(ErrMessage, "", strForbiddenChars); alert(ErrMessage); document.getElementsByName(this.Fields[i].Fieldname)[0].focus(); return false; } } } //Custom checks from JS Header of HTML document in which FieldChecker is used try { return checkFieldsEx(); } catch(e){} return true; //All fields oké } function getRowCount(field) { var text = document.getElementsByName(field)[0].value; var split = text.split("\n"); return split.length; } function _setMsgMaxRows(Msg) { msgMaxRows = Msg; } function _setMSGIncorrectNumeric(Msg) { msgIncorrectNumeric = Msg; } function _setmsgNotInteger(Msg) { msgNotInteger = Msg; } function _setmsgContainsForbiddenChars(Msg) { msgContainsForbiddenChars = Msg; } function _setMsgMaxChars(Msg) { msgMaxChars = Msg; } function _setMsgRequired(Msg) { msgRequired = Msg; } function _setExtensions(passExt) { Extensions = passExt; } function _setForbiddenChars(passExt) { ForbiddenChars = passExt; } function _setMsgIncorrectExtension(Msg) { msgIncorrectExtension = Msg; } function _setMsgIncorrectPostalCode(Msg) { msgIncorrectPostalCode = Msg; } function _setMsgIncorrectPercentage(Msg) { msgIncorrectPercentage = Msg; } function _setRequiredFieldColor(Color) { RequiredFieldColor = Color; for (var i = 1; i <= this.FieldCount; i++) { if ((this.Fields[i].Required == true) && (showRequiredFieldColor)) { for(var j=0 ; j < document.getElementsByName(this.Fields[i].Fieldname).length ; j++) { document.getElementsByName(this.Fields[i].Fieldname)[j].style.backgroundColor = RequiredFieldColor; } } } } function _setshowFieldNotFoundError(show) { showFieldNotFoundError = show; } function _setShowRequiredFieldColor(show) { showRequiredFieldColor = show; } function replaceSubstring(inputString, fromString, toString) { // Goes through the inputString and replaces every occurrence of fromString with toString var temp = inputString; if (fromString == "") { return inputString; } if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation) while (temp.indexOf(fromString) != -1) { var toTheLeft = temp.substring(0, temp.indexOf(fromString)); var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length); temp = toTheLeft + toString + toTheRight; } } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop var midStrings = new Array("~", "`", "_", "^", "#"); var midStringLen = 1; var midString = ""; // Find a string that doesn't exist in the inputString to be used // as an "inbetween" string while (midString == "") { for (var i=0; i < midStrings.length; i++) { var tempMidString = ""; for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; } if (fromString.indexOf(tempMidString) == -1) { midString = tempMidString; i = midStrings.length + 1; } } } // Keep on going until we build an "inbetween" string that doesn't exist // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string while (temp.indexOf(fromString) != -1) { var toTheLeft = temp.substring(0, temp.indexOf(fromString)); var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length); temp = toTheLeft + midString + toTheRight; } // Next, replace the "inbetween" string with the "toString" while (temp.indexOf(midString) != -1) { var toTheLeft = temp.substring(0, temp.indexOf(midString)); var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length); temp = toTheLeft + toString + toTheRight; } } // Ends the check to see if the string being replaced is part of the replacement string or not return temp; // Send the updated string back to the user } // Ends the "replaceSubstring" function } function checkField(Fieldname, FriendlyName, maxRows, maxChars, Required) { this.Fieldname = Fieldname; this.FriendlyName = FriendlyName; this.maxRows = maxRows; this.maxChars = maxChars; this.Required = Required; this.isMail = false; this.isPostalCode = false; this.isPercentage = false; this.checkForbiddenChars = false; this.minPercentage = 0; this.maxPercentage = 100; this.isNumeric = false; this.isInteger = false; this.emptyValue = ""; this.ForbiddenChars = new Array(); this.Extensions = new Array(); this.setForbiddenChars = function (value) { for (var idx=0; idx