/**
 * This sorting type will replace DataTables' default string sort with one that
 * will use a locale aware collator. This is supported by IE11, Edge, Chrome,
 * Firefox and Safari 10+. Any browser that does not support the Intl will
 * simply fall back to UTF8 string sorting.
 *
 * This method simply needs to be called prior to the DataTables' initialisation
 * to replace the default string sort with locale aware sorting. The method
 * optionally takes two arguments:
 *
 * 1. [Optional] Locale or array of locales
 * 2. [Optional] Collator options
 *
 * For the supported options please see the
 * [MDN Intl documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator).
 *
 * @name intl
 * @summary Sort string data using the Intl Javascript API
 * @author [Allan Jardine](//datatables.net)
 * @depends DataTables 1.10+
 *
 * @example
 *    // Host's current locale
 *    $.fn.dataTable.ext.order.intl();
 *
 * @example
 *    // Explicit locale
 *    $.fn.dataTable.ext.order.intl('de-u-co-phonebk');
 *
 * @example
 *    // Locale with configuration options
 *    $.fn.dataTable.ext.order.intl('fr', {
 *      sensitivity: 'base'
 *    } );
 */


// UMD
(function( factory ) {
	"use strict";

	if ( typeof define === 'function' && define.amd ) {
		// AMD
		define( ['jquery'], function ( $ ) {
			return factory( $, window, document );
		} );
	}
	else if ( typeof exports === 'object' ) {
		// CommonJS
		module.exports = function (root, $) {
			if ( ! root ) {
				root = window;
			}

			if ( ! $ ) {
				$ = typeof window !== 'undefined' ?
					require('jquery') :
					require('jquery')( root );
			}

			return factory( $, root, root.document );
		};
	}
	else {
		// Browser
		factory( jQuery, window, document );
	}
}
(function( $, window, document ) {


$.fn.dataTable.ext.order.intl = function ( locales, options ) {
	if ( window.Intl ) {
		var collator = new window.Intl.Collator( locales, options );
		var types = $.fn.dataTable.ext.type;

		delete types.order['string-pre'];
		types.order['string-asc'] = collator.compare;
		types.order['string-desc'] = function ( a, b ) {
			return collator.compare( a, b ) * -1;
		};
	}
};


}));
