// input validation functions, cast to right type or erase
function to_date(elem)
{
//var re1 = /^(0?[1-9]|1[012])([\-\/])(0?[1-9]|[12][0-9]|3[01])\2((19|20)\d\d)$/; // mm/dd/yyyy with - or /
//if (re1.test(elem.value)) return to_type_success(elem);
var m = null;
// fix 'yyyy/mm/dd with - or /' to 'mm/dd/yyyy'
var re = /^((19|20)\d\d)([\-\/]?)(0?[1-9]|1[012])\3(0?[1-9]|[12][0-9]|3[01])$/; //
if (re.test(elem.value))
{
m = re.exec(elem.value);
elem.value = m[4] + '/' + m[5] + '/' + m[1];
return to_type_success(elem);
}
// Fix mmddyy or mm/dd/yy or mm-dd-yy to mm/dd/yyyy
var re = /^(0?[1-9]|1[012])([\-\/]?)(0?[1-9]|[12][0-9]|3[01])\2(((19|20)\d\d|\d\d))$/;
if (re.test(elem.value))
{
m = re.exec(elem.value);
elem.value = m[1] + '/' + m[3] + '/';
if (m[4].length==4) elem.value+= m[4];
else elem.value+= (m[4] > 59 ? '19' + m[4] : '20' + m[4]);
}
var dt = new Date(elem.value);
if (dt.toString() != 'Invalid Date')
{
elem.value = (dt.getMonth() + 1) + '/' + dt.getDate() + '/' + dt.getFullYear();
return to_type_success(elem);
}
to_type_error(elem);
}
// func: to_email(elem,r) - converts 'elem' text into email address, blank's on error
function to_email(elem,r)
{
var re = /^[a-zA-Z0-9_\.\-]+\@[a-zA-Z0-9\-]+\.[a-zA-Z0-9]{2,4}$/;
if ( ((r) || (elem.value)) && (!re.test(elem.value))) to_type_error(elem);
else to_type_success(elem);
}
// func: to_number(elem,s,p) ensures that $elem is in right $s (scale) and $p (precision)
function to_number(elem,s,p)
{
var re = null;
re = /\/|\*|\-|\+/;
if (re.test(elem.value))
{
var x = eval(elem.value);
if (x) elem.value = x;
}
if (!p) re = /^[0-9]+$/; // No precision is integers only
else re = new RegExp('^([0-9]+\.?[0-9]*|\.[0-9]+)$'); // Floating point
if (!re.test(elem.value)) to_type_error(elem);
else to_type_success(elem);
}
// func: to_url(elem) - ensures 'elem' is an url
function to_url(elem)
{
var re = new RegExp("^(http|https|ftp):\/\/(%[[:digit:]A-Fa-f][[:digit:]A-Fa-f]|[-_.!~*';/?:@&=+$,[:alnum:])+");
var re = new RegExp("^(http|https|ftp)://");
if (!re.test(elem.value)) to_type_error(elem);
else to_type_success(elem);
}
function to_type_error(elem) { elem.style.border = '1px solid #f00'; }
function to_type_success(elem) { elem.style.border = '1px solid #333'; }