function JSValidator () {
	this.ValidateField = function (elem, validate) {
		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'))
			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')&&!validate)
			return error;
		
		/*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("dd").children("div[@class='hidden']").remove();
		
		if (error)
			$(elem).after ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + error + '</p></div>');
		return error;
	}
	
	this.hideValidateError= function (elem) {
		
		dlclass = '';

		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("dd").children('div').remove();
		
	}
	
	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("dd").children("div[@class='hidden']").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.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.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');
		}
	}
	this.emailvalidate = function (params_arr) {
		var id_form = params_arr[0];
		var is_req = params_arr[1];
		
		var pass = $('#'+id_form).find("input[@name='email']");
		var repass = $('#'+id_form).find("input[@name='reemail']");
		repass.parents("dd").children("div[@class='hidden']").remove();		
		if (is_req && '' == pass.val() && '' == repass.val()) {
			error = params_arr[2];
			//pass.parents('dl').removeClass();pass.parents('dl').addClass('warn');
			//repass.parents('dl').removeClass();repass.parents('dl').addClass('warn');
			repass.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 = params_arr[3];
			//pass.parents('dl').removeClass();pass.parents('dl').addClass('warn');			
			//repass.parents('dl').removeClass();repass.parents('dl').addClass('warn');
			repass.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');
		}
	}
	this.phonevalidate = function (params_arr) {
		var current_phone_name = params_arr[0];
		var number = $("input[@name='" + current_phone_name + "']").val();
		var code = $("select[@name='" + current_phone_name + "_code']").val();
		var do_return = false;
		if (null == number.toString().match (/^(\d)+$/))
			do_return = true;
		if (null == code.toString().match (/^\+(\d)+$/))
			do_return = true;
		if (do_return) {
			$("input[@name='" + current_phone_name + "']").parents("dd").children ("div[@class='hidden']").remove();
			return;
		}
		var current_phone = code + number;
		
		var phone_arr = params_arr[1];
		var is_error = false;
		jQuery.each(
			phone_arr,
			function (i, val) {
				if (val == current_phone_name)
					return;
				var number = $("input[@name='" + val + "']").val();
				var code = $("select[@name='" + val + "_code']").val();
				if (current_phone == code + number) {
					is_error = true;
					return false;
				}	
			}
		);
		var parent = $("input[@name='" + current_phone_name + "']").parents("dd");
		parent.children ("div[@class='hidden']").remove();
		if (is_error) {
			parent.append ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + params_arr[2] + '</p></div>');
		}
	}
	this.loginvalidate = function (params_arr) {
		
		var current_input_name = params_arr[0];
		var id_form = params_arr[1];
		var current_value = jQuery.trim($('#' + id_form).find("input[@name='" + current_input_name + "']").val());
		if ('' == current_value) {
			$("input[@name='" + current_input_name + "']").parents("dd").children ("div[@class='hidden']").remove();
			return;
		}
		
		var input_names_arr = params_arr[2];
		var is_error = false;
		jQuery.each(
			input_names_arr,
			function (i, val) {
				if (val == current_input_name)
					return true;
				var value = $('#' + id_form).find("input[@name='" + val + "']").val();
				if (current_value == value) {
					is_error = true;
					return false;
				}	
			}
		);
		var parent = $("input[@name='" + current_input_name + "']").parents("dd");
		
		if (is_error) {
			parent.children ("div[@class='hidden']").remove();
			parent.append ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + params_arr[3] + '</p></div>');
		} else {
			if ('login' == current_input_name || 'fname' == current_input_name) {
				var pass = $('#' + id_form).find ("input[@name='password']");
				if (pass.val() == current_value) {
					parent.children ("div[@class='hidden']").remove();
					parent.append ('<div id="warn_tooltip" class="hidden"><div class="arrow_tool left"></div><p class="left">' + params_arr[4] + '</p></div>');
				} else {
					if ('login' == current_input_name)
						(new AJAXValidator ()).validate (current_input_name, params_arr[5], $('#' + id_form).find("input[@name='" + current_input_name + "']").attr('id'));
					else
						parent.children ("div[@class='hidden']").remove();
				}
			} else
				parent.children ("div[@class='hidden']").remove();
		}
	}
}
