var FormValidatorX = new Class({

  Extends: FormValidator,

  initialize: function(form, options) {
    if (!options) {
      options = {};
    }
    if (!options.errorPrefix) options.errorPrefix = 'Ошибка: ';
    if (!options.warningPrefix) options.warningPrefix = 'Внимание: ';
    this.parent(form, options);
  },

  showAdvice: function(className, field){
    var advice = this.getAdvice(className, field);
    if (advice && !field[this.getPropName(className)] 
        && (advice.getStyle('display') == "none" 
        || advice.getStyle('visiblity') == "hidden" 
        || advice.getStyle('opacity') == 0)) {
       field[this.getPropName(className)] = true;
       //advice.slide('hide').setStyle('display', '').slide('in');

       advice.setStyles({
         'display': 'block',
         'visibility': 'hidden'
       });
       var h = advice.getScrollSize().y;
       var pt = advice.getStyle('padding-top').toInt();
       var pb = advice.getStyle('padding-bottom').toInt();
       var mt = advice.getStyle('margin-top').toInt();
       var mb = advice.getStyle('margin-bottom').toInt();
       h = h - pt - pb;
       advice.setStyles({
         'opacity': 0,
         'height': 0,
         'padding-top': 0,
         'padding-bottom': 0,
         'margin-top': 0,
         'margin-bottom': 0
       }).morph({
          'height': h,
          'opacity': 1,
          'padding-top': pt,
          'padding-bottom': pb,
          'margin-top': mt,
          'margin-bottom': mb
       });
    }
  },
  
  hideAdvice: function(className, field){
    var advice = this.getAdvice(className, field);
    if (advice && field[this.getPropName(className)]) {
      field[this.getPropName(className)] = false;
      //advice.slide('out');

      var h = advice.getScrollSize().y;
      var pt = advice.getStyle('padding-top').toInt();
      var pb = advice.getStyle('padding-bottom').toInt();
      var mt = advice.getStyle('margin-top').toInt();
      var mb = advice.getStyle('margin-bottom').toInt();
      h = h - pt - pb;
      new Fx.Morph(advice).start({
        'height': 0,
        'opacity': 0,
        'padding-top': 0,
        'padding-bottom': 0,
        'margin-top': 0,
        'margin-bottom': 0
      }).chain(function() {
        advice.setStyles({
          'display': 'none',
          'height': h,
          'padding-top': pt,
          'padding-bottom': pb,
          'margin-top': mt,
          'margin-bottom': mb
        });
      });
    }
  }

});

FormValidator.resources.ru = {
  required: 'Поле не может быть пустым.',
  minLength: 'Поле не может содержать символов меньше чем {minLength} (вы ввели {length}).',
  maxLength: 'Поле не может содержать символов больше чем {maxLength} (вы ввели {length}).',
  integer: 'Пожалуйста введите целое число.',
  numeric: 'Пожалуйста введите только число (например "1" или "1.1" или "-1" или "-1.1").',
  digits: 'Пожалуйста введите только числа и разделители (например: номер телефона с тире или точками).',
  alpha: 'Пожалуйста введите только буквы (пробелы не допускаются).',
  alphanum: 'Пожалуйста введите только буквы или цифры (пробелы не допускаются).',
  dateSuchAs: 'Пожалуйста введите дату в виде {date}',
  dateInFormatMDY: 'Пожалуйста введите дату в виде MM/DD/YYYY (например: "12/31/1999")',
  dateInFormatDMY: 'Пожалуйста введите дату в виде DD/MM/YYYY (например: "31/12/1999")',
  email: 'Пожалуйста введите правильный e-mail (например: "john@domain.com").',
  url: 'Укажите ссылку в виде http://www.google.com',
  currencyDollar: 'Пожалуйста введите стоимость (например: $100.00).',
  oneRequired: 'Пожалуйста введите что-нибудь в одно из этих полей.'
};
FormValidator.language = 'ru';

try {
  FormValidator.validators.required.options.errorMsg = function() { return FormValidator.getMsg('required'); };
  FormValidator.validators['validate-email'].options.errorMsg = function() { return FormValidator.getMsg('email'); };
} catch(e) {}

FormValidator.addAllThese([
  ['validate-date-ru', {
    errorMsg: FormValidator.getMsg('dateInFormatDMY'),
    test: function(element) {
      if (FormValidator.getValidator('IsEmpty').test(element)) return true;
      var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
      if(!regex.test(element.get('value'))) return false;
      var d = new Date(element.get('value').replace(regex, '$2/$1/$3'));
      return (parseInt(RegExp.$2, 10) == (1 + d.getMonth())) && 
        (parseInt(RegExp.$1, 10) == d.getDate()) && 
        (parseInt(RegExp.$3, 10) == d.getFullYear());
    }
  }]
]);
