function JSValidator () {
	this.ValidateField = function (elem) {
		var field_expr = $(elem).attr('field_expr');
		var field_length = $(elem).attr('field_length');
		var field_req = $(elem).attr('field_req');
		
		var error = false;
		if (1 == field_req && (!$(elem).attr('value') || '' == jQuery.trim($(elem)[0].value)))
			error = $(elem).attr('field_req_error');
		else if ($(elem).attr('value') && 0 != field_expr && !$(elem).attr('value').match (new RegExp(field_expr)))
			error = $(elem).attr('field_regex_error');
		else if (0 != field_length && (new String ( $(elem).attr('value') )).length > field_length)
			error = $(elem).attr('field_length_error');
			
		if (error == $(elem).attr('field_req_error'))
			return;
		
		dlclass = error ? 'warn' : 0 != field_req ? 'ok_form' : '';

		try {
			if (null != $(elem).parents('dl').attr('class').match(/h_bord/)) {
				$(elem).parents('dl').removeClass();$(elem).parents('dl').addClass('h_bord');
			} else
				$(elem).parents('dl').removeClass();
		} catch (e) {
			$(elem).parents('dl').removeClass();
		}
		$(elem).parents('dl').addClass(dlclass);
		$(elem).parents("div[@class='ctrl_holder']").children('div').remove();
		if (error)
			$(elem).parents('dl').after ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + error + '</p></div>');
	}
	
	this.passwordvalidate = function (params_arr) {
		var id_form = params_arr[0];
		var is_req = params_arr[1];
		
		var pass = $('#'+id_form).find("input[@name='password']");
		var repass = $('#'+id_form).find("input[@name='repassword']");
		repass.parents("div[@class='ctrl_holder']").children('div').remove();
		if (is_req && '' == pass.val() && '' == repass.val()) {
			error = 'Password must be specified';pass.parents('dl').removeClass();pass.parents('dl').addClass('warn');
			repass.parents('dl').removeClass();repass.parents('dl').addClass('warn');repass.parents('dl').after ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + error + '</p></div>');
			return;
		}
		if (pass.val() != repass.val()) {
			error = 'Passwords are different';pass.parents('dl').removeClass();pass.parents('dl').addClass('warn');
			
			repass.parents('dl').removeClass();repass.parents('dl').addClass('warn');
			repass.parents('dl').after ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + error + '</p></div>');
			return;
		}
		if (pass.val() == repass.val() && 'warn' == jQuery.trim(pass.parents('dl').attr('class'))) {
			pass.parents('dl').removeClass();pass.parents('dl').addClass('ok_form');
			repass.parents('dl').removeClass();	repass.parents('dl').addClass('ok_form');
		}
	}
}
