var ApiKey = {
  'deleted': [],

  'generateNew': function() {
    if(typeof User == 'undefined') {
      Element.show('KeyResults');
      $('KeyResults').innerHTML = 'You need to be logged in to generate API Keys';
      return;
    }
  
    Element.hide('KeyResults');
    Element.show('ApiKeySpinner');
  
    var calls = $('KeyCalls').value.split(/[\n\r,;]/g).map(function(call) {
      return call.stripTags().stripScripts().strip();
    }).without('');
  
    var duration = parseInt($('KeyDuration').value);
    if(!duration) duration = 0;
  
    var unit = $('KeyDurationUnit').value;
    if(unit == 'minutes') duration *= 60;
    else if(unit == 'hours') duration *= 3600;
    else if(unit == 'days') duration *= 24*3600;
    else if(unit == 'weeks') duration *= 7*24*3600;
    else if(unit == 'months') duration *= 30*24*3600;
    else if(unit == 'years') duration *= 365*24*3600;
  
    var expiration_date = duration + (new Date()).getTime() / 1000;
  
    calls = calls.map(function(call) {
      return {'path': call, 'allow': true};
    });
  
    var data = {'call': calls, 'expiration_date': expiration_date, 'hidden': false};
    
    var referer = $('KeyReferer').value;
    if(referer) data.referer = referer;
  
    new Ajax.Request('/api_key/new.json', {
      parameters: data,
      onComplete: function(req) {
        var results = eval('('+req.responseText+')');
        var key = results.key;
        var password = results.password;
        
        Element.show('KeyResults');
    
        if(results.error)
          $('KeyResults').innerHTML = results.error.message;
        else if(!key || !password)
          $('KeyResults').innerHTML = 'There was an error processing your request';
        else {
          $('KeyResults').innerHTML = '<em>Key username:</em> ' + User.login + ',' + key + '<br/><em>Key password:</em> ' + password;
          Element.hide('NoKeys');
          ApiKey.addKeyInfo(key);
        }
    
        Element.hide('ApiKeySpinner');
      }
    });
  },
  

  'addKeyInfo': function(key) {
    new Ajax.Request('/api_key/key_info/'+key, {
      onComplete: function(req) {
        $('KeyList').innerHTML = req.responseText + $('KeyList').innerHTML;
      }
    });
  },


  'showDetails': function(id) {
    if(ApiKey.deleted.indexOf(id) != -1) return;
    Effect.toggle('ApiKeyDetails_'+id, 'slide', {duration: .25});
  },


  'destroy': function(id, key) {
    ApiKey.deleted.push(id);
    new Effect.Fade("ApiKeyInfo_"+id, {duration: .25});
    
    new Ajax.Request('/api_key/delete/'+key, {
      onSuccess: function(req) {
        if(req.responseText == 'true') {          
          Element.remove("ApiKeyInfo_"+id);
          if($('KeyList').innerHTML.strip() == '') {
            Element.show('NoKeys');
            Element.hide('KeyResults');
          }
        } else Warning.message('Could not delete this API Key.');
      },
      
      onFailure: function() {
        new Effect.Appear("ApiKeyInfo_"+id, {duration: .25});
        Warning.message('There was an error deleting this API Key.');
      }
    });
  }
}