function $(s){return document.getElementById(s);}
/* generic validation routine */
function validateForm(frm, target)
{
var i;
var ret = true;
var field;
var out='';
var errorFields = [];
if (!target)
target = "errors";
if (!$(target))
{
if (window.console)
console.log('setup element ' + target + ' to make errors visible');
return false;
}
// loop through all fields
// check if they have validation class name
// and do appropriate validation
// @return true, if all validation passes
for (i=0; i';
errorFields.push(field);
ret = false;
}
}
else
if (field.value==='')
{
out += 'Please enter a value for ' + field.name + '
';
errorFields.push(field);
ret = false;
}
}
// validate numeric fields
filter = /validation-number/;
if (filter.test(field.className))
{
if (field.value!=='' && isNaN(field.value))
{
out += 'Please enter a number for ' + field.name + '
';
errorFields.push(field);
ret = false;
}
}
// validate digit only fields
filter = /validation-digits/;
if (filter.test(field.className))
{
var filter = /^[0-9]+$/;
if (field.value!=='' && !filter.test(field.value))
{
out += 'Please enter a number for ' + field.name + '
';
errorFields.push(field);
ret = false;
}
}
// validate date fields
filter = /validation-date/;
if (filter.test(field.className))
{
if (field.value!=='' && !field.value.isDate(true))
{
out += 'Please enter a valid date (mm/dd/yyyy) for ' + field.name + '
';
errorFields.push(field);
ret = false;
}
}
// validate email addresses
filter = /format-email/;
if (filter.test(field.className))
{
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (field.value!=='' && !filter.test(field.value))
{
out += 'Please enter a valid email address in ' + field.name + '
';
errorFields.push(field);
ret = false;
}
}
// validate credit cards
// this uses Luhn validation
// which is a numeric algorithm
filter = /format-creditcard/;
if (filter.test(field.className))
{
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (field.value!=='' && !field.value.isValidCreditCard())
{
out += 'Please enter a valid credit card number' + '
';
errorFields.push(field);
ret = false;
}
}
// validate urls
filter = /format-url/;
if (filter.test(field.className))
{
filter = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/i;
if (field.value!=='' && !filter.test(field.value))
{
out += 'Please enter a valid url' + '
';
errorFields.push(field);
ret = false;
}
}
// validate verification fields
filter = /validation-match/;
if (filter.test(field.className))
{
var otherField = field.className.replace(/.*validation-match-/,'').replace(/ .*/,'');
if (field.value!=='' && field.value!=$(otherField).value)
{
out += 'The value in ' + field.name + ' does not match ' + otherField + '
';
errorFields.push(field);
ret = false;
}
}
field.className = field.className.replace(" error","");
}
$(target).innerHTML = out;
// indicate errors
for (i = 0; i < errorFields.length; i++)
errorFields[i].className += " error";
window.scroll(0,0);
return ret;
}