var W3CDOM = (document.createElement && document.getElementsByTagName);
function validate_form(form) {
if (!W3CDOM) return;
if (document.forms[0].samedelivery) {
required = new Array();
if (document.forms[0].samedelivery.checked) {
required['name'] = 0;
required['address1'] = 0;
required['city'] = 0;
required['postcode'] = 0;
} else {
required['name'] = 1;
required['address1'] = 1;
required['city'] = 1;
required['postcode'] = 1;
}
}
errors = new Array();
var errcount = 0;
for (var i in fields) {
if (!form[fields[i]].value && required[fields[i]]) {
errors[fields[i]] = create_errorlist_item('Please fill out the “' + fields[i] + '” field.');
errcount++;
}
else if (form[fields[i]].value) {
switch (types[fields[i]]) {
case 'n':
errorstate = check_for_numeric(form[fields[i]].value, fields[i]);
break;
case 'an':
errorstate = check_for_alphanumeric(form[fields[i]].value, fields[i]);
break;
case 't':
var errorstate = check_for_text(form[fields[i]].value, fields[i]);
break;
case 'ta':
errorstate = check_for_textarea(form[fields[i]].value, fields[i], limits[fields[i]]);
break;
case 'e':
errorstate = check_for_email(form[fields[i]].value, fields[i]);
break;
}
if (errorstate) {
errors[fields[i]] = errorstate;
errcount++;
}
}
}
if (errcount > 0) {
display_errors(form, errors);
return false;
}
else {
return true;
}
}
function display_errors(form, errors) {
if (document.getElementById('errors')) {
form.removeChild(form.childNodes[0]);
}
errorlist = elem('ul', {'id': 'errors', 'class': 'errors'}, '', '');
for (var msg in errors) {
errorlist.appendChild(errors[msg]);
}
form.insertBefore(errorlist, form.firstChild);
}
function create_errorlist_item(label) {
label = document.createTextNode(label);
listitem = elem('li', '', '', '');
listitem.appendChild(label);
return listitem;
}
function elem(name, attrs, style, text) {
var e = document.createElement(name);
if (attrs) {
for (key in attrs) {
if (key == 'class') {
e.className = attrs[key];
} else if (key == 'id') {
e.id = attrs[key];
} else {
e.setAttribute(key, attrs[key]);
}
}
}
if (style) {
for (key in style) {
e.style[key] = style[key];
}
}
if (text) {
e.appendChild(document.createTextNode(text));
}
return e;
}
function check_for_numeric(value, name) {
if (value.match(/[^ 0-9\.-]/)) {
return create_errorlist_item('The “' + name + '” field contains characters other than numbers.');
} else {
return;
}
}
function check_for_alphanumeric(value, name) {
if (value.match(/[^ a-zA-Z-0-9]/)) {
return create_errorlist_item('The “' + name + '” field contains characters other than letters and numbers.');
} else {
return;
}
}
function check_for_text(value, name) {
if (value.match(/[^ a-zA-Z0-9\[\]\/\':#&;,\?!\(\)_\.-]/)) {
return create_errorlist_item('The ' + name + ' field contains characters other than letters and numbers.');
} else {
return;
}
}
function check_for_textarea(value, name, limit) {
if (document.getElementById(name).value.length > limit) {
return create_errorlist_item('The ' + name + ' field contains ' + document.getElementById(name).value.length + ' characters but the limit is ' + limits[name] + '.');
} else if (value.match(/[^ a-zA-Z0-9\[\]\/\'\":#&@;,\?!\(\)_\*\=\r\n\.-]/)) {
return create_errorlist_item('The “' + name + '” field contains characters other than letters, numbers and punctuation symbols.');
} else {
return;
}
}
function check_for_email(value, name) {
if (!value.match(/^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$/)) {
return create_errorlist_item('The ' + name + ' field does not contain a valid email address.');
} else {
return;
}
}