if (typeof ZRegistration == 'undefined') {
  var ZRegistration = {};
}

ZRegistration.init = function(options) {
  options = options || {};
  ZRegistration.firstShow = (typeof options.firstShow == 'boolean') ? options.firstShow : true;
  ZRegistration.validatableInputs = options.validatableInputs || [];
  if (options.initCalend) {
    var $years = $('#years'), $months = $('#months'), $days = $('#days');
    ZRegistration.calend = new TripleCalendar($years, $months, $days, $('#birthdate'));
    $($years).add($months).add($days).each(function() {
      this.valueEntered = (+this.value) ? true : false;
    }).bind('change', function() {
      if (+this.value) {
        this.valueEntered = true;
      }
    });
  }

  if (ZRegistration.validatableInputs.length) {
    $(document).ready(function() {
      var first = true;
      ZRegistration.validatableInputs.each(function() {
        $(this).bind('keyup change focus', function(e, initial) {
          initial = initial || false;
          if (e.type == 'focus' && !$(e.target).hasClass('alarm')) {
            return false;
          }
          ZRegistration.validRegistration(e, initial);
          return false;
        })
        .blur(function(evt) {
          xform_hideErrorMessage(evt, '.errorMessage');
        });

        if (first && $(this).hasClass("alarm")) {
          // показываем подсказку для первого неверного поля
          first = false;
          $(this).focus().addClass("alarm");
        }
      });
    });
  }
};

ZRegistration.validRegistration = function(evt, initialScan) {
  var _elem = evt.target;

  if (evt && ( evt.keyCode == 9 || evt.keyCode == 13)) {
    return;
  }

  if ($(_elem).attr('id') == 'birthdate') {
    _elem.allowContinue = $(_elem).val() ? true : false;
  } else if ($(_elem).attr('name') == 'reg.captcha' && $(_elem).val().length > 0) {
    // ZTXDEV-1070. Скрываем сообщение об ошибке в капче,
    // как только пользователь начинает набирать новое значение
    _elem.allowContinue = true;
  } else {
    _elem.allowContinue = new RegExp($(_elem).attr('xfRestr:filter')).test(_elem.value);
  }

  if (initialScan) {
    return;
  }

  if (_elem.allowContinue) {
    xform_hideErrorMessage(evt, '.errorMessage');
    _elem.onfocus = null;
    $(_elem).removeClass('alarm');
  } else {
    xform_showErrorMessageInternal(_elem);
    $(_elem).addClass('alarm');
  }
  ZRegistration.checkActivateButton();
};

ZRegistration.checkActivateButton = function() {
  for (var i = 0; i < ZRegistration.validatableInputs.length; i++) {
    var input = ZRegistration.validatableInputs[i];
    if (!input.allowContinue) {
//      $('.formRow:last a)').attr('class', 'createButtonGray');
      return;
    }
  }
//  $('.formRow:last a').attr('class', 'createButton');
};

ZRegistration.checkedDate = function() {
  var $calend = $([ZRegistration.calend.year[0], ZRegistration.calend.month[0], ZRegistration.calend.day[0]]);
  if (!($calend[0].valueEntered && $calend[1].valueEntered && $calend[2].valueEntered)) {
    return false;
  }
  $calend.removeClass('alarm');
  var birthdate = document.getElementById('birthdate');
  birthdate.allowContinue = false;

  if (!(+$calend[0].value && +$calend[1].value && +$calend[2].value)) {
    $calend.addClass('alarm');
    xform_showErrorMessageInternal($calend[2]);
    ZRegistration.checkActivateButton();
    return false;
  }
  xform_hideErrorMessage();
  birthdate.allowContinue = true;
  ZRegistration.checkActivateButton();
  return true;
};

ZRegistration.checkedGender = function() {
  var gender = $("#sex");
  if (!gender.val()) {
    return false;
  }
  gender.removeClass('alarm');
  var sex = document.getElementById('sex');
  sex.allowContinue = false;

  if (!($('#sex2').val() in [0, 1])) {
    $('#sex2').addClass('alarm');
    xform_showErrorMessageInternal($('#sex2'));
    ZRegistration.checkActivateButton();
    return false;
  }
  xform_hideErrorMessage();
  sex.allowContinue = true;
  ZRegistration.checkActivateButton();
  return true;
};

ZRegistration.transliterate = function(value, target) {
  $('#' + target).val(transliterate.apply(value));
};
