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

goog.require('webfont.Font'); goog.require('webfont.StyleSheetWaiter');

/**

*
* WebFont.load({
*   custom: {
*     families: ['Font1', 'Font2'],
*    urls: [ 'https://moo', 'https://meuh' ] }
* });
*
* @constructor
* @implements {webfont.FontModule}
*/

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

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

};

/**

* @const
* @type {string}
*/

webfont.modules.Custom.NAME = 'custom';

goog.scope(function () {

var Custom = webfont.modules.Custom,
    Font = webfont.Font,
    StyleSheetWaiter = webfont.StyleSheetWaiter;

Custom.prototype.load = function(onReady) {
  var i, len;
  var urls = this.configuration_['urls'] || [];
  var familiesConfiguration = this.configuration_['families'] || [];
  var fontTestStrings = this.configuration_['testStrings'] || {};
  var waiter = new StyleSheetWaiter();
  for (i = 0, len = urls.length; i < len; i++) {
    this.domHelper_.loadStylesheet(urls[i], waiter.startWaitingLoad());
  }

  var fonts = [];

  for (i = 0, len = familiesConfiguration.length; i < len; i++) {
    var components = familiesConfiguration[i].split(":");

    if (components[1]) {
      var variations = components[1].split(",");

      for (var j = 0; j < variations.length; j += 1) {
        fonts.push(new Font(components[0], variations[j]));
      }
    } else {
      fonts.push(new Font(components[0]));
    }
  }

  waiter.waitWhileNeededThen(function() {
    onReady(fonts, fontTestStrings);
  });
};

});