function initTooltip(form)
{
  jQuery(form)
  .submit(function(){checkFields(this)})
  .find(':input')
    .each(function()
    {
      jQuery(this).focus(function()
      {
        jQuery('.field').each(function()
        {
          jQuery(this).removeClass('hint').find('.tooltip').removeAttr('styles');
        });
        showTooltip(this);
      })
      jQuery(this).blur(function(){checkField(this)});
    });
}

function checkFields(form)
{
  jQuery(form).find(':input').each(function(){
    checkField(this);
  });
}

function checkField(field)
{
  if(!jQuery(field).valid())
    jQuery(field).parents('.field').addClass('error').removeClass('hint').removeClass('valid');
  else
    jQuery(field).parents('.field').removeClass('error').removeClass('hint').addClass('valid');
}

function showTooltip(input)
{
  var tooltip_id = '#tooltip_' + input.id;
  var tooltip = jQuery(tooltip_id);
  var field = tooltip.parents('.field').addClass('hint');
}
      
function setValidationTimeout(call_fun,name)
{
  this.tlist = this.tlist || {};
  if(this.tlist[name])
    clearTimeout(this.tlist[name]);
  this.tlist[name] = setTimeout(call_fun, 500);
}

jQuery.validator.addMethod("ajax_check", function(value, element, param)
{
  if (this.optional(element) )
    return "dependency-mismatch";

  var validator = this;
  var previous = this.previousValue(element);

  var setError = function(message)
  {
    var errors = {};
    errors[element.name] = message;
    validator.showErrors(errors); 
    validator.settings.messages[element.name].ajax_check = message;
    previous.valid = false;
  };

  if (!this.settings.messages[element.name])
    this.settings.messages[element.name] = {}; 
  this.settings.messages[element.name].remote = true;

  if (previous.old !== value) {
    previous.old = value;
    this.startRequest(element);
    var data = {};
    data["field"] = element.name;
    data["value"] = value;
    //=======
    jQuery(element).parents("dl").addClass('spinner').removeClass('valid').removeClass('error');
    validator.showLabel(element,"<img src='images/img/ajax_loader_small.gif' />");
    setValidationTimeout(function() {
    jQuery.ajax({
      url: GameVars.absPath("member/ajax_check_register_field"),
      dataType: "json",
      type: "POST",
      data: data,
      error: function(msg) 
      {
        validator.stopRequest(element, true);
        if(jQuery(element).val() !== value)
          return;
        setError('Ужаcная ошибка. Повторите ввод.');
      },
      success: function(response) 
      {
        validator.stopRequest(element, true);
        if(jQuery(element).val() !== value)
          return;
        jQuery(element).parents("dl").removeClass('spinner');
        if ( response.success == true) {
          var submitted = validator.formSubmitted;
          validator.prepareElement(element);
          validator.formSubmitted = submitted;
          validator.successList.push(element);
          validator.showErrors();
          previous.valid = true;
        } else {
          setError(response.msg);
        }
      }
    });
    
    },element.name);
    
    //=====
    return "pending";
  } else if( this.pending[element.name] ) {
    return "pending";
  }
  return previous.valid;
}, "Неверное значение поля.");
