function _fnAddOptionsHtml ( oSettings )
		{
			var classes = oSettings.oClasses;
			var table = $(oSettings.nTable);
			var holding = $('<div/>').insertBefore( table ); // Holding element for speed
			var features = oSettings.oFeatures;
		
			// All DataTables are wrapped in a div
			var insert = $('<div/>', {
				id:      oSettings.sTableId+'_wrapper',
				'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)
			} );
		
			oSettings.nHolding = holding[0];
			oSettings.nTableWrapper = insert[0];
			oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
		
			/* Loop over the user set positioning and place the elements as needed */
			var aDom = oSettings.sDom.split('');
			var featureNode, cOption, nNewNode, cNext, sAttr, j;
			for ( var i=0 ; i<aDom.length ; i++ )
			{
				featureNode = null;
				cOption = aDom[i];
		
				if ( cOption == '<' )
				{
					/* New container div */
					nNewNode = $('<div/>')[0];
		
					/* Check to see if we should append an id and/or a class name to the container */
					cNext = aDom[i+1];
					if ( cNext == "'" || cNext == '"' )
					{
						sAttr = "";
						j = 2;
						while ( aDom[i+j] != cNext )
						{
							sAttr += aDom[i+j];
							j++;
						}
		
						/* Replace jQuery UI constants @todo depreciated */
						if ( sAttr == "H" )
						{
							sAttr = classes.sJUIHeader;
						}
						else if ( sAttr == "F" )
						{
							sAttr = classes.sJUIFooter;
						}
		
						/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
						 * breaks the string into parts and applies them as needed
						 */
						if ( sAttr.indexOf('.') != -1 )
						{
							var aSplit = sAttr.split('.');
							nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
							nNewNode.className = aSplit[1];
						}
						else if ( sAttr.charAt(0) == "#" )
						{
							nNewNode.id = sAttr.substr(1, sAttr.length-1);
						}
						else
						{
							nNewNode.className = sAttr;
						}
		
						i += j; /* Move along the position array */
					}
		
					insert.append( nNewNode );
					insert = $(nNewNode);
				}
				else if ( cOption == '>' )
				{
					/* End container div */
					insert = insert.parent();
				}
				// @todo Move options into their own plugins?
				else if ( cOption == 'l' && features.bPaginate && features.bLengthChange )
				{
					/* Length */
					featureNode = _fnFeatureHtmlLength( oSettings );
				}
				else if ( cOption == 'f' && features.bFilter )
				{
					/* Filter */
					featureNode = _fnFeatureHtmlFilter( oSettings );
				}
				else if ( cOption == 'r' && features.bProcessing )
				{
					/* pRocessing */
					featureNode = _fnFeatureHtmlProcessing( oSettings );
				}
				else if ( cOption == 't' )
				{
					/* Table */
					featureNode = _fnFeatureHtmlTable( oSettings );
				}
				else if ( cOption ==  'i' && features.bInfo )
				{
					/* Info */
					featureNode = _fnFeatureHtmlInfo( oSettings );
				}
				else if ( cOption == 'p' && features.bPaginate )
				{
					/* Pagination */
					featureNode = _fnFeatureHtmlPaginate( oSettings );
				}
				else if ( DataTable.ext.feature.length !== 0 )
				{
					/* Plug-in features */
					var aoFeatures = DataTable.ext.feature;
					for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
					{
						if ( cOption == aoFeatures[k].cFeature )
						{
							featureNode = aoFeatures[k].fnInit( oSettings );
							break;
						}
					}
				}
		
				/* Add to the 2D features array */
				if ( featureNode )
				{
					var aanFeatures = oSettings.aanFeatures;
		
					if ( ! aanFeatures[cOption] )
					{
						aanFeatures[cOption] = [];
					}
		
					aanFeatures[cOption].push( featureNode );
					insert.append( featureNode );
				}
			}
		
			/* Built our DOM structure - replace the holding div with what we want */
			holding.replaceWith( insert );
			oSettings.nHolding = null;
		}
/**
		 * Add the options to the page HTML for the table
		 *  @param {object} oSettings dataTables settings object
		 *  @memberof DataTable#oApi
		 */
Add the options to the page HTML for the table
@param {object} oSettings dataTables settings object
@memberof DataTable#oApi
Add the options to the page HTML for the table @param { object } oSettings dataTables settings object @memberof DataTable#oApi
function _fnAddOptionsHtml ( oSettings )
		{
			var classes = oSettings.oClasses;
			var table = $(oSettings.nTable);
			var holding = $('<div/>').insertBefore( table ); 
			var features = oSettings.oFeatures;
			var insert = $('<div/>', {
				id:      oSettings.sTableId+'_wrapper',
				'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)
			} );
			oSettings.nHolding = holding[0];
			oSettings.nTableWrapper = insert[0];
			oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
			var aDom = oSettings.sDom.split('');
			var featureNode, cOption, nNewNode, cNext, sAttr, j;
			for ( var i=0 ; i<aDom.length ; i++ )
			{
				featureNode = null;
				cOption = aDom[i];
				if ( cOption == '<' )
				{
					nNewNode = $('<div/>')[0];
					cNext = aDom[i+1];
					if ( cNext == "'" || cNext == '"' )
					{
						sAttr = "";
						j = 2;
						while ( aDom[i+j] != cNext )
						{
							sAttr += aDom[i+j];
							j++;
						}
						if ( sAttr == "H" )
						{
							sAttr = classes.sJUIHeader;
						}
						else if ( sAttr == "F" )
						{
							sAttr = classes.sJUIFooter;
						}
						if ( sAttr.indexOf('.') != -1 )
						{
							var aSplit = sAttr.split('.');
							nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
							nNewNode.className = aSplit[1];
						}
						else if ( sAttr.charAt(0) == "#" )
						{
							nNewNode.id = sAttr.substr(1, sAttr.length-1);
						}
						else
						{
							nNewNode.className = sAttr;
						}
						i += j; 
					}
					insert.append( nNewNode );
					insert = $(nNewNode);
				}
				else if ( cOption == '>' )
				{
					insert = insert.parent();
				}
				else if ( cOption == 'l' && features.bPaginate && features.bLengthChange )
				{
					featureNode = _fnFeatureHtmlLength( oSettings );
				}
				else if ( cOption == 'f' && features.bFilter )
				{
					featureNode = _fnFeatureHtmlFilter( oSettings );
				}
				else if ( cOption == 'r' && features.bProcessing )
				{
					featureNode = _fnFeatureHtmlProcessing( oSettings );
				}
				else if ( cOption == 't' )
				{
					featureNode = _fnFeatureHtmlTable( oSettings );
				}
				else if ( cOption ==  'i' && features.bInfo )
				{
					featureNode = _fnFeatureHtmlInfo( oSettings );
				}
				else if ( cOption == 'p' && features.bPaginate )
				{
					featureNode = _fnFeatureHtmlPaginate( oSettings );
				}
				else if ( DataTable.ext.feature.length !== 0 )
				{
					var aoFeatures = DataTable.ext.feature;
					for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
					{
						if ( cOption == aoFeatures[k].cFeature )
						{
							featureNode = aoFeatures[k].fnInit( oSettings );
							break;
						}
					}
				}
				if ( featureNode )
				{
					var aanFeatures = oSettings.aanFeatures;
					if ( ! aanFeatures[cOption] )
					{
						aanFeatures[cOption] = [];
					}
					aanFeatures[cOption].push( featureNode );
					insert.append( featureNode );
				}
			}
			holding.replaceWith( insert );
			oSettings.nHolding = null;
		}
function _fnAddOptionsHtml ( oSettings ) { var classes = oSettings . oClasses ; var table = $ ( oSettings . nTable ) ; var holding = $ ( '<div/>' ) . insertBefore ( table ) ; var features = oSettings . oFeatures ; var insert = $ ( '<div/>' , { id : oSettings . sTableId + '_wrapper' , 'class' : classes . sWrapper + ( oSettings . nTFoot ? '' : ' ' + classes . sNoFooter ) } ) ; oSettings . nHolding = holding [ 0 ] ; oSettings . nTableWrapper = insert [ 0 ] ; oSettings . nTableReinsertBefore = oSettings . nTable . nextSibling ; var aDom = oSettings . sDom . split ( '' ) ; var featureNode , cOption , nNewNode , cNext , sAttr , j ; for ( var i = 0 ; i < aDom . length ; i ++ ) { featureNode = null ; cOption = aDom [ i ] ; if ( cOption == '<' ) { nNewNode = $ ( '<div/>' ) [ 0 ] ; cNext = aDom [ i + 1 ] ; if ( cNext == "'" || cNext == '"' ) { sAttr = "" ; j = 2 ; while ( aDom [ i + j ] != cNext ) { sAttr += aDom [ i + j ] ; j ++ ; } if ( sAttr == "H" ) { sAttr = classes . sJUIHeader ; } else if ( sAttr == "F" ) { sAttr = classes . sJUIFooter ; } if ( sAttr . indexOf ( '.' ) != - 1 ) { var aSplit = sAttr . split ( '.' ) ; nNewNode . id = aSplit [ 0 ] . substr ( 1 , aSplit [ 0 ] . length - 1 ) ; nNewNode . className = aSplit [ 1 ] ; } else if ( sAttr . charAt ( 0 ) == "#" ) { nNewNode . id = sAttr . substr ( 1 , sAttr . length - 1 ) ; } else { nNewNode . className = sAttr ; } i += j ; } insert . append ( nNewNode ) ; insert = $ ( nNewNode ) ; } else if ( cOption == '>' ) { insert = insert . parent ( ) ; } else if ( cOption == 'l' && features . bPaginate && features . bLengthChange ) { featureNode = _fnFeatureHtmlLength ( oSettings ) ; } else if ( cOption == 'f' && features . bFilter ) { featureNode = _fnFeatureHtmlFilter ( oSettings ) ; } else if ( cOption == 'r' && features . bProcessing ) { featureNode = _fnFeatureHtmlProcessing ( oSettings ) ; } else if ( cOption == 't' ) { featureNode = _fnFeatureHtmlTable ( oSettings ) ; } else if ( cOption == 'i' && features . bInfo ) { featureNode = _fnFeatureHtmlInfo ( oSettings ) ; } else if ( cOption == 'p' && features . bPaginate ) { featureNode = _fnFeatureHtmlPaginate ( oSettings ) ; } else if ( DataTable . ext . feature . length !== 0 ) { var aoFeatures = DataTable . ext . feature ; for ( var k = 0 , kLen = aoFeatures . length ; k < kLen ; k ++ ) { if ( cOption == aoFeatures [ k ] . cFeature ) { featureNode = aoFeatures [ k ] . fnInit ( oSettings ) ; break ; } } } if ( featureNode ) { var aanFeatures = oSettings . aanFeatures ; if ( ! aanFeatures [ cOption ] ) { aanFeatures [ cOption ] = [ ] ; } aanFeatures [ cOption ] . push ( featureNode ) ; insert . append ( featureNode ) ; } } holding . replaceWith ( insert ) ; oSettings . nHolding = null ; }
Add the options to the page HTML for the table
  @param {object} oSettings dataTables settings object
  @memberof DataTable#oApi
Add the options to the page HTML for the table @param { object } oSettings dataTables settings object @memberof DataTable#oApi
// Holding element for speed // All DataTables are wrapped in a div /* Loop over the user set positioning and place the elements as needed */ /* New container div */ /* Check to see if we should append an id and/or a class name to the container */ /* Replace jQuery UI constants @todo depreciated */ /* The attribute can be in the format of "#id.class", "#id" or "class" This logic
						 * breaks the string into parts and applies them as needed
						 */ /* Move along the position array */ /* End container div */ // @todo Move options into their own plugins? /* Length */ /* Filter */ /* pRocessing */ /* Table */ /* Info */ /* Pagination */ /* Plug-in features */ /* Add to the 2D features array */ /* Built our DOM structure - replace the holding div with what we want */