/**************************************************/ /* FORM VALIDATOR */ /* */ /* Author : A.H. Miedema */ /* Copyright : Eigen & Wijze Communicatie BV */ /* Emmakade 70 */ /* 8933 AV Leeuwarden */ /* THE NETHERLANDS */ /* */ /* Version : 0.1.2 */ /**************************************************/ var TYPE_TEXT = 0; var TYPE_SELECT = 1; var TYPE_CHECK = 2; var TYPE_RADIO = 3; var TYPE_EMAIL = 4; var TYPE_URL = 5; var ERROR_STYLE = 1; var ERROR_ALERT = 2; var ERROR_MESSAGE = 3; // This script checks formdata function FormValidator(formId) { this.errorClass = 'error'; this.focusClass = 'focus'; this.fields = new Object(); this.form = document.getElementById(formId); // Check for IE6 var IE6 = navigator.userAgent.indexOf('MSIE 6.0') != -1 ? true : false; var lScope = this; for(var q in this.form.elements) { var el = this.form.elements[q]; if(typeof(el) == 'object' && el != null) { if((el.nodeName == 'INPUT' && el.type == 'text') || el.nodeName == 'TEXTAREA' || el.nodeName == 'SELECT') { if(!IE6) { var _focus = el.getAttribute('onfocus') == null ? '' : el.getAttribute('onfocus'); var _blur = el.getAttribute('onblur') == null ? '' : el.getAttribute('onblur'); el.setAttribute('onfocus', '_setFocus(this, \'' + this.focusClass + '\'); ' + _focus); el.setAttribute('onblur', '_hideFocus(this, \'' + this.focusClass + '\'); ' + _blur); } else { el.onblur = function() { lScope.validateField(this.name); _hideFocus(this, lScope.focusClass); } el.onfocus = function() { _setFocus(this, lScope.focusClass); } } } } } /// PUBLIC METHODS ////////////////////////////////////////////////// this.addValidationField = function(name, type, value, label, required) { if(!this.fields[name]) { required == undefined ? false : required; this.fields[name] = {name : name, type : type, value : value, label : label, required : required}; } /* for(var q in this.fields) { alert(q); } */ } this.validate = function() { var submitForm = true; for(var q in this.fields) { var field = this.fields[q]; if(!this.validateField(field.name, true)) { submitForm = false; } } return submitForm; } this.validateField = function(field, checkTotal) { if(!checkTotal) { checkTotal = false; } if(!this.fields[field]) { alert('The field "' + field + '" is not set to be validated and therefor will be seen as valid'); return true; } // The field does exist, so lets start validating var form = this.form; var field = this.fields[field]; var el = form.elements[field.name]; if(!el) { // Okay, the element does not exists, so maybe there is a error field with the given name of this element var error = document.getElementById('error_' + field.name); if(!error) { alert('Het opgegeven veld "' + field.name + '" bestaat niet.'); } else { error.style.display = 'block'; error.innerHTML = 'Het veld ' +field.label + ' moet zijn aangemaakt / ingevuld'; } return false; } else { var error = document.getElementById('error_' + el.id); switch(field.type) { case TYPE_TEXT : if(field.required && (el.value == field.value || el.value == '')) { if(error) { error.style.display = 'block'; error.innerHTML = '' +field.label + ' is een verplicht veld'; } el.className += ' ' + this.errorClass; if(checkTotal) { el.focus(); } return false; } break; case TYPE_SELECT : if(el.value.length == 0 && field.required) { if(error) { error.style.display = 'block'; error.innerHTML = 'U dient een keuze te maken bij ' + field.label + ''; } el.className += ' ' + this.errorClass; if(checkTotal) { el.focus(); } return false; } break; case TYPE_CHECK : case TYPE_RADIO : var checked = false; if(el.length) { for(var i = 0; i < el.length; i++) { if(el[i].checked) { checked = true; break; } } } else { var el2 = el; var el = new Array(); el.push(el2); if(el[0].checked) { checked = true; } } if(!checked && field.required) { error = document.getElementById('error_' + el[0].id); if(error) { error.style.display = 'block'; error.innerHTML = 'U dient een keuze te maken bij ' + field.label + ''; } el[0].className += ' ' + this.errorClass; /* if(checkTotal) { el[0].focus(); } */ return false; } break; case TYPE_EMAIL : if(!validateEmail(el.value)) { if(error) { error.style.display = 'block'; error.innerHTML = 'U heeft geen geldig e-mailadres opgegeven bij ' + field.label + ''; } el.className += ' ' + this.errorClass; if(checkTotal) { el.focus(); } return false; } break; case TYPE_URL : if(!validateURL(el.value)) { if(error) { error.style.display = 'block'; error.innerHTML = 'U heeft geen geldig internetadres ingevoerd bij ' + field.label + ''; } el.className += ' ' + this.errorClass; if(checkTotal) { el.focus(); } return false; } break; } if(el.length) { el[0].className = el[0].className.split(this.errorClass).join(''); } else { el.className = el.className.split(this.errorClass).join(''); } } if(error) { error.innerHTML = ''; error.style.display = 'none'; } return true; } } function validateEmail(email) { var regexp = /^.+\@+..+$/ return regexp.test(email); } function validateURL(url) { var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ return regexp.test(url); } function _setFocus(obj, clazz) { obj.className += ' ' + clazz; } function _hideFocus(obj, clazz) { obj.className = obj.className.split(clazz).join(''); }