goog.provide('webfont.modules.Typekit');
goog.require('webfont.Font');
/**
 * @constructor
 * @implements {webfont.FontModule}
 */
webfont.modules.Typekit = function(domHelper, configuration) {
  this.domHelper_ = domHelper;
  this.configuration_ = configuration;
};
/**
 * @const
 * @type {string}
 */
webfont.modules.Typekit.NAME = 'typekit';
goog.scope(function () {
  var Typekit = webfont.modules.Typekit,
	  Font = webfont.Font;
  Typekit.prototype.getScriptSrc = function(kitId) {
	var api = this.configuration_['api'] || 'https://use.typekit.net';
	return api + '/' + kitId + '.js';
  };
  Typekit.prototype.load = function(onReady) {
	var kitId = this.configuration_['id'];
	var configuration = this.configuration_;
	var loadWindow = this.domHelper_.getLoadWindow();
	var that = this;
	if (kitId) {
	  // Load the Typekit script. Once it is done loading we grab its configuration
	  // and use that to populate the fonts we should watch.
	  this.domHelper_.loadScript(this.getScriptSrc(kitId), function (err) {
		if (err) {
		  onReady([]);
		} else {
		  if (loadWindow['Typekit'] && loadWindow['Typekit']['config'] && loadWindow['Typekit']['config']['fn']) {
			var fn = loadWindow['Typekit']['config']['fn'],
				fonts = [];
			for (var i = 0; i < fn.length; i += 2) {
			  var font = fn[i],
				  variations = fn[i + 1];
			  for (var j = 0; j < variations.length; j++) {
				fonts.push(new Font(font, variations[j]));
			  }
			}
			// Kick off font loading but disable font events so
			// we don't duplicate font watching.
			try {
			  loadWindow['Typekit']['load']({
				'events': false,
				'classes': false,
				'async': true
			  });
			} catch (e) {}
			onReady(fonts);
		  }
		}
	  }, 2000);
	} else {
	  onReady([]);
	}
  };
});
