function Commander(element,element_input)
{
  this.element = element;
  this.element_input = element_input;
  this.hint = new Hint();
  this.storage = [];
  this.storage_index = 0;
  this.always_show = false;

  var queue = [];
  
  this.query = function(input_str)
  {
    if(input_str.indexOf(";") > 0){
      queue = input_str.split(";");
    }
    else{
      queue.push(input_str)
    }
    run();
    this.hide();
  }

  function run()
  {
    if(!queue[0]){ return; }
    
    active(queue[0].trim());

    queue.shift();
    if(queue.length > 0){
      setTimeout(function(){ run(); }, 100);
    }
  }

  function active(content)
  {
    var key = content[0];
    var cmd = new Command(content.substring(1).trim().split(" "));
    
    if(ronin.modules[key]){
      ronin.modules[key].active(cmd);
    }
    
    ronin.history.add(content);
  }
  
  this.passive = function(content)
  {
    var key = content[0];
    var cmd = new Command(content.substring(1).split(" "));
    
    ronin.module = null;
    
    if(ronin.modules[key]){
      ronin.modules[key].passive(cmd);
      ronin.module = ronin.modules[key];
      ronin.cursor.set_mode(ronin.module);
    }
    else{
      ronin.cursor.set_mode(ronin.brush);
    }
    this.hint.update();
  }

  this.cmd = function()
  {
    var content = this.element_input.value.trim();
    var key = content[0];
    var cmd = new Command(content.substring(1).split(" "));
    return cmd;
  }
  
  //
  
  this.show = function()
  {
    this.element.setAttribute('class','visible');
    this.element_input.focus();
    this.element_input.value = "";
  }

  this.always = function() {
    this.always_show = !this.always_show;
  }
  
  this.hide = function()
  {
    if (!this.always_show) {
      this.element.setAttribute('class','hidden');
    }
    this.element_input.value = "";
  }
  
  this.clear = function()
  {
    this.element_input.value = "";
  }
  
  this.next_cmd = function()
  {
    this.storage_index += this.storage_index < this.storage.length ? 1 : 0;
    this.element_input.value = this.storage[this.storage_index] ? this.storage[this.storage_index] : "";
  }
  
  this.prev_cmd = function()
  {
    this.storage_index -= this.storage_index < 1 ? 0 : 1;
    this.element_input.value = this.storage[this.storage_index];
  } 
}