/**************************************************/
/* 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('');
}