function check_form( f, rules, flag ) {
	for( var ridx = 0; ridx < rules.length; ridx++ ) {
		var field = f[ rules[ridx][0] ];
		var msg = rules[ridx][1];
		if ( ! field ) {
			alert( rules[ridx][0] + ' not defined' );
			return false;
		}
		if ( field.tagName == 'SELECT' ) {
			if ( field.selectedIndex == -1 ) {
				alert( msg );
				field.focus();
				return false;
			}
		} else if ( field.tagName == 'INPUT' || field.tagName == 'TEXTAREA' ) {
			var re;
			if ( rules[ridx].length < 3 ) {
				re = /\S/;
			} else if ( rules[ridx][2] == 'ident' ) {
				re = /^\s*([a-zA-Z0-9_]+\s*|\s*)$/;
			} else if ( rules[ridx][2] == 'email' ) {
				re = /^\s*([a-z0-9\-\.\_]+@([a-z0-9\-]+\.)+[a-z]+\s*|\s*)$/i;
			} else if ( rules[ridx][2] == 'url' ) {
				re = /^\s*((http|https|ftp):\/\/([a-z0-9\-]+\.)+[a-z]+\/[^\s'"<>]*\s*|\s*)$/i;
			} else if ( rules[ridx][2] == 'natural' ) {
				re = /^\s*\d*\s*$/i;
			} else if ( rules[ridx][2] == 'positive' ) {
				re = /^\s*\d*(\.\d+)?\s*$/i;
			} else {
				re = rules[ridx][2];
			}
			if ( !field.value.match( re ) ) {
				alert( msg );
				field.focus();
				return false;
			}
		} else {
			alert( 'Unsupported tagName: "'+field.tagName+'"' );
		}
	}
	if ( flag ) {
		return true;
	} else {
		f.submit();
	}
}


