CONFMAN.payment = function() {
  
  var card_type = $('payment_card_type');
  var cvn = $('payment_cvn'); 

  var disable_submit = function(form) {
    form.select('input[type=submit]').invoke('disable'); 
  };

  var set_cvn_maxlength = function() {
    if (card_type.value === 'american_express') {
      cvn.maxLength = 4;
    } else {
      cvn.maxLength = 3;
    }
    return this;
  };

  set_cvn_maxlength();
  card_type.observe('change', function() {
    set_cvn_maxlength();
  });

  $$('form').invoke('observe', 'submit', function(e) {
    disable_submit(Event.findElement(e, 'form')); 
  });
}

CONFMAN.admin_payment = function(reg_data_id, reg_setup_id) {

  var payment_type = $('payment_type');
  var refund_method = $('admin_refund_method');
  var refund_message = $('refund_message');

  var check_refund_possible = function() {
    new Ajax.Request('/payments/registration_admin/refund_checker.cfm', {
      method: 'get',
      parameters: {
        'reg_data_id': reg_data_id,
        'reg_setup_id': reg_setup_id
      },
      onComplete: function(response) {
        show_refund_message(response.responseJSON['MESSAGE']);
      }
    });
  };

  var disable_submit = function(form) {
    form.select('input[type=submit]').invoke('disable'); 
  };

  var show_form = function() {
    $$('div.form').invoke('hide');
    $(payment_type.value+'_form').show();
    return this;
  };

  var show_refund_message = function(message) {
    if (message !== '') {
      refund_message.update(new Element('p', {'class': 'refund-message'}).update(message)); 
      refund_message.show();
    } else {
      refund_message.update('');
      refund_message.hide();
    }
  };

  var toggle_date = function() {
    if (refund_method.value === 'gateway') {
      $('refund_date').select('select').invoke('disable');
      $('refund_date').hide();
    } else {
      $('refund_date').select('select').invoke('enable');
      $('refund_date').show();
    }
  };

  show_form();
  payment_type.observe('change', function() {
    show_form();
  });

  toggle_date();
  refund_method.observe('change', function() {
    toggle_date();
    if (refund_method.value === '34') {
      check_refund_possible();
    } else {
      refund_message.hide();
    }
  });

  $$('form').invoke('observe', 'submit', function(e) {
    disable_submit(Event.findElement(e, 'form')); 
  });
};

