function _fnInitialise ( settings )
		{
			var i, iLen, iAjaxStart=settings.iInitDisplayStart;
			var columns = settings.aoColumns, column;
			var features = settings.oFeatures;
			var deferLoading = settings.bDeferLoading; // value modified by the draw
		
			/* Ensure that the table data is fully initialised */
			if ( ! settings.bInitialised ) {
				setTimeout( function(){ _fnInitialise( settings ); }, 200 );
				return;
			}
		
			/* Show the display HTML options */
			_fnAddOptionsHtml( settings );
		
			/* Build and draw the header / footer for the table */
			_fnBuildHead( settings );
			_fnDrawHead( settings, settings.aoHeader );
			_fnDrawHead( settings, settings.aoFooter );
		
			/* Okay to show that something is going on now */
			_fnProcessingDisplay( settings, true );
		
			/* Calculate sizes for columns */
			if ( features.bAutoWidth ) {
				_fnCalculateColumnWidths( settings );
			}
		
			for ( i=0, iLen=columns.length ; i<iLen ; i++ ) {
				column = columns[i];
		
				if ( column.sWidth ) {
					column.nTh.style.width = _fnStringToCss( column.sWidth );
				}
			}
		
			_fnCallbackFire( settings, null, 'preInit', [settings] );
		
			// If there is default sorting required - let's do it. The sort function
			// will do the drawing for us. Otherwise we draw the table regardless of the
			// Ajax source - this allows the table to look initialised for Ajax sourcing
			// data (show 'loading' message possibly)
			_fnReDraw( settings );
		
			// Server-side processing init complete is done by _fnAjaxUpdateDraw
			var dataSrc = _fnDataSource( settings );
			if ( dataSrc != 'ssp' || deferLoading ) {
				// if there is an ajax source load the data
				if ( dataSrc == 'ajax' ) {
					_fnBuildAjax( settings, [], function(json) {
						var aData = _fnAjaxDataSrc( settings, json );
		
						// Got the data - add it to the table
						for ( i=0 ; i<aData.length ; i++ ) {
							_fnAddData( settings, aData[i] );
						}
		
						// Reset the init display for cookie saving. We've already done
						// a filter, and therefore cleared it before. So we need to make
						// it appear 'fresh'
						settings.iInitDisplayStart = iAjaxStart;
		
						_fnReDraw( settings );
		
						_fnProcessingDisplay( settings, false );
						_fnInitComplete( settings, json );
					});
				}
				else {
					_fnProcessingDisplay( settings, false );
					_fnInitComplete( settings );
				}
			}
		}
/**
		 * Draw the table for the first time, adding all required features
		 *  @param {object} settings dataTables settings object
		 *  @memberof DataTable#oApi
		 */
Draw the table for the first time, adding all required features
@param {object} settings dataTables settings object
@memberof DataTable#oApi
Draw the table for the first time adding all required features @param { object } settings dataTables settings object @memberof DataTable#oApi
function _fnInitialise ( settings )
		{
			var i, iLen, iAjaxStart=settings.iInitDisplayStart;
			var columns = settings.aoColumns, column;
			var features = settings.oFeatures;
			var deferLoading = settings.bDeferLoading; 
			if ( ! settings.bInitialised ) {
				setTimeout( function(){ _fnInitialise( settings ); }, 200 );
				return;
			}
			_fnAddOptionsHtml( settings );
			_fnBuildHead( settings );
			_fnDrawHead( settings, settings.aoHeader );
			_fnDrawHead( settings, settings.aoFooter );
			_fnProcessingDisplay( settings, true );
			if ( features.bAutoWidth ) {
				_fnCalculateColumnWidths( settings );
			}
			for ( i=0, iLen=columns.length ; i<iLen ; i++ ) {
				column = columns[i];
				if ( column.sWidth ) {
					column.nTh.style.width = _fnStringToCss( column.sWidth );
				}
			}
			_fnCallbackFire( settings, null, 'preInit', [settings] );
			_fnReDraw( settings );
			var dataSrc = _fnDataSource( settings );
			if ( dataSrc != 'ssp' || deferLoading ) {
				if ( dataSrc == 'ajax' ) {
					_fnBuildAjax( settings, [], function(json) {
						var aData = _fnAjaxDataSrc( settings, json );
						for ( i=0 ; i<aData.length ; i++ ) {
							_fnAddData( settings, aData[i] );
						}
						settings.iInitDisplayStart = iAjaxStart;
						_fnReDraw( settings );
						_fnProcessingDisplay( settings, false );
						_fnInitComplete( settings, json );
					});
				}
				else {
					_fnProcessingDisplay( settings, false );
					_fnInitComplete( settings );
				}
			}
		}
function _fnInitialise ( settings ) { var i , iLen , iAjaxStart = settings . iInitDisplayStart ; var columns = settings . aoColumns , column ; var features = settings . oFeatures ; var deferLoading = settings . bDeferLoading ; if ( ! settings . bInitialised ) { setTimeout ( function ( ) { _fnInitialise ( settings ) ; } , 200 ) ; return ; } _fnAddOptionsHtml ( settings ) ; _fnBuildHead ( settings ) ; _fnDrawHead ( settings , settings . aoHeader ) ; _fnDrawHead ( settings , settings . aoFooter ) ; _fnProcessingDisplay ( settings , true ) ; if ( features . bAutoWidth ) { _fnCalculateColumnWidths ( settings ) ; } for ( i = 0 , iLen = columns . length ; i < iLen ; i ++ ) { column = columns [ i ] ; if ( column . sWidth ) { column . nTh . style . width = _fnStringToCss ( column . sWidth ) ; } } _fnCallbackFire ( settings , null , 'preInit' , [ settings ] ) ; _fnReDraw ( settings ) ; var dataSrc = _fnDataSource ( settings ) ; if ( dataSrc != 'ssp' || deferLoading ) { if ( dataSrc == 'ajax' ) { _fnBuildAjax ( settings , [ ] , function ( json ) { var aData = _fnAjaxDataSrc ( settings , json ) ; for ( i = 0 ; i < aData . length ; i ++ ) { _fnAddData ( settings , aData [ i ] ) ; } settings . iInitDisplayStart = iAjaxStart ; _fnReDraw ( settings ) ; _fnProcessingDisplay ( settings , false ) ; _fnInitComplete ( settings , json ) ; } ) ; } else { _fnProcessingDisplay ( settings , false ) ; _fnInitComplete ( settings ) ; } } }
Draw the table for the first time, adding all required features
  @param {object} settings dataTables settings object
  @memberof DataTable#oApi
Draw the table for the first time adding all required features @param { object } settings dataTables settings object @memberof DataTable#oApi
// value modified by the draw /* Ensure that the table data is fully initialised */ /* Show the display HTML options */ /* Build and draw the header / footer for the table */ /* Okay to show that something is going on now */ /* Calculate sizes for columns */ // If there is default sorting required - let's do it. The sort function // will do the drawing for us. Otherwise we draw the table regardless of the // Ajax source - this allows the table to look initialised for Ajax sourcing // data (show 'loading' message possibly) // Server-side processing init complete is done by _fnAjaxUpdateDraw // if there is an ajax source load the data // Got the data - add it to the table // Reset the init display for cookie saving. We've already done // a filter, and therefore cleared it before. So we need to make // it appear 'fresh'