text: 'use strict';
  
  var Base = require('./base');
  
  /**
   * Abstraction around keyboard app
   * @constructor
   * @param {Marionette.Client} client for operations.
   */
  function KeyboardApp(client) {
    Base.call(this, client, null, KeyboardApp.Selectors);
  }
  
  module.exports = KeyboardApp;
  
  KeyboardApp.Selectors = {
    'settingsHeader': '#root-header'
  };
  
  KeyboardApp.SETTINGS_LAUNCH_PATH = 'app://keyboard.gaiamobile.org/' +
                                     'settings.html';
  
  KeyboardApp.prototype = {
    __proto__: Base.prototype,
  
    switchToSettings: function() {
      this.client.switchToFrame();
      var settingsFrame = this.client.findElement(
        'iframe[src*="' + KeyboardApp.SETTINGS_LAUNCH_PATH + '"]');
  
      /**
       * XXX: Workaround to wait for the frame is ready after switching to the
       * keyboard app's settings page. We should use
       * this.client.apps.switchToApp(KeyboardApp.SETTINGS_LAUNCH_PATH)
       * instead of the logic below after Bug 1027994 is fixed.
       *
       * Add swithToApp waiting logic here, see Bug 1003788 for a similar
       * technique we implemented in marionette-apps plugin.
       */
  
      // Wait for the iframe is rendered.
      this.client.waitFor(function() {
        var frameClass = settingsFrame.scriptWith(function(el) {
          return el.parentNode.getAttribute('class');
        });
  
        if (frameClass !== null) {
          return frameClass.indexOf('render') !== -1;
        } else {
          return true;
        }
      });
  
      // Wait for the iframe is displayed on screen.
      this.client.waitFor(function() {
        var transitionState = settingsFrame.scriptWith(function(el) {
          return el.parentNode.getAttribute('transition-state');
        });
  
        if (transitionState !== null) {
          return transitionState === 'opened';
        } else {
          return settingsFrame.displayed();
        }
      });
  
      this.client.switchToFrame(settingsFrame);
    },
  
    goBackToSettingsApp: function() {
      var header = this.waitForElement('settingsHeader');
      header.tap(25, 25);
    }
  };
  