/*! DataTables Bootstrap 3 integration

 * ©2011-2015 SpryMedia Ltd - datatables.net/license

 */



/**

 * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and

 * DataTables 1.10 or newer.

 *

 * This file sets the defaults and adds options to DataTables to style its

 * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap

 * for further information.

 */

(function( factory ){

	if ( typeof define === 'function' && define.amd ) {

		// AMD

		define( ['jquery', 'datatables.net'], function ( $ ) {

			return factory( $, window, document );

		} );

	}

	else if ( typeof exports === 'object' ) {

		// CommonJS

		module.exports = function (root, $) {

			if ( ! root ) {

				root = window;

			}



			if ( ! $ || ! $.fn.dataTable ) {

				// Require DataTables, which attaches to jQuery, including

				// jQuery if needed and have a $ property so we can access the

				// jQuery object that is used

				$ = require('datatables.net')(root, $).$;

			}



			return factory( $, root, root.document );

		};

	}

	else {

		// Browser

		factory( jQuery, window, document );

	}

}(function( $, window, document, undefined ) {

'use strict';

var DataTable = $.fn.dataTable;





/* Set the defaults for DataTables initialisation */

$.extend( true, DataTable.defaults, {

	dom:

		"<'row'<'col-sm-6'l><'col-sm-6'f>>" +

		"<'row'<'col-sm-12'tr>>" +

		"<'row'<'col-sm-5'i><'col-sm-7'p>>",

	renderer: 'bootstrap'

} );





/* Default class modification */

$.extend( DataTable.ext.classes, {

	sWrapper:      "dataTables_wrapper form-inline dt-bootstrap",

	sFilterInput:  "form-control input-sm",

	sLengthSelect: "form-control input-sm",

	sProcessing:   "dataTables_processing panel panel-default"

} );





/* Bootstrap paging button renderer */

DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {

	var api     = new DataTable.Api( settings );

	var classes = settings.oClasses;

	var lang    = settings.oLanguage.oPaginate;

	var aria = settings.oLanguage.oAria.paginate || {};

	var btnDisplay, btnClass, counter=0;



	var attach = function( container, buttons ) {

		var i, ien, node, button;

		var clickHandler = function ( e ) {

			e.preventDefault();

			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {

				api.page( e.data.action ).draw( 'page' );

			}

		};



		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {

			button = buttons[i];



			if ( $.isArray( button ) ) {

				attach( container, button );

			}

			else {

				btnDisplay = '';

				btnClass = '';



				switch ( button ) {

					case 'ellipsis':

						btnDisplay = '&#x2026;';

						btnClass = 'disabled';

						break;



					case 'first':

						btnDisplay = lang.sFirst;

						btnClass = button + (page > 0 ?

							'' : ' disabled');

						break;



					case 'previous':

						btnDisplay = lang.sPrevious;

						btnClass = button + (page > 0 ?

							'' : ' disabled');

						break;



					case 'next':

						btnDisplay = lang.sNext;

						btnClass = button + (page < pages-1 ?

							'' : ' disabled');

						break;



					case 'last':

						btnDisplay = lang.sLast;

						btnClass = button + (page < pages-1 ?

							'' : ' disabled');

						break;



					default:

						btnDisplay = button + 1;

						btnClass = page === button ?

							'active' : '';

						break;

				}



				if ( btnDisplay ) {

					node = $('<li>', {

							'class': classes.sPageButton+' '+btnClass,

							'id': idx === 0 && typeof button === 'string' ?

								settings.sTableId +'_'+ button :

								null

						} )

						.append( $('<a>', {

								'href': '#',

								'aria-controls': settings.sTableId,

								'aria-label': aria[ button ],

								'data-dt-idx': counter,

								'tabindex': settings.iTabIndex

							} )

							.html( btnDisplay )

						)

						.appendTo( container );



					settings.oApi._fnBindAction(

						node, {action: button}, clickHandler

					);



					counter++;

				}

			}

		}

	};



	// IE9 throws an 'unknown error' if document.activeElement is used

	// inside an iframe or frame. 

	var activeEl;



	try {

		// Because this approach is destroying and recreating the paging

		// elements, focus is lost on the select button which is bad for

		// accessibility. So we want to restore focus once the draw has

		// completed

		activeEl = $(host).find(document.activeElement).data('dt-idx');

	}

	catch (e) {}



	attach(

		$(host).empty().html('<ul class="pagination"/>').children('ul'),

		buttons

	);



	if ( activeEl ) {

		$(host).find( '[data-dt-idx='+activeEl+']' ).focus();

	}

};





/*

 * TableTools Bootstrap compatibility

 * Required TableTools 2.1+

 */

if ( DataTable.TableTools ) {

	// Set the classes that TableTools uses to something suitable for Bootstrap

	$.extend( true, DataTable.TableTools.classes, {

		"container": "DTTT btn-group",

		"buttons": {

			"normal": "btn btn-default",

			"disabled": "disabled"

		},

		"collection": {

			"container": "DTTT_dropdown dropdown-menu",

			"buttons": {

				"normal": "",

				"disabled": "disabled"

			}

		},

		"print": {

			"info": "DTTT_print_info"

		},

		"select": {

			"row": "active"

		}

	} );



	// Have the collection use a bootstrap compatible drop down

	$.extend( true, DataTable.TableTools.DEFAULTS.oTags, {

		"collection": {

			"container": "ul",

			"button": "li",

			"liner": "a"

		}

	} );

}





return DataTable;

}));