text: /**
   * @provides phortune-credit-card-form
   * @requires javelin-install
   *           javelin-dom
   *           javelin-json
   *           javelin-workflow
   *           javelin-util
   * @javelin
   */
  
  /**
   * Simple wrapper for credit card forms generated by `PhortuneCreditCardForm`.
   *
   * To construct an object for a form:
   *
   *   new JX.PhortuneCreditCardForm(form_root_node, submit_callback);
   *
   */
  JX.install('PhortuneCreditCardForm', {
    construct : function(root, onsubmit) {
      this._root = root;
      this._submitCallback = onsubmit;
      JX.DOM.listen(root, 'submit', null, JX.bind(this, this._onsubmit));
    },
  
    members : {
      _root : null,
      _submitCallback : null,
  
      _getCardData : function() {
        var root = this._root;
  
        return {
          number : JX.DOM.find(root, 'input',  'number-input').value,
          cvc    : JX.DOM.find(root, 'input',  'cvc-input'   ).value,
          month  : JX.DOM.find(root, 'select', 'month-input' ).value,
          year   : JX.DOM.find(root, 'select', 'year-input'  ).value
        };
      },
  
      submitForm : function(errors, token) {
        var params = {
          errors: JX.JSON.stringify(errors),
          token: JX.JSON.stringify(token || {})
        };
  
        JX.Workflow
          .newFromForm(this._root, params)
          .start();
      },
  
      _onsubmit : function(e) {
        e.kill();
        this._submitCallback(this._getCardData());
      }
  
    }
  
  });
  