var ReservationDetails = Class.create(PageForm, {
  initialize: function($super, formId, containerId) {
    $super(formId, containerId);

    $(this.formId).observe('submit', this.addReservationCommand.bind(this));

    $(this.formId).focusFirstElement();
  },
  addReservationCommand: function(event) {
    this.clearMessages();
    this.validatateUserInput();
    if (this.hasErrors()) {
      event.stop();
      this.showMessages();
    }
    else {
      $('reservationFormCommand').value = 'sendReservation';
      $('clientReservationForm').submit();
    }
  },
  validatateUserInput: function() {
    if ($F('lastName').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidLastname);
    }
    if ($F('firstName').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidFirstname);
    }
    if ($F('address').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidAddress);
    }
    if ($F('city').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidCity);
    }
    if ($F('country').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidCountry);
    }
    if ($F('phone').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidPhone);
    }
    if ($F('roomsCount').strip() == '') {
      this.addErrorMessage(validationErrorMessages.invalidRoomsCount);
    }
    if ($F('email').strip() != '' && this.isEmailValid($F('email'))) {
      this.addErrorMessage(validationErrorMessages.invalidEmail);
    }
  },
  isEmailValid: function(emailStr) {
    var emailRegxp = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
    re = new RegExp(emailRegxp);
    return !re.test(emailStr);
  }
});

Event.observe(window, 'load', function() {
  if ($('clientReservationForm')) {
    new ReservationDetails('clientReservationForm', 'reservationMessagesContainer');
  }
});