function Form(form) {
	var r = {def: /.+/};
	this.form = form;	

	this.t = function(check, notice, notice_args) {		
		this.check = check;
		this.notice = notice;
		this.na = {};
		for(var i in this.check) {			
			var n = false, e = this.form.elements[i];
			if(e.tagName == 'SELECT' && e.value == this.check[i].re) n = true;
			else if(e.type == 'radio' && !e.checked) n = true;
			else if(!e.tagName) {
				n = true;
				for(j = 0; j < e.length; j++) if(e[j].checked) n = false;
			}
			else if(e.type == 'checkbox' && !e.checked) n = true;
			else if(e.type == 'file' && e.value == '') n = true;
			else if((e.tagName == 'TEXTAREA' || e.type == 'text' || e.type == 'password' || e.type == 'hidden') && !r[this.check[i].re].test(this.form.elements[i].value)) n = true;
			if(n) {
				if(!this.na.hasOwnProperty(i)) this.na[i] = true;
			}
			else if(this.na.hasOwnProperty(i)) delete this.na[i];
		}
		if(this.notice) {
			if(notice_args) {
				this.notice.call(this, this, notice_args);
			}
			else
				this.notice.call(this);
		}
		var c = 0;
		for(var i in this.na) if(this.na.hasOwnProperty(i)) c++;		
		if(c == 0) return true;
		return false;		
	}

}
