/**
 * When search a table with accented characters, it can be frustrating to have
 * an input such as _Zurich_ not match _Zürich_ in the table (`u !== ü`). This
 * type based search plug-in replaces the built-in string formatter in
 * DataTables with a function that will remove replace the accented characters
 * with their unaccented counterparts for fast and easy filtering.
 *
 * Note that with the accented characters being replaced, a search input using
 * accented characters will no longer match. The second example below shows
 * how the function can be used to remove accents from the search input as well,
 * to mitigate this problem.
 *
 *  @summary Replace accented characters with unaccented counterparts
 *  @name Accent neutralise
 *  @author Allan Jardine
 *
 *  @example
 *    $(document).ready(function() {
 *        $('#example').dataTable();
 *    } );
 *
 *  @example
 *    $(document).ready(function() {
 *        var table = $('#example').dataTable();
 *
 *        // Remove accented character from search input as well
 *        $('#myInput').keyup( function () {
 *          table
 *            .search(
 *              jQuery.fn.DataTable.ext.type.search.string( this.value )
 *            )
 *            .draw()
 *        } );
 *    } );
 */

(function(){

  function removeAccents ( data ) {
      return data
          .replace( /έ/g, 'ε' )
          .replace( /[ύϋΰ]/g, 'υ' )
          .replace( /ό/g, 'ο' )
          .replace( /ώ/g, 'ω' )
          .replace( /ά/g, 'α' )
          .replace( /[ίϊΐ]/g, 'ι' )
          .replace( /ή/g, 'η' )
          .replace( /\n/g, ' ' )
          .replace( /á/g, 'a' )
          .replace( /é/g, 'e' )
          .replace( /í/g, 'i' )
          .replace( /ó/g, 'o' )
          .replace( /ú/g, 'u' )
          .replace( /ê/g, 'e' )
          .replace( /î/g, 'i' )
          .replace( /ô/g, 'o' )
          .replace( /è/g, 'e' )
          .replace( /ï/g, 'i' )
          .replace( /ü/g, 'u' )
          .replace( /ã/g, 'a' )
          .replace( /õ/g, 'o' )
          .replace( /ç/g, 'c' )
          .replace( /â/g, 'a' )
          .replace( /à/g, 'a' )
          .replace( /ù/g, 'u' )
          .replace( /ï/g, 'i' )
          .replace( /œ/g, 'oe' )
          .replace( /ì/g, 'i' );
  }

  var searchType = jQuery.fn.DataTable.ext.type.search;

  searchType.string = function ( data ) {
      return ! data ?
          '' :
          typeof data === 'string' ?
              removeAccents( data ) :
              data;
  };

  searchType.html = function ( data ) {
      return ! data ?
          '' :
          typeof data === 'string' ?
              removeAccents( data.replace( /<.*?>/g, '' ) ) :
              data;
  };
}());