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

goog.require('webfont.Font');

/** webfont.load({

monotype: {
  projectId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'//this is your Fonts.com Web fonts projectId
}

}); */

/**

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

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

this.domHelper_ = domHelper;
this.configuration_ = configuration;

};

/**

* name of the module through which external API is supposed to call the MonotypeFontAPI.
*
* @const
* @type {string}
*/

webfont.modules.Monotype.NAME = 'monotype';

/**

* __mti_fntLst is the name of function that exposes Monotype's font list.
* @const
*/

webfont.modules.Monotype.HOOK = '__mti_fntLst';

/**

* __MonotypeAPIScript__ is the id of script added by google API. Currently 'fonts.com' supports only one script in a page.
* This may require change in future if 'fonts.com' begins supporting multiple scripts per page.
* @const
*/

webfont.modules.Monotype.SCRIPTID = '__MonotypeAPIScript__';

/**

* __MonotypeConfiguration__ is function exposed to fonts.com. fonts.com will use this function to get webfontloader configuration
* @const
*/

webfont.modules.Monotype.CONFIGURATION = '__MonotypeConfiguration__';

goog.scope(function() {

var Monotype = webfont.modules.Monotype,
  Font = webfont.Font;

Monotype.prototype.getScriptSrc = function(projectId, version) {
  var api = (this.configuration_['api'] || 'https://fast.fonts.net/jsapi')
  return api + '/' + projectId + '.js' + (version ? '?v=' + version : '');
};

Monotype.prototype.load = function(onReady) {
  var self = this;
  var projectId = self.configuration_['projectId'];
  var version = self.configuration_['version'];

  function checkAndLoadIfDownloaded() {
    if (loadWindow[Monotype.HOOK + projectId]) {
      var mti_fnts = loadWindow[Monotype.HOOK + projectId](),
          fonts = [],
          fntVariation;

      if (mti_fnts) {
        for (var i = 0; i < mti_fnts.length; i++) {
          var fnt = mti_fnts[i]["fontfamily"];

          //Check if font-style and font-weight is available
          if (mti_fnts[i]["fontStyle"] != undefined && mti_fnts[i]["fontWeight"] != undefined) {
            fntVariation = mti_fnts[i]["fontStyle"] + mti_fnts[i]["fontWeight"];
            fonts.push(new Font(fnt, fntVariation));
          } else {
            fonts.push(new Font(fnt));
          }
        }
      }
      onReady(fonts);
    } else {
      setTimeout(function() {
        checkAndLoadIfDownloaded();
      }, 50);
    }
  }
  if (projectId) {
    var loadWindow = self.domHelper_.getLoadWindow();

    var script = this.domHelper_.loadScript(self.getScriptSrc(projectId, version), function(err) {
      if (err) {
        onReady([]);
      } else {
        loadWindow[Monotype.CONFIGURATION+ projectId] = function() {
         return  self.configuration_;
        };

        checkAndLoadIfDownloaded();
      }
    });
    script["id"] = Monotype.SCRIPTID + projectId;
  } else {
    onReady([]);
  }
};

});