function isBlank(s) {
	for(var i=0;i<s.length;i++) {
		var c=s.charAt(i);
		if((c!=' ')&&(c!='\n')&&(c!='\t')) return false;
	}
	return true;
}
function jCleanMoney(inText) {
	var nada = "";
	var outText = inText.replace(/[\\$\,]/g, nada);
	return outText;
}
function frmVerify(f) {
	var rc=true;
	var msg=new String;
	var s=new String;
	for(var i=0;i<f.elements.length;i++) {
		if((!f.elements[i].optional)&&(!f.elements[i].email)&&
			((f.elements[i].value==null)||(f.elements[i].value=='')||isBlank(f.elements[i].value))) {
			rc=false;
			msg=msg + f.elements[i].name + ' is required\n';
		}
		if((f.elements[i].email)&&((f.elements[i].value.indexOf("@") == -1)||(f.elements[i].value.indexOf(".")==-1))) {
			rc=false;
			msg=msg + f.elements[i].name + ' requires valid E-Mail address\n';
		}

		if((f.elements[i].wwwurl)&&((f.elements[i].value.indexOf("://") == -1)||(f.elements[i].value.indexOf(".")==-1))) {
			rc=false;
			msg=msg + f.elements[i].name + ' requires complete WWW address (URL)\n';
		}

		s=f.elements[i].value.toString();
		if(f.elements[i].minlength!=null && s.length < f.elements[i].minlength) {
			msg=msg + "'" + f.elements[i].name + "' minumum length: " + f.elements[i].minlength;
			rc=false;
		}
		if(f.elements[i].maxlength!=null && s.length < f.elements[i].maxlength) {
			msg=msg + "'" + f.elements[i].name + "' maximum length: " + f.elements[i].maxlength;
			rc=false;
		}

		if(f.elements[i].value.numeric) {
			// straight number, optional min and max
			var v=parseFloat(f.elements[i].value);
			if(isNaN(v)) {
				rc=false;
				msg=msg + "'" + f.elements[i].name + "' must be number";
			}
			if(rc!=false && f.elements[i].min!=null && v < f.elements[i].min) {
				msg=msg + ', minumum value: ' + f.elements[i].min;
				rc=false;
			}
			if(f.elements[i].max!=null && v > f.elements[i].max) {
				msg=msg + ', maximum value: ' + f.elements[i].max;
				rc=false;
			}
			msg=msg + '\n';
		}

		if(f.elements[i].money) {
			// currency-formatted number, optional min and max
			var v=parseFloat(jCleanMoney(f.elements[i].value));
			if(isNaN(v)) {
				rc=false;
				msg=msg + "'" + f.elements[i].name + "' must be currency";
			}
			if(f.elements[i].min!=null && v < f.elements[i].min) {
				msg=msg + ', minumum value: ' + f.elements[i].min;
				rc=false;
			}
			if(f.elements[i].max!=null && v > f.elements[i].max) {
				msg=msg + ', maximum value: ' + f.elements[i].max;
				rc=false;
			}
			msg=msg + '\n';
		}

	}
	if(rc==false) alert(msg);
	return rc;
}


