var force_invalid = false;

function form_check( fields) {
	var result = true;
	var invalid_fields = '';
	for (var i in fields) {
		var o = document.getElementById( fields[i]['id']);
		o.className = o.className.replace( 'form_invalid', '');
	}
	for (var i in fields) {
		var o = document.getElementById( fields[i]['id']);
		var field_result = true;
		switch (fields[i]['re']) {
			case 'numeric' : field_result = check_numeric( o.value); break;
			case 'not_empty' : field_result = check_not_empty( o.value); break;
			case 'email' : field_result = check_email( o.value); break;
			case 'zip_code' : field_result = check_zip_code( o.value); break;
			case 'password' : field_result = check_password( o.value, true); break;
			case 'password_if_fill' : field_result = check_password( o.value, false); break;
			case 'more_than_2' : field_result = check_more_than_2( o.value); break;
			case 'more_than_1' : field_result = check_more_than_1( o.value); break;
			case 'credit_card' : field_result = check_credit_card( o.value); break;
			case 'checked' : field_result = check_checked( o); break;
			default : field_result = check_regexp( o.value, eval( decode( fields[i]['re'])));
		}
		if (field_result == false) {
			o.className += ' form_invalid';
			result = false;
			invalid_fields += fields[i]['id']+',';
		}
	}
	if (result == false || force_invalid) {
		alert( 'Please fill marked fields properly');
		return( false);
	}
	return( true);
}

function check_numeric( value) {
	return( check_regexp( value, /^\d*$/));
}

function check_not_empty( value) {
	return( (value == '') ? false : true);
}

function check_email( value) {
	return( check_regexp( value, /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$/));
	
	
}

function check_zip_code( value) {
	return( check_regexp( value, /^\d{5}(\-\d{4})?$/));
}

function check_password( value, must_fill) {
	if (must_fill == false && value == '') {
		return( true);
	}
	return( check_regexp( value, /^[^\s]{4,}$/));
}

function check_more_than_2( value) {
	return( check_regexp( value, /^.{3,}$/));
}

function check_more_than_1( value) {
	return( check_regexp( value, /^.{2,}$/));
}

function check_credit_card( value) {
	return( check_regexp( value, /^\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}$/));
}

function check_checked( o) {
	return( o.checked);
}

function check_regexp( value, regexp) {
	return (regexp.test( value));
}

function decode( str) {
	return( unescape( str));
}

function next_field_after( e, o, length, next_field_id) {
	if (!e) {
		var e = window.event;
	}
	var re = /\w/;
	if (false == re.test( String.fromCharCode(e.keyCode))) {
		return( true);
	}
	if (o.value.length >= length) {
		document.getElementById( next_field_id).focus();
	}
}
