/**
 * @provides javelin-behavior-passphrase-credential-control
 * @requires javelin-behavior
 *           javelin-dom
 *           javelin-stratcom
 *           javelin-workflow
 *           javelin-util
 *           javelin-uri
 * @javelin
 */

JX.behavior('passphrase-credential-control', function(config) {

  JX.Stratcom.listen(
    'click',
    'passphrase-credential-add',
    function(e) {
      var control = e.getNode('passphrase-credential-control');
      var data = e.getNodeData('passphrase-credential-control');

      var uri = JX.$U('/passphrase/edit/');
      uri.setQueryParam('type', data.type);
      uri.setQueryParam('username', data.username);

      new JX.Workflow(uri)
        .setHandler(JX.bind(null, onadd, control))
        .start();

      e.kill();
    });

  function onadd(control, response) {
    var select = JX.DOM.find(control, 'select', 'passphrase-credential-select');

    var data = JX.Stratcom.getData(control);

    // If this allows the user to select "No Credential" (`allowNull`),
    // put the new credential in the menu below the "No Credential" option.

    // Otherwise, remove the "(No Existing Credentials)" if it exists and
    // put the new credential at the top.

    var target = 0;
    for (var ii = 0; ii < select.options.length; ii++) {
      if (!select.options[ii].value) {
        if (!data.allowNull) {
          select.remove(ii);
        } else {
          target = ii + 1;
        }
        break;
      }
    }

    select.add(
      JX.$N('option', {value: response.phid}, response.name),
      select.options[target] || null);

    select.value = response.phid;
    select.disabled = null;
  }

});
