/*!

* froala_editor v2.3.3 (https://www.froala.com/wysiwyg-editor)
* License https://froala.com/wysiwyg-editor/terms/
* Copyright 2014-2016 Froala Labs
*/

(function (factory) {

if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['jquery'], factory);
} else if (typeof module === 'object' && module.exports) {
    // Node/CommonJS
    module.exports = function( root, jQuery ) {
        if ( jQuery === undefined ) {
            // require('jQuery') returns a factory that requires window to
            // build a jQuery instance, we normalize how we use modules
            // that require this pattern but the window provided is a noop
            // if it's defined (how jquery works)
            if ( typeof window !== 'undefined' ) {
                jQuery = require('jquery');
            }
            else {
                jQuery = require('jquery')(root);
            }
        }
        factory(jQuery);
        return jQuery;
    };
} else {
    // Browser globals
    factory(jQuery);
}

}(function ($) {

'use strict';

$.extend($.FE.DEFAULTS, {
  fontFamily: {
    'Arial,Helvetica,sans-serif': 'Arial',
    'Georgia,serif': 'Georgia',
    'Impact,Charcoal,sans-serif': 'Impact',
    'Tahoma,Geneva,sans-serif': 'Tahoma',
    'Times New Roman,Times,serif': 'Times New Roman',
    'Verdana,Geneva,sans-serif': 'Verdana'
  },
  fontFamilySelection: false,
  fontFamilyDefaultSelection: 'Font Family'
})

$.FE.PLUGINS.fontFamily = function (editor) {
  function apply (val) {
    editor.format.applyStyle('font-family', val);
  }

  function refreshOnShow($btn, $dropdown) {
    $dropdown.find('.fr-command.fr-active').removeClass('fr-active');
    $dropdown.find('.fr-command[data-param1="' + _getSelection() + '"]').addClass('fr-active');

    var $list = $dropdown.find('.fr-dropdown-list');
    var $active = $dropdown.find('.fr-active').parent();
    if ($active.length) {
      $list.parent().scrollTop($active.offset().top - $list.offset().top - ($list.parent().outerHeight() / 2 - $active.outerHeight() / 2));
    }
    else {
      $list.parent().scrollTop(0);
    }
  }

  function _getArray (val) {
    var font_array = val.replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi, '').replace(/"|'| /g, '').split(',');

    return $.grep(font_array, function (txt) { return txt.length > 0 });
  }

  /**
   * Return first match position.
   */
  function _matches (array1, array2) {
    for (var i = 0; i < array1.length; i++) {
      for (var j = 0; j < array2.length; j++) {
        if (array1[i] == array2[j]) {
          return [i, j];
        }
      }
    }

    return null;
  }

  function _getSelection () {
    var val = $(editor.selection.element()).css('font-family');
    var font_array = _getArray(val);

    var font_matches = [];
    for (var key in editor.opts.fontFamily) {
      if (editor.opts.fontFamily.hasOwnProperty(key)) {
        var c_font_array = _getArray(key);

        var match = _matches(font_array, c_font_array);
        if (match) {
          font_matches.push([key, match]);
        }
      }
    }

    if (font_matches.length === 0) return null;

    // Sort matches by their position.
    // Times,Arial should be detected as being Times, not Arial.
    font_matches.sort(function (a, b) {
      var f_diff = a[1][0] - b[1][0];
      if (f_diff === 0) {
        return a[1][1] - b[1][1];
      }
      else {
        return f_diff;
      }
    });

    return font_matches[0][0];
  }

  function refresh ($btn) {
    if (editor.opts.fontFamilySelection) {
      var val = $(editor.selection.element()).css('font-family').replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi, '').replace(/"|'|/g, '').split(',');

      $btn.find('> span').text(editor.opts.fontFamily[_getSelection()] || val[0] || editor.opts.fontFamilyDefaultSelection);
    }
  }

  return {
    apply: apply,
    refreshOnShow: refreshOnShow,
    refresh: refresh
  }
}

// Register the font size command.
$.FE.RegisterCommand('fontFamily', {
  type: 'dropdown',
  displaySelection: function (editor) {
    return editor.opts.fontFamilySelection;
  },
  defaultSelection: function (editor) {
    return editor.opts.fontFamilyDefaultSelection;
  },
  displaySelectionWidth: 120,
  html: function () {
    var c = '<ul class="fr-dropdown-list">';
    var options = this.opts.fontFamily;
    for (var val in options) {
      if (options.hasOwnProperty(val)) {
        c += '<li><a class="fr-command" data-cmd="fontFamily" data-param1="' + val + '" style="font-family: ' + val + '" title="' + options[val] + '">' + options[val] + '</a></li>';
      }
    }
    c += '</ul>';

    return c;
  },
  title: 'Font Family',
  callback: function (cmd, val) {
    this.fontFamily.apply(val);
  },
  refresh: function ($btn) {
    this.fontFamily.refresh($btn);
  },
  refreshOnShow: function ($btn, $dropdown) {
    this.fontFamily.refreshOnShow($btn, $dropdown);
  },
  plugin: 'fontFamily'
})

// Add the font size icon.
$.FE.DefineIcon('fontFamily', {
  NAME: 'font'
});

}));