
function Inquiry() {

  var inquiry = this;

  this.input = $('#inquiryInput');
  this.confirmation = $('#inquiryConfirmation');
  this.finish = $('#inquiryFinish');

  this.form = $('#inquiryForm');
  this.form.ajaxForm({
    type: 'post',
    beforeSubmit: function(data, jqForm, options) {
      var errors = inquiry.validate();
      if (errors.length != 0) {
        inquiry.showErrors(errors);
        return false;
      }
      return true;
    },
    success: function (data, dataType) {
      var obj = $.parseJSON(data);
      if (obj.success) {
    	$('#inquiryFinishMessage').text(obj.messages[0]);
    	inquiry.dispatch(inquiry.confirmation, inquiry.finish);
      } else {
    	inquiry.showErrors(obj.messages);
    	inquiry.dispatch(inquiry.confirmation, inquiry.input);
      }
    },
    error: function(xhr, textStatus, errorThrown) {
      inquiry.showErrors([textStatus]);
    }
  });

  $('#showPrivacyPolicyLink').click(function() {
    $('#privacyPolicy').slideToggle('slow');
  });
	
  $('#buttonToConfirmation').click(function() {
    var errors = inquiry.validate();
    if (errors.length != 0) {
      inquiry.showErrors(errors);
      return;
    } else {
      inquiry.populate();
      inquiry.dispatch(inquiry.input, inquiry.confirmation);
      setTimeout(function() { inquiry.hideErrors(); }, 500);
    }
  });

  $('#buttonToForm').click(function() {
    inquiry.dispatch(inquiry.confirmation, inquiry.input);
  });

  $('#buttonToSubmit').click(function() {
    inquiry.form.submit();
  });
  
  $('#buttonToReset').click(function() {
	inquiry.form.resetForm();
    inquiry.dispatch(inquiry.finish, inquiry.input);
  });

}

$.extend(Inquiry.prototype, {

  fval: function(name) {
    return $("input[name='" + name + "']", this.form).val() ||
    $("textarea[name='" + name + "']", this.form).val();
  },

  populate: function() {
    $('#confirmedName').empty().append(this.fval('name'));
    $('#confirmedEmail').empty().append(this.fval('email'));
    $('#confirmedCompany').empty().append(this.fval('company'));
    $('#confirmedDep').empty().append(this.fval('dep'));
    $('#confirmedTel').empty().append(this.fval('tel'));
    $('#confirmedBody').empty().append(this.fval('body'));
    $('#finishedName').empty().append(this.fval('name'));
    $('#finishedEmail').empty().append(this.fval('email'));
    $('#finishedCompany').empty().append(this.fval('company'));
    $('#finishedDep').empty().append(this.fval('dep'));
    $('#finishedTel').empty().append(this.fval('tel'));
    $('#finishedBody').empty().append(this.fval('body'));
  },

  dispatch: function(prev, next) {
    prev.fadeOut({duration: 300});
    setTimeout(function() { next.fadeIn(); }, 0);
  },

  validate: function() {
  	var errors = [];
    if (String.isBlank(this.fval('name'))) {
      errors.push('お名前を入力してください');
    }
    if (String.isBlank(this.fval('email'))) {
      errors.push('メールアドレスを入力してください');
    }
    if (String.isBlank(this.fval('company'))) {
      errors.push('貴社名を入力してください');
    }
    if (String.isBlank(this.fval('body'))) {
      errors.push('お問い合わせ内容を入力してください');
    }
    return errors;
  },

  showErrors: function(errors) {
    if (errors == null || errors.length == 0) {
      return;
    }
    var errorList = $('#inquiryErrors');
    errorList.empty();
    for (var i in errors) {
      errorList.append('<li>' + errors[i] + '</li>');
    }
    errorList.css('display', 'block');
  },
	
  hideErrors: function() {
    var errorList = $('#inquiryErrors');
    errorList.css('display', 'none');
    errorList.empty();
  }

});
