goog.provide('webfont.modules.Fontdeck');

goog.require('webfont.Font');

/**

* @constructor
* @implements {webfont.FontModule}
*/

webfont.modules.Fontdeck = function(domHelper, configuration) {

this.domHelper_ = domHelper;
this.configuration_ = configuration;
this.fonts_ = [];

};

/**

* @const
* @type {string}
*/

webfont.modules.Fontdeck.NAME = 'fontdeck'; webfont.modules.Fontdeck.HOOK = '__webfontfontdeckmodule__'; webfont.modules.Fontdeck.API = 'f.fontdeck.com/s/css/js/';

goog.scope(function () {

var Fontdeck = webfont.modules.Fontdeck,
    Font = webfont.Font,
    FontVariationDescription = webfont.FontVariationDescription;

Fontdeck.prototype.getScriptSrc = function(projectId) {
  // For empty iframes, fall back to main window's hostname.
  var hostname = this.domHelper_.getHostName();
  var api = this.configuration_['api'] || webfont.modules.Fontdeck.API;
  return api + hostname + '/' + projectId + '.js';
};

Fontdeck.prototype.load = function(onReady) {
  var projectId = this.configuration_['id'];
  var loadWindow = this.domHelper_.getLoadWindow();
  var self = this;

  if (projectId) {
    // Provide data to Fontdeck for processing.
    if (!loadWindow[webfont.modules.Fontdeck.HOOK]) {
      loadWindow[webfont.modules.Fontdeck.HOOK] = {};
    }

    // Fontdeck will call this function to indicate support status
    // and what fonts are provided.
    loadWindow[webfont.modules.Fontdeck.HOOK][projectId] = function(fontdeckSupports, data) {
      for (var i = 0, j = data['fonts'].length; i<j; ++i) {
        var font = data['fonts'][i];
        self.fonts_.push(new Font(font['name'], Font.parseCssVariation('font-weight:' + font['weight'] + ';font-style:' + font['style'])));
      }
      onReady(self.fonts_);
    };

    // Call the Fontdeck API.
    this.domHelper_.loadScript(this.getScriptSrc(projectId), function (err) {
      if (err) {
        onReady([]);
      }
    });
  } else {
    onReady([]);
  }
};

});